Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ e9feea59

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