Chinaunix首页 | 论坛 | 博客
  • 博客访问: 624186
  • 博文数量: 116
  • 博客积分: 6078
  • 博客等级: 准将
  • 技术积分: 1214
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 10:09
文章分类

全部博文(116)

文章存档

2016年(1)

2015年(4)

2011年(2)

2010年(21)

2009年(88)

分类: C/C++

2009-06-17 15:36:09


首先,在avcodec.h中有枚举enum CodecID 定义解码器ID。
然后,在各解码器中
AVCodec h264_decoder = {
    "h264",
    CODEC_TYPE_VIDEO,
    CODEC_ID_H264,
    sizeof(H264Context),
    decode_init,
    NULL,
    decode_end,
    decode_frame,
    /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
     flush_dpb,
     NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
};

这样是把h264注册到库中.


其中libavcodec利用结构体:
struct AVCodec
抽象了所有的编解码器,你可以找到所有它的“实现体”——各种变量
它们用
CodecType type;
CodecID id;
来标示彼此的身份,编码程序首先找到CodecID id,之后自然就找到了相应的编解码相关函数:
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,
              const uint8_t *buf, int buf_size);


跟AVCodec类似的结构体还有AVCodecParser,以及libavformat里面的AVInputFormat,AVOutputFormat等等。
阅读(3120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~