AVCodec结构体

来源:互联网 发布:2016正规淘宝代刷平台 编辑:程序博客网 时间:2024/05/17 23:38

typedef struct AVCodec

{

// 标示Codec的名字,比如,"h264" "h263"等。

const char *name;

// 标示Codec的类型,有videoaudio等类型。

enum CodecType type;

// 标示CodecID,有CODEC_ID_H264等。

enum CodecID id;

// 标示具体的Codec对应的Contextsize,如:H264Context

int priv_data_size;

// 以下标示Codec对外提供的操作,每一种解码器都会实现这些操作。

int(*init)(AVCodecContext*);

int(*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);

int(*close)(AVCodecContext*);

int(*decode)(AVCodecContext *, void *outdata, int *outdata_size, uint8_t *buf, int buf_size);

struct AVCodec *next;

}AVCodec;

H264的主要结构的初始化如下:

AVCodec ff_h264_decoder = {

    "h264",

    AVMEDIA_TYPE_VIDEO,

    CODEC_ID_H264,

    sizeof(H264Context),

    ff_h264_decode_init,

    NULL,

    ff_h264_decode_end,

    decode_frame

}

说明:

AVCodec 是类似 COM接口的数据结构,表示音视频编解码器,着重于功能函数,一种媒体类型对应一个AVCodec结构,在程序运行时有多个实例。next变量用于把所有支持的编解码器连接成链表,便于遍历查找;id确定了 唯 一编 解 码器 ; priv_data_size表示具 体 的Codec对应的Context结构大 小 ,比 如MsrleContext  TSContext,这些具体的结够定义散落于各个.c文件中,为避免太多的if else  类语句判断类型再计算大小,这里 就直接指明大小,因为这是一个编译时静态确定的字段,所以放在AVCodec而不是AVCodecContex t中。

0 0