Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ 5917d17c

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