Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ 11f18faf

History | View | Annotate | Download (29.1 KB)

1 a96b68b7 Fabrice Bellard
#ifndef AVCODEC_H
2
#define AVCODEC_H
3
4 de6d9b64 Fabrice Bellard
#include "common.h"
5
6 4b1f4f23 Juanjo
#define LIBAVCODEC_VERSION_INT 0x000406
7
#define LIBAVCODEC_VERSION     "0.4.6"
8 11f18faf Michael Niedermayer
#define LIBAVCODEC_BUILD       4639
9
#define LIBAVCODEC_BUILD_STR   "4639"
10 4b1f4f23 Juanjo
11 de6d9b64 Fabrice Bellard
enum CodecID {
12
    CODEC_ID_NONE, 
13
    CODEC_ID_MPEG1VIDEO,
14
    CODEC_ID_H263,
15
    CODEC_ID_RV10,
16
    CODEC_ID_MP2,
17 9d36bdc9 Juanjo
    CODEC_ID_MP3LAME,
18 81e0d0b4 Mark Hills
    CODEC_ID_VORBIS,
19 de6d9b64 Fabrice Bellard
    CODEC_ID_AC3,
20
    CODEC_ID_MJPEG,
21 bf89e6b1 Fabrice Bellard
    CODEC_ID_MPEG4,
22 de6d9b64 Fabrice Bellard
    CODEC_ID_RAWVIDEO,
23 84afee34 Michael Niedermayer
    CODEC_ID_MSMPEG4V1,
24
    CODEC_ID_MSMPEG4V2,
25
    CODEC_ID_MSMPEG4V3,
26 e1a9dbff Michael Niedermayer
    CODEC_ID_WMV1,
27 b50eef3a Michael Niedermayer
    CODEC_ID_WMV2,
28 de6d9b64 Fabrice Bellard
    CODEC_ID_H263P,
29
    CODEC_ID_H263I,
30 be8ffec9 Nick Kurshev
    CODEC_ID_SVQ1,
31 020fcc94 Fabrice Bellard
    CODEC_ID_DVVIDEO,
32
    CODEC_ID_DVAUDIO,
33 bc8d1857 Fabrice Bellard
    CODEC_ID_WMAV1,
34
    CODEC_ID_WMAV2,
35 3f95e843 François Revol
    CODEC_ID_MACE3,
36
    CODEC_ID_MACE6,
37 11f18faf Michael Niedermayer
    CODEC_ID_HUFFYUV,
38 a96b68b7 Fabrice Bellard
39
    /* various pcm "codecs" */
40
    CODEC_ID_PCM_S16LE,
41
    CODEC_ID_PCM_S16BE,
42
    CODEC_ID_PCM_U16LE,
43
    CODEC_ID_PCM_U16BE,
44
    CODEC_ID_PCM_S8,
45
    CODEC_ID_PCM_U8,
46
    CODEC_ID_PCM_MULAW,
47
    CODEC_ID_PCM_ALAW,
48 0147f198 François Revol
49
    /* various adpcm codecs */
50
    CODEC_ID_ADPCM_IMA_QT,
51
    CODEC_ID_ADPCM_IMA_WAV,
52
    CODEC_ID_ADPCM_MS,
53 de6d9b64 Fabrice Bellard
};
54
55
enum CodecType {
56 4a663d80 Philip Gladstone
    CODEC_TYPE_UNKNOWN = -1,
57 de6d9b64 Fabrice Bellard
    CODEC_TYPE_VIDEO,
58
    CODEC_TYPE_AUDIO,
59
};
60
61
enum PixelFormat {
62 9f862d11 Juanjo
    PIX_FMT_ANY = -1,
63 de6d9b64 Fabrice Bellard
    PIX_FMT_YUV420P,
64
    PIX_FMT_YUV422,
65
    PIX_FMT_RGB24,
66
    PIX_FMT_BGR24,
67 d9fea0b5 Fabrice Bellard
    PIX_FMT_YUV422P,
68
    PIX_FMT_YUV444P,
69 b71472eb Philip Gladstone
    PIX_FMT_RGBA32,
70
    PIX_FMT_BGRA32,
71 e9feea59 Arpi
    PIX_FMT_YUV410P,
72
    PIX_FMT_YUV411P
73 de6d9b64 Fabrice Bellard
};
74
75 a96b68b7 Fabrice Bellard
/* currently unused, may be used if 24/32 bits samples ever supported */
76
enum SampleFormat {
77
    SAMPLE_FMT_S16 = 0,         /* signed 16 bits */
78
};
79
80 de6d9b64 Fabrice Bellard
/* in bytes */
81 bc8d1857 Fabrice Bellard
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
82 de6d9b64 Fabrice Bellard
83 d7425f59 Michael Niedermayer
/**
84
 * Required number of zero bytes at the end of the input bitstream for decoding.
85
 * to avoid overreading (and possibly segfaulting)
86
 */
87
#define FF_INPUT_BUFFER_PADDING_SIZE 8
88
89 e4986da9 Juanjo
/* motion estimation type, EPZS by default */
90
enum Motion_Est_ID {
91 101bea5f Juanjo
    ME_ZERO = 1,
92 e4986da9 Juanjo
    ME_FULL,
93
    ME_LOG,
94
    ME_PHODS,
95
    ME_EPZS,
96
    ME_X1
97
};
98
99 ce980a95 Michael Niedermayer
typedef struct RcOverride{
100
    int start_frame;
101
    int end_frame;
102
    int qscale; // if this is 0 then quality_factor will be used instead
103
    float quality_factor;
104
} RcOverride;
105
106 101bea5f Juanjo
/* only for ME compatiblity with old apps */
107
extern int motion_estimation_method;
108
109 e4986da9 Juanjo
/* ME algos sorted by quality */
110 bc6caae2 Juanjo
static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, 
111
                                       ME_X1, ME_EPZS, ME_FULL };
