AVCodec结构体

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值