Mercurial > libavcodec.hg
annotate avcodec.h @ 625:bb6a69f9d409 libavcodec
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
per context DCT selection
author | michaelni |
---|---|
date | Thu, 29 Aug 2002 23:55:32 +0000 |
parents | 4f3d4a07d374 |
children | f596db4aa871 |
rev | line source |
---|---|
92 | 1 #ifndef AVCODEC_H |
2 #define AVCODEC_H | |
3 | |
0 | 4 #include "common.h" |
5 | |
322 | 6 #define LIBAVCODEC_VERSION_INT 0x000406 |
7 #define LIBAVCODEC_VERSION "0.4.6" | |
625
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
8 #define LIBAVCODEC_BUILD 4621 |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
9 #define LIBAVCODEC_BUILD_STR "4621" |
322 | 10 |
0 | 11 enum CodecID { |
12 CODEC_ID_NONE, | |
13 CODEC_ID_MPEG1VIDEO, | |
14 CODEC_ID_H263, | |
15 CODEC_ID_RV10, | |
16 CODEC_ID_MP2, | |
260
e1bacfb3f51f
- Added MP3 encoding through libmp3lame contributed by Lennert Buytenhek.
pulento
parents:
252
diff
changeset
|
17 CODEC_ID_MP3LAME, |
0 | 18 CODEC_ID_AC3, |
19 CODEC_ID_MJPEG, | |
67 | 20 CODEC_ID_MPEG4, |
0 | 21 CODEC_ID_RAWVIDEO, |
307 | 22 CODEC_ID_MSMPEG4V1, |
23 CODEC_ID_MSMPEG4V2, | |
24 CODEC_ID_MSMPEG4V3, | |
311 | 25 CODEC_ID_WMV1, |
485 | 26 CODEC_ID_WMV2, |
0 | 27 CODEC_ID_H263P, |
28 CODEC_ID_H263I, | |
521 | 29 CODEC_ID_SVQ1, |
92 | 30 |
31 /* various pcm "codecs" */ | |
32 CODEC_ID_PCM_S16LE, | |
33 CODEC_ID_PCM_S16BE, | |
34 CODEC_ID_PCM_U16LE, | |
35 CODEC_ID_PCM_U16BE, | |
36 CODEC_ID_PCM_S8, | |
37 CODEC_ID_PCM_U8, | |
38 CODEC_ID_PCM_MULAW, | |
39 CODEC_ID_PCM_ALAW, | |
573
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
40 |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
41 /* various adpcm codecs */ |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
42 CODEC_ID_ADPCM_IMA_QT, |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
43 CODEC_ID_ADPCM_IMA_WAV, |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
44 CODEC_ID_ADPCM_MS, |
0 | 45 }; |
307 | 46 #define CODEC_ID_MSMPEG4 CODEC_ID_MSMPEG4V3 |
0 | 47 |
48 enum CodecType { | |
371
8187bb132d85
* Start using enumerated types (makes debugging much easier)
philipjsg
parents:
367
diff
changeset
|
49 CODEC_TYPE_UNKNOWN = -1, |
0 | 50 CODEC_TYPE_VIDEO, |
51 CODEC_TYPE_AUDIO, | |
52 }; | |
53 | |
54 enum PixelFormat { | |
317
5afea0021fb8
- PIX_FMT_ANY = -1 to avoid breaking any stuff that could be using it.
pulento
parents:
316
diff
changeset
|
55 PIX_FMT_ANY = -1, |
0 | 56 PIX_FMT_YUV420P, |
57 PIX_FMT_YUV422, | |
58 PIX_FMT_RGB24, | |
59 PIX_FMT_BGR24, | |
27
b8723ec6c80f
added 422P and 444P formats (need to patch ffmpeg.c so that it is handled in all the program)
glantau
parents:
24
diff
changeset
|
60 PIX_FMT_YUV422P, |
b8723ec6c80f
added 422P and 444P formats (need to patch ffmpeg.c so that it is handled in all the program)
glantau
parents:
24
diff
changeset
|
61 PIX_FMT_YUV444P, |
583 | 62 PIX_FMT_RGBA32, |
63 PIX_FMT_BGRA32, | |
521 | 64 PIX_FMT_YUV410P |
0 | 65 }; |
66 | |
92 | 67 /* currently unused, may be used if 24/32 bits samples ever supported */ |
68 enum SampleFormat { | |
69 SAMPLE_FMT_S16 = 0, /* signed 16 bits */ | |
70 }; | |
71 | |
0 | 72 /* in bytes */ |
73 #define AVCODEC_MAX_AUDIO_FRAME_SIZE 18432 | |
74 | |
320
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
75 /* motion estimation type, EPZS by default */ |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
76 enum Motion_Est_ID { |
321 | 77 ME_ZERO = 1, |
320
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
78 ME_FULL, |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
79 ME_LOG, |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
80 ME_PHODS, |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
81 ME_EPZS, |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
82 ME_X1 |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
83 }; |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
84 |
613 | 85 typedef struct RcOverride{ |
86 int start_frame; | |
87 int end_frame; | |
88 int qscale; // if this is 0 then quality_factor will be used instead | |
89 float quality_factor; | |
90 } RcOverride; | |
91 | |
321 | 92 /* only for ME compatiblity with old apps */ |
93 extern int motion_estimation_method; | |
94 | |
320
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
95 /* ME algos sorted by quality */ |
367 | 96 static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, |
97 ME_X1, ME_EPZS, ME_FULL }; | |
0 | 98 |
625
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
99 |
324 | 100 #define FF_MAX_B_FRAMES 4 |
101 | |
0 | 102 /* encoding support */ |
294 | 103 /* note not everything is supported yet */ |
0 | 104 |
105 #define CODEC_FLAG_HQ 0x0001 /* high quality (non real time) encoding */ | |
106 #define CODEC_FLAG_QSCALE 0x0002 /* use fixed qscale */ | |
294 | 107 #define CODEC_FLAG_4MV 0x0004 /* 4 MV per MB allowed */ |
108 #define CODEC_FLAG_QPEL 0x0010 /* use qpel MC */ | |
109 #define CODEC_FLAG_GMC 0x0020 /* use GMC */ | |
298
e20de99b6295
using Juanjo's way to pass forced type - especially as I_TYPE/P_TYPE defines aren't exported in the public interface, and the flagged method matches the way as qscale forcing work
arpi_esp
parents:
297
diff
changeset
|
110 #define CODEC_FLAG_TYPE 0x0040 /* fixed I/P frame type, from avctx->key_frame */ |
460 | 111 #define CODEC_FLAG_PART 0x0080 /* use data partitioning */ |
324 | 112 /* parent program gurantees that the input for b-frame containing streams is not written to |
113 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */ | |
329 | 114 #define CODEC_FLAG_INPUT_PRESERVED 0x0100 |
115 #define CODEC_FLAG_PASS1 0x0200 /* use internal 2pass ratecontrol in first pass mode */ | |
116 #define CODEC_FLAG_PASS2 0x0400 /* use internal 2pass ratecontrol in second pass mode */ | |
349
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
117 #define CODEC_FLAG_EXTERN_HUFF 0x1000 /* use external huffman table (for mjpeg) */ |
553 | 118 #define CODEC_FLAG_GRAY 0x2000 /* only decode/encode grayscale */ |
119 #define CODEC_FLAG_EMU_EDGE 0x4000/* dont draw edges */ | |
120 #define CODEC_FLAG_DR1 0x8000 /* dr1 */ | |
67 | 121 /* codec capabilities */ |
122 | |
123 /* decoder can use draw_horiz_band callback */ | |
124 #define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 | |
553 | 125 #define CODEC_CAP_DR1 0x0002 /* direct rendering method 1 */ |
581
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
126 /* if 'parse_only' field is true, then avcodec_parse_frame() can be |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
127 used */ |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
128 #define CODEC_CAP_PARSE_ONLY 0x0004 |
67 | 129 |
0 | 130 #define FRAME_RATE_BASE 10000 |
131 | |
132 typedef struct AVCodecContext { | |
133 int bit_rate; | |
268 | 134 int bit_rate_tolerance; /* amount of +- bits (>0)*/ |
0 | 135 int flags; |
136 int sub_id; /* some codecs needs additionnal format info. It is | |
137 stored there */ | |
320
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
138 |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
139 int me_method; /* ME algorithm used for video coding */ |
cda7d0857baf
- ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents:
317
diff
changeset
|
140 |
349
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
141 /* extra data from parent application to codec, e.g. huffman table |
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
142 for mjpeg */ |
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
143 /* the parent should allocate and free this buffer */ |
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
144 void *extradata; |
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
145 int extradata_size; |
34f6c77ff01a
Support for external huffman table and various fixes by Alex Beregszaszi <alex@naxine.org>
arpi_esp
parents:
345
diff
changeset
|
146 |
0 | 147 /* video only */ |
148 int frame_rate; /* frames per sec multiplied by FRAME_RATE_BASE */ | |
149 int width, height; | |
281
1fc96b02142e
mpeg4 aspect_ratio_info in AVCodecContext (requested by alex)
michaelni
parents:
277
diff
changeset
|
150 int aspect_ratio_info; |
282 | 151 #define FF_ASPECT_SQUARE 1 |
152 #define FF_ASPECT_4_3_625 2 | |
153 #define FF_ASPECT_4_3_525 3 | |
154 #define FF_ASPECT_16_9_625 4 | |
155 #define FF_ASPECT_16_9_525 5 | |
618 | 156 #define FF_ASPECT_EXTENDED 15 |
0 | 157 int gop_size; /* 0 = intra only */ |
315 | 158 enum PixelFormat pix_fmt; /* pixel format, see PIX_FMT_xxx */ |
383
e6b64bc3bc87
- repeat_pict meaning changed, now it signals the extra delay for the
pulento
parents:
382
diff
changeset
|
159 int repeat_pict; /* when decoding, this signal how much the picture */ |
e6b64bc3bc87
- repeat_pict meaning changed, now it signals the extra delay for the
pulento
parents:
382
diff
changeset
|
160 /* must be delayed. */ |
e6b64bc3bc87
- repeat_pict meaning changed, now it signals the extra delay for the
pulento
parents:
382
diff
changeset
|
161 /* extra_delay = (repeat_pict / 2) * (1/fps) */ |
67 | 162 /* if non NULL, 'draw_horiz_band' is called by the libavcodec |
163 decoder to draw an horizontal band. It improve cache usage. Not | |
164 all codecs can do that. You must check the codec capabilities | |
165 before */ | |
166 void (*draw_horiz_band)(struct AVCodecContext *s, | |
167 UINT8 **src_ptr, int linesize, | |
168 int y, int width, int height); | |
169 | |
0 | 170 /* audio only */ |
171 int sample_rate; /* samples per sec */ | |
172 int channels; | |
92 | 173 int sample_fmt; /* sample format, currenly unused */ |
0 | 174 |
175 /* the following data should not be initialized */ | |
376 | 176 int frame_size; /* in samples, initialized when calling 'init' */ |
177 int frame_number; /* audio or video frame number */ | |
178 int real_pict_num; /* returns the real picture number of | |
179 previous encoded frame */ | |
180 int key_frame; /* true if the previous compressed frame was | |
181 a key frame (intra, or seekable) */ | |
182 int pict_type; /* picture type of the previous | |
183 encoded frame */ | |
184 /* FIXME: these should have FF_ */ | |
185 #define I_TYPE 1 // Intra | |
186 #define P_TYPE 2 // Predicted | |
187 #define B_TYPE 3 // Bi-dir predicted | |
188 #define S_TYPE 4 // S(GMC)-VOP MPEG4 | |
189 | |
190 int delay; /* number of frames the decoded output | |
191 will be delayed relative to the encoded input */ | |
345 | 192 uint8_t *mbskip_table; /* =1 if MB didnt change, is only valid for I/P frames |
193 stride= mb_width = (width+15)>>4 */ | |
336 | 194 |
195 /* encoding parameters */ | |
0 | 196 int quality; /* quality of the previous encoded frame |
329 | 197 (between 1 (good) and 31 (bad)) |
198 this is allso used to set the quality in vbr mode | |
199 and the per frame quality in CODEC_FLAG_TYPE (second pass mode) */ | |
268 | 200 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0)*/ |
201 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */ | |
202 int qmin; /* min qscale */ | |
203 int qmax; /* max qscale */ | |
204 int max_qdiff; /* max qscale difference between frames */ | |
324 | 205 int max_b_frames; /* maximum b frames, the output will be delayed by max_b_frames+1 relative to the input */ |
613 | 206 float b_quant_factor;/* qscale factor between ps and b frames */ |
207 int rc_strategy; /* obsolete FIXME remove */ | |
329 | 208 int b_frame_strategy; |
324 | 209 |
345 | 210 int hurry_up; /* when set to 1 during decoding, b frames will be skiped |
211 when set to 2 idct/dequant will be skipped too */ | |
212 | |
0 | 213 struct AVCodec *codec; |
214 void *priv_data; | |
215 | |
162 | 216 /* The following data is for RTP friendly coding */ |
460 | 217 /* By now only H.263/H.263+/MPEG4 coder honours this */ |
162 | 218 int rtp_mode; /* 1 for activate RTP friendly-mode */ |
219 /* highers numbers represent more error-prone */ | |
220 /* enviroments, by now just "1" exist */ | |
221 | |
222 int rtp_payload_size; /* The size of the RTP payload, the coder will */ | |
223 /* do it's best to deliver a chunk with size */ | |
224 /* below rtp_payload_size, the chunk will start */ | |
225 /* with a start code on some codecs like H.263 */ | |
226 /* This doesn't take account of any particular */ | |
227 /* headers inside the transmited RTP payload */ | |
231 | 228 |
229 | |
230 /* The RTP callcack: This function is called */ | |
231 /* every time the encoder as a packet to send */ | |
232 /* Depends on the encoder if the data starts */ | |
233 /* with a Start Code (it should) H.263 does */ | |
234 void (*rtp_callback)(void *data, int size, int packet_number); | |
235 | |
252
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
236 /* These are for PSNR calculation, if you set get_psnr to 1 */ |
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
237 /* after encoding you will have the PSNR on psnr_y/cb/cr */ |
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
238 int get_psnr; |
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
239 float psnr_y; |
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
240 float psnr_cb; |
ddb1a0e94cf4
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents:
231
diff
changeset
|
241 float psnr_cr; |
286 | 242 |
243 /* statistics, used for 2-pass encoding */ | |
244 int mv_bits; | |
245 int header_bits; | |
246 int i_tex_bits; | |
247 int p_tex_bits; | |
248 int i_count; | |
249 int p_count; | |
250 int skip_count; | |
251 int misc_bits; // cbp, mb_type | |
252 int frame_bits; | |
162 | 253 |
0 | 254 /* the following fields are ignored */ |
67 | 255 void *opaque; /* can be used to carry app specific stuff */ |
0 | 256 char codec_name[32]; |
371
8187bb132d85
* Start using enumerated types (makes debugging much easier)
philipjsg
parents:
367
diff
changeset
|
257 enum CodecType codec_type; /* see CODEC_TYPE_xxx */ |
8187bb132d85
* Start using enumerated types (makes debugging much easier)
philipjsg
parents:
367
diff
changeset
|
258 enum CodecID codec_id; /* see CODEC_ID_xxx */ |
0 | 259 unsigned int codec_tag; /* codec tag, only used if unknown codec */ |
411
5c8b3a717929
workaround dc_scale bug in old ffmpeg msmpeg4v3 encoder (set workaround_bugs=1 for this)
michaelni
parents:
399
diff
changeset
|
260 |
5c8b3a717929
workaround dc_scale bug in old ffmpeg msmpeg4v3 encoder (set workaround_bugs=1 for this)
michaelni
parents:
399
diff
changeset
|
261 int workaround_bugs; /* workaround bugs in encoders which cannot be detected automatically */ |
460 | 262 int luma_elim_threshold; |
263 int chroma_elim_threshold; | |
264 int strict_std_compliance; /* strictly follow the std (MPEG4, ...) */ | |
265 float b_quant_offset;/* qscale offset between ips and b frames, not implemented yet */ | |
266 int error_resilience; | |
466
805714c0c10f
new field for communicating with external postprocessing
nickols_k
parents:
460
diff
changeset
|
267 |
805714c0c10f
new field for communicating with external postprocessing
nickols_k
parents:
460
diff
changeset
|
268 #ifndef MBC |
805714c0c10f
new field for communicating with external postprocessing
nickols_k
parents:
460
diff
changeset
|
269 #define MBC 128 |
805714c0c10f
new field for communicating with external postprocessing
nickols_k
parents:
460
diff
changeset
|
270 #define MBR 96 |
805714c0c10f
new field for communicating with external postprocessing
nickols_k
parents:
460
diff
changeset
|
271 #endif |
553 | 272 #define QP_TYPE int //FIXME note xxx this might be changed to int8_t |
273 | |
274 QP_TYPE *quant_store; /* field for communicating with external postprocessing */ | |
581
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
275 |
467 | 276 unsigned qstride; |
553 | 277 uint8_t *dr_buffer[3]; |
278 int dr_stride; | |
279 void *dr_opaque_frame; | |
556 | 280 void (*get_buffer_callback)(struct AVCodecContext *c, int width, int height, int pict_type); |
281 | |
282 int has_b_frames; // is 1 if the decoded stream contains b frames | |
283 int dr_uvstride; | |
284 int dr_ip_buffer_count; | |
573
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
285 int block_align; /* currently only for adpcm codec in wav/avi */ |
613 | 286 |
581
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
287 int parse_only; /* decoding only: if true, only parsing is done |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
288 (function avcodec_parse_frame()). The frame |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
289 data is returned. Only MPEG codecs support this now. */ |
613 | 290 |
599 | 291 int mpeg_quant; /* 0-> h263 quant 1-> mpeg quant */ |
613 | 292 |
293 char *stats_out; /* encoding statistics output buffer */ | |
294 char *stats_in; /* encoding statistics input buffer (concatenated stuff from stats_out of pass1 should be placed here)*/ | |
295 float rc_qsquish; | |
296 float rc_qmod_amp; | |
297 int rc_qmod_freq; | |
298 RcOverride *rc_override; | |
299 int rc_override_count; | |
300 char *rc_eq; | |
301 int rc_max_rate; | |
302 int rc_min_rate; | |
303 int rc_buffer_size; | |
304 float rc_buffer_aggressivity; | |
305 float i_quant_factor;/* qscale factor between i and p frames */ | |
306 float i_quant_offset;/* qscale offset between i and p frames */ | |
307 float rc_initial_cplx; | |
581
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
308 |
618 | 309 int aspected_width; |
310 int aspected_height; | |
311 | |
625
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
312 int dct_algo; |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
313 #define FF_DCT_AUTO 0 |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
314 #define FF_DCT_FASTINT 1 |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
315 #define FF_DCT_INT 2 |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
316 #define FF_DCT_MMX 3 |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
317 |
460 | 318 //FIXME this should be reordered after kabis API is finished ... |
613 | 319 //TODO kill kabi |
378 | 320 /* |
321 Note: Below are located reserved fields for further usage | |
322 It requires for ABI !!! | |
323 If you'll perform some changes then borrow new space from these fields | |
324 (void * can be safety replaced with struct * ;) | |
325 P L E A S E ! ! ! | |
326 IMPORTANT: Never change order of already declared fields!!! | |
327 */ | |
328 unsigned long long int | |
329 ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5, | |
330 ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11,ull_res12; | |
331 float | |
332 flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5, | |
613 | 333 flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12; |
378 | 334 void |
335 *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5, | |
613 | 336 *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12; |
378 | 337 unsigned long int |
338 ul_res0,ul_res1,ul_res2,ul_res3,ul_res4,ul_res5, | |
339 ul_res6,ul_res7,ul_res8,ul_res9,ul_res10,ul_res11,ul_res12; | |
340 unsigned short int | |
341 us_res0,us_res1,us_res2,us_res3,us_res4,us_res5, | |
342 us_res6,us_res7,us_res8,us_res9,us_res10,us_res11,us_res12; | |
343 unsigned char | |
344 uc_res0,uc_res1,uc_res2,uc_res3,uc_res4,uc_res5, | |
556 | 345 uc_res6,uc_res7,uc_res8,uc_res9,uc_res10,uc_res11,uc_res12; |
613 | 346 unsigned int |
347 ui_res0,ui_res1,ui_res2,ui_res3,ui_res4,ui_res5,ui_res6,ui_res7,ui_res8,ui_res9, | |
625
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
348 ui_res10,ui_res11,ui_res12,ui_res13,ui_res14,ui_res15,ui_res16; |
0 | 349 } AVCodecContext; |
350 | |
351 typedef struct AVCodec { | |
352 char *name; | |
353 int type; | |
354 int id; | |
355 int priv_data_size; | |
356 int (*init)(AVCodecContext *); | |
357 int (*encode)(AVCodecContext *, UINT8 *buf, int buf_size, void *data); | |
358 int (*close)(AVCodecContext *); | |
556 | 359 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, |
0 | 360 UINT8 *buf, int buf_size); |
67 | 361 int capabilities; |
0 | 362 struct AVCodec *next; |
378 | 363 /* |
364 Note: Below are located reserved fields for further usage | |
365 It requires for ABI !!! | |
366 If you'll perform some changes then borrow new space from these fields | |
367 (void * can be safety replaced with struct * ;) | |
368 P L E A S E ! ! ! | |
369 IMPORTANT: Never change order of already declared fields!!! | |
370 */ | |
371 unsigned long long int | |
372 ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5, | |
373 ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11,ull_res12; | |
374 float | |
375 flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5, | |
376 flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12; | |
377 void | |
378 *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5, | |
379 *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12; | |
0 | 380 } AVCodec; |
381 | |
382 /* three components are given, that's all */ | |
383 typedef struct AVPicture { | |
384 UINT8 *data[3]; | |
385 int linesize[3]; | |
386 } AVPicture; | |
387 | |
388 extern AVCodec ac3_encoder; | |
389 extern AVCodec mp2_encoder; | |
260
e1bacfb3f51f
- Added MP3 encoding through libmp3lame contributed by Lennert Buytenhek.
pulento
parents:
252
diff
changeset
|
390 extern AVCodec mp3lame_encoder; |
0 | 391 extern AVCodec mpeg1video_encoder; |
392 extern AVCodec h263_encoder; | |
393 extern AVCodec h263p_encoder; | |
394 extern AVCodec rv10_encoder; | |
395 extern AVCodec mjpeg_encoder; | |
67 | 396 extern AVCodec mpeg4_encoder; |
307 | 397 extern AVCodec msmpeg4v1_encoder; |
398 extern AVCodec msmpeg4v2_encoder; | |
399 extern AVCodec msmpeg4v3_encoder; | |
500 | 400 extern AVCodec wmv1_encoder; |
401 extern AVCodec wmv2_encoder; | |
0 | 402 |
403 extern AVCodec h263_decoder; | |
67 | 404 extern AVCodec mpeg4_decoder; |
307 | 405 extern AVCodec msmpeg4v1_decoder; |
406 extern AVCodec msmpeg4v2_decoder; | |
407 extern AVCodec msmpeg4v3_decoder; | |
311 | 408 extern AVCodec wmv1_decoder; |
500 | 409 extern AVCodec wmv2_decoder; |
0 | 410 extern AVCodec mpeg_decoder; |
411 extern AVCodec h263i_decoder; | |
412 extern AVCodec rv10_decoder; | |
521 | 413 extern AVCodec svq1_decoder; |
24 | 414 extern AVCodec mjpeg_decoder; |
322 | 415 extern AVCodec mp2_decoder; |
92 | 416 extern AVCodec mp3_decoder; |
0 | 417 |
92 | 418 /* pcm codecs */ |
419 #define PCM_CODEC(id, name) \ | |
420 extern AVCodec name ## _decoder; \ | |
421 extern AVCodec name ## _encoder; | |
422 | |
423 PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le); | |
424 PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be); | |
425 PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le); | |
426 PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be); | |
427 PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8); | |
428 PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); | |
429 PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); | |
430 PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); | |
431 | |
573
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
432 /* adpcm codecs */ |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
433 |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
434 PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt); |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
435 PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav); |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
436 PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms); |
b0f52172f4c5
beos/mov/adpcm patch by Franois Revol <revol at free dot fr>
michaelni
parents:
556
diff
changeset
|
437 |
92 | 438 #undef PCM_CODEC |
439 | |
440 /* dummy raw video codec */ | |
0 | 441 extern AVCodec rawvideo_codec; |
442 | |
443 /* the following codecs use external GPL libs */ | |
444 extern AVCodec ac3_decoder; | |
445 | |
446 /* resample.c */ | |
447 | |
448 struct ReSampleContext; | |
449 | |
450 typedef struct ReSampleContext ReSampleContext; | |
451 | |
452 ReSampleContext *audio_resample_init(int output_channels, int input_channels, | |
453 int output_rate, int input_rate); | |
454 int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); | |
455 void audio_resample_close(ReSampleContext *s); | |
456 | |
457 /* YUV420 format is assumed ! */ | |
458 | |
459 struct ImgReSampleContext; | |
460 | |
461 typedef struct ImgReSampleContext ImgReSampleContext; | |
462 | |
463 ImgReSampleContext *img_resample_init(int output_width, int output_height, | |
464 int input_width, int input_height); | |
465 void img_resample(ImgReSampleContext *s, | |
466 AVPicture *output, AVPicture *input); | |
467 | |
468 void img_resample_close(ImgReSampleContext *s); | |
469 | |
49 | 470 void avpicture_fill(AVPicture *picture, UINT8 *ptr, |
471 int pix_fmt, int width, int height); | |
472 int avpicture_get_size(int pix_fmt, int width, int height); | |
473 | |
474 /* convert among pixel formats */ | |
475 int img_convert(AVPicture *dst, int dst_pix_fmt, | |
476 AVPicture *src, int pix_fmt, | |
477 int width, int height); | |
478 | |
479 /* deinterlace a picture */ | |
480 int avpicture_deinterlace(AVPicture *dst, AVPicture *src, | |
0 | 481 int pix_fmt, int width, int height); |
482 | |
483 /* external high level API */ | |
484 | |
485 extern AVCodec *first_avcodec; | |
486 | |
362 | 487 /* returns LIBAVCODEC_VERSION_INT constant */ |
399 | 488 unsigned avcodec_version(void); |
379 | 489 /* returns LIBAVCODEC_BUILD constant */ |
399 | 490 unsigned avcodec_build(void); |
0 | 491 void avcodec_init(void); |
492 | |
399 | 493 void avcodec_set_bit_exact(void); |
494 | |
0 | 495 void register_avcodec(AVCodec *format); |
496 AVCodec *avcodec_find_encoder(enum CodecID id); | |
177 | 497 AVCodec *avcodec_find_encoder_by_name(const char *name); |
0 | 498 AVCodec *avcodec_find_decoder(enum CodecID id); |
499 AVCodec *avcodec_find_decoder_by_name(const char *name); | |
500 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); | |
501 | |
502 int avcodec_open(AVCodecContext *avctx, AVCodec *codec); | |
503 int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples, | |
504 int *frame_size_ptr, | |
505 UINT8 *buf, int buf_size); | |
506 int avcodec_decode_video(AVCodecContext *avctx, AVPicture *picture, | |
507 int *got_picture_ptr, | |
508 UINT8 *buf, int buf_size); | |
581
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
509 int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata, |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
510 int *data_size_ptr, |
8adda0af04e2
added proposed API for parse_only mode to extract compressed frames from compressed streams
bellard
parents:
573
diff
changeset
|
511 UINT8 *buf, int buf_size); |
0 | 512 int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size, |
513 const short *samples); | |
514 int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, | |
515 const AVPicture *pict); | |
516 | |
517 int avcodec_close(AVCodecContext *avctx); | |
518 | |
519 void avcodec_register_all(void); | |
92 | 520 |
341 | 521 void avcodec_flush_buffers(AVCodecContext *avctx); |
522 | |
108
1e4a4af694d1
exporting qscale data for postprocessing (for MPlayer)
arpi_esp
parents:
92
diff
changeset
|
523 #ifdef FF_POSTPROCESS |
1e4a4af694d1
exporting qscale data for postprocessing (for MPlayer)
arpi_esp
parents:
92
diff
changeset
|
524 extern int quant_store[MBR+1][MBC+1]; // [Review] |
1e4a4af694d1
exporting qscale data for postprocessing (for MPlayer)
arpi_esp
parents:
92
diff
changeset
|
525 #endif |
1e4a4af694d1
exporting qscale data for postprocessing (for MPlayer)
arpi_esp
parents:
92
diff
changeset
|
526 |
382 | 527 |
528 /** | |
529 * Interface for 0.5.0 version | |
530 * | |
531 * do not even think about it's usage for this moment | |
532 */ | |
533 | |
534 typedef struct { | |
535 // compressed size used from given memory buffer | |
536 int size; | |
537 /// I/P/B frame type | |
538 int frame_type; | |
539 } avc_enc_result_t; | |
540 | |
541 /** | |
542 * Commands | |
543 * order can't be changed - once it was defined | |
544 */ | |
545 typedef enum { | |
546 // general commands | |
547 AVC_OPEN_BY_NAME = 0xACA000, | |
548 AVC_OPEN_BY_CODEC_ID, | |
549 AVC_OPEN_BY_FOURCC, | |
550 AVC_CLOSE, | |
551 | |
552 AVC_FLUSH, | |
553 // pin - struct { uint8_t* src, uint_t src_size } | |
554 // pout - struct { AVPicture* img, consumed_bytes, | |
555 AVC_DECODE, | |
556 // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size } | |
557 // pout - uint_t used_from_dest_size | |
558 AVC_ENCODE, | |
559 | |
560 // query/get video commands | |
561 AVC_GET_VERSION = 0xACB000, | |
562 AVC_GET_WIDTH, | |
563 AVC_GET_HEIGHT, | |
564 AVC_GET_DELAY, | |
565 AVC_GET_QUANT_TABLE, | |
566 // ... | |
567 | |
568 // query/get audio commands | |
569 AVC_GET_FRAME_SIZE = 0xABC000, | |
570 | |
571 // maybe define some simple structure which | |
572 // might be passed to the user - but they can't | |
573 // contain any codec specific parts and these | |
574 // calls are usualy necessary only few times | |
575 | |
576 // set video commands | |
577 AVC_SET_WIDTH = 0xACD000, | |
578 AVC_SET_HEIGHT, | |
579 | |
580 // set video encoding commands | |
581 AVC_SET_FRAME_RATE = 0xACD800, | |
582 AVC_SET_QUALITY, | |
583 AVC_SET_HURRY_UP, | |
584 | |
585 // set audio commands | |
586 AVC_SET_SAMPLE_RATE = 0xACE000, | |
587 AVC_SET_CHANNELS, | |
588 | |
589 } avc_cmd_t; | |
590 | |
591 /** | |
592 * \param handle allocated private structure by libavcodec | |
593 * for initialization pass NULL - will be returned pout | |
594 * user is supposed to know nothing about its structure | |
595 * \param cmd type of operation to be performed | |
596 * \param pint input parameter | |
597 * \param pout output parameter | |
598 * | |
599 * \returns command status - eventually for query command it might return | |
600 * integer resulting value | |
601 */ | |
602 int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); | |
603 | |
492 | 604 /* memory */ |
605 void *av_malloc(int size); | |
606 void *av_mallocz(int size); | |
607 void av_free(void *ptr); | |
608 void __av_freep(void **ptr); | |
609 #define av_freep(p) __av_freep((void **)(p)) | |
610 | |
92 | 611 #endif /* AVCODEC_H */ |