112 de6d9b64 Fabrice Bellard
113 28db7fce Michael Niedermayer
114 9dbcbd92 Michael Niedermayer
#define FF_MAX_B_FRAMES 4
115
116 a949d72e Michael Niedermayer
/* encoding support
117
   these flags can be passed in AVCodecContext.flags before initing 
118
   Note: note not everything is supported yet 
119
*/
120 de6d9b64 Fabrice Bellard
121 b71901e6 Michael Niedermayer
#define CODEC_FLAG_HQ     0x0001  /* brute force MB-type decission mode (slow) */
122
#define CODEC_FLAG_QSCALE 0x0002  /* use fixed qscale */
123
#define CODEC_FLAG_4MV    0x0004  /* 4 MV per MB allowed */
124
#define CODEC_FLAG_QPEL   0x0010  /* use qpel MC */
125
#define CODEC_FLAG_GMC    0x0020  /* use GMC */
126
#define CODEC_FLAG_PART   0x0080  /* use data partitioning */
127 9dbcbd92 Michael Niedermayer
/* parent program gurantees that the input for b-frame containing streams is not written to 
128
   for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
129 8b4c7dbc Michael Niedermayer
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
130 b71901e6 Michael Niedermayer
#define CODEC_FLAG_PASS1 0x0200   /* use internal 2pass ratecontrol in first  pass mode */
131
#define CODEC_FLAG_PASS2 0x0400   /* use internal 2pass ratecontrol in second pass mode */
132 e84c31dc Arpi
#define CODEC_FLAG_EXTERN_HUFF 0x1000 /* use external huffman table (for mjpeg) */
133 b71901e6 Michael Niedermayer
#define CODEC_FLAG_GRAY  0x2000   /* only decode/encode grayscale */
134 93a21abd Michael Niedermayer
#define CODEC_FLAG_EMU_EDGE 0x4000/* dont draw edges */
135 b71901e6 Michael Niedermayer
#define CODEC_FLAG_DR1    0x8000  /* direct renderig type 1 (store internal frames in external buffers) */
136 d7425f59 Michael Niedermayer
#define CODEC_FLAG_TRUNCATED  0x00010000 /* input bitstream might be truncated at a random location instead 
137
                                            of only at frame boundaries */
138 c5d309f2 Michael Niedermayer
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000 /* normalize adaptive quantization */
139 fcb48651 Michael Niedermayer
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 /* use interlaced dct */
140 9f9c3229 Michael Niedermayer
#define CODEC_FLAG_LOW_DELAY      0x00080000 /* force low delay / will fail on b frames */
141 c5d309f2 Michael Niedermayer
142 bf89e6b1 Fabrice Bellard
/* codec capabilities */
143
144 b71901e6 Michael Niedermayer
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 /* decoder can use draw_horiz_band callback */
145 93a21abd Michael Niedermayer
#define CODEC_CAP_DR1             0x0002 /* direct rendering method 1 */
146 917e06c8 Fabrice Bellard
/* if 'parse_only' field is true, then avcodec_parse_frame() can be
147
   used */
