FFMPEG CODEC使用总结(zz)
来源:互联网 发布:centos开mc服务器 编辑:程序博客网 时间:2024/06/07 08:42
转摘:http://blog.csdn.net/maopig/article/details/6758455
ffmpeg里提供了很多的encoder,decoder,详见avcodec.h里的枚举变量CodecID。
宏定义
#define REGISTER_ENCODER(X,x) { /
extern AVCodec x##_encoder; /
if(##X##_ENCODER) avcodec_register(&x##_encoder); }
#define REGISTER_DECODER(X,x) { /
extern AVCodec x##_decoder; /
if(##CODEC_ID_##X##) avcodec_register(&x##_decoder); }
比如:
REGISTER_DECODER (H264, h264);
就相当于extern AVCodec h264_decoder;
if(CODEC_ID_H264)
avcodec_register(&h264_decoder);
而这三行代码的实际作用就是:
AVCodec codec;
codec = &h264_decoder;
配置好codec之后,
定义全局变量AVCodecContext *avctx;
然后avctx->codec = codec;
后续就可以调用通用的API:
avctx->codec->init 初始化
avctx->codec->decode 解码
或avctx->codec->encode 编码
avctx->codec->close 关闭
实现编码或解码功能
codec是一个结构体,定义如下:
typedef struct AVCodec {
const char *name;
enum CodecType type;
enum CodecID id;
int priv_data_size;
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, AVPacket *avpkt); //解码函数
对于不同的codec,这三个API对应的函数不同。
对于CODEC_ID_H264,h264_decoder的定义为
AVCodec h264_decoder = {
"h264",
CODEC_TYPE_VIDEO,
CODEC_ID_H264,
sizeof(H264Context),
decode_init,
NULL,
decode_end,
decode_frame,
}
对于CODEC_ID_H263,h263_decoder的定义如下:
AVCodec h263_decoder = {
"h263",
CODEC_TYPE_VIDEO,
CODEC_ID_H263,
sizeof(MpegEncContext),
ff_h263_decode_init,
NULL,
ff_h263_decode_end,
ff_h263_decode_frame,
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
// .flush= ff_mpeg_flush,
// .long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"),
// .pix_fmts= ff_hwaccel_pixfmt_list_420,
};
对于CODEC_ID_MPEG4,mpeg4_decoder的定义如下:
AVCodec mpeg4_decoder = {
"mpeg4",
CODEC_TYPE_VIDEO,
CODEC_ID_MPEG4,
sizeof(MpegEncContext),
ff_h263_decode_init,
NULL,
ff_h263_decode_end,
ff_h263_decode_frame,
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
// .flush= ff_mpeg_flush,
// .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
// .pix_fmts= ff_hwaccel_pixfmt_list_420,
};
- FFMPEG CODEC使用总结(zz)
- FFMPEG CODEC使用总结
- FFMPEG CODEC使用总结
- FFMPEG CODEC使用总结
- FFMPEG CODEC使用总结
- sqlit3使用总结[zz]
- ffmpeg支持的codec
- FFmpeg codec HOWTO
- FFmpeg hardware GUP codec
- ffmpeg 使用总结
- FFmpeg工具使用总结
- FFmpeg工具使用总结
- FFmpeg工具使用总结
- FFmpeg工具使用总结
- ffmpeg命令使用总结
- ffmpeg 中支持的codec
- FFmpeg codec howto and FFmpeg demuxer howto
- 【zz】Linux 安装FFmpeg
- 内存管理 - 11.6 slab层
- Java 理论与实践: 正确使用 Volatile 变量
- pthread_cond_wait用法解析与案例
- 三步骤改电源设置 电脑降温有绝招
- 高新_枚举、反射、泛型、类加载器、动态代理
- FFMPEG CODEC使用总结(zz)
- 利用CURL工具诊断WEB页面访问性能
- 虚函数 DrawItem()和 消息WM_DRAWITEM之间的区别
- bus基础知识
- Spring 之 Spring容器中几个概念的个人理解
- 检测CCD Dead Pixel
- bus,device和driver
- 【Linux基础】共享内存应用
- 用exec函数族实现shell脚本