FFmpeg codec HOWTO: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
This page is | This page is meant as a introduction to the internal codec api in ffmpeg. | ||
It will also show how the codecs are connected with the demuxers. | It will also show how the codecs are connected with the demuxers. | ||
== libavcodec/avcodec.h == | |||
The first thing to look at is the AVCodec struct. | |||
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, | |||
uint8_t *buf, int buf_size); | |||
int capabilities; | |||
struct AVCodec *next; | |||
void (*flush)(AVCodecContext *); | |||
const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0} | |||
const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1 | |||
} AVCodec; | |||
Here we can see that we have some elements to name the codec, what type it is (audio/video), the supported pixel formats and some function | |||
pointers for init/encode/decode and close. Now lets see how it is used. | |||
== libavcodec/cook.c == | == libavcodec/cook.c == | ||
If we look in this file at the bottom we can see this code: | |||
AVCodec cook_decoder = | |||
{ | |||
.name = "cook", | |||
.type = CODEC_TYPE_AUDIO, | |||
.id = CODEC_ID_COOK, | |||
.priv_data_size = sizeof(COOKContext), | |||
.init = cook_decode_init, | |||
.close = cook_decode_close, | |||
.decode = cook_decode_frame, | |||
}; |
Revision as of 00:15, 29 May 2006
This page is meant as a introduction to the internal codec api in ffmpeg. It will also show how the codecs are connected with the demuxers.
libavcodec/avcodec.h
The first thing to look at is the AVCodec struct.
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, uint8_t *buf, int buf_size); int capabilities; struct AVCodec *next; void (*flush)(AVCodecContext *); const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0} const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1 } AVCodec;
Here we can see that we have some elements to name the codec, what type it is (audio/video), the supported pixel formats and some function pointers for init/encode/decode and close. Now lets see how it is used.
libavcodec/cook.c
If we look in this file at the bottom we can see this code:
AVCodec cook_decoder = { .name = "cook", .type = CODEC_TYPE_AUDIO, .id = CODEC_ID_COOK, .priv_data_size = sizeof(COOKContext), .init = cook_decode_init, .close = cook_decode_close, .decode = cook_decode_frame, };