“struct AVCodecContext”中的“struct AVCodec * codec”代表什么?

时间:2013-06-07 13:54:12

标签: ffmpeg media-player decoder

我在C / C ++中使用FFMpeg库来开发媒体播放器 This source使用以下代码在文件中查找视频流的解码器:

pCodec=avcodec_find_decoder(pCodecCtx->codec_id);

其中pCodecCtx是指向视频流的编解码器上下文的指针,pCodec是指向AVCodec的指针,该指针初始化为NULL。

如果我们必须明确找到解码器,那么struct AVCodec *codec中找到的struct AVCodecContext是什么?这是here定义的。有人可以帮我理解它的用法。

1 个答案:

答案 0 :(得分:0)

AVCodec是用于保存有关编解码器信息(例如编解码器名称等)的结构。

有关定义,请参见here

如果您想阅读网站上列出的muxing.c示例,他们将单独使用AVCodec来初始化AVCodecContext中的AVCodec。

AVCodec *codec;
AVCodecID codec_id; // <-enum value (found based on the codec you enter)
AVCodecContext context;

//find and set encoder (or decoder) based on codec ID
codec = avcodec_find_encoder(codec_id);

//       or
// codec = avcodec_find_decoder(codec_id);

//Allocate encoding context for the AVCodec within AVCodecContext
context = avcodec_alloc_context3(*codec);

//Set the codec_id within AVCodecContext.
context->codec_id = codec_id;