2011-10-10 0:07:18
来源:互联网 发布:中信建投mac版下载 编辑:程序博客网 时间:2024/05/16 15:38
2011-10-10 0:07:18
一. 调用av_register_all函数注册所有的格式和编码解码器.
1.1 先调用avcodec_register_all函数注册所有的编码解码器.
1. 下面列出与H264相关的注册:
// 注册硬件加速器
REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);
REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);
// 注册解码器
REGISTER_DECODER (H264, h264);
REGISTER_DECODER (H264_VDPAU, h264_vdpau);
// 注册编码器
REGISTER_ENCODER (LIBX264, libx264);
// 注册分析器
REGISTER_PARSER (H264, h264);
// 注册位流分离器
REGISTER_BSF (H264_MP4TOANNEXB, h264_mp4toannexb);
2. 下面列出注册宏:
#define REGISTER_HWACCEL(X,x) { \
extern AVHWAccel x##_hwaccel; \
if(CONFIG_##X##_HWACCEL) av_register_hwaccel(&x##_hwaccel); }
#define REGISTER_ENCODER(X,x) { \
extern AVCodec x##_encoder; \
if(CONFIG_##X##_ENCODER) avcodec_register(&x##_encoder); }
#define REGISTER_DECODER(X,x) { \
extern AVCodec x##_decoder; \
if(CONFIG_##X##_DECODER) avcodec_register(&x##_decoder); }
#define REGISTER_ENCDEC(X,x) REGISTER_ENCODER(X,x); REGISTER_DECODER(X,x)
#define REGISTER_PARSER(X,x) { \
extern AVCodecParser x##_parser; \
if(CONFIG_##X##_PARSER) av_register_codec_parser(&x##_parser); }
#define REGISTER_BSF(X,x) { \
extern AVBitStreamFilter x##_bsf; \
if(CONFIG_##X##_BSF) av_register_bitstream_filter(&x##_bsf); }
3. 分析一下注册函数, 以avcodec_register函数为例:
注册codec
void avcodec_register(AVCodec *codec)
{
AVCodec **p;
avcodec_init();
p = &first_avcodec;
while (*p != NULL) p = &(*p)->next;
*p = codec;
codec->next = NULL;
}
放到一个单链表中
可以看到avcodec_register函数把输入的AVCodec连成一个链表, 其它注册函数与之类似, 就不多言了.
一. 调用av_register_all函数注册所有的格式和编码解码器.
1.1 先调用avcodec_register_all函数注册所有的编码解码器.
1. 下面列出与H264相关的注册:
// 注册硬件加速器
REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);
REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);
// 注册解码器
REGISTER_DECODER (H264, h264);
REGISTER_DECODER (H264_VDPAU, h264_vdpau);
// 注册编码器
REGISTER_ENCODER (LIBX264, libx264);
// 注册分析器
REGISTER_PARSER (H264, h264);
// 注册位流分离器
REGISTER_BSF (H264_MP4TOANNEXB, h264_mp4toannexb);
2. 下面列出注册宏:
#define REGISTER_HWACCEL(X,x) { \
extern AVHWAccel x##_hwaccel; \
if(CONFIG_##X##_HWACCEL) av_register_hwaccel(&x##_hwaccel); }
#define REGISTER_ENCODER(X,x) { \
extern AVCodec x##_encoder; \
if(CONFIG_##X##_ENCODER) avcodec_register(&x##_encoder); }
#define REGISTER_DECODER(X,x) { \
extern AVCodec x##_decoder; \
if(CONFIG_##X##_DECODER) avcodec_register(&x##_decoder); }
#define REGISTER_ENCDEC(X,x) REGISTER_ENCODER(X,x); REGISTER_DECODER(X,x)
#define REGISTER_PARSER(X,x) { \
extern AVCodecParser x##_parser; \
if(CONFIG_##X##_PARSER) av_register_codec_parser(&x##_parser); }
#define REGISTER_BSF(X,x) { \
extern AVBitStreamFilter x##_bsf; \
if(CONFIG_##X##_BSF) av_register_bitstream_filter(&x##_bsf); }
3. 分析一下注册函数, 以avcodec_register函数为例:
注册codec
void avcodec_register(AVCodec *codec)
{
AVCodec **p;
avcodec_init();
p = &first_avcodec;
while (*p != NULL) p = &(*p)->next;
*p = codec;
codec->next = NULL;
}
放到一个单链表中
可以看到avcodec_register函数把输入的AVCodec连成一个链表, 其它注册函数与之类似, 就不多言了.
- 2011-10-10 0:07:18
- 2011/07/10
- 07-10-18学习心得
- 10 07 18 吃喝玩乐
- 2011-10-18
- 2011-10-18 日志
- 2011-10-18
- 2011-10-18
- 2011/10/17--2011/10/18 休息
- 2011/10/07 游戏AI
- 2011-10-15 10:41:07
- UC故事 2011/10/18
- 2011-05-13 19:07:10
- 2011-06-07 10:45:12
- 2011-06-07 10:48:04
- 2011-06-07 10:50:57
- 读书时间 2011/10/07 网络
- ubuntu 垃圾清理 2011-07-10
- 使用XFire开发Web Service客户端完整入门教程
- avi decompressor
- 什么是抽象
- 11g Release 2 Rolling Upgrade using Transient Logical Standby database
- 大学随想1
- 2011-10-10 0:07:18
- C# 中,ListView的自定义显示,可用于显示不同的颜色和字体等
- 2011-10-10 0:22:22
- 2011-10-10 0:24:49
- [来自vckbase]Win32串口编程
- 安装sql2008时出现JIT错误
- js try、catch、finally语句还有with语句
- 2011-10-10 0:27:53
- Java【多线程知识总结(8)】线程通信,wait()与notify()的运用