AVHWAccel
来源:互联网 发布:mac怎样安装pc360游戏 编辑:程序博客网 时间:2024/05/19 03:25
typedef struct AVHWAccel {/** * 硬件编解码加速器的名称 * 所有编码器和所有解码器之间的名称是全局唯一的(但一个编码器和一个解码器可共享相同的名称) */ const char *name; /** * 硬件加速器实现的媒体类型 * AVMEDIA_TYPE_VIDEO * AVMEDIA_TYPE_AUDIO */ enum AVMediaType type; /** * 该加速器实现的编解码器类型 * AV_CODEC_ID_MPEG2VIDEO * AV_CODEC_ID_H264 */ enum AVCodecID id; /** * 所支持的媒体格式类型 * 浏览 AV_PIX_FMT_* 宏定义 * * AV_PIX_FMT_YUV420P14BE * AV_PIX_FMT_VIDEOTOOLBOX */ enum AVPixelFormat pix_fmt; /** * 该加速器编解码功能 * 浏览 HWACCEL_CODEC_CAP_* 宏定义 */ int capabilities; /***************************************************************** * 这里下面的接口或字段都不属于公共API的部分. * 他们不会在libavcodec之外被使用(内部接口),未来他们也很有可能被改变或者移除等等。 * 每一次新建一个字段或接口就在这部分最上面进行添加 * 这里的内部调用接口,实际上调用的是一个接口指针,而该接口由模块内部进行赋值 ***************************************************************** */// 指向链表下一个对象 struct AVHWAccel *next; /** * 分配自定义缓存区 * 目的是内部是将AVCodecContext的图像信息赋值到AVFrame,然后分配AVFrame::buf的空间 * * 内部赋值例如:int ff_videotoolbox_alloc_frame(AVCodecContext *avctx, AVFrame *frame) */ int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); /** * 在每个帧或字段图片的开头使用,该接口在收到首帧时需要被执行 * * 有意义的帧信息(特定于编解码器)保证在这一点上被解析。该功能是强制性的。 * 注意除非这里的buf_size==0,那么buf可以设置为NULL。否则意味着这个buf就不是NULL,小心崩溃问题。 * * 内部赋值例如:int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) * * @参数 avctx: 表示编解码上下文 * @参数 bu: 基本帧缓存 * @参数 buf_size: 基本帧缓存大小 * @返回值: 0表示成功,其他值表示失败 */ int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); /** * 每一片的解码回掉 * * 有意义的切片信息(编解码器特定)保证了在这里进行解析。此功能是强制性的。 * 唯一的例外是XvMC,对MB这样的level是如此。 * * 内部赋值例如:int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) * * @参数 avctx: 表示编解码上下文 * @参数 bu: 基本帧缓存 * @参数 buf_size: 基本帧缓存大小 * @返回值: 0表示成功,其他值表示失败 */ int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); /** * 在每一帧frame或区域图像之后被调用 * * 整张图在这里被解析, 并且在此处可以发送给硬件加速器。该接口是强制性的。 * * @参数 avctx: 表示编解码上下文 * @返回值: 0表示成功,其他值表示失败 */ int (*end_frame)(AVCodecContext *avctx); /** * 每一帧的硬件加速器私有数据长度。 * * 私有数据由av_mallocz()被分配空间, 执行时间早于AVCodecContext.get_buffer() * 其在执行AVCodecContext.release_buffer()后被释放. */ int frame_priv_data_size; /** * Called for every Macroblock in a slice. * * XvMC uses it to replace the ff_mpv_decode_mb(). * Instead of decoding to raw picture, MB parameters are * stored in an array provided by the video driver. * * @param s the mpeg context */ void (*decode_mb)(struct MpegEncContext *s); /** * hwaccel对象的私有数据初始化 * * 该函数会在hwaccel和hwaccel_context已经设置之后,以及hwaccel的私有数据AVCodecInternal被分配好之后被ff_get_format()执行调用 */ int (*init)(AVCodecContext *avctx); /** * hwaccel对象的私有数据反初始化 * * 例如:int ff_videotoolbox_uninit(AVCodecContext *avctx) * * 该函数会在hwaccel和hwaccel_context已经被执行反初始化之后 * 由 get_format() 或者是 avcodec_close() 进行调用 */ int (*uninit)(AVCodecContext *avctx); /** * 私有数据的长度,其用来被分配在AVCodecInternal中的字段hwaccel_priv_data空间 */ int priv_data_size;} AVHWAccel;
阅读全文
0 0
- AVHWAccel
- iOS动态验证码实现
- 03、vue.js 之数据渲染
- iOS经典讲解之变更Xcode checkout项目的svn地址
- Persistent Data Structures 可持久化的数据结构
- 不花1分钱体验零流量地图导航
- AVHWAccel
- Linux-Nginx-MySQL-PHP环境搭建:F**K,PHP7删除了mysql哭
- test
- 链表学习(一)
- 浅谈SQL优化
- RxJava的MissingBackpressureException
- 关于xml文件中id的声明顺序的小问题以及联想
- 微信小程序swiper滑动页面实践-类似于安卓ViewPager
- HashMap源码解析