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;

原创粉丝点击