148
#define CODEC_CAP_PARSE_ONLY      0x0004
149 d7425f59 Michael Niedermayer
#define CODEC_CAP_TRUNCATED       0x0008
150 bf89e6b1 Fabrice Bellard
151 de6d9b64 Fabrice Bellard
#define FRAME_RATE_BASE 10000
152
153
typedef struct AVCodecContext {
154 b71901e6 Michael Niedermayer
    /**
155
     * the average bitrate
156
     * encoding: set by user. unused for constant quantizer encoding
157
     * decoding: set by lavc. 0 or some bitrate if this info is available in the stream 
158
     */
159 de6d9b64 Fabrice Bellard
    int bit_rate;
160 b71901e6 Michael Niedermayer
161
    /**
162
     * number of bits the bitstream is allowed to diverge from the reference
163
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
164
     * encoding: set by user. unused for constant quantizer encoding
165
     * decoding: unused
166
     */
167
    int bit_rate_tolerance; 
168
169
    /**
170
     * CODEC_FLAG_*
171
     * encoding: set by user.
172
     * decoding: set by user.
173
     */
174 de6d9b64 Fabrice Bellard
    int flags;
175 b71901e6 Michael Niedermayer
176
    /**
177
     * some codecs needs additionnal format info. It is stored here
178
     * encoding: set by user. 
179
     * decoding: set by lavc. (FIXME is this ok?)
180
     */
181
    int sub_id;
182
183
    /**
184
     * motion estimation algorithm used for video coding
185
     * encoding: set by user.
186
     * decoding: unused
187
     */
188
    int me_method;
189
190
    /**
191
     * some codecs need / can use extra-data like huffman tables
192
     * mjpeg: huffman tables
193
     * rv10: additional flags
194 b704e742 Michael Niedermayer
     * mpeg4: global headers (they can be in the bitstream or here)
195 c5d309f2 Michael Niedermayer
     * encoding: set/allocated/freed by lavc.
196
     * decoding: set/allocated/freed by user.
197 b71901e6 Michael Niedermayer
     */
198 e84c31dc Arpi
    void *extradata;
199
    int extradata_size;
200
    
201 de6d9b64 Fabrice Bellard
    /* video only */
202 b71901e6 Michael Niedermayer
    /**
203
     * frames per sec multiplied by FRAME_RATE_BASE
204
     * for variable fps this is the precission, so if the timestamps 
205
     * can be specified in msec precssion then this is 1000*FRAME_RATE_BASE
206
     * encoding: set by user
207
     * decoding: set by lavc. 0 or the frame_rate if available
208
     */
209
    int frame_rate;
210
211
    /**
212
     * encoding: set by user.
213
     * decoding: set by user, some codecs might override / change it during playback
214
     */
215 de6d9b64 Fabrice Bellard
    int width, height;
216 b71901e6 Michael Niedermayer
    
217
    /**
218
     * encoding: set by user. 0 if not known
219
     * decoding: set by lavc. 0 if not known
220
     */
221 11ce8834 Michael Niedermayer
    int aspect_ratio_info;
222 2efe097a Michael Niedermayer
#define FF_ASPECT_SQUARE 1
223
#define FF_ASPECT_4_3_625 2
224
#define FF_ASPECT_4_3_525 3
225
#define FF_ASPECT_16_9_625 4
226
#define FF_ASPECT_16_9_525 5
227 e769f053 Alex Beregszaszi
#define FF_ASPECT_EXTENDED 15
228 b71901e6 Michael Niedermayer
229
    /**
230
     * the number of pictures in a group of pitures, or 0 for intra_only
231
     * encoding: set by user.
232
     * decoding: unused
233
     */
234
    int gop_size;
235
236
    /**
237
     * pixel format, see PIX_FMT_xxx
238
     * encoding: unused
239
     * decoding: set by lavc.
240
     */
241
    enum PixelFormat pix_fmt;
242
    
243 e0a3d744 Juanjo
    int repeat_pict; /* when decoding, this signal how much the picture */
244
                     /* must be delayed.                                */
245
                     /* extra_delay = (repeat_pict / 2) * (1/fps)       */
246 b71901e6 Michael Niedermayer
    
247
    /**
248
     * if non NULL, 'draw_horiz_band' is called by the libavcodec
249
     * decoder to draw an horizontal band. It improve cache usage. Not
250
     * all codecs can do that. You must check the codec capabilities
251
     * before
252
     * encoding: unused
253
     * decoding: set by user.
254
     */
255 bf89e6b1 Fabrice Bellard
    void (*draw_horiz_band)(struct AVCodecContext *s,
256
                            UINT8 **src_ptr, int linesize,
257
                            int y, int width, int height);
258
259 de6d9b64 Fabrice Bellard
    /* audio only */
260
    int sample_rate; /* samples per sec */
261
    int channels;
262 a96b68b7 Fabrice Bellard
    int sample_fmt;  /* sample format, currenly unused */
263 de6d9b64 Fabrice Bellard
264
    /* the following data should not be initialized */
265 9cd3766f Juanjo
    int frame_size;     /* in samples, initialized when calling 'init' */
266
    int frame_number;   /* audio or video frame number */
267
    int real_pict_num;  /* returns the real picture number of
268
                           previous encoded frame */
269 b71901e6 Michael Niedermayer
                           
270
    /**
271
     * 1 -> keyframe, 0-> not
272
     * encoding: set by lavc (for the outputed bitstream, not the input frame)
273
     * decoding: set by lavc (for the decoded  bitstream, not the displayed frame)
274
     */
275
    int key_frame;
276
277
    /**
278
     * picture type of the previous en/decoded frame, see ?_TYPE below
279
     * encoding: set by lavc (for the outputed bitstream, not the input frame)
280
     * decoding: set by lavc (for the decoded  bitstream, not the displayed frame)
281
     */
282
    int pict_type;
283 9cd3766f Juanjo
/* FIXME: these should have FF_ */
284
#define I_TYPE 1 // Intra
285
#define P_TYPE 2 // Predicted
286
#define B_TYPE 3 // Bi-dir predicted
287
#define S_TYPE 4 // S(GMC)-VOP MPEG4
288
289 b71901e6 Michael Niedermayer
    /**
290
     * number of frames the decoded output will be delayed relative to 
291
     * the encoded input
292
     * encoding: set by lavc.
293
     * decoding: unused
294
     */
295
    int delay;
296
297
    /**
298
     * mbskip_table[mb]=1 if MB didnt change, is only valid for I/P frames 
299
     * stride= mb_width = (width+15)>>4 (FIXME export stride?)
300
     * encoding: unused
301
     * decoding: set by lavc
302
     */
303
    uint8_t *mbskip_table;
304 1ff662cc Michael Niedermayer
    
305
    /* encoding parameters */
306 c5d309f2 Michael Niedermayer
    /**
307
     * quality (between 1 (good) and 31 (bad)) 
308
     * encoding: set by user if CODEC_FLAG_QSCALE is set otherwise set by lavc
309
     * decoding: set by lavc
310
     */
311 de6d9b64 Fabrice Bellard
    int quality;      /* quality of the previous encoded frame 
312 c5d309f2 Michael Niedermayer
                         
313 8b4c7dbc Michael Niedermayer
                         this is allso used to set the quality in vbr mode
314
                         and the per frame quality in CODEC_FLAG_TYPE (second pass mode) */
315 9cdd6a24 Michael Niedermayer
    float qcompress;  /* amount of qscale change between easy & hard scenes (0.0-1.0)*/
316
    float qblur;      /* amount of qscale smoothing over time (0.0-1.0) */
317 b71901e6 Michael Niedermayer
    
318
    /**
319
     * minimum quantizer
320
     * encoding: set by user.
321
     * decoding: unused
322
     */
323
    int qmin;
324
325
    /**
326
     * maximum quantizer
327
     * encoding: set by user.
328
     * decoding: unused
329
     */
330
    int qmax;
331
332
    /**
333
     * maximum quantizer difference etween frames
334
     * encoding: set by user.
335
     * decoding: unused
336
     */
337
    int max_qdiff;
338
339
    /**
340
     * maximum number of b frames between non b frames
341
     * note: the output will be delayed by max_b_frames+1 relative to the input
342
     * encoding: set by user.
343
     * decoding: unused
344
     */
345
    int max_b_frames;
346
347
    /**
348
     * qscale factor between ip and b frames
349
     * encoding: set by user.
350
     * decoding: unused
351
     */
352
    float b_quant_factor;
353
    
354
    /** obsolete FIXME remove */
355
    int rc_strategy;
356 8b4c7dbc Michael Niedermayer
    int b_frame_strategy;
357 9dbcbd92 Michael Niedermayer
358 b71901e6 Michael Niedermayer
    /**
359
     * encoding: unused
360 347ae22e Michael Niedermayer
     * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
361 b71901e6 Michael Niedermayer
     */
362
    int hurry_up;
363 2417652e Michael Niedermayer
    
364 de6d9b64 Fabrice Bellard
    struct AVCodec *codec;
365 b71901e6 Michael Niedermayer
    
366 de6d9b64 Fabrice Bellard
    void *priv_data;
367
368 644d98a4 Juanjo
    /* The following data is for RTP friendly coding */
369 1f6b6e50 Michael Niedermayer
    /* By now only H.263/H.263+/MPEG4 coder honours this   */
370 644d98a4 Juanjo
    int rtp_mode;   /* 1 for activate RTP friendly-mode           */
371
                    /* highers numbers represent more error-prone */
372
                    /* enviroments, by now just "1" exist         */
373
    
374
    int rtp_payload_size;   /* The size of the RTP payload, the coder will  */
375
                            /* do it's best to deliver a chunk with size    */
376
                            /* below rtp_payload_size, the chunk will start */
377
                            /* with a start code on some codecs like H.263  */
378
                            /* This doesn't take account of any particular  */
379
                            /* headers inside the transmited RTP payload    */
380 81401c1f Juanjo
381
    
382
    /* The RTP callcack: This function is called  */
383
    /* every time the encoder as a packet to send */
384
    /* Depends on the encoder if the data starts  */
385
    /* with a Start Code (it should) H.263 does   */
386
    void (*rtp_callback)(void *data, int size, int packet_number); 
387
388 b71901e6 Michael Niedermayer
    /**
389
     * if you set get_psnr to 1 then after encoding you will have the 
390
     * PSNR on psnr_y/cb/cr
391
     * encoding: set by user (1-> on, 0-> off)
392
     * decoding: unused
393
     */
394 43f1708f Juanjo
    int get_psnr;
395
    float psnr_y;
396
    float psnr_cb;
397
    float psnr_cr;
398 098eefe1 Michael Niedermayer
    
399
    /* statistics, used for 2-pass encoding */
400
    int mv_bits;
401
    int header_bits;
402
    int i_tex_bits;
403
    int p_tex_bits;
404
    int i_count;
405
    int p_count;
406
    int skip_count;
407 b71901e6 Michael Niedermayer
    int misc_bits;
408
    
409
    /**
410
     * number of bits used for the previously encoded frame
411
     * encoding: set by lavc
412 8350df97 Zdenek Kabelac
     * decoding: - for audio - bits_per_sample
413 b71901e6 Michael Niedermayer
     */
414 098eefe1 Michael Niedermayer
    int frame_bits;
415 644d98a4 Juanjo
                 
416 b71901e6 Michael Niedermayer
    /**
417
     * private data of the user, can be used to carry app specific stuff
418
     * encoding: set by user
419
     * decoding: set by user
420
     */
421
    void *opaque;
422
423 de6d9b64 Fabrice Bellard
    char codec_name[32];
424 4a663d80 Philip Gladstone
    enum CodecType codec_type; /* see CODEC_TYPE_xxx */
425
    enum CodecID codec_id; /* see CODEC_ID_xxx */
426 de6d9b64 Fabrice Bellard
    unsigned int codec_tag;  /* codec tag, only used if unknown codec */
427 92ba5ffb Michael Niedermayer
    
428 b71901e6 Michael Niedermayer
    /**
429 4d2858de Michael Niedermayer
     * workaround bugs in encoders which sometimes cannot be detected automatically
430 b71901e6 Michael Niedermayer
     * encoding: unused
431
     * decoding: set by user
432
     */
433
    int workaround_bugs;
434 4d2858de Michael Niedermayer
#define FF_BUG_AUTODETECT       1  //autodetection
435
#define FF_BUG_OLD_MSMPEG4      2
436
#define FF_BUG_XVID_ILACE       4
437
#define FF_BUG_UMP4             8
438
#define FF_BUG_NO_PADDING       16
439
#define FF_BUG_AC_VLC           32
440 03e93d35 Michael Niedermayer
#define FF_BUG_QPEL_CHROMA      64
441 4d2858de Michael Niedermayer
//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
442
        
443 b71901e6 Michael Niedermayer
    /**
444
     * encoding: set by user
445
     * decoding: unused
446
     */
447 1f6b6e50 Michael Niedermayer
    int luma_elim_threshold;
448 b71901e6 Michael Niedermayer
    
449
    /**
450
     * encoding: set by user
451
     * decoding: unused
452
     */
453 1f6b6e50 Michael Niedermayer
    int chroma_elim_threshold;
454 b71901e6 Michael Niedermayer
    
455
    /**
456
     * strictly follow the std (MPEG4, ...)
457
     * encoding: set by user
458
     * decoding: unused
459
     */
460
    int strict_std_compliance;
461
    
462
    /**
463
     * qscale offset between ip and b frames
464 b3a391e8 Michael Niedermayer
     * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
465
     * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
466 b71901e6 Michael Niedermayer
     * encoding: set by user.
467
     * decoding: unused
468
     */
469
    float b_quant_offset;
470
    
471
    /**
472
     * error resilience {-1,0,1} higher values will detect more errors but may missdetect
473
     * some more or less valid parts as errors
474
     * encoding: unused
475
     * decoding: set by user
476
     */
477 1f6b6e50 Michael Niedermayer
    int error_resilience;
478 ae72cda6 Nick Kurshev
    
479 6b72ac63 Michael Niedermayer
    /**
480
     * obsolete, just here to keep ABI compatible (should be removed perhaps, dunno)
481
     */
482
    int *quant_store;
483 93a21abd Michael Niedermayer
484 6b72ac63 Michael Niedermayer
    /**
485
     * QP store stride
486
     * encoding: unused
487
     * decoding: set by lavc
488
     */
489
    int qstride;
490 b71901e6 Michael Niedermayer
    
491
    /**
492
     * buffer, where the next picture should be decoded into
493
     * encoding: unused
494
     * decoding: set by user in get_buffer_callback to a buffer into which the next part
495
     *           of the bitstream will be decoded, and set by lavc at end of frame to the
496
     *           next frame which needs to be displayed
497
     */
498 93a21abd Michael Niedermayer
    uint8_t *dr_buffer[3];
499 b71901e6 Michael Niedermayer
    
500
    /**
501
     * stride of the luminance part of the dr buffer
502
     * encoding: unused
503
     * decoding: set by user
504
     */
505 93a21abd Michael Niedermayer
    int dr_stride;
506 b71901e6 Michael Niedermayer
    
507
    /**
508
     * same behavior as dr_buffer, just for some private data of the user
509
     * encoding: unused
510
     * decoding: set by user in get_buffer_callback, and set by lavc at end of frame
511
     */
512 93a21abd Michael Niedermayer
    void *dr_opaque_frame;
513 b71901e6 Michael Niedermayer
    
514
    /**
515
     * called at the beginning of each frame to get a buffer for it
516
     * encoding: unused
517
     * decoding: set by user
518
     */
519 d6db1c9c Michael Niedermayer
    int (*get_buffer_callback)(struct AVCodecContext *c, int width, int height, int pict_type);
520 0fd90455 Michael Niedermayer
521 b71901e6 Michael Niedermayer
    /**
522
     * is 1 if the decoded stream contains b frames, 0 otherwise
523
     * encoding: unused
524
     * decoding: set by lavc
525
     */
526
    int has_b_frames;
527
528
    /**
529
     * stride of the chrominance part of the dr buffer
530
     * encoding: unused
531
     * decoding: set by user
532
     */
533 0fd90455 Michael Niedermayer
    int dr_uvstride;
534 b71901e6 Michael Niedermayer
    
535
    /**
536
     * number of dr buffers
537
     * encoding: unused
538
     * decoding: set by user
539
     */
540 0fd90455 Michael Niedermayer
    int dr_ip_buffer_count;
541 b71901e6 Michael Niedermayer
    
542 bc8d1857 Fabrice Bellard
    int block_align; /* used by some WAV based audio codecs */
543 ce980a95 Michael Niedermayer
    
544 917e06c8 Fabrice Bellard
    int parse_only; /* decoding only: if true, only parsing is done
545
                       (function avcodec_parse_frame()). The frame
546
                       data is returned. Only MPEG codecs support this now. */
547 ce980a95 Michael Niedermayer
    
548 b71901e6 Michael Niedermayer
    /**
549
     * 0-> h263 quant 1-> mpeg quant
550
     * encoding: set by user.
551
     * decoding: unused
552
     */
553
    int mpeg_quant;
554 ce980a95 Michael Niedermayer
    
555 b71901e6 Michael Niedermayer
    /**
556
     * pass1 encoding statistics output buffer
557
     * encoding: set by lavc
558
     * decoding: unused
559
     */
560 ce980a95 Michael Niedermayer
    char *stats_out; /* encoding statistics output buffer */
561 b71901e6 Michael Niedermayer
    
562
    /**
563
     * pass2 encoding statistics input buffer.
564
     * concatenated stuff from stats_out of pass1 should be placed here
565
     * encoding: allocated/set/freed by user
566
     * decoding: unused
567
     */
568
    char *stats_in;
569
    
570
    /**
571
     * ratecontrol qmin qmax limiting method
572
     * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
573
     * encoding: set by user.
574
     * decoding: unused
575
     */
576 ce980a95 Michael Niedermayer
    float rc_qsquish;
577 b71901e6 Michael Niedermayer
578 ce980a95 Michael Niedermayer
    float rc_qmod_amp;
579
    int rc_qmod_freq;
580 b71901e6 Michael Niedermayer
    
581
    /**
582
     * ratecontrol override, see RcOverride
583
     * encoding: allocated/set/freed by user.
584
     * decoding: unused
585
     */
586 ce980a95 Michael Niedermayer
    RcOverride *rc_override;
587
    int rc_override_count;
588 b71901e6 Michael Niedermayer
    
589
    /**
590
     * rate control equation
591
     * encoding: set by user
592
     * decoding: unused
593
     */
594 ce980a95 Michael Niedermayer
    char *rc_eq;
595 b71901e6 Michael Niedermayer
    
596
    /**
597
     * maximum bitrate
598
     * encoding: set by user.
599
     * decoding: unused
600
     */
601 ce980a95 Michael Niedermayer
    int rc_max_rate;
602 b71901e6 Michael Niedermayer
    
603
    /**
604
     * minimum bitrate
605
     * encoding: set by user.
606
     * decoding: unused
607
     */
608 ce980a95 Michael Niedermayer
    int rc_min_rate;
609 b71901e6 Michael Niedermayer
    
610
    /**
611
     * decoder bitstream buffer size
612
     * encoding: set by user.
613
     * decoding: unused
614
     */
615 ce980a95 Michael Niedermayer
    int rc_buffer_size;
616
    float rc_buffer_aggressivity;
617 b71901e6 Michael Niedermayer
618
    /**
619
     * qscale factor between p and i frames
620
     * encoding: set by user.
621
     * decoding: unused
622
     */
623
    float i_quant_factor;
624
    
625
    /**
626
     * qscale offset between p and i frames
627 b3a391e8 Michael Niedermayer
     * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
628
     * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
629 b71901e6 Michael Niedermayer
     * encoding: set by user.
630
     * decoding: unused
631
     */
632
    float i_quant_offset;
633
    
634
    /**
635
     * initial complexity for pass1 ratecontrol
636
     * encoding: set by user.
637
     * decoding: unused
638
     */
639 ce980a95 Michael Niedermayer
    float rc_initial_cplx;
640 917e06c8 Fabrice Bellard
641 b71901e6 Michael Niedermayer
    /**
642
     * custom aspect ratio, used if aspect_info==FF_ASPECT_EXTENDED
643
     * encoding: set by user.
644
     * decoding: set by lavc.
645
     */
646 e769f053 Alex Beregszaszi
    int aspected_width;
647
    int aspected_height;
648
649 b71901e6 Michael Niedermayer
    /**
650
     * dct algorithm, see FF_DCT_* below
651
     * encoding: set by user
652
     * decoding: unused
653
     */
654 28db7fce Michael Niedermayer
    int dct_algo;
655 c7e07931 Martin Olschewski
#define FF_DCT_AUTO    0
656 28db7fce Michael Niedermayer
#define FF_DCT_FASTINT 1
657 c7e07931 Martin Olschewski
#define FF_DCT_INT     2
658
#define FF_DCT_MMX     3
659
#define FF_DCT_MLIB    4
660 05c4072b Michael Niedermayer
#define FF_DCT_ALTIVEC 5
661 28db7fce Michael Niedermayer
662 b71901e6 Michael Niedermayer
    /**
663
     * presentation timestamp in micro seconds (time when frame should be shown to user)
664
     * if 0 then the frame_rate will be used as reference
665
     * encoding: set by user
666
     * decoding; set by lavc
667
     */
668
    long long int pts;
669 c5d309f2 Michael Niedermayer
    
670
    /**
671
     * luminance masking (0-> disabled)
672
     * encoding: set by user
673
     * decoding: unused
674
     */
675
    float lumi_masking;
676
    
677
    /**
678
     * temporary complexity masking (0-> disabled)
679
     * encoding: set by user
680
     * decoding: unused
681
     */
682
    float temporal_cplx_masking;
683
    
684
    /**
685
     * spatial complexity masking (0-> disabled)
686
     * encoding: set by user
687
     * decoding: unused
688
     */
689
    float spatial_cplx_masking;
690
    
691
    /**
692
     * p block masking (0-> disabled)
693
     * encoding: set by user
694
     * decoding: unused
695
     */
696
    float p_masking;
697 15415af4 Michael Niedermayer
698 5e746b99 Michael Niedermayer
    /**
699
     * darkness masking (0-> disabled)
700
     * encoding: set by user
701
     * decoding: unused
702
     */
703
    float dark_masking;
704 0c2dd16e Michael Niedermayer
    
705
    /**
706
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A')
707
     * this is used to workaround some encoder bugs
708
     * encoding: unused
709 202ef8b8 Michael Niedermayer
     * decoding: set by user, will be converted to upper case by lavc during init
710 0c2dd16e Michael Niedermayer
     */
711
    int fourcc;
712 5e746b99 Michael Niedermayer
713 2ad1516a Michael Niedermayer
    /**
714
     * idct algorithm, see FF_IDCT_* below
715
     * encoding: set by user
716
     * decoding: set by user
717
     */
718
    int idct_algo;
719
#define FF_IDCT_AUTO         0
720
#define FF_IDCT_INT          1
721
#define FF_IDCT_SIMPLE       2
722
#define FF_IDCT_SIMPLEMMX    3
723
#define FF_IDCT_LIBMPEG2MMX  4
724
#define FF_IDCT_PS2          5
725
#define FF_IDCT_MLIB         6
726
#define FF_IDCT_ARM          7
727 05c4072b Michael Niedermayer
#define FF_IDCT_ALTIVEC      8
728 2ad1516a Michael Niedermayer
729 144f0625 Michael Niedermayer
    /**
730
     * slice count
731
     * encoding: set by lavc
732
     * decoding: set by user (or 0)
733
     */
734
    int slice_count;
735
    /**
736
     * slice offsets in the frame in bytes
737
     * encoding: set/allocated by lavc
738
     * decoding: set/allocated by user (or NULL)
739
     */
740
    int *slice_offset;
741
742 4d2858de Michael Niedermayer
    /**
743
     * error concealment flags
744
     * encoding: unused
745
     * decoding: set by user
746
     */
747
    int error_concealment;
748
#define FF_EC_GUESS_MVS   1
749
#define FF_EC_DEBLOCK     2
750
751 6b72ac63 Michael Niedermayer
    /**
752
     * QP table of the currently decoded frame
753
     * encoding; unused
754
     * decoding: set by lavc
755
     */
756 8350df97 Zdenek Kabelac
    int8_t *current_qscale_table;
757 6b72ac63 Michael Niedermayer
    /**
758
     * QP table of the currently displayed frame
759
     * encoding; unused
760
     * decoding: set by lavc
761
     */
762 8350df97 Zdenek Kabelac
    int8_t *display_qscale_table;
763 f01a1894 Michael Niedermayer
    /**
764
     * force specific pict_type.
765
     * encoding; set by user (I/P/B_TYPE)
766
     * decoding: unused
767
     */
768
    int force_type;
769 8350df97 Zdenek Kabelac
    /**
770
     * dsp_mask could be used to disable unwanted
771
     * CPU features (i.e. MMX, SSE. ...)
772
     */
773
     unsigned dsp_mask;
774 11f18faf Michael Niedermayer
775
    /**
776
     * bits per sample/pixel from the demuxer (needed for huffyuv)
777
     * encoding; set by lavc
778
     * decoding: set by user
779
     */
780
     int bits_per_sample;
781
    
782
    /**
783
     * prediction method (needed for huffyuv)
784
     * encoding; set by user
785
     * decoding: unused
786
     */
787
     int prediction_method;
788
#define FF_PRED_LEFT   0
789
#define FF_PRED_PLANE  1
790
#define FF_PRED_MEDIAN 2
791 de6d9b64 Fabrice Bellard
} AVCodecContext;
792
793
typedef struct AVCodec {
794 18f77016 Zdenek Kabelac
    const char *name;
795 de6d9b64 Fabrice Bellard
    int type;
796
    int id;
797
    int priv_data_size;
798
    int (*init)(AVCodecContext *);
799
    int (*encode)(AVCodecContext *, UINT8 *buf, int buf_size, void *data);
800
    int (*close)(AVCodecContext *);
801 0fd90455 Michael Niedermayer
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
802 de6d9b64 Fabrice Bellard
                  UINT8 *buf, int buf_size);
803 bf89e6b1 Fabrice Bellard
    int capabilities;
804 de6d9b64 Fabrice Bellard
    struct AVCodec *next;
805
} AVCodec;
806
807 d7425f59 Michael Niedermayer
/** 
808
 * four components are given, that's all.
809
 * the last component is alpha
810
 */
811 de6d9b64 Fabrice Bellard
typedef struct AVPicture {
812 d7425f59 Michael Niedermayer
    UINT8 *data[4];
813
    int linesize[4];
814 de6d9b64 Fabrice Bellard
} AVPicture;
815
816
extern AVCodec ac3_encoder;
817
extern AVCodec mp2_encoder;
818 9d36bdc9 Juanjo
extern AVCodec mp3lame_encoder;
819 81e0d0b4 Mark Hills
extern AVCodec oggvorbis_encoder;
820 de6d9b64 Fabrice Bellard
extern AVCodec mpeg1video_encoder;
821
extern AVCodec h263_encoder;
822
extern AVCodec h263p_encoder;
823
extern AVCodec rv10_encoder;
824
extern AVCodec mjpeg_encoder;
825 bf89e6b1 Fabrice Bellard
extern AVCodec mpeg4_encoder;
826 84afee34 Michael Niedermayer
extern AVCodec msmpeg4v1_encoder;
827
extern AVCodec msmpeg4v2_encoder;
828
extern AVCodec msmpeg4v3_encoder;
829 0151a6f5 Michael Niedermayer
extern AVCodec wmv1_encoder;
830
extern AVCodec wmv2_encoder;
831 11f18faf Michael Niedermayer
extern AVCodec huffyuv_encoder;
832 de6d9b64 Fabrice Bellard
833
extern AVCodec h263_decoder;
834 bf89e6b1 Fabrice Bellard
extern AVCodec mpeg4_decoder;
835 84afee34 Michael Niedermayer
extern AVCodec msmpeg4v1_decoder;
836
extern AVCodec msmpeg4v2_decoder;
837
extern AVCodec msmpeg4v3_decoder;
838 e1a9dbff Michael Niedermayer
extern AVCodec wmv1_decoder;
839 0151a6f5 Michael Niedermayer
extern AVCodec wmv2_decoder;
840 de6d9b64 Fabrice Bellard
extern AVCodec mpeg_decoder;
841
extern AVCodec h263i_decoder;
842
extern AVCodec rv10_decoder;
843 be8ffec9 Nick Kurshev
extern AVCodec svq1_decoder;
844 020fcc94 Fabrice Bellard
extern AVCodec dvvideo_decoder;
845
extern AVCodec dvaudio_decoder;
846 bc8d1857 Fabrice Bellard
extern AVCodec wmav1_decoder;
847
extern AVCodec wmav2_decoder;
848 4e66ab3b Fabrice Bellard
extern AVCodec mjpeg_decoder;
849 4b1f4f23 Juanjo
extern AVCodec mp2_decoder;
850 a96b68b7 Fabrice Bellard
extern AVCodec mp3_decoder;
851 3f95e843 François Revol
extern AVCodec mace3_decoder;
852
extern AVCodec mace6_decoder;
853 11f18faf Michael Niedermayer
extern AVCodec huffyuv_decoder;
854 de6d9b64 Fabrice Bellard
855 a96b68b7 Fabrice Bellard
/* pcm codecs */
856
#define PCM_CODEC(id, name) \
857
extern AVCodec name ## _decoder; \
858 f11d3f23 Michael Niedermayer
extern AVCodec name ## _encoder
859 a96b68b7 Fabrice Bellard
860
PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
861
PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
862
PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
863
PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
864
PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
865
PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
866
PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
867
PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
868
869 0147f198 François Revol
/* adpcm codecs */
870
871
PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
872
PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
873
PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
874
875 a96b68b7 Fabrice Bellard
#undef PCM_CODEC
876
877
/* dummy raw video codec */
878 de6d9b64 Fabrice Bellard
extern AVCodec rawvideo_codec;
879
880
/* the following codecs use external GPL libs */
881
extern AVCodec ac3_decoder;
882
883
/* resample.c */
884
885
struct ReSampleContext;
886
887
typedef struct ReSampleContext ReSampleContext;
888
889
ReSampleContext *audio_resample_init(int output_channels, int input_channels, 
890
                                     int output_rate, int input_rate);
891
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
892
void audio_resample_close(ReSampleContext *s);
893
894
/* YUV420 format is assumed ! */
895
896
struct ImgReSampleContext;
897
898
typedef struct ImgReSampleContext ImgReSampleContext;
899
900
ImgReSampleContext *img_resample_init(int output_width, int output_height,
901
                                      int input_width, int input_height);
902 ab6d194a Michael Niedermayer
903
ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
904
                                      int iwidth, int iheight,
905
                                      int topBand, int bottomBand,
906
                                      int leftBand, int rightBand);
907
908 de6d9b64 Fabrice Bellard
void img_resample(ImgReSampleContext *s, 
909
                  AVPicture *output, AVPicture *input);
910
911
void img_resample_close(ImgReSampleContext *s);
912
913 219b06c6 Fabrice Bellard
void avpicture_fill(AVPicture *picture, UINT8 *ptr,
914
                    int pix_fmt, int width, int height);
915
int avpicture_get_size(int pix_fmt, int width, int height);
916
917
/* convert among pixel formats */
918
int img_convert(AVPicture *dst, int dst_pix_fmt,
919
                AVPicture *src, int pix_fmt, 
920
                int width, int height);
921
922
/* deinterlace a picture */
923
int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
924 de6d9b64 Fabrice Bellard
                          int pix_fmt, int width, int height);
925
926
/* external high level API */
927
928
extern AVCodec *first_avcodec;
929
930 156e5023 Nick Kurshev
/* returns LIBAVCODEC_VERSION_INT constant */
931 51a49663 Fabrice Bellard
unsigned avcodec_version(void);
932 8bceb6af Nick Kurshev
/* returns LIBAVCODEC_BUILD constant */
933 51a49663 Fabrice Bellard
unsigned avcodec_build(void);
934 de6d9b64 Fabrice Bellard
void avcodec_init(void);
935
936 51a49663 Fabrice Bellard
void avcodec_set_bit_exact(void);
937
938 de6d9b64 Fabrice Bellard
void register_avcodec(AVCodec *format);
939
AVCodec *avcodec_find_encoder(enum CodecID id);
940 98f3b098 Arpi
AVCodec *avcodec_find_encoder_by_name(const char *name);
941 de6d9b64 Fabrice Bellard
AVCodec *avcodec_find_decoder(enum CodecID id);
942
AVCodec *avcodec_find_decoder_by_name(const char *name);
943
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
944
945 7ffbb60e Falk Hüffner
AVCodecContext *avcodec_alloc_context(void);
946 de6d9b64 Fabrice Bellard
int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
947
int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples, 
948
                         int *frame_size_ptr,
949
                         UINT8 *buf, int buf_size);
950
int avcodec_decode_video(AVCodecContext *avctx, AVPicture *picture, 
951
                         int *got_picture_ptr,
952
                         UINT8 *buf, int buf_size);
953 917e06c8 Fabrice Bellard
int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata, 
954
                        int *data_size_ptr,
955
                        UINT8 *buf, int buf_size);
956 de6d9b64 Fabrice Bellard
int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size, 
957
                         const short *samples);
958
int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, 
959
                         const AVPicture *pict);
960
961
int avcodec_close(AVCodecContext *avctx);
962
963
void avcodec_register_all(void);
964 a96b68b7 Fabrice Bellard
965 1c2a8c7f Michael Niedermayer
void avcodec_flush_buffers(AVCodecContext *avctx);
966
967 e8f14793 Zdenek Kabelac
/**
968
 * Interface for 0.5.0 version
969
 *
970
 * do not even think about it's usage for this moment
971
 */
972
973
typedef struct {
974
    // compressed size used from given memory buffer
975
    int size;
976
    /// I/P/B frame type
977
    int frame_type;
978
} avc_enc_result_t;
979
980
/**
981
 * Commands
982
 * order can't be changed - once it was defined
983
 */
984
typedef enum {
985
    // general commands
986
    AVC_OPEN_BY_NAME = 0xACA000,
987
    AVC_OPEN_BY_CODEC_ID,
988
    AVC_OPEN_BY_FOURCC,
989
    AVC_CLOSE,
990
991
    AVC_FLUSH,
992
    // pin - struct { uint8_t* src, uint_t src_size }
993
    // pout - struct { AVPicture* img, consumed_bytes,
994
    AVC_DECODE,
995
    // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size }
996
    // pout - uint_t used_from_dest_size
997
    AVC_ENCODE, 
998
999
    // query/get video commands
1000
    AVC_GET_VERSION = 0xACB000,
1001
    AVC_GET_WIDTH,
1002
    AVC_GET_HEIGHT,
1003
    AVC_GET_DELAY,
1004
    AVC_GET_QUANT_TABLE,
1005
    // ...
1006
1007
    // query/get audio commands
1008
    AVC_GET_FRAME_SIZE = 0xABC000,
1009
1010
    // maybe define some simple structure which
1011
    // might be passed to the user - but they can't
1012
    // contain any codec specific parts and these
1013
    // calls are usualy necessary only few times
1014
1015
    // set video commands
1016
    AVC_SET_WIDTH = 0xACD000,
1017
    AVC_SET_HEIGHT,
1018
1019
    // set video encoding commands
1020
    AVC_SET_FRAME_RATE = 0xACD800,
1021
    AVC_SET_QUALITY,
1022
    AVC_SET_HURRY_UP,
1023
1024
    // set audio commands
1025
    AVC_SET_SAMPLE_RATE = 0xACE000,
1026
    AVC_SET_CHANNELS,
1027
1028
} avc_cmd_t;
1029
1030
/**
1031
 * \param handle  allocated private structure by libavcodec
1032
 *                for initialization pass NULL - will be returned pout
1033
 *                user is supposed to know nothing about its structure
1034
 * \param cmd     type of operation to be performed
1035
 * \param pint    input parameter
1036
 * \param pout    output parameter
1037
 *
1038
 * \returns  command status - eventually for query command it might return
1039
 * integer resulting value
1040
 */
1041
int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout);
1042
1043 544eb99c Fabrice Bellard
/* memory */
1044 18f77016 Zdenek Kabelac
void *av_malloc(unsigned int size);
1045
void *av_mallocz(unsigned int size);
1046 544eb99c Fabrice Bellard
void av_free(void *ptr);
1047
void __av_freep(void **ptr);
1048
#define av_freep(p) __av_freep((void **)(p))
1049
1050 a96b68b7 Fabrice Bellard
#endif /* AVCODEC_H */