ffmepg框架阅读之三:AVIOContext的标准初始化
来源:互联网 发布:微信业务域名是什么 编辑:程序博客网 时间:2024/06/05 11:24
对于AVIOContext的初始化,ffmpeg提供给用户的接口是函数AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
int64_t (*seek)(void *opaque, int64_t offset, int whence));
当需要自定义AVIOContext的时候,可以使用该函数,通过自己的参数。下面贴出源代码。
AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(void *opaque, int64_t offset, int whence)){ //分配内存空间 并初始化为0 AVIOContext *s = av_mallocz(sizeof(AVIOContext)); if (!s) return NULL; //给s赋值 ffio_init_context(s, buffer, buffer_size, write_flag, opaque, read_packet, write_packet, seek); return s;}贴出ffio_init_context代码
int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(void *opaque, int64_t offset, int whence)){ //这几个buffer和size是缓存数据吗? s->buffer = buffer; s->buffer_size = buffer_size; s->buf_ptr = buffer; s->opaque = opaque; //用户数据 调用read write seek时输入参数 //读写模式下 buf_end的不同设置 url_resetbuf(s, write_flag ? AVIO_FLAG_WRITE : AVIO_FLAG_READ); /* static int url_resetbuf(AVIOContext *s, int flags) { assert(flags == AVIO_FLAG_WRITE || flags == AVIO_FLAG_READ); if (flags & AVIO_FLAG_WRITE) { //写模式 s->buf_end = s->buffer + s->buffer_size; s->write_flag = 1; } else { //读模式 s->buf_end = s->buffer; s->write_flag = 0; } return 0; } */ s->write_packet = write_packet; s->read_packet = read_packet; s->seek = seek; s->pos = 0; s->must_flush = 0; s->eof_reached = 0; s->error = 0;#if FF_API_OLD_AVIO s->is_streamed = 0;#endif s->seekable = AVIO_SEEKABLE_NORMAL; s->max_packet_size = 0; s->update_checksum= NULL; if(!read_packet && !write_flag){ s->pos = buffer_size; s->buf_end = s->buffer + buffer_size; } s->read_pause = NULL; s->read_seek = NULL; return 0;}
- ffmepg框架阅读之三:AVIOContext的标准初始化
- ffmpeg框架阅读笔记二 : 寻找AVIOContext初始化过程,自定义初始化。
- ffmpeg框架阅读笔记二 : 寻找AVIOContext初始化过程,自定义初始化。
- avio_open2初始化AVIOContext
- ffmpeg之AVIOContext
- AVIOContext
- AVIOContext
- Spring 源码阅读 BeanFactory(三) 对象的初始化 singleton 草稿
- Python源码学习之初始化(三)-PyDictObject的初始化
- ffmepg的一些命令
- CI框架源码阅读---------系统初始化文件
- ffmpeg重要结构体之AVIOContext
- 【阅读笔记之三】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D初始化
- 中国标准之三: 数字电视接收标准
- ffmepg对avs的支持
- ffmepg.exe使用的例子
- ffmepg以及x264的编译
- ffmepg中swscale的用法
- tomcat限制ip访问
- Oracle创建自动增长列
- 演示任务切换的实例(实例五)--RadASM编译
- UIView的layout(布局)与draw(绘图)
- Java中怎样实现批量删除操作(Java对数据库进行事务处理)?
- ffmepg框架阅读之三:AVIOContext的标准初始化
- NFC标签及标签种类
- http://blog.csdn.net/xpp1993/article/details/9002598
- OpenSSL证书创建、验证及加解密过程总结
- 关于联想新电脑安装win7系统的一些问题
- windows消息从User32 内核出来之后逆向过程
- 论程序员的自我修养——重构(1)
- 聚美优品前端笔试题以及我的答案和理解
- orcale 基本语句2