0
|
1 #include "common.h"
|
|
2
|
|
3 enum CodecID {
|
|
4 CODEC_ID_NONE,
|
|
5 CODEC_ID_MPEG1VIDEO,
|
|
6 CODEC_ID_H263,
|
|
7 CODEC_ID_RV10,
|
|
8 CODEC_ID_MP2,
|
|
9 CODEC_ID_AC3,
|
|
10 CODEC_ID_MJPEG,
|
|
11 CODEC_ID_OPENDIVX,
|
|
12 CODEC_ID_PCM,
|
|
13 CODEC_ID_RAWVIDEO,
|
|
14 CODEC_ID_MSMPEG4,
|
|
15 CODEC_ID_H263P,
|
|
16 CODEC_ID_H263I,
|
|
17 };
|
|
18
|
|
19 enum CodecType {
|
|
20 CODEC_TYPE_VIDEO,
|
|
21 CODEC_TYPE_AUDIO,
|
|
22 };
|
|
23
|
|
24 enum PixelFormat {
|
|
25 PIX_FMT_YUV420P,
|
|
26 PIX_FMT_YUV422,
|
|
27 PIX_FMT_RGB24,
|
|
28 PIX_FMT_BGR24,
|
|
29 };
|
|
30
|
|
31 /* in bytes */
|
|
32 #define AVCODEC_MAX_AUDIO_FRAME_SIZE 18432
|
|
33
|
|
34 /* motion estimation type */
|
|
35 extern int motion_estimation_method;
|
|
36 #define ME_ZERO 0
|
|
37 #define ME_FULL 1
|
|
38 #define ME_LOG 2
|
|
39 #define ME_PHODS 3
|
|
40
|
|
41 /* encoding support */
|
|
42
|
|
43 #define CODEC_FLAG_HQ 0x0001 /* high quality (non real time) encoding */
|
|
44 #define CODEC_FLAG_QSCALE 0x0002 /* use fixed qscale */
|
|
45
|
|
46 #define FRAME_RATE_BASE 10000
|
|
47
|
|
48 typedef struct AVCodecContext {
|
|
49 int bit_rate;
|
|
50 int flags;
|
|
51 int sub_id; /* some codecs needs additionnal format info. It is
|
|
52 stored there */
|
|
53 /* video only */
|
|
54 int frame_rate; /* frames per sec multiplied by FRAME_RATE_BASE */
|
|
55 int width, height;
|
|
56 int gop_size; /* 0 = intra only */
|
|
57 int pix_fmt; /* pixel format, see PIX_FMT_xxx */
|
|
58 /* audio only */
|
|
59 int sample_rate; /* samples per sec */
|
|
60 int channels;
|
|
61
|
|
62 /* the following data should not be initialized */
|
|
63 int frame_size; /* in samples, initialized when calling 'init' */
|
|
64 int frame_number; /* audio or video frame number */
|
|
65 int key_frame; /* true if the previous compressed frame was
|
|
66 a key frame (intra, or seekable) */
|
|
67 int quality; /* quality of the previous encoded frame
|
|
68 (between 1 (good) and 31 (bad)) */
|
|
69 struct AVCodec *codec;
|
|
70 void *priv_data;
|
|
71
|
|
72 /* the following fields are ignored */
|
|
73 char codec_name[32];
|
|
74 int codec_type; /* see CODEC_TYPE_xxx */
|
|
75 int codec_id; /* see CODEC_ID_xxx */
|
|
76 unsigned int codec_tag; /* codec tag, only used if unknown codec */
|
|
77 } AVCodecContext;
|
|
78
|
|
79 typedef struct AVCodec {
|
|
80 char *name;
|
|
81 int type;
|
|
82 int id;
|
|
83 int priv_data_size;
|
|
84 int (*init)(AVCodecContext *);
|
|
85 int (*encode)(AVCodecContext *, UINT8 *buf, int buf_size, void *data);
|
|
86 int (*close)(AVCodecContext *);
|
|
87 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
|
|
88 UINT8 *buf, int buf_size);
|
|
89 struct AVCodec *next;
|
|
90 } AVCodec;
|
|
91
|
|
92 /* three components are given, that's all */
|
|
93 typedef struct AVPicture {
|
|
94 UINT8 *data[3];
|
|
95 int linesize[3];
|
|
96 } AVPicture;
|
|
97
|
|
98 extern AVCodec ac3_encoder;
|
|
99 extern AVCodec mp2_encoder;
|
|
100 extern AVCodec mpeg1video_encoder;
|
|
101 extern AVCodec h263_encoder;
|
|
102 extern AVCodec h263p_encoder;
|
|
103 extern AVCodec rv10_encoder;
|
|
104 extern AVCodec mjpeg_encoder;
|
|
105 extern AVCodec opendivx_encoder;
|
|
106 extern AVCodec msmpeg4_encoder;
|
|
107
|
|
108 extern AVCodec h263_decoder;
|
|
109 extern AVCodec opendivx_decoder;
|
|
110 extern AVCodec msmpeg4_decoder;
|
|
111 extern AVCodec mpeg_decoder;
|
|
112 extern AVCodec h263i_decoder;
|
|
113 extern AVCodec rv10_decoder;
|
|
114
|
|
115 /* dummy raw codecs */
|
|
116 extern AVCodec pcm_codec;
|
|
117 extern AVCodec rawvideo_codec;
|
|
118
|
|
119 /* the following codecs use external GPL libs */
|
|
120 extern AVCodec mp3_decoder;
|
|
121 extern AVCodec ac3_decoder;
|
|
122
|
|
123 /* resample.c */
|
|
124
|
|
125 struct ReSampleContext;
|
|
126
|
|
127 typedef struct ReSampleContext ReSampleContext;
|
|
128
|
|
129 ReSampleContext *audio_resample_init(int output_channels, int input_channels,
|
|
130 int output_rate, int input_rate);
|
|
131 int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
|
|
132 void audio_resample_close(ReSampleContext *s);
|
|
133
|
|
134 /* YUV420 format is assumed ! */
|
|
135
|
|
136 struct ImgReSampleContext;
|
|
137
|
|
138 typedef struct ImgReSampleContext ImgReSampleContext;
|
|
139
|
|
140 ImgReSampleContext *img_resample_init(int output_width, int output_height,
|
|
141 int input_width, int input_height);
|
|
142 void img_resample(ImgReSampleContext *s,
|
|
143 AVPicture *output, AVPicture *input);
|
|
144
|
|
145 void img_resample_close(ImgReSampleContext *s);
|
|
146
|
|
147 int img_convert_to_yuv420(UINT8 *img_out, UINT8 *img,
|
|
148 int pix_fmt, int width, int height);
|
|
149
|
|
150 /* external high level API */
|
|
151
|
|
152 extern AVCodec *first_avcodec;
|
|
153
|
|
154 void avcodec_init(void);
|
|
155
|
|
156 void register_avcodec(AVCodec *format);
|
|
157 AVCodec *avcodec_find_encoder(enum CodecID id);
|
|
158 AVCodec *avcodec_find_decoder(enum CodecID id);
|
|
159 AVCodec *avcodec_find_decoder_by_name(const char *name);
|
|
160 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
|
|
161
|
|
162 int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
|
|
163 int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples,
|
|
164 int *frame_size_ptr,
|
|
165 UINT8 *buf, int buf_size);
|
|
166 int avcodec_decode_video(AVCodecContext *avctx, AVPicture *picture,
|
|
167 int *got_picture_ptr,
|
|
168 UINT8 *buf, int buf_size);
|
|
169 int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size,
|
|
170 const short *samples);
|
|
171 int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size,
|
|
172 const AVPicture *pict);
|
|
173
|
|
174 int avcodec_close(AVCodecContext *avctx);
|
|
175
|
|
176 void avcodec_register_all(void);
|