FFMPEG学习【libavcodec】:编解码器:硬件加速器桥:VDA
一、文件
vda.h
公共libavcodec VDA頭文件。
二、數(shù)據(jù)結(jié)構(gòu)
struct ? vda_context{
VDADecoder decoder;
VDA解碼器對象。
編碼:未使用。
解碼:通過libavcodec設(shè)置/取消。
CVPixelBufferRef cv_buffer;
包含當(dāng)前圖像數(shù)據(jù)的Core Video像素緩沖區(qū)。
編碼:未使用。
編碼:通過libavcodec設(shè)置。通過用戶取消。
int use_sync_decoding;
在同步模式下使用硬件解碼器。
編碼:未使用。
解碼:通過用戶設(shè)置。
int width;
幀寬度。
編碼:未使用。
解碼:通過用戶設(shè)置/取消。
int height
幀高度
編碼:未使用。
解碼:通過用戶設(shè)置/取消。
int format;
幀格式。
編碼:未使用。
解碼:通過用戶設(shè)置/取消。
OSType cv_pix_fmt_type;
輸出圖像緩沖區(qū)的像素格式。
編碼:未使用。
解碼:通過用戶設(shè)置/取消。
uint8_t * ?priv_bitstream;
未使用
編碼:未使用。
解碼:通過用戶設(shè)置/取消。
int? priv_bitstream_size;
未使用;
int priv_allocated_size;
未使用
int use_ref_buffer;
使用av_buffer來管理緩沖區(qū)。
當(dāng)標(biāo)志設(shè)置時,解碼器返回的CVPixelBuffers將自動釋放,因此必要時必須保留它們。 不設(shè)置此標(biāo)志可能會導(dǎo)致內(nèi)存泄漏。
編碼:未使用。
解碼:通過用戶設(shè)置。
}
該結(jié)構(gòu)用于向VDA FFmpeg HWAccel實現(xiàn)提供必要的配置和數(shù)據(jù)。
struct ? AVVDAContext{
VDADecoder decoder;
VDA解碼器對象。
由調(diào)用者創(chuàng)建和釋放。
VDADecoderOutputCallback output_callback;
必須傳遞給VDADecoderCreate的輸出回調(diào)。
OSType cv_pix_fmt_type;
CVPixelBuffer格式VDA將用于解碼幀的類型; 由調(diào)用者設(shè)置。
}
該結(jié)構(gòu)體保存了用于初始化VDA解碼的調(diào)用者和libavcodec之間需要傳遞的所有信息。
它的大小不是公共ABI的一部分,它必須使用av_vda_alloc_context()分配,并與av_free()一起釋放。
三、函數(shù)
int ff_vda_create_decoder (struct vda_context *vda_ctx, uint8_t *extradata, int extradata_size)
解析:創(chuàng)建視頻解碼器。
int ff_vda_destroy_decoder (struct vda_context *vda_ctx)
銷毀視頻解碼器。
AVVDAContext * av_vda_alloc_context (void)
解析:分配并初始化VDA上下文。
當(dāng)調(diào)用者選擇AV_PIX_FMT_VDA格式時,該函數(shù)應(yīng)從get_format()回調(diào)中調(diào)用。 然后,主叫方必須創(chuàng)建將用于VDA加速解碼的解碼器對象(使用由libavcodec提供的輸出回調(diào))。
當(dāng)使用VDA解碼完成時,調(diào)用者必須摧毀解碼器對象,并使用av_free()釋放VDA上下文。
返回:新分配的上下文,失敗時為NULL。
int av_vda_default_init (AVCodecContext *avctx)
解析:這是一個便捷的功能,可以使用內(nèi)部實現(xiàn)創(chuàng)建和設(shè)置VDA上下文。
參數(shù)avctx -?相應(yīng)的編解碼器上下文。
返回:> = 0成功,失敗時出現(xiàn)負(fù)ERROR碼
int av_vda_default_init2(AVCodecContext * avctx,AVVDAContext * vdactx)
解析:這是一個便捷的功能,可以使用內(nèi)部實現(xiàn)創(chuàng)建和設(shè)置VDA上下文。
參數(shù):?avctx -?相應(yīng)的編解碼器上下文
? ? ?vdactx ?- 用來使用的VDA上下文
返回:> = 0成功,失敗時出現(xiàn)負(fù)ERROR碼
void av_vda_default_free(AVCodecContext * avctx)
解析:必須調(diào)用此函數(shù)來釋放使用av_vda_default_init()初始化的VDA上下文。
參數(shù):?avctx -?相應(yīng)的編解碼器上下文
總結(jié)
以上是生活随笔為你收集整理的FFMPEG学习【libavcodec】:编解码器:硬件加速器桥:VDA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盘点人工智能高薪职位
- 下一篇: 基于堆叠双向LSTM的中文诗歌生成