17 #define LIBAVCODEC_VERSION_INT 0x000406
18 #define LIBAVCODEC_VERSION "0.4.6"
19 #define LIBAVCODEC_BUILD 4658
20 #define LIBAVCODEC_BUILD_STR "4658"
52 /* various pcm "codecs" */
62 /* various adpcm codecs */
63 CODEC_ID_ADPCM_IMA_QT,
64 CODEC_ID_ADPCM_IMA_WAV,
69 CODEC_TYPE_UNKNOWN = -1,
77 PIX_FMT_RGB24, /* 3 bytes, R is first */
78 PIX_FMT_BGR24, /* 3 bytes, B is first */
81 PIX_FMT_RGBA32, /* always stored in cpu endianness */
84 PIX_FMT_RGB565, /* always stored in cpu endianness */
85 PIX_FMT_RGB555, /* always stored in cpu endianness, most significant bit to 1 */
87 PIX_FMT_MONOWHITE, /* 0 is white */
88 PIX_FMT_MONOBLACK, /* 0 is black */
89 PIX_FMT_PAL8, /* 8 bit with RGBA palette */
93 /* currently unused, may be used if 24/32 bits samples ever supported */
95 SAMPLE_FMT_S16 = 0, /* signed 16 bits */
99 #define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
102 * Required number of zero bytes at the end of the input bitstream for decoding.
103 * to avoid overreading (and possibly segfaulting)
105 #define FF_INPUT_BUFFER_PADDING_SIZE 8
107 /* motion estimation type, EPZS by default */
117 typedef struct RcOverride{
120 int qscale; // if this is 0 then quality_factor will be used instead
121 float quality_factor;
124 /* only for ME compatiblity with old apps */
125 extern int motion_estimation_method;
127 /* ME algos sorted by quality */
128 static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG,
129 ME_X1, ME_EPZS, ME_FULL };
132 #define FF_MAX_B_FRAMES 8
135 these flags can be passed in AVCodecContext.flags before initing
136 Note: note not everything is supported yet
139 #define CODEC_FLAG_HQ 0x0001 /* brute force MB-type decission mode (slow) */
140 #define CODEC_FLAG_QSCALE 0x0002 /* use fixed qscale */
141 #define CODEC_FLAG_4MV 0x0004 /* 4 MV per MB allowed */
142 #define CODEC_FLAG_QPEL 0x0010 /* use qpel MC */
143 #define CODEC_FLAG_GMC 0x0020 /* use GMC */
144 #define CODEC_FLAG_PART 0x0080 /* use data partitioning */
145 /* parent program gurantees that the input for b-frame containing streams is not written to
146 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
147 #define CODEC_FLAG_INPUT_PRESERVED 0x0100
148 #define CODEC_FLAG_PASS1 0x0200 /* use internal 2pass ratecontrol in first pass mode */
149 #define CODEC_FLAG_PASS2 0x0400 /* use internal 2pass ratecontrol in second pass mode */
150 #define CODEC_FLAG_EXTERN_HUFF 0x1000 /* use external huffman table (for mjpeg) */
151 #define CODEC_FLAG_GRAY 0x2000 /* only decode/encode grayscale */
152 #define CODEC_FLAG_EMU_EDGE 0x4000/* dont draw edges */
153 #define CODEC_FLAG_PSNR 0x8000 /* error[?] variables will be set during encoding */
154 #define CODEC_FLAG_TRUNCATED 0x00010000 /* input bitstream might be truncated at a random location instead
155 of only at frame boundaries */
156 #define CODEC_FLAG_NORMALIZE_AQP 0x00020000 /* normalize adaptive quantization */
157 #define CODEC_FLAG_INTERLACED_DCT 0x00040000 /* use interlaced dct */
158 #define CODEC_FLAG_LOW_DELAY 0x00080000 /* force low delay / will fail on b frames */
159 #define CODEC_FLAG_ALT_SCAN 0x00100000 /* use alternate scan */
160 #define CODEC_FLAG_TRELLIS_QUANT 0x00200000 /* use trellis quantization */
161 #define CODEC_FLAG_GLOBAL_HEADER 0x00400000 /* place global headers in extradata instead of every keyframe */
163 /* codec capabilities */
165 #define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 /* decoder can use draw_horiz_band callback */
166 #define CODEC_CAP_DR1 0x0002 /* direct rendering method 1 */
167 /* if 'parse_only' field is true, then avcodec_parse_frame() can be
169 #define CODEC_CAP_PARSE_ONLY 0x0004
170 #define CODEC_CAP_TRUNCATED 0x0008
172 #define FRAME_RATE_BASE 10000
174 #define FF_COMMON_FRAME \
178 * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
179 * this isnt used by lavc unless the default get/release_buffer() is used\
185 * 1 -> keyframe, 0-> not\
186 * encoding: set by lavc\
187 * decoding: set by lavc\
192 * picture type of the frame, see ?_TYPE below\
193 * encoding: set by lavc for coded_picture (and set by user for input)\
194 * decoding: set by lavc\
199 * presentation timestamp in micro seconds (time when frame should be shown to user)\
200 * if 0 then the frame_rate will be used as reference\
201 * encoding: MUST be set by user\
202 * decoding: set by lavc\
207 * picture number in bitstream order.\
209 * decoding: set by lavc\
211 int coded_picture_number;\
214 * decoding: set by lavc\
215 * picture number in display order.\
217 int display_picture_number;\
220 * quality (between 1 (good) and 31 (bad)) \
221 * encoding: set by lavc for coded_picture (and set by user for input)\
222 * decoding: set by lavc\
227 * buffer age (1->was last buffer and dint change, 2->..., ...).\
228 * set to something large if the buffer has not been used yet \
230 * decoding: MUST be set by get_buffer()\
235 * is this picture used as reference\
237 * decoding: set by lavc (before get_buffer() call))\
244 * decoding: set by lavc\
246 int8_t *qscale_table;\
250 * decoding: set by lavc\
255 * mbskip_table[mb]>=1 if MB didnt change\
256 * stride= mb_width = (width+15)>>4\
258 * decoding: set by lavc\
260 uint8_t *mbskip_table;\
263 * for some private data of the user\
265 * decoding: set by user\
271 * encoding: set by lavc if flags&CODEC_FLAG_PSNR\
277 * type of the buffer (to keep track of who has to dealloc data[*])\
278 * encoding: set by the one who allocs it\
279 * decoding: set by the one who allocs it\
280 * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
285 * when decoding, this signal how much the picture must be delayed.\
286 * extra_delay = repeat_pict / (2*fps)\
288 * decoding: set by lavc\
293 #define FF_BUFFER_TYPE_INTERNAL 1
294 #define FF_BUFFER_TYPE_USER 2 // Direct rendering buffers
295 #define FF_BUFFER_TYPE_SHARED 4 // input frame for encoding(wont be dealloced)
298 #define FF_I_TYPE 1 // Intra
299 #define FF_P_TYPE 2 // Predicted
300 #define FF_B_TYPE 3 // Bi-dir predicted
301 #define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
303 typedef struct AVFrame {
307 typedef struct AVCodecContext {
309 * the average bitrate
310 * encoding: set by user. unused for constant quantizer encoding
311 * decoding: set by lavc. 0 or some bitrate if this info is available in the stream
316 * number of bits the bitstream is allowed to diverge from the reference
317 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
318 * encoding: set by user. unused for constant quantizer encoding
321 int bit_rate_tolerance;
325 * encoding: set by user.
326 * decoding: set by user.
331 * some codecs needs additionnal format info. It is stored here
332 * encoding: set by user.
333 * decoding: set by lavc. (FIXME is this ok?)
338 * motion estimation algorithm used for video coding
339 * encoding: MUST be set by user.
345 * some codecs need / can use extra-data like huffman tables
346 * mjpeg: huffman tables
347 * rv10: additional flags
348 * mpeg4: global headers (they can be in the bitstream or here)
349 * encoding: set/allocated/freed by lavc.
350 * decoding: set/allocated/freed by user.
357 * frames per sec multiplied by FRAME_RATE_BASE
358 * for variable fps this is the precission, so if the timestamps
359 * can be specified in msec precssion then this is 1000*FRAME_RATE_BASE
360 * encoding: MUST be set by user
361 * decoding: set by lavc. 0 or the frame_rate if available
366 * encoding: MUST be set by user.
367 * decoding: set by user, some codecs might override / change it during playback
371 #define FF_ASPECT_SQUARE 1
372 #define FF_ASPECT_4_3_625 2
373 #define FF_ASPECT_4_3_525 3
374 #define FF_ASPECT_16_9_625 4
375 #define FF_ASPECT_16_9_525 5
376 #define FF_ASPECT_EXTENDED 15
379 * the number of pictures in a group of pitures, or 0 for intra_only
380 * encoding: set by user.
386 * pixel format, see PIX_FMT_xxx
388 * decoding: set by lavc.
390 enum PixelFormat pix_fmt;
393 * if non NULL, 'draw_horiz_band' is called by the libavcodec
394 * decoder to draw an horizontal band. It improve cache usage. Not
395 * all codecs can do that. You must check the codec capabilities
398 * decoding: set by user.
400 void (*draw_horiz_band)(struct AVCodecContext *s,
401 uint8_t **src_ptr, int linesize,
402 int y, int width, int height);
405 int sample_rate; /* samples per sec */
407 int sample_fmt; /* sample format, currenly unused */
409 /* the following data should not be initialized */
410 int frame_size; /* in samples, initialized when calling 'init' */
411 int frame_number; /* audio or video frame number */
412 int real_pict_num; /* returns the real picture number of
413 previous encoded frame */
416 * number of frames the decoded output will be delayed relative to
418 * encoding: set by lavc.
423 /* encoding parameters */
424 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0)*/
425 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */
429 * encoding: set by user.
436 * encoding: set by user.
442 * maximum quantizer difference etween frames
443 * encoding: set by user.
449 * maximum number of b frames between non b frames
450 * note: the output will be delayed by max_b_frames+1 relative to the input
451 * encoding: set by user.
457 * qscale factor between ip and b frames
458 * encoding: set by user.
461 float b_quant_factor;
463 /** obsolete FIXME remove */
465 int b_frame_strategy;
469 * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
473 struct AVCodec *codec;
477 /* The following data is for RTP friendly coding */
478 /* By now only H.263/H.263+/MPEG4 coder honours this */
479 int rtp_mode; /* 1 for activate RTP friendly-mode */
480 /* highers numbers represent more error-prone */
481 /* enviroments, by now just "1" exist */
483 int rtp_payload_size; /* The size of the RTP payload, the coder will */
484 /* do it's best to deliver a chunk with size */
485 /* below rtp_payload_size, the chunk will start */
486 /* with a start code on some codecs like H.263 */
487 /* This doesn't take account of any particular */
488 /* headers inside the transmited RTP payload */
491 /* The RTP callcack: This function is called */
492 /* every time the encoder as a packet to send */
493 /* Depends on the encoder if the data starts */
494 /* with a Start Code (it should) H.263 does */
495 void (*rtp_callback)(void *data, int size, int packet_number);
497 /* statistics, used for 2-pass encoding */
508 * number of bits used for the previously encoded frame
509 * encoding: set by lavc
510 * decoding: - for audio - bits_per_sample
515 * private data of the user, can be used to carry app specific stuff
516 * encoding: set by user
517 * decoding: set by user
522 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
523 enum CodecID codec_id; /* see CODEC_ID_xxx */
524 unsigned int codec_tag; /* codec tag, only used if unknown codec */
527 * workaround bugs in encoders which sometimes cannot be detected automatically
529 * decoding: set by user
532 #define FF_BUG_AUTODETECT 1 //autodetection
533 #define FF_BUG_OLD_MSMPEG4 2
534 #define FF_BUG_XVID_ILACE 4
535 #define FF_BUG_UMP4 8
536 #define FF_BUG_NO_PADDING 16
537 #define FF_BUG_AC_VLC 32
538 #define FF_BUG_QPEL_CHROMA 64
539 #define FF_BUG_STD_QPEL 128
540 #define FF_BUG_QPEL_CHROMA2 256
541 #define FF_BUG_DIRECT_BLOCKSIZE 512
542 //#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
545 * encoding: set by user
548 int luma_elim_threshold;
551 * encoding: set by user
554 int chroma_elim_threshold;
557 * strictly follow the std (MPEG4, ...)
558 * encoding: set by user
561 int strict_std_compliance;
564 * qscale offset between ip and b frames
565 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
566 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
567 * encoding: set by user.
570 float b_quant_offset;
573 * error resilience higher values will detect more errors but may missdetect
574 * some more or less valid parts as errors
576 * decoding: set by user
578 int error_resilience;
579 #define FF_ER_CAREFULL 1
580 #define FF_ER_COMPLIANT 2
581 #define FF_ER_AGGRESSIVE 3
582 #define FF_ER_VERY_AGGRESSIVE 4
585 * called at the beginning of each frame to get a buffer for it.
586 * if pic.reference is set then the frame will be read later by lavc
588 * decoding: set by lavc, user can override
590 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
593 * called to release buffers which where allocated with get_buffer.
594 * a released buffer can be reused in get_buffer()
595 * pic.data[*] must be set to NULL
597 * decoding: set by lavc, user can override
599 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
602 * is 1 if the decoded stream contains b frames, 0 otherwise
604 * decoding: set by lavc
608 int block_align; /* used by some WAV based audio codecs */
610 int parse_only; /* decoding only: if true, only parsing is done
611 (function avcodec_parse_frame()). The frame
612 data is returned. Only MPEG codecs support this now. */
615 * 0-> h263 quant 1-> mpeg quant
616 * encoding: set by user.
622 * pass1 encoding statistics output buffer
623 * encoding: set by lavc
626 char *stats_out; /* encoding statistics output buffer */
629 * pass2 encoding statistics input buffer.
630 * concatenated stuff from stats_out of pass1 should be placed here
631 * encoding: allocated/set/freed by user
637 * ratecontrol qmin qmax limiting method
638 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
639 * encoding: set by user.
648 * ratecontrol override, see RcOverride
649 * encoding: allocated/set/freed by user.
652 RcOverride *rc_override;
653 int rc_override_count;
656 * rate control equation
657 * encoding: set by user
664 * encoding: set by user.
671 * encoding: set by user.
677 * decoder bitstream buffer size
678 * encoding: set by user.
682 float rc_buffer_aggressivity;
685 * qscale factor between p and i frames
686 * encoding: set by user.
689 float i_quant_factor;
692 * qscale offset between p and i frames
693 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
694 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
695 * encoding: set by user.
698 float i_quant_offset;
701 * initial complexity for pass1 ratecontrol
702 * encoding: set by user.
705 float rc_initial_cplx;
708 * dct algorithm, see FF_DCT_* below
709 * encoding: set by user
713 #define FF_DCT_AUTO 0
714 #define FF_DCT_FASTINT 1
717 #define FF_DCT_MLIB 4
718 #define FF_DCT_ALTIVEC 5
721 * luminance masking (0-> disabled)
722 * encoding: set by user
728 * temporary complexity masking (0-> disabled)
729 * encoding: set by user
732 float temporal_cplx_masking;
735 * spatial complexity masking (0-> disabled)
736 * encoding: set by user
739 float spatial_cplx_masking;
742 * p block masking (0-> disabled)
743 * encoding: set by user
749 * darkness masking (0-> disabled)
750 * encoding: set by user
756 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A')
757 * this is used to workaround some encoder bugs
759 * decoding: set by user, will be converted to upper case by lavc during init
764 * idct algorithm, see FF_IDCT_* below
765 * encoding: set by user
766 * decoding: set by user
769 #define FF_IDCT_AUTO 0
770 #define FF_IDCT_INT 1
771 #define FF_IDCT_SIMPLE 2
772 #define FF_IDCT_SIMPLEMMX 3
773 #define FF_IDCT_LIBMPEG2MMX 4
774 #define FF_IDCT_PS2 5
775 #define FF_IDCT_MLIB 6
776 #define FF_IDCT_ARM 7
777 #define FF_IDCT_ALTIVEC 8
781 * encoding: set by lavc
782 * decoding: set by user (or 0)
786 * slice offsets in the frame in bytes
787 * encoding: set/allocated by lavc
788 * decoding: set/allocated by user (or NULL)
793 * error concealment flags
795 * decoding: set by user
797 int error_concealment;
798 #define FF_EC_GUESS_MVS 1
799 #define FF_EC_DEBLOCK 2
802 * dsp_mask could be used to disable unwanted
803 * CPU features (i.e. MMX, SSE. ...)
808 * bits per sample/pixel from the demuxer (needed for huffyuv)
809 * encoding: set by lavc
810 * decoding: set by user
815 * prediction method (needed for huffyuv)
816 * encoding: set by user
819 int prediction_method;
820 #define FF_PRED_LEFT 0
821 #define FF_PRED_PLANE 1
822 #define FF_PRED_MEDIAN 2
825 * aspect ratio. (0 if unknown)
826 * encoding: set by user.
827 * decoding: set by lavc.
832 * the picture in the bitstream
833 * encoding: set by lavc
834 * decoding: set by lavc
836 AVFrame *coded_frame;
840 * encoding: set by user.
841 * decoding: set by user.
844 #define FF_DEBUG_PICT_INFO 1
845 #define FF_DEBUG_RC 2
846 #define FF_DEBUG_BITSTREAM 4
847 #define FF_DEBUG_MB_TYPE 8
848 #define FF_DEBUG_QP 16
849 #define FF_DEBUG_MV 32
850 #define FF_DEBUG_VIS_MV 0x00000040
851 #define FF_DEBUG_SKIP 0x00000080
852 #define FF_DEBUG_STARTCODE 0x00000100
853 #define FF_DEBUG_PTS 0x00000200
857 * encoding: set by lavc if flags&CODEC_FLAG_PSNR
863 * minimum MB quantizer
864 * encoding: set by user.
870 * maximum MB quantizer
871 * encoding: set by user.
877 * motion estimation compare function
878 * encoding: set by user.
883 * subpixel motion estimation compare function
884 * encoding: set by user.
889 * macroblock compare function (not supported yet)
890 * encoding: set by user.
896 #define FF_CMP_SATD 2
898 #define FF_CMP_PSNR 4
901 #define FF_CMP_ZERO 7
902 #define FF_CMP_CHROMA 256
905 * ME diamond size & shape
906 * encoding: set by user.
912 * amount of previous MV predictors (2a+1 x 2a+1 square)
913 * encoding: set by user.
916 int last_predictor_count;
919 * pre pass for motion estimation
920 * encoding: set by user.
926 * motion estimation pre pass compare function
927 * encoding: set by user.
933 * ME pre pass diamond size & shape
934 * encoding: set by user.
941 * encoding: set by user.
944 int me_subpel_quality;
947 * callback to negotiate the pixelFormat
948 * @param fmt is the list of formats which are supported by the codec,
949 * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
950 * the first is allways the native one
951 * @return the choosen format
953 * decoding: set by user, if not set then the native format will always be choosen
955 enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt);
958 * DTG active format information (additionnal aspect ratio
959 * information only used in DVB MPEG2 transport streams). 0 if
963 * decoding: set by decoder
965 int dtg_active_format;
966 #define FF_DTG_AFD_SAME 8
967 #define FF_DTG_AFD_4_3 9
968 #define FF_DTG_AFD_16_9 10
969 #define FF_DTG_AFD_14_9 11
970 #define FF_DTG_AFD_4_3_SP_14_9 13
971 #define FF_DTG_AFD_16_9_SP_14_9 14
972 #define FF_DTG_AFD_SP_4_3 15
976 //void avcodec_getopt(AVCodecContext* avctx, const char* str, avc_config_t** config);
978 typedef struct AVOption {
980 const char *name; /* if name is NULL, it indicates a link to next */
981 /** short English text help */
983 /** offset to context structure where the parsed value should be stored */
987 #define FF_OPT_TYPE_BOOL 1 // boolean - true,1,on (or simply presence)
988 #define FF_OPT_TYPE_DOUBLE 2 // double
989 #define FF_OPT_TYPE_INT 3 // integer
990 #define FF_OPT_TYPE_STRING 4 // string (finished with \0)
991 #define FF_OPT_TYPE_MASK 0x1f // mask for types - upper bits are various flags
992 //#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option
993 #define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40)
994 #define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80)
995 /** min value (min == max -> no limits) */
997 /** maximum value for double/int */
999 /** default boo [0,1]l/double/int value */
1002 * default string value (with optional semicolon delimited extra option-list
1003 * i.e. option1;option2;option3
1004 * defval might select other then first argument as default
1007 const struct AVOption *sub; /* used when name is NULL */
1008 /* when it's NULL return to previous level (or finish reading) */
1009 #define FF_OPT_MAX_DEPTH 10
1012 typedef struct AVCodec {
1017 int (*init)(AVCodecContext *);
1018 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
1019 int (*close)(AVCodecContext *);
1020 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
1021 uint8_t *buf, int buf_size);
1023 const AVOption *options;
1024 struct AVCodec *next;
1028 * four components are given, that's all.
1029 * the last component is alpha
1031 typedef struct AVPicture {
1036 extern AVCodec ac3_encoder;
1037 extern AVCodec mp2_encoder;
1038 extern AVCodec mp3lame_encoder;
1039 extern AVCodec oggvorbis_encoder;
1040 extern AVCodec mpeg1video_encoder;
1041 extern AVCodec h263_encoder;
1042 extern AVCodec h263p_encoder;
1043 extern AVCodec rv10_encoder;
1044 extern AVCodec mjpeg_encoder;
1045 extern AVCodec mpeg4_encoder;
1046 extern AVCodec msmpeg4v1_encoder;
1047 extern AVCodec msmpeg4v2_encoder;
1048 extern AVCodec msmpeg4v3_encoder;
1049 extern AVCodec wmv1_encoder;
1050 extern AVCodec wmv2_encoder;
1051 extern AVCodec huffyuv_encoder;
1053 extern AVCodec h263_decoder;
1054 extern AVCodec mpeg4_decoder;
1055 extern AVCodec msmpeg4v1_decoder;
1056 extern AVCodec msmpeg4v2_decoder;
1057 extern AVCodec msmpeg4v3_decoder;
1058 extern AVCodec wmv1_decoder;
1059 extern AVCodec wmv2_decoder;
1060 extern AVCodec mpeg_decoder;
1061 extern AVCodec h263i_decoder;
1062 extern AVCodec rv10_decoder;
1063 extern AVCodec svq1_decoder;
1064 extern AVCodec dvvideo_decoder;
1065 extern AVCodec dvaudio_decoder;
1066 extern AVCodec wmav1_decoder;
1067 extern AVCodec wmav2_decoder;
1068 extern AVCodec mjpeg_decoder;
1069 extern AVCodec mjpegb_decoder;
1070 extern AVCodec mp2_decoder;
1071 extern AVCodec mp3_decoder;
1072 extern AVCodec mace3_decoder;
1073 extern AVCodec mace6_decoder;
1074 extern AVCodec huffyuv_decoder;
1075 extern AVCodec oggvorbis_decoder;
1076 extern AVCodec cyuv_decoder;
1079 #define PCM_CODEC(id, name) \
1080 extern AVCodec name ## _decoder; \
1081 extern AVCodec name ## _encoder
1083 PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
1084 PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
1085 PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
1086 PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
1087 PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
1088 PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
1089 PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
1090 PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
1094 PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
1095 PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
1096 PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
1100 /* dummy raw video codec */
1101 extern AVCodec rawvideo_codec;
1103 /* the following codecs use external GPL libs */
1104 extern AVCodec ac3_decoder;
1108 struct ReSampleContext;
1110 typedef struct ReSampleContext ReSampleContext;
1112 ReSampleContext *audio_resample_init(int output_channels, int input_channels,
1113 int output_rate, int input_rate);
1114 int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
1115 void audio_resample_close(ReSampleContext *s);
1117 /* YUV420 format is assumed ! */
1119 struct ImgReSampleContext;
1121 typedef struct ImgReSampleContext ImgReSampleContext;
1123 ImgReSampleContext *img_resample_init(int output_width, int output_height,
1124 int input_width, int input_height);
1126 ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
1127 int iwidth, int iheight,
1128 int topBand, int bottomBand,
1129 int leftBand, int rightBand);
1131 void img_resample(ImgReSampleContext *s,
1132 AVPicture *output, AVPicture *input);
1134 void img_resample_close(ImgReSampleContext *s);
1136 int avpicture_fill(AVPicture *picture, uint8_t *ptr,
1137 int pix_fmt, int width, int height);
1138 int avpicture_get_size(int pix_fmt, int width, int height);
1139 void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
1140 const char *avcodec_get_pix_fmt_name(int pix_fmt);
1142 /* convert among pixel formats */
1143 int img_convert(AVPicture *dst, int dst_pix_fmt,
1144 AVPicture *src, int pix_fmt,
1145 int width, int height);
1147 /* deinterlace a picture */
1148 int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
1149 int pix_fmt, int width, int height);
1151 /* external high level API */
1153 extern AVCodec *first_avcodec;
1155 /* returns LIBAVCODEC_VERSION_INT constant */
1156 unsigned avcodec_version(void);
1157 /* returns LIBAVCODEC_BUILD constant */
1158 unsigned avcodec_build(void);
1159 void avcodec_init(void);
1161 void avcodec_set_bit_exact(void);
1163 void register_avcodec(AVCodec *format);
1164 AVCodec *avcodec_find_encoder(enum CodecID id);
1165 AVCodec *avcodec_find_encoder_by_name(const char *name);
1166 AVCodec *avcodec_find_decoder(enum CodecID id);
1167 AVCodec *avcodec_find_decoder_by_name(const char *name);
1168 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
1170 void avcodec_get_context_defaults(AVCodecContext *s);
1171 AVCodecContext *avcodec_alloc_context(void);
1172 AVFrame *avcodec_alloc_frame(void);
1174 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
1175 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
1177 int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
1178 int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
1179 int *frame_size_ptr,
1180 uint8_t *buf, int buf_size);
1181 int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
1182 int *got_picture_ptr,
1183 uint8_t *buf, int buf_size);
1184 int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
1186 uint8_t *buf, int buf_size);
1187 int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1188 const short *samples);
1189 int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1190 const AVFrame *pict);
1192 int avcodec_close(AVCodecContext *avctx);
1194 void avcodec_register_all(void);
1196 void avcodec_flush_buffers(AVCodecContext *avctx);
1201 * Interface for 0.5.0 version
1203 * do not even think about it's usage for this moment
1207 // compressed size used from given memory buffer
1209 /// I/P/B frame type
1215 * order can't be changed - once it was defined
1219 AVC_OPEN_BY_NAME = 0xACA000,
1220 AVC_OPEN_BY_CODEC_ID,
1225 // pin - struct { uint8_t* src, uint_t src_size }
1226 // pout - struct { AVPicture* img, consumed_bytes,
1228 // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size }
1229 // pout - uint_t used_from_dest_size
1232 // query/get video commands
1233 AVC_GET_VERSION = 0xACB000,
1237 AVC_GET_QUANT_TABLE,
1240 // query/get audio commands
1241 AVC_GET_FRAME_SIZE = 0xABC000,
1243 // maybe define some simple structure which
1244 // might be passed to the user - but they can't
1245 // contain any codec specific parts and these
1246 // calls are usualy necessary only few times
1248 // set video commands
1249 AVC_SET_WIDTH = 0xACD000,
1252 // set video encoding commands
1253 AVC_SET_FRAME_RATE = 0xACD800,
1257 // set audio commands
1258 AVC_SET_SAMPLE_RATE = 0xACE000,
1264 * \param handle allocated private structure by libavcodec
1265 * for initialization pass NULL - will be returned pout
1266 * user is supposed to know nothing about its structure
1267 * \param cmd type of operation to be performed
1268 * \param pint input parameter
1269 * \param pout output parameter
1271 * \returns command status - eventually for query command it might return
1272 * integer resulting value
1274 int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout);
1277 void *av_malloc(unsigned int size);
1278 void *av_mallocz(unsigned int size);
1279 void *av_realloc(void *ptr, unsigned int size);
1280 void av_free(void *ptr);
1281 char *av_strdup(const char *s);
1282 void __av_freep(void **ptr);
1283 #define av_freep(p) __av_freep((void **)(p))
1284 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
1285 /* for static data only */
1286 /* call av_free_static to release all staticaly allocated tables */
1287 void av_free_static(void);
1288 void *__av_mallocz_static(void** location, unsigned int size);
1289 #define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s)
1295 #endif /* AVCODEC_H */