CODEC_ID_TIERTEXSEQVIDEO,
CODEC_ID_TIFF,
CODEC_ID_GIF,
-#if LIBAVCODEC_VERSION_MAJOR == 53
- CODEC_ID_FFH264,
-#endif
CODEC_ID_DXA,
CODEC_ID_DNXHD,
CODEC_ID_THP,
CODEC_ID_INDEO5,
CODEC_ID_MIMIC,
CODEC_ID_RL2,
-#if LIBAVCODEC_VERSION_MAJOR == 53
- CODEC_ID_8SVX_EXP,
- CODEC_ID_8SVX_FIB,
-#endif
CODEC_ID_ESCAPE124,
CODEC_ID_DIRAC,
CODEC_ID_BFI,
CODEC_ID_DFA,
CODEC_ID_WMV3IMAGE,
CODEC_ID_VC1IMAGE,
-#if LIBAVCODEC_VERSION_MAJOR == 53
- CODEC_ID_G723_1,
- CODEC_ID_G729,
-#endif
CODEC_ID_UTVIDEO,
CODEC_ID_BMV_VIDEO,
CODEC_ID_VBLE,
CODEC_ID_DXTORY,
CODEC_ID_V410,
CODEC_ID_XWD,
+ CODEC_ID_CDXL,
/* various PCM "codecs" */
CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
CODEC_ID_MACE3,
CODEC_ID_MACE6,
CODEC_ID_VMDAUDIO,
-#if LIBAVCODEC_VERSION_MAJOR == 53
- CODEC_ID_SONIC,
- CODEC_ID_SONIC_LS,
-#endif
CODEC_ID_FLAC,
CODEC_ID_MP3ADU,
CODEC_ID_MP3ON4,
CODEC_ID_AAC_LATM,
CODEC_ID_QDMC,
CODEC_ID_CELT,
-#if LIBAVCODEC_VERSION_MAJOR > 53
CODEC_ID_G723_1,
CODEC_ID_G729,
CODEC_ID_8SVX_EXP,
CODEC_ID_8SVX_FIB,
-#endif
CODEC_ID_BMV_AUDIO,
/* subtitle codecs */
CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
};
-#if FF_API_OLD_SAMPLE_FMT
-#define SampleFormat AVSampleFormat
-
-#define SAMPLE_FMT_NONE AV_SAMPLE_FMT_NONE
-#define SAMPLE_FMT_U8 AV_SAMPLE_FMT_U8
-#define SAMPLE_FMT_S16 AV_SAMPLE_FMT_S16
-#define SAMPLE_FMT_S32 AV_SAMPLE_FMT_S32
-#define SAMPLE_FMT_FLT AV_SAMPLE_FMT_FLT
-#define SAMPLE_FMT_DBL AV_SAMPLE_FMT_DBL
-#define SAMPLE_FMT_NB AV_SAMPLE_FMT_NB
-#endif
-
-#if FF_API_OLD_AUDIOCONVERT
-#include "libavutil/audioconvert.h"
-
-/* Audio channel masks */
-#define CH_FRONT_LEFT AV_CH_FRONT_LEFT
-#define CH_FRONT_RIGHT AV_CH_FRONT_RIGHT
-#define CH_FRONT_CENTER AV_CH_FRONT_CENTER
-#define CH_LOW_FREQUENCY AV_CH_LOW_FREQUENCY
-#define CH_BACK_LEFT AV_CH_BACK_LEFT
-#define CH_BACK_RIGHT AV_CH_BACK_RIGHT
-#define CH_FRONT_LEFT_OF_CENTER AV_CH_FRONT_LEFT_OF_CENTER
-#define CH_FRONT_RIGHT_OF_CENTER AV_CH_FRONT_RIGHT_OF_CENTER
-#define CH_BACK_CENTER AV_CH_BACK_CENTER
-#define CH_SIDE_LEFT AV_CH_SIDE_LEFT
-#define CH_SIDE_RIGHT AV_CH_SIDE_RIGHT
-#define CH_TOP_CENTER AV_CH_TOP_CENTER
-#define CH_TOP_FRONT_LEFT AV_CH_TOP_FRONT_LEFT
-#define CH_TOP_FRONT_CENTER AV_CH_TOP_FRONT_CENTER
-#define CH_TOP_FRONT_RIGHT AV_CH_TOP_FRONT_RIGHT
-#define CH_TOP_BACK_LEFT AV_CH_TOP_BACK_LEFT
-#define CH_TOP_BACK_CENTER AV_CH_TOP_BACK_CENTER
-#define CH_TOP_BACK_RIGHT AV_CH_TOP_BACK_RIGHT
-#define CH_STEREO_LEFT AV_CH_STEREO_LEFT
-#define CH_STEREO_RIGHT AV_CH_STEREO_RIGHT
-
-/** Channel mask value used for AVCodecContext.request_channel_layout
- to indicate that the user requests the channel order of the decoder output
- to be the native codec channel order. */
-#define CH_LAYOUT_NATIVE AV_CH_LAYOUT_NATIVE
-
-/* Audio channel convenience macros */
-#define CH_LAYOUT_MONO AV_CH_LAYOUT_MONO
-#define CH_LAYOUT_STEREO AV_CH_LAYOUT_STEREO
-#define CH_LAYOUT_2_1 AV_CH_LAYOUT_2_1
-#define CH_LAYOUT_SURROUND AV_CH_LAYOUT_SURROUND
-#define CH_LAYOUT_4POINT0 AV_CH_LAYOUT_4POINT0
-#define CH_LAYOUT_2_2 AV_CH_LAYOUT_2_2
-#define CH_LAYOUT_QUAD AV_CH_LAYOUT_QUAD
-#define CH_LAYOUT_5POINT0 AV_CH_LAYOUT_5POINT0
-#define CH_LAYOUT_5POINT1 AV_CH_LAYOUT_5POINT1
-#define CH_LAYOUT_5POINT0_BACK AV_CH_LAYOUT_5POINT0_BACK
-#define CH_LAYOUT_5POINT1_BACK AV_CH_LAYOUT_5POINT1_BACK
-#define CH_LAYOUT_7POINT0 AV_CH_LAYOUT_7POINT0
-#define CH_LAYOUT_7POINT1 AV_CH_LAYOUT_7POINT1
-#define CH_LAYOUT_7POINT1_WIDE AV_CH_LAYOUT_7POINT1_WIDE
-#define CH_LAYOUT_STEREO_DOWNMIX AV_CH_LAYOUT_STEREO_DOWNMIX
-#endif
-
#if FF_API_OLD_DECODE_AUDIO
/* in bytes */
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
AVCHROMA_LOC_NB , ///< Not part of ABI
};
-#if FF_API_FLAC_GLOBAL_OPTS
-/**
- * LPC analysis type
- */
-enum AVLPCType {
- AV_LPC_TYPE_DEFAULT = -1, ///< use the codec default LPC type
- AV_LPC_TYPE_NONE = 0, ///< do not use LPC prediction or use all zero coefficients
- AV_LPC_TYPE_FIXED = 1, ///< fixed LPC coefficients
- AV_LPC_TYPE_LEVINSON = 2, ///< Levinson-Durbin recursion
- AV_LPC_TYPE_CHOLESKY = 3, ///< Cholesky factorization
- AV_LPC_TYPE_NB , ///< Not part of ABI
-};
-#endif
-
enum AVAudioServiceType {
AV_AUDIO_SERVICE_TYPE_MAIN = 0,
AV_AUDIO_SERVICE_TYPE_EFFECTS = 1,
#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT).
/* Fx : Flag for h263+ extra options */
#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
-#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp.
-#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
#define CODEC_FLAG_CLOSED_GOP 0x80000000
#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks.
-#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size.
#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding.
#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata.
+#if FF_API_MPV_GLOBAL_OPTS
+#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp.
+#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
+#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size.
#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping
-#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
-/**
- * @defgroup deprecated_flags Deprecated codec flags
- * Use corresponding private codec options instead.
- * @{
- */
-#if FF_API_MPEGVIDEO_GLOBAL_OPTS
-#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
-#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC
-#define CODEC_FLAG_PART 0x0080 ///< Use data partitioning.
-#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan.
-#define CODEC_FLAG_H263P_UMV 0x02000000 ///< unlimited motion vector
-#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
-#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
-#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table.
-#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
-#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer.
-#endif
-#if FF_API_MJPEG_GLOBAL_OPTS
-#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< Use external Huffman table (for MJPEG).
-#endif
-#if FF_API_X264_GLOBAL_OPTS
-#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow B-frames to be used as references.
-#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for B-frames
-#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
-#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform
-#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip
-#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters
-#define CODEC_FLAG2_BRDO 0x00000400 ///< B-frame rate-distortion optimization
-#define CODEC_FLAG2_MBTREE 0x00040000 ///< Use macroblock tree ratecontrol (x264 only)
-#define CODEC_FLAG2_PSY 0x00080000 ///< Use psycho visual optimizations.
-#define CODEC_FLAG2_SSIM 0x00100000 ///< Compute SSIM during encoding, error[] values are undefined.
-#define CODEC_FLAG2_INTRA_REFRESH 0x00200000 ///< Use periodic insertion of intra blocks instead of keyframes.
-#endif
-#if FF_API_SNOW_GLOBAL_OPTS
-#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
#endif
-#if FF_API_LAME_GLOBAL_OPTS
-#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
-#endif
-/**
- * @}
- */
+#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
/* Unsupported options :
* Syntax Arithmetic coding (SAC)
* assume the buffer was allocated by avcodec_default_get_buffer.
*/
#define CODEC_CAP_DR1 0x0002
-#if FF_API_PARSE_FRAME
-/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
-#define CODEC_CAP_PARSE_ONLY 0x0004
-#endif
#define CODEC_CAP_TRUNCATED 0x0008
/* Codec can export data for HW decoding (XvMC). */
#define CODEC_CAP_HWACCEL 0x0010
#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
-#if FF_API_OLD_FF_PICT_TYPES
-/* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values */
-#define FF_I_TYPE AV_PICTURE_TYPE_I ///< Intra
-#define FF_P_TYPE AV_PICTURE_TYPE_P ///< Predicted
-#define FF_B_TYPE AV_PICTURE_TYPE_B ///< Bi-dir predicted
-#define FF_S_TYPE AV_PICTURE_TYPE_S ///< S(GMC)-VOP MPEG4
-#define FF_SI_TYPE AV_PICTURE_TYPE_SI ///< Switching Intra
-#define FF_SP_TYPE AV_PICTURE_TYPE_SP ///< Switching Predicted
-#define FF_BI_TYPE AV_PICTURE_TYPE_BI
-#endif
-
#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore).
#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
AV_PKT_DATA_PALETTE,
AV_PKT_DATA_NEW_EXTRADATA,
AV_PKT_DATA_PARAM_CHANGE,
+ AV_PKT_DATA_H263_MB_INFO,
};
typedef struct AVPacket {
* s32le height
*/
+/**
+ * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
+ * structures with info about macroblocks relevant to splitting the
+ * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
+ * That is, it does not necessarily contain info about all macroblocks,
+ * as long as the distance between macroblocks in the info is smaller
+ * than the target payload size.
+ * Each MB info structure is 12 bytes, and is laid out as follows:
+ * u32le bit offset from the start of the packet
+ * u8 current quantizer at the start of the macroblock
+ * u8 GOB number
+ * u16le macroblock address within the GOB
+ * u8 horizontal MV predictor
+ * u8 vertical MV predictor
+ * u8 horizontal MV predictor for block number 3
+ * u8 vertical MV predictor for block number 3
+ */
+
enum AVSideDataParamChangeFlags {
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
* sizeof(AVFrame) must not be used outside libav*.
*/
typedef struct AVFrame {
-#if FF_API_DATA_POINTERS
-#define AV_NUM_DATA_POINTERS 4
-#else
#define AV_NUM_DATA_POINTERS 8
-#endif
/**
* pointer to the picture/channel planes.
* This might be different from the first allocated byte
* For audio, only linesize[0] may be set. For planar audio, each channel
* plane must be the same size.
*
- * - encoding: Set by user (video only)
+ * - encoding: Set by user
* - decoding: set by AVCodecContext.get_buffer()
*/
int linesize[AV_NUM_DATA_POINTERS];
/**
- * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.
- * This isn't used by libavcodec unless the default get/release_buffer() is used.
- * - encoding:
- * - decoding:
+ * pointers to the data planes/channels.
+ *
+ * For video, this should simply point to data[].
+ *
+ * For planar audio, each channel has a separate data pointer, and
+ * linesize[0] contains the size of each channel buffer.
+ * For packed audio, there is just one data pointer, and linesize[0]
+ * contains the total size of the buffer for all channels.
+ *
+ * Note: Both data and extended_data will always be set by get_buffer(),
+ * but for planar audio with more channels that can fit in data,
+ * extended_data must be used by the decoder in order to access all
+ * channels.
+ *
+ * encoding: unused
+ * decoding: set by AVCodecContext.get_buffer()
*/
- uint8_t *base[AV_NUM_DATA_POINTERS];
+ uint8_t **extended_data;
+
+ /**
+ * width and height of the video frame
+ * - encoding: unused
+ * - decoding: Read by user.
+ */
+ int width, height;
+
+ /**
+ * number of audio samples (per channel) described by this frame
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
+ */
+ int nb_samples;
+
+ /**
+ * format of the frame, -1 if unknown or unset
+ * Values correspond to enum PixelFormat for video frames,
+ * enum AVSampleFormat for audio)
+ * - encoding: unused
+ * - decoding: Read by user.
+ */
+ int format;
+
/**
* 1 -> keyframe, 0-> not
* - encoding: Set by libavcodec.
*/
enum AVPictureType pict_type;
+ /**
+ * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.
+ * This isn't used by libavcodec unless the default get/release_buffer() is used.
+ * - encoding:
+ * - decoding:
+ */
+ uint8_t *base[AV_NUM_DATA_POINTERS];
+
+ /**
+ * sample aspect ratio for the video frame, 0/1 if unknown\unspecified
+ * - encoding: unused
+ * - decoding: Read by user.
+ */
+ AVRational sample_aspect_ratio;
+
/**
* presentation timestamp in time_base units (time when frame should be shown to user)
* If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.
*/
int64_t pts;
+ /**
+ * reordered pts from the last AVPacket that has been input into the decoder
+ * - encoding: unused
+ * - decoding: Read by user.
+ */
+ int64_t pkt_pts;
+
+ /**
+ * dts from the last AVPacket that has been input into the decoder
+ * - encoding: unused
+ * - decoding: Read by user.
+ */
+ int64_t pkt_dts;
+
/**
* picture number in bitstream order
* - encoding: set by
*/
int quality;
-#if FF_API_AVFRAME_AGE
- /**
- * @deprecated unused
- */
- attribute_deprecated int age;
-#endif
-
/**
* is this picture used as reference
* The values for this are the same as the MpegEncContext.picture_structure
*/
int qstride;
+ /**
+ *
+ */
+ int qscale_type;
+
/**
* mbskip_table[mb]>=1 if MB didn't change
* stride= mb_width = (width+15)>>4
uint32_t *mb_type;
/**
- * log2 of the size of the block which a single vector in motion_val represents:
- * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)
+ * DCT coefficients
* - encoding: unused
* - decoding: Set by libavcodec.
*/
- uint8_t motion_subsample_log2;
+ short *dct_coeff;
+
+ /**
+ * motion reference frame index
+ * the order in which these are stored can depend on the codec.
+ * - encoding: Set by user.
+ * - decoding: Set by libavcodec.
+ */
+ int8_t *ref_index[2];
/**
* for some private data of the user
*/
int repeat_pict;
- /**
- *
- */
- int qscale_type;
-
/**
* The content of the picture is interlaced.
* - encoding: Set by user.
*/
int top_field_first;
- /**
- * Pan scan.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- AVPanScan *pan_scan;
-
/**
* Tell user application that palette has changed from previous frame.
* - encoding: ??? (no palette-enabled encoder yet)
int buffer_hints;
/**
- * DCT coefficients
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- short *dct_coeff;
-
- /**
- * motion reference frame index
- * the order in which these are stored can depend on the codec.
+ * Pan scan.
* - encoding: Set by user.
* - decoding: Set by libavcodec.
*/
- int8_t *ref_index[2];
+ AVPanScan *pan_scan;
/**
* reordered opaque 64bit (generally an integer or a double precision float
*/
void *hwaccel_picture_private;
- /**
- * reordered pts from the last AVPacket that has been input into the decoder
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_pts;
-
- /**
- * dts from the last AVPacket that has been input into the decoder
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_dts;
-
/**
* the AVCodecContext which ff_thread_get_buffer() was last called on
* - encoding: Set by libavcodec.
void *thread_opaque;
/**
- * number of audio samples (per channel) described by this frame
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- int nb_samples;
-
- /**
- * pointers to the data planes/channels.
- *
- * For video, this should simply point to data[].
- *
- * For planar audio, each channel has a separate data pointer, and
- * linesize[0] contains the size of each channel buffer.
- * For packed audio, there is just one data pointer, and linesize[0]
- * contains the total size of the buffer for all channels.
- *
- * Note: Both data and extended_data will always be set by get_buffer(),
- * but for planar audio with more channels that can fit in data,
- * extended_data must be used by the decoder in order to access all
- * channels.
- *
- * encoding: unused
- * decoding: set by AVCodecContext.get_buffer()
- */
- uint8_t **extended_data;
-
- /**
- * sample aspect ratio for the video frame, 0/1 if unknown\unspecified
- * - encoding: unused
- * - decoding: Read by user.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * width and height of the video frame
- * - encoding: unused
- * - decoding: Read by user.
- */
- int width, height;
-
- /**
- * format of the frame, -1 if unknown or unset
- * Values correspond to enum PixelFormat for video frames,
- * enum AVSampleFormat for audio)
+ * log2 of the size of the block which a single vector in motion_val represents:
+ * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)
* - encoding: unused
- * - decoding: Read by user.
+ * - decoding: Set by libavcodec.
*/
- int format;
+ uint8_t motion_subsample_log2;
} AVFrame;
struct AVCodecInternal;
* - set by avcodec_alloc_context3
*/
const AVClass *av_class;
- /**
- * the average bitrate
- * - encoding: Set by user; unused for constant quantizer encoding.
- * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
- */
- int bit_rate;
+ int log_level_offset;
+
+ enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
+ struct AVCodec *codec;
+ char codec_name[32];
+ enum CodecID codec_id; /* see CODEC_ID_xxx */
/**
- * number of bits the bitstream is allowed to diverge from the reference.
- * the reference can be CBR (for CBR pass1) or VBR (for pass2)
- * - encoding: Set by user; unused for constant quantizer encoding.
- * - decoding: unused
+ * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
+ * This is used to work around some encoder bugs.
+ * A demuxer should set this to what is stored in the field used to identify the codec.
+ * If there are multiple such fields in a container then the demuxer should choose the one
+ * which maximizes the information about the used codec.
+ * If the codec tag field in a container is larger than 32 bits then the demuxer should
+ * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
+ * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
+ * first.
+ * - encoding: Set by user, if not then the default based on codec_id will be used.
+ * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
*/
- int bit_rate_tolerance;
+ unsigned int codec_tag;
/**
- * CODEC_FLAG_*.
+ * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
+ * This is used to work around some encoder bugs.
+ * - encoding: unused
+ * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
+ */
+ unsigned int stream_codec_tag;
+
+#if FF_API_SUB_ID
+ /**
+ * @deprecated this field is unused
+ */
+ attribute_deprecated int sub_id;
+#endif
+
+ void *priv_data;
+
+ /**
+ * Private context used for internal data.
+ *
+ * Unlike priv_data, this is not codec-specific. It is used in general
+ * libavcodec functions.
+ */
+ struct AVCodecInternal *internal;
+
+ /**
+ * Private data of the user, can be used to carry app specific stuff.
* - encoding: Set by user.
* - decoding: Set by user.
*/
- int flags;
+ void *opaque;
/**
- * Some codecs need additional format info. It is stored here.
- * If any muxer uses this then ALL demuxers/parsers AND encoders for the
- * specific codec MUST set it correctly otherwise stream copy breaks.
- * In general use of this field by muxers is not recommended.
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec. (FIXME: Is this OK?)
+ * the average bitrate
+ * - encoding: Set by user; unused for constant quantizer encoding.
+ * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
*/
- int sub_id;
+ int bit_rate;
/**
- * Motion estimation algorithm used for video coding.
- * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
- * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
- * - encoding: MUST be set by user.
+ * number of bits the bitstream is allowed to diverge from the reference.
+ * the reference can be CBR (for CBR pass1) or VBR (for pass2)
+ * - encoding: Set by user; unused for constant quantizer encoding.
* - decoding: unused
*/
- int me_method;
+ int bit_rate_tolerance;
+
+ /**
+ * Global quality for codecs which cannot change it per frame.
+ * This should be proportional to MPEG-1/2/4 qscale.
+ * - encoding: Set by user.
+ * - decoding: unused
+ */
+ int global_quality;
+
+ /**
+ * - encoding: Set by user.
+ * - decoding: unused
+ */
+ int compression_level;
+#define FF_COMPRESSION_DEFAULT -1
+
+ /**
+ * CODEC_FLAG_*.
+ * - encoding: Set by user.
+ * - decoding: Set by user.
+ */
+ int flags;
+
+ /**
+ * CODEC_FLAG2_*
+ * - encoding: Set by user.
+ * - decoding: Set by user.
+ */
+ int flags2;
/**
* some codecs need / can use extradata like Huffman tables.
*/
AVRational time_base;
+ /**
+ * For some codecs, the time base is closer to the field rate than the frame rate.
+ * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
+ * if no telecine is used ...
+ *
+ * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
+ */
+ int ticks_per_frame;
+
+ /**
+ * Encoder delay.
+ *
+ * Video:
+ * Number of frames the decoded output will be delayed relative to the
+ * encoded input.
+ *
+ * Audio:
+ * Number of "priming" samples added to the beginning of the stream
+ * during encoding. The decoded output will be delayed by this many
+ * samples relative to the input to the encoder. Note that this field is
+ * purely informational and does not directly affect the pts output by
+ * the encoder, which should always be based on the actual presentation
+ * time, including any delay.
+ *
+ * - encoding: Set by libavcodec.
+ * - decoding: unused
+ */
+ int delay;
+
+
/* video only */
/**
* picture width / height.
*/
int width, height;
+ /**
+ * Bitstream width / height, may be different from width/height if lowres enabled.
+ * - encoding: unused
+ * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
+ */
+ int coded_width, coded_height;
+
#define FF_ASPECT_EXTENDED 15
/**
*/
enum PixelFormat pix_fmt;
+ /**
+ * Motion estimation algorithm used for video coding.
+ * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
+ * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
+ * - encoding: MUST be set by user.
+ * - decoding: unused
+ */
+ int me_method;
+
/**
* If non NULL, 'draw_horiz_band' is called by the libavcodec
* decoder to draw a horizontal band. It improves cache usage. Not
const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
int y, int type, int height);
- /* audio only */
- int sample_rate; ///< samples per second
- int channels; ///< number of audio channels
-
- /**
- * audio sample format
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- enum AVSampleFormat sample_fmt; ///< sample format
-
- /* The following data should not be initialized. */
- /**
- * Samples per packet, initialized when calling 'init'.
- */
- int frame_size;
- int frame_number; ///< audio or video frame number
-
- /**
- * Number of frames the decoded output will be delayed relative to
- * the encoded input.
- * - encoding: Set by libavcodec.
- * - decoding: unused
- */
- int delay;
-
- /* - encoding parameters */
- float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
- float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
-
- /**
- * minimum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- */
- int qmin;
-
- /**
- * maximum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- */
- int qmax;
-
/**
- * maximum quantizer difference between frames
- * - encoding: Set by user.
- * - decoding: unused
+ * callback to negotiate the pixelFormat
+ * @param fmt is the list of formats which are supported by the codec,
+ * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
+ * The first is always the native one.
+ * @return the chosen format
+ * - encoding: unused
+ * - decoding: Set by user, if not set the native format will be chosen.
*/
- int max_qdiff;
+ enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
/**
* maximum number of B-frames between non-B-frames
int b_frame_strategy;
- struct AVCodec *codec;
-
- void *priv_data;
-
- int rtp_payload_size; /* The size of the RTP payload: the coder will */
- /* do its best to deliver a chunk with size */
- /* below rtp_payload_size, the chunk will start */
- /* with a start code on some codecs like H.263. */
- /* This doesn't take account of any particular */
- /* headers inside the transmitted RTP payload. */
-
-
- /* The RTP callback: This function is called */
- /* every time the encoder has a packet to send. */
- /* It depends on the encoder if the data starts */
- /* with a Start Code (it should). H.263 does. */
- /* mb_nb contains the number of macroblocks */
- /* encoded in the RTP payload. */
- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
-
- /* statistics, used for 2-pass encoding */
- int mv_bits;
- int header_bits;
- int i_tex_bits;
- int p_tex_bits;
- int i_count;
- int p_count;
- int skip_count;
- int misc_bits;
-
+#if FF_API_MPV_GLOBAL_OPTS
/**
- * number of bits used for the previously encoded frame
- * - encoding: Set by libavcodec.
+ * luma single coefficient elimination threshold
+ * - encoding: Set by user.
* - decoding: unused
*/
- int frame_bits;
+ attribute_deprecated int luma_elim_threshold;
/**
- * Private data of the user, can be used to carry app specific stuff.
+ * chroma single coeff elimination threshold
* - encoding: Set by user.
- * - decoding: Set by user.
+ * - decoding: unused
*/
- void *opaque;
-
- char codec_name[32];
- enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
- enum CodecID codec_id; /* see CODEC_ID_xxx */
+ attribute_deprecated int chroma_elim_threshold;
+#endif
/**
- * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * This is used to work around some encoder bugs.
- * A demuxer should set this to what is stored in the field used to identify the codec.
- * If there are multiple such fields in a container then the demuxer should choose the one
- * which maximizes the information about the used codec.
- * If the codec tag field in a container is larger than 32 bits then the demuxer should
- * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
- * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
- * first.
- * - encoding: Set by user, if not then the default based on codec_id will be used.
- * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
+ * qscale offset between IP and B-frames
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- unsigned int codec_tag;
+ float b_quant_offset;
/**
- * Work around bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: Set by user
- * - decoding: Set by user
+ * Size of the frame reordering buffer in the decoder.
+ * For MPEG-2 it is 1 IPB or 0 low delay IP.
+ * - encoding: Set by libavcodec.
+ * - decoding: Set by libavcodec.
*/
- int workaround_bugs;
-#define FF_BUG_AUTODETECT 1 ///< autodetection
-#define FF_BUG_OLD_MSMPEG4 2
-#define FF_BUG_XVID_ILACE 4
-#define FF_BUG_UMP4 8
-#define FF_BUG_NO_PADDING 16
-#define FF_BUG_AMV 32
-#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
-#define FF_BUG_QPEL_CHROMA 64
-#define FF_BUG_STD_QPEL 128
-#define FF_BUG_QPEL_CHROMA2 256
-#define FF_BUG_DIRECT_BLOCKSIZE 512
-#define FF_BUG_EDGE 1024
-#define FF_BUG_HPEL_CHROMA 2048
-#define FF_BUG_DC_CLIP 4096
-#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
-#define FF_BUG_TRUNCATED 16384
-//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
+ int has_b_frames;
/**
- * luma single coefficient elimination threshold
+ * 0-> h263 quant 1-> mpeg quant
* - encoding: Set by user.
* - decoding: unused
*/
- int luma_elim_threshold;
+ int mpeg_quant;
/**
- * chroma single coeff elimination threshold
+ * qscale factor between P and I-frames
+ * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
+ * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
* - encoding: Set by user.
* - decoding: unused
*/
- int chroma_elim_threshold;
+ float i_quant_factor;
/**
- * strictly follow the standard (MPEG4, ...).
+ * qscale offset between P and I-frames
* - encoding: Set by user.
- * - decoding: Set by user.
- * Setting this to STRICT or higher means the encoder and decoder will
- * generally do stupid things, whereas setting it to unofficial or lower
- * will mean the encoder might produce output that is not supported by all
- * spec-compliant decoders. Decoders don't differentiate between normal,
- * unofficial and experimental (that is, they always try to decode things
- * when they can) unless they are explicitly asked to behave stupidly
- * (=strictly conform to the specs)
+ * - decoding: unused
*/
- int strict_std_compliance;
-#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software.
-#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
-#define FF_COMPLIANCE_NORMAL 0
-#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions
-#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
+ float i_quant_offset;
/**
- * qscale offset between IP and B-frames
+ * luminance masking (0-> disabled)
* - encoding: Set by user.
* - decoding: unused
*/
- float b_quant_offset;
-
-#if FF_API_ER
- /**
- * Error recognition; higher values will detect more errors but may
- * misdetect some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: Set by user.
- */
- attribute_deprecated int error_recognition;
-#define FF_ER_CAREFUL 1
-#define FF_ER_COMPLIANT 2
-#define FF_ER_AGGRESSIVE 3
-#define FF_ER_VERY_AGGRESSIVE 4
-#define FF_ER_EXPLODE 5
-#endif /* FF_API_ER */
-
- /**
- * Called at the beginning of each frame to get a buffer for it.
- *
- * The function will set AVFrame.data[], AVFrame.linesize[].
- * AVFrame.extended_data[] must also be set, but it should be the same as
- * AVFrame.data[] except for planar audio with more channels than can fit
- * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as
- * many data pointers as it can hold.
- *
- * if CODEC_CAP_DR1 is not set then get_buffer() must call
- * avcodec_default_get_buffer() instead of providing buffers allocated by
- * some other means.
- *
- * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't
- * need it. avcodec_default_get_buffer() aligns the output buffer properly,
- * but if get_buffer() is overridden then alignment considerations should
- * be taken into account.
- *
- * @see avcodec_default_get_buffer()
- *
- * Video:
- *
- * If pic.reference is set then the frame will be read later by libavcodec.
- * avcodec_align_dimensions2() should be used to find the required width and
- * height, as they normally need to be rounded up to the next multiple of 16.
- *
- * If frame multithreading is used and thread_safe_callbacks is set,
- * it may be called from a different thread, but not from more than one at
- * once. Does not need to be reentrant.
- *
- * @see release_buffer(), reget_buffer()
- * @see avcodec_align_dimensions2()
- *
- * Audio:
- *
- * Decoders request a buffer of a particular size by setting
- * AVFrame.nb_samples prior to calling get_buffer(). The decoder may,
- * however, utilize only part of the buffer by setting AVFrame.nb_samples
- * to a smaller value in the output frame.
- *
- * Decoders cannot use the buffer after returning from
- * avcodec_decode_audio4(), so they will not call release_buffer(), as it
- * is assumed to be released immediately upon return.
- *
- * As a convenience, av_samples_get_buffer_size() and
- * av_samples_fill_arrays() in libavutil may be used by custom get_buffer()
- * functions to find the required data size and to fill data pointers and
- * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
- * since all planes must be the same size.
- *
- * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
- *
- * - encoding: unused
- * - decoding: Set by libavcodec, user can override.
- */
- int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * Called to release buffers which were allocated with get_buffer.
- * A released buffer can be reused in get_buffer().
- * pic.data[*] must be set to NULL.
- * May be called from a different thread if frame multithreading is used,
- * but not by more than one thread at once, so does not need to be reentrant.
- * - encoding: unused
- * - decoding: Set by libavcodec, user can override.
- */
- void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
+ float lumi_masking;
/**
- * Size of the frame reordering buffer in the decoder.
- * For MPEG-2 it is 1 IPB or 0 low delay IP.
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
+ * temporary complexity masking (0-> disabled)
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int has_b_frames;
+ float temporal_cplx_masking;
/**
- * number of bytes per packet if constant and known or 0
- * Used by some WAV based audio codecs.
+ * spatial complexity masking (0-> disabled)
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int block_align;
+ float spatial_cplx_masking;
-#if FF_API_PARSE_FRAME
/**
- * If true, only parsing is done. The frame data is returned.
- * Only MPEG audio decoders support this now.
- * - encoding: unused
- * - decoding: Set by user
+ * p block masking (0-> disabled)
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- attribute_deprecated int parse_only;
-#endif
+ float p_masking;
/**
- * 0-> h263 quant 1-> mpeg quant
+ * darkness masking (0-> disabled)
* - encoding: Set by user.
* - decoding: unused
*/
- int mpeg_quant;
+ float dark_masking;
/**
- * pass1 encoding statistics output buffer
+ * slice count
* - encoding: Set by libavcodec.
+ * - decoding: Set by user (or 0).
+ */
+ int slice_count;
+ /**
+ * prediction method (needed for huffyuv)
+ * - encoding: Set by user.
* - decoding: unused
*/
- char *stats_out;
+ int prediction_method;
+#define FF_PRED_LEFT 0
+#define FF_PRED_PLANE 1
+#define FF_PRED_MEDIAN 2
/**
- * pass2 encoding statistics input buffer
- * Concatenated stuff from stats_out of pass1 should be placed here.
- * - encoding: Allocated/set/freed by user.
- * - decoding: unused
+ * slice offsets in the frame in bytes
+ * - encoding: Set/allocated by libavcodec.
+ * - decoding: Set/allocated by user (or NULL).
*/
- char *stats_in;
+ int *slice_offset;
/**
- * ratecontrol qmin qmax limiting method
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
+ * sample aspect ratio (0 if unknown)
+ * That is the width of a pixel divided by the height of the pixel.
+ * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by libavcodec.
*/
- float rc_qsquish;
-
- float rc_qmod_amp;
- int rc_qmod_freq;
+ AVRational sample_aspect_ratio;
/**
- * ratecontrol override, see RcOverride
- * - encoding: Allocated/set/freed by user.
+ * motion estimation comparison function
+ * - encoding: Set by user.
* - decoding: unused
*/
- RcOverride *rc_override;
- int rc_override_count;
-
+ int me_cmp;
/**
- * rate control equation
- * - encoding: Set by user
+ * subpixel motion estimation comparison function
+ * - encoding: Set by user.
* - decoding: unused
*/
- const char *rc_eq;
-
+ int me_sub_cmp;
/**
- * maximum bitrate
+ * macroblock comparison function (not supported yet)
* - encoding: Set by user.
* - decoding: unused
*/
- int rc_max_rate;
-
+ int mb_cmp;
/**
- * minimum bitrate
+ * interlaced DCT comparison function
* - encoding: Set by user.
* - decoding: unused
*/
- int rc_min_rate;
+ int ildct_cmp;
+#define FF_CMP_SAD 0
+#define FF_CMP_SSE 1
+#define FF_CMP_SATD 2
+#define FF_CMP_DCT 3
+#define FF_CMP_PSNR 4
+#define FF_CMP_BIT 5
+#define FF_CMP_RD 6
+#define FF_CMP_ZERO 7
+#define FF_CMP_VSAD 8
+#define FF_CMP_VSSE 9
+#define FF_CMP_NSSE 10
+#define FF_CMP_W53 11
+#define FF_CMP_W97 12
+#define FF_CMP_DCTMAX 13
+#define FF_CMP_DCT264 14
+#define FF_CMP_CHROMA 256
/**
- * decoder bitstream buffer size
+ * ME diamond size & shape
* - encoding: Set by user.
* - decoding: unused
*/
- int rc_buffer_size;
- float rc_buffer_aggressivity;
+ int dia_size;
/**
- * qscale factor between P and I-frames
- * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
- * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
+ * amount of previous MV predictors (2a+1 x 2a+1 square)
* - encoding: Set by user.
* - decoding: unused
*/
- float i_quant_factor;
+ int last_predictor_count;
/**
- * qscale offset between P and I-frames
+ * prepass for motion estimation
* - encoding: Set by user.
* - decoding: unused
*/
- float i_quant_offset;
+ int pre_me;
/**
- * initial complexity for pass1 ratecontrol
+ * motion estimation prepass comparison function
* - encoding: Set by user.
* - decoding: unused
*/
- float rc_initial_cplx;
+ int me_pre_cmp;
/**
- * DCT algorithm, see FF_DCT_* below
+ * ME prepass diamond size & shape
* - encoding: Set by user.
* - decoding: unused
*/
- int dct_algo;
-#define FF_DCT_AUTO 0
-#define FF_DCT_FASTINT 1
-#define FF_DCT_INT 2
-#define FF_DCT_MMX 3
-#define FF_DCT_MLIB 4
-#define FF_DCT_ALTIVEC 5
-#define FF_DCT_FAAN 6
+ int pre_dia_size;
/**
- * luminance masking (0-> disabled)
+ * subpel ME quality
* - encoding: Set by user.
* - decoding: unused
*/
- float lumi_masking;
+ int me_subpel_quality;
/**
- * temporary complexity masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
+ * DTG active format information (additional aspect ratio
+ * information only used in DVB MPEG-2 transport streams)
+ * 0 if not set.
+ *
+ * - encoding: unused
+ * - decoding: Set by decoder.
*/
- float temporal_cplx_masking;
+ int dtg_active_format;
+#define FF_DTG_AFD_SAME 8
+#define FF_DTG_AFD_4_3 9
+#define FF_DTG_AFD_16_9 10
+#define FF_DTG_AFD_14_9 11
+#define FF_DTG_AFD_4_3_SP_14_9 13
+#define FF_DTG_AFD_16_9_SP_14_9 14
+#define FF_DTG_AFD_SP_4_3 15
/**
- * spatial complexity masking (0-> disabled)
+ * maximum motion estimation search range in subpel units
+ * If 0 then no limit.
+ *
* - encoding: Set by user.
* - decoding: unused
*/
- float spatial_cplx_masking;
+ int me_range;
/**
- * p block masking (0-> disabled)
+ * intra quantizer bias
* - encoding: Set by user.
* - decoding: unused
*/
- float p_masking;
+ int intra_quant_bias;
+#define FF_DEFAULT_QUANT_BIAS 999999
/**
- * darkness masking (0-> disabled)
+ * inter quantizer bias
* - encoding: Set by user.
* - decoding: unused
*/
- float dark_masking;
+ int inter_quant_bias;
+#if FF_API_COLOR_TABLE_ID
/**
- * IDCT algorithm, see FF_IDCT_* below.
- * - encoding: Set by user.
- * - decoding: Set by user.
+ * color table ID
+ * - encoding: unused
+ * - decoding: Which clrtable should be used for 8bit RGB images.
+ * Tables have to be stored somewhere. FIXME
*/
- int idct_algo;
-#define FF_IDCT_AUTO 0
-#define FF_IDCT_INT 1
-#define FF_IDCT_SIMPLE 2
-#define FF_IDCT_SIMPLEMMX 3
-#define FF_IDCT_LIBMPEG2MMX 4
-#define FF_IDCT_PS2 5
-#define FF_IDCT_MLIB 6
-#define FF_IDCT_ARM 7
-#define FF_IDCT_ALTIVEC 8
-#define FF_IDCT_SH4 9
-#define FF_IDCT_SIMPLEARM 10
-#define FF_IDCT_H264 11
-#define FF_IDCT_VP3 12
-#define FF_IDCT_IPP 13
-#define FF_IDCT_XVIDMMX 14
-#define FF_IDCT_CAVS 15
-#define FF_IDCT_SIMPLEARMV5TE 16
-#define FF_IDCT_SIMPLEARMV6 17
-#define FF_IDCT_SIMPLEVIS 18
-#define FF_IDCT_WMV2 19
-#define FF_IDCT_FAAN 20
-#define FF_IDCT_EA 21
-#define FF_IDCT_SIMPLENEON 22
-#define FF_IDCT_SIMPLEALPHA 23
-#define FF_IDCT_BINK 24
+ attribute_deprecated int color_table_id;
+#endif
/**
- * slice count
- * - encoding: Set by libavcodec.
- * - decoding: Set by user (or 0).
+ * slice flags
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int slice_count;
+ int slice_flags;
+#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
+#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
+#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
+
/**
- * slice offsets in the frame in bytes
- * - encoding: Set/allocated by libavcodec.
- * - decoding: Set/allocated by user (or NULL).
+ * XVideo Motion Acceleration
+ * - encoding: forbidden
+ * - decoding: set by decoder
*/
- int *slice_offset;
+ int xvmc_acceleration;
/**
- * error concealment flags
- * - encoding: unused
- * - decoding: Set by user.
+ * macroblock decision mode
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int error_concealment;
-#define FF_EC_GUESS_MVS 1
-#define FF_EC_DEBLOCK 2
+ int mb_decision;
+#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
+#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
+#define FF_MB_DECISION_RD 2 ///< rate distortion
/**
- * dsp_mask could be add used to disable unwanted CPU features
- * CPU features (i.e. MMX, SSE. ...)
- *
- * With the FORCE flag you may instead enable given CPU features.
- * (Dangerous: Usable in case of misdetection, improper usage however will
- * result into program crash.)
+ * custom intra quantization matrix
+ * - encoding: Set by user, can be NULL.
+ * - decoding: Set by libavcodec.
*/
- unsigned dsp_mask;
+ uint16_t *intra_matrix;
/**
- * bits per sample/pixel from the demuxer (needed for huffyuv).
- * - encoding: Set by libavcodec.
- * - decoding: Set by user.
+ * custom inter quantization matrix
+ * - encoding: Set by user, can be NULL.
+ * - decoding: Set by libavcodec.
*/
- int bits_per_coded_sample;
+ uint16_t *inter_matrix;
/**
- * prediction method (needed for huffyuv)
+ * scene change detection threshold
+ * 0 is default, larger means fewer detected scene changes.
* - encoding: Set by user.
* - decoding: unused
*/
- int prediction_method;
-#define FF_PRED_LEFT 0
-#define FF_PRED_PLANE 1
-#define FF_PRED_MEDIAN 2
+ int scenechange_threshold;
/**
- * sample aspect ratio (0 if unknown)
- * That is the width of a pixel divided by the height of the pixel.
- * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
+ * noise reduction strength
* - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ * - decoding: unused
*/
- AVRational sample_aspect_ratio;
+ int noise_reduction;
+#if FF_API_INTER_THRESHOLD
/**
- * the picture in the bitstream
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
+ * @deprecated this field is unused
*/
- AVFrame *coded_frame;
+ attribute_deprecated int inter_threshold;
+#endif
+#if FF_API_MPV_GLOBAL_OPTS
/**
- * debug
- * - encoding: Set by user.
- * - decoding: Set by user.
+ * @deprecated use mpegvideo private options instead
*/
- int debug;
-#define FF_DEBUG_PICT_INFO 1
-#define FF_DEBUG_RC 2
-#define FF_DEBUG_BITSTREAM 4
-#define FF_DEBUG_MB_TYPE 8
-#define FF_DEBUG_QP 16
-#define FF_DEBUG_MV 32
-#define FF_DEBUG_DCT_COEFF 0x00000040
-#define FF_DEBUG_SKIP 0x00000080
-#define FF_DEBUG_STARTCODE 0x00000100
-#define FF_DEBUG_PTS 0x00000200
-#define FF_DEBUG_ER 0x00000400
-#define FF_DEBUG_MMCO 0x00000800
-#define FF_DEBUG_BUGS 0x00001000
-#define FF_DEBUG_VIS_QP 0x00002000
-#define FF_DEBUG_VIS_MB_TYPE 0x00004000
-#define FF_DEBUG_BUFFERS 0x00008000
-#define FF_DEBUG_THREADS 0x00010000
+ attribute_deprecated int quantizer_noise_shaping;
+#endif
/**
- * debug
+ * Motion estimation threshold below which no motion estimation is
+ * performed, but instead the user specified motion vectors are used.
+ *
* - encoding: Set by user.
- * - decoding: Set by user.
+ * - decoding: unused
*/
- int debug_mv;
-#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
-#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
-#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
+ int me_threshold;
/**
- * error
- * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
+ * Macroblock threshold below which the user specified macroblock types will be used.
+ * - encoding: Set by user.
* - decoding: unused
*/
- uint64_t error[AV_NUM_DATA_POINTERS];
+ int mb_threshold;
/**
- * motion estimation comparison function
+ * precision of the intra DC coefficient - 8
* - encoding: Set by user.
* - decoding: unused
*/
- int me_cmp;
+ int intra_dc_precision;
+
/**
- * subpixel motion estimation comparison function
- * - encoding: Set by user.
- * - decoding: unused
+ * Number of macroblock rows at the top which are skipped.
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int me_sub_cmp;
+ int skip_top;
+
/**
- * macroblock comparison function (not supported yet)
- * - encoding: Set by user.
- * - decoding: unused
+ * Number of macroblock rows at the bottom which are skipped.
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int mb_cmp;
+ int skip_bottom;
+
/**
- * interlaced DCT comparison function
+ * Border processing masking, raises the quantizer for mbs on the borders
+ * of the picture.
* - encoding: Set by user.
* - decoding: unused
*/
- int ildct_cmp;
-#define FF_CMP_SAD 0
-#define FF_CMP_SSE 1
-#define FF_CMP_SATD 2
-#define FF_CMP_DCT 3
-#define FF_CMP_PSNR 4
-#define FF_CMP_BIT 5
-#define FF_CMP_RD 6
-#define FF_CMP_ZERO 7
-#define FF_CMP_VSAD 8
-#define FF_CMP_VSSE 9
-#define FF_CMP_NSSE 10
-#define FF_CMP_W53 11
-#define FF_CMP_W97 12
-#define FF_CMP_DCTMAX 13
-#define FF_CMP_DCT264 14
-#define FF_CMP_CHROMA 256
+ float border_masking;
/**
- * ME diamond size & shape
+ * minimum MB lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*/
- int dia_size;
+ int mb_lmin;
/**
- * amount of previous MV predictors (2a+1 x 2a+1 square)
+ * maximum MB lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*/
- int last_predictor_count;
+ int mb_lmax;
/**
- * prepass for motion estimation
+ *
* - encoding: Set by user.
* - decoding: unused
*/
- int pre_me;
+ int me_penalty_compensation;
/**
- * motion estimation prepass comparison function
+ *
* - encoding: Set by user.
* - decoding: unused
*/
- int me_pre_cmp;
+ int bidir_refine;
/**
- * ME prepass diamond size & shape
+ *
* - encoding: Set by user.
* - decoding: unused
*/
- int pre_dia_size;
+ int brd_scale;
/**
- * subpel ME quality
+ * minimum GOP size
* - encoding: Set by user.
* - decoding: unused
*/
- int me_subpel_quality;
+ int keyint_min;
/**
- * callback to negotiate the pixelFormat
- * @param fmt is the list of formats which are supported by the codec,
- * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
- * The first is always the native one.
- * @return the chosen format
- * - encoding: unused
- * - decoding: Set by user, if not set the native format will be chosen.
+ * number of reference frames
+ * - encoding: Set by user.
+ * - decoding: Set by lavc.
*/
- enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
+ int refs;
/**
- * DTG active format information (additional aspect ratio
- * information only used in DVB MPEG-2 transport streams)
- * 0 if not set.
- *
- * - encoding: unused
- * - decoding: Set by decoder.
+ * chroma qp offset from luma
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int dtg_active_format;
-#define FF_DTG_AFD_SAME 8
-#define FF_DTG_AFD_4_3 9
-#define FF_DTG_AFD_16_9 10
-#define FF_DTG_AFD_14_9 11
-#define FF_DTG_AFD_4_3_SP_14_9 13
-#define FF_DTG_AFD_16_9_SP_14_9 14
-#define FF_DTG_AFD_SP_4_3 15
+ int chromaoffset;
/**
- * maximum motion estimation search range in subpel units
- * If 0 then no limit.
- *
+ * Multiplied by qscale for each frame and added to scene_change_score.
* - encoding: Set by user.
* - decoding: unused
*/
- int me_range;
+ int scenechange_factor;
/**
- * intra quantizer bias
+ *
+ * Note: Value depends upon the compare function used for fullpel ME.
* - encoding: Set by user.
* - decoding: unused
*/
- int intra_quant_bias;
-#define FF_DEFAULT_QUANT_BIAS 999999
+ int mv0_threshold;
/**
- * inter quantizer bias
+ * Adjust sensitivity of b_frame_strategy 1.
* - encoding: Set by user.
* - decoding: unused
*/
- int inter_quant_bias;
+ int b_sensitivity;
/**
- * color table ID
- * - encoding: unused
- * - decoding: Which clrtable should be used for 8bit RGB images.
- * Tables have to be stored somewhere. FIXME
+ * Chromaticity coordinates of the source primaries.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*/
- int color_table_id;
+ enum AVColorPrimaries color_primaries;
-#if FF_API_INTERNAL_CONTEXT
/**
- * internal_buffer count
- * Don't touch, used by libavcodec default_get_buffer().
- * @deprecated this field was moved to an internal context
+ * Color Transfer Characteristic.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*/
- attribute_deprecated int internal_buffer_count;
+ enum AVColorTransferCharacteristic color_trc;
/**
- * internal_buffers
- * Don't touch, used by libavcodec default_get_buffer().
- * @deprecated this field was moved to an internal context
+ * YUV colorspace type.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*/
- attribute_deprecated void *internal_buffer;
-#endif
+ enum AVColorSpace colorspace;
/**
- * Global quality for codecs which cannot change it per frame.
- * This should be proportional to MPEG-1/2/4 qscale.
- * - encoding: Set by user.
- * - decoding: unused
+ * MPEG vs JPEG YUV range.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*/
- int global_quality;
+ enum AVColorRange color_range;
-#define FF_CODER_TYPE_VLC 0
-#define FF_CODER_TYPE_AC 1
-#define FF_CODER_TYPE_RAW 2
-#define FF_CODER_TYPE_RLE 3
-#define FF_CODER_TYPE_DEFLATE 4
/**
- * coder type
- * - encoding: Set by user.
- * - decoding: unused
+ * This defines the location of chroma samples.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*/
- int coder_type;
+ enum AVChromaLocation chroma_sample_location;
/**
- * context model
- * - encoding: Set by user.
+ * Number of slices.
+ * Indicates number of picture subdivisions. Used for parallelized
+ * decoding.
+ * - encoding: Set by user
* - decoding: unused
*/
- int context_model;
-#if 0
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
+ int slices;
+
+ /** Field order
+ * - encoding: set by libavcodec
+ * - decoding: Set by libavcodec
*/
- uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
-#endif
+ enum AVFieldOrder field_order;
+
+ /* audio only */
+ int sample_rate; ///< samples per second
+ int channels; ///< number of audio channels
/**
- * slice flags
- * - encoding: unused
- * - decoding: Set by user.
+ * audio sample format
+ * - encoding: Set by user.
+ * - decoding: Set by libavcodec.
*/
- int slice_flags;
-#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
-#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
-#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
+ enum AVSampleFormat sample_fmt; ///< sample format
+ /* The following data should not be initialized. */
/**
- * XVideo Motion Acceleration
- * - encoding: forbidden
- * - decoding: set by decoder
+ * Samples per packet, initialized when calling 'init'.
*/
- int xvmc_acceleration;
+ int frame_size;
/**
- * macroblock decision mode
- * - encoding: Set by user.
- * - decoding: unused
+ * Frame counter, set by libavcodec.
+ *
+ * - decoding: total number of frames returned from the decoder so far.
+ * - encoding: total number of frames passed to the encoder so far.
+ *
+ * @note the counter is not incremented if encoding/decoding resulted in
+ * an error.
*/
- int mb_decision;
-#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
-#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
-#define FF_MB_DECISION_RD 2 ///< rate distortion
+ int frame_number;
/**
- * custom intra quantization matrix
- * - encoding: Set by user, can be NULL.
- * - decoding: Set by libavcodec.
+ * number of bytes per packet if constant and known or 0
+ * Used by some WAV based audio codecs.
*/
- uint16_t *intra_matrix;
+ int block_align;
/**
- * custom inter quantization matrix
- * - encoding: Set by user, can be NULL.
- * - decoding: Set by libavcodec.
+ * Audio cutoff bandwidth (0 means "automatic")
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- uint16_t *inter_matrix;
+ int cutoff;
+#if FF_API_REQUEST_CHANNELS
/**
- * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * This is used to work around some encoder bugs.
+ * Decoder should decode to this many channels if it can (0 for default)
* - encoding: unused
- * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
+ * - decoding: Set by user.
+ * @deprecated Deprecated in favor of request_channel_layout.
*/
- unsigned int stream_codec_tag;
+ int request_channels;
+#endif
/**
- * scene change detection threshold
- * 0 is default, larger means fewer detected scene changes.
- * - encoding: Set by user.
- * - decoding: unused
+ * Audio channel layout.
+ * - encoding: set by user.
+ * - decoding: set by libavcodec.
*/
- int scenechange_threshold;
+ uint64_t channel_layout;
/**
- * minimum Lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
+ * Request decoder to use this channel layout if it can (0 for default)
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int lmin;
+ uint64_t request_channel_layout;
/**
- * maximum Lagrange multipler
+ * Type of service that the audio stream conveys.
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by libavcodec.
*/
- int lmax;
+ enum AVAudioServiceType audio_service_type;
-#if FF_API_PALETTE_CONTROL
/**
- * palette control structure
- * - encoding: ??? (no palette-enabled encoder yet)
+ * Used to request a sample format from the decoder.
+ * - encoding: unused.
* - decoding: Set by user.
*/
- struct AVPaletteControl *palctrl;
-#endif
+ enum AVSampleFormat request_sample_fmt;
/**
- * noise reduction strength
- * - encoding: Set by user.
- * - decoding: unused
+ * Called at the beginning of each frame to get a buffer for it.
+ *
+ * The function will set AVFrame.data[], AVFrame.linesize[].
+ * AVFrame.extended_data[] must also be set, but it should be the same as
+ * AVFrame.data[] except for planar audio with more channels than can fit
+ * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as
+ * many data pointers as it can hold.
+ *
+ * if CODEC_CAP_DR1 is not set then get_buffer() must call
+ * avcodec_default_get_buffer() instead of providing buffers allocated by
+ * some other means.
+ *
+ * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't
+ * need it. avcodec_default_get_buffer() aligns the output buffer properly,
+ * but if get_buffer() is overridden then alignment considerations should
+ * be taken into account.
+ *
+ * @see avcodec_default_get_buffer()
+ *
+ * Video:
+ *
+ * If pic.reference is set then the frame will be read later by libavcodec.
+ * avcodec_align_dimensions2() should be used to find the required width and
+ * height, as they normally need to be rounded up to the next multiple of 16.
+ *
+ * If frame multithreading is used and thread_safe_callbacks is set,
+ * it may be called from a different thread, but not from more than one at
+ * once. Does not need to be reentrant.
+ *
+ * @see release_buffer(), reget_buffer()
+ * @see avcodec_align_dimensions2()
+ *
+ * Audio:
+ *
+ * Decoders request a buffer of a particular size by setting
+ * AVFrame.nb_samples prior to calling get_buffer(). The decoder may,
+ * however, utilize only part of the buffer by setting AVFrame.nb_samples
+ * to a smaller value in the output frame.
+ *
+ * Decoders cannot use the buffer after returning from
+ * avcodec_decode_audio4(), so they will not call release_buffer(), as it
+ * is assumed to be released immediately upon return.
+ *
+ * As a convenience, av_samples_get_buffer_size() and
+ * av_samples_fill_arrays() in libavutil may be used by custom get_buffer()
+ * functions to find the required data size and to fill data pointers and
+ * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
+ * since all planes must be the same size.
+ *
+ * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
+ *
+ * - encoding: unused
+ * - decoding: Set by libavcodec, user can override.
*/
- int noise_reduction;
+ int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
+
+ /**
+ * Called to release buffers which were allocated with get_buffer.
+ * A released buffer can be reused in get_buffer().
+ * pic.data[*] must be set to NULL.
+ * May be called from a different thread if frame multithreading is used,
+ * but not by more than one thread at once, so does not need to be reentrant.
+ * - encoding: unused
+ * - decoding: Set by libavcodec, user can override.
+ */
+ void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
/**
* Called at the beginning of a frame to get cr buffer for it.
*/
int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
+
+ /* - encoding parameters */
+ float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
+ float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
+
/**
- * Number of bits which should be loaded into the rc buffer before decoding starts.
+ * minimum quantizer
* - encoding: Set by user.
* - decoding: unused
*/
- int rc_initial_buffer_occupancy;
+ int qmin;
/**
- *
+ * maximum quantizer
* - encoding: Set by user.
* - decoding: unused
*/
- int inter_threshold;
+ int qmax;
/**
- * CODEC_FLAG2_*
+ * maximum quantizer difference between frames
* - encoding: Set by user.
- * - decoding: Set by user.
+ * - decoding: unused
*/
- int flags2;
+ int max_qdiff;
/**
- * Simulates errors in the bitstream to test error concealment.
+ * ratecontrol qmin qmax limiting method
+ * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
* - encoding: Set by user.
* - decoding: unused
*/
- int error_rate;
+ float rc_qsquish;
+
+ float rc_qmod_amp;
+ int rc_qmod_freq;
-#if FF_API_ANTIALIAS_ALGO
/**
- * MP3 antialias algorithm, see FF_AA_* below.
- * - encoding: unused
- * - decoding: Set by user.
+ * decoder bitstream buffer size
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- attribute_deprecated int antialias_algo;
-#define FF_AA_AUTO 0
-#define FF_AA_FASTINT 1 //not implemented yet
-#define FF_AA_INT 2
-#define FF_AA_FLOAT 3
-#endif
+ int rc_buffer_size;
/**
- * quantizer noise shaping
- * - encoding: Set by user.
+ * ratecontrol override, see RcOverride
+ * - encoding: Allocated/set/freed by user.
* - decoding: unused
*/
- int quantizer_noise_shaping;
+ int rc_override_count;
+ RcOverride *rc_override;
/**
- * thread count
- * is used to decide how many independent tasks should be passed to execute()
- * - encoding: Set by user.
- * - decoding: Set by user.
+ * rate control equation
+ * - encoding: Set by user
+ * - decoding: unused
*/
- int thread_count;
+ const char *rc_eq;
/**
- * The codec may call this to execute several independent things.
- * It will return only after finishing all tasks.
- * The user may replace this with some multithreaded implementation,
- * the default implementation will execute the parts serially.
- * @param count the number of things to execute
- * - encoding: Set by libavcodec, user can override.
- * - decoding: Set by libavcodec, user can override.
- */
- int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
-
- /**
- * thread opaque
- * Can be used by execute() to store some per AVCodecContext stuff.
- * - encoding: set by execute()
- * - decoding: set by execute()
- */
- void *thread_opaque;
-
- /**
- * Motion estimation threshold below which no motion estimation is
- * performed, but instead the user specified motion vectors are used.
- *
+ * maximum bitrate
* - encoding: Set by user.
* - decoding: unused
*/
- int me_threshold;
+ int rc_max_rate;
/**
- * Macroblock threshold below which the user specified macroblock types will be used.
+ * minimum bitrate
* - encoding: Set by user.
* - decoding: unused
*/
- int mb_threshold;
+ int rc_min_rate;
+
+ float rc_buffer_aggressivity;
/**
- * precision of the intra DC coefficient - 8
+ * initial complexity for pass1 ratecontrol
* - encoding: Set by user.
* - decoding: unused
*/
- int intra_dc_precision;
+ float rc_initial_cplx;
/**
- * noise vs. sse weight for the nsse comparsion function
+ * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: unused.
*/
- int nsse_weight;
+ float rc_max_available_vbv_use;
/**
- * Number of macroblock rows at the top which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
+ * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
+ * - encoding: Set by user.
+ * - decoding: unused.
*/
- int skip_top;
+ float rc_min_vbv_overflow_use;
/**
- * Number of macroblock rows at the bottom which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
+ * Number of bits which should be loaded into the rc buffer before decoding starts.
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int skip_bottom;
+ int rc_initial_buffer_occupancy;
+#define FF_CODER_TYPE_VLC 0
+#define FF_CODER_TYPE_AC 1
+#define FF_CODER_TYPE_RAW 2
+#define FF_CODER_TYPE_RLE 3
+#define FF_CODER_TYPE_DEFLATE 4
/**
- * profile
+ * coder type
* - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ * - decoding: unused
*/
- int profile;
-#define FF_PROFILE_UNKNOWN -99
-#define FF_PROFILE_RESERVED -100
-
-#define FF_PROFILE_AAC_MAIN 0
-#define FF_PROFILE_AAC_LOW 1
-#define FF_PROFILE_AAC_SSR 2
-#define FF_PROFILE_AAC_LTP 3
-
-#define FF_PROFILE_DTS 20
-#define FF_PROFILE_DTS_ES 30
-#define FF_PROFILE_DTS_96_24 40
-#define FF_PROFILE_DTS_HD_HRA 50
-#define FF_PROFILE_DTS_HD_MA 60
-
-#define FF_PROFILE_MPEG2_422 0
-#define FF_PROFILE_MPEG2_HIGH 1
-#define FF_PROFILE_MPEG2_SS 2
-#define FF_PROFILE_MPEG2_SNR_SCALABLE 3
-#define FF_PROFILE_MPEG2_MAIN 4
-#define FF_PROFILE_MPEG2_SIMPLE 5
-
-#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
-#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
-
-#define FF_PROFILE_H264_BASELINE 66
-#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
-#define FF_PROFILE_H264_MAIN 77
-#define FF_PROFILE_H264_EXTENDED 88
-#define FF_PROFILE_H264_HIGH 100
-#define FF_PROFILE_H264_HIGH_10 110
-#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_HIGH_422 122
-#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_HIGH_444 144
-#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244
-#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_CAVLC_444 44
-
-#define FF_PROFILE_VC1_SIMPLE 0
-#define FF_PROFILE_VC1_MAIN 1
-#define FF_PROFILE_VC1_COMPLEX 2
-#define FF_PROFILE_VC1_ADVANCED 3
-
-#define FF_PROFILE_MPEG4_SIMPLE 0
-#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1
-#define FF_PROFILE_MPEG4_CORE 2
-#define FF_PROFILE_MPEG4_MAIN 3
-#define FF_PROFILE_MPEG4_N_BIT 4
-#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5
-#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
-#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
-#define FF_PROFILE_MPEG4_HYBRID 8
-#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
-#define FF_PROFILE_MPEG4_CORE_SCALABLE 10
-#define FF_PROFILE_MPEG4_ADVANCED_CODING 11
-#define FF_PROFILE_MPEG4_ADVANCED_CORE 12
-#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
-#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14
-#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15
+ int coder_type;
/**
- * level
+ * context model
* - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ * - decoding: unused
*/
- int level;
-#define FF_LEVEL_UNKNOWN -99
+ int context_model;
/**
- * low resolution decoding, 1-> 1/2 size, 2->1/4 size
- * - encoding: unused
- * - decoding: Set by user.
+ * minimum Lagrange multipler
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int lowres;
+ int lmin;
/**
- * Bitstream width / height, may be different from width/height if lowres enabled.
- * - encoding: unused
- * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
+ * maximum Lagrange multipler
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int coded_width, coded_height;
+ int lmax;
/**
* frame skip threshold
int frame_skip_cmp;
/**
- * Border processing masking, raises the quantizer for mbs on the borders
- * of the picture.
+ * trellis RD quantization
* - encoding: Set by user.
* - decoding: unused
*/
- float border_masking;
+ int trellis;
/**
- * minimum MB lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*/
- int mb_lmin;
+ int min_prediction_order;
/**
- * maximum MB lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*/
- int mb_lmax;
+ int max_prediction_order;
/**
- *
+ * GOP timecode frame start number, in non drop frame format
* - encoding: Set by user.
* - decoding: unused
*/
- int me_penalty_compensation;
+ int64_t timecode_frame_start;
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_loop_filter;
+ /* The RTP callback: This function is called */
+ /* every time the encoder has a packet to send. */
+ /* It depends on the encoder if the data starts */
+ /* with a Start Code (it should). H.263 does. */
+ /* mb_nb contains the number of macroblocks */
+ /* encoded in the RTP payload. */
+ void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_idct;
+ int rtp_payload_size; /* The size of the RTP payload: the coder will */
+ /* do its best to deliver a chunk with size */
+ /* below rtp_payload_size, the chunk will start */
+ /* with a start code on some codecs like H.263. */
+ /* This doesn't take account of any particular */
+ /* headers inside the transmitted RTP payload. */
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_frame;
+ /* statistics, used for 2-pass encoding */
+ int mv_bits;
+ int header_bits;
+ int i_tex_bits;
+ int p_tex_bits;
+ int i_count;
+ int p_count;
+ int skip_count;
+ int misc_bits;
/**
- *
- * - encoding: Set by user.
+ * number of bits used for the previously encoded frame
+ * - encoding: Set by libavcodec.
* - decoding: unused
*/
- int bidir_refine;
+ int frame_bits;
/**
- *
- * - encoding: Set by user.
+ * pass1 encoding statistics output buffer
+ * - encoding: Set by libavcodec.
* - decoding: unused
*/
- int brd_scale;
+ char *stats_out;
-#if FF_API_X264_GLOBAL_OPTS
/**
- * constant rate factor - quality-based VBR - values ~correspond to qps
- * - encoding: Set by user.
+ * pass2 encoding statistics input buffer
+ * Concatenated stuff from stats_out of pass1 should be placed here.
+ * - encoding: Allocated/set/freed by user.
* - decoding: unused
- * @deprecated use 'crf' libx264 private option
*/
- attribute_deprecated float crf;
+ char *stats_in;
/**
- * constant quantization parameter rate control method
- * - encoding: Set by user.
- * - decoding: unused
- * @deprecated use 'cqp' libx264 private option
+ * Work around bugs in encoders which sometimes cannot be detected automatically.
+ * - encoding: Set by user
+ * - decoding: Set by user
*/
- attribute_deprecated int cqp;
-#endif
+ int workaround_bugs;
+#define FF_BUG_AUTODETECT 1 ///< autodetection
+#define FF_BUG_OLD_MSMPEG4 2
+#define FF_BUG_XVID_ILACE 4
+#define FF_BUG_UMP4 8
+#define FF_BUG_NO_PADDING 16
+#define FF_BUG_AMV 32
+#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
+#define FF_BUG_QPEL_CHROMA 64
+#define FF_BUG_STD_QPEL 128
+#define FF_BUG_QPEL_CHROMA2 256
+#define FF_BUG_DIRECT_BLOCKSIZE 512
+#define FF_BUG_EDGE 1024
+#define FF_BUG_HPEL_CHROMA 2048
+#define FF_BUG_DC_CLIP 4096
+#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
+#define FF_BUG_TRUNCATED 16384
/**
- * minimum GOP size
+ * strictly follow the standard (MPEG4, ...).
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by user.
+ * Setting this to STRICT or higher means the encoder and decoder will
+ * generally do stupid things, whereas setting it to unofficial or lower
+ * will mean the encoder might produce output that is not supported by all
+ * spec-compliant decoders. Decoders don't differentiate between normal,
+ * unofficial and experimental (that is, they always try to decode things
+ * when they can) unless they are explicitly asked to behave stupidly
+ * (=strictly conform to the specs)
*/
- int keyint_min;
+ int strict_std_compliance;
+#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software.
+#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
+#define FF_COMPLIANCE_NORMAL 0
+#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions
+#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
/**
- * number of reference frames
- * - encoding: Set by user.
- * - decoding: Set by lavc.
- */
- int refs;
-
- /**
- * chroma qp offset from luma
- * - encoding: Set by user.
- * - decoding: unused
- */
- int chromaoffset;
-
-#if FF_API_X264_GLOBAL_OPTS
- /**
- * Influence how often B-frames are used.
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int bframebias;
-#endif
-
- /**
- * trellis RD quantization
- * - encoding: Set by user.
- * - decoding: unused
- */
- int trellis;
-
-#if FF_API_X264_GLOBAL_OPTS
- /**
- * Reduce fluctuations in qp (before curve compression).
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated float complexityblur;
-
- /**
- * in-loop deblocking filter alphac0 parameter
- * alpha is in the range -6...6
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int deblockalpha;
-
- /**
- * in-loop deblocking filter beta parameter
- * beta is in the range -6...6
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int deblockbeta;
-
- /**
- * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int partitions;
-#define X264_PART_I4X4 0x001 /* Analyze i4x4 */
-#define X264_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
-#define X264_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
-#define X264_PART_P4X4 0x020 /* Analyze p8x4, p4x8, p4x4 */
-#define X264_PART_B8X8 0x100 /* Analyze b16x8, b8x16 and b8x8 */
-
- /**
- * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int directpred;
-#endif
-
- /**
- * Audio cutoff bandwidth (0 means "automatic")
- * - encoding: Set by user.
- * - decoding: unused
- */
- int cutoff;
-
- /**
- * Multiplied by qscale for each frame and added to scene_change_score.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int scenechange_factor;
-
- /**
- *
- * Note: Value depends upon the compare function used for fullpel ME.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mv0_threshold;
-
- /**
- * Adjust sensitivity of b_frame_strategy 1.
- * - encoding: Set by user.
- * - decoding: unused
+ * error concealment flags
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int b_sensitivity;
+ int error_concealment;
+#define FF_EC_GUESS_MVS 1
+#define FF_EC_DEBLOCK 2
/**
+ * debug
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by user.
*/
- int compression_level;
-#define FF_COMPRESSION_DEFAULT -1
+ int debug;
+#define FF_DEBUG_PICT_INFO 1
+#define FF_DEBUG_RC 2
+#define FF_DEBUG_BITSTREAM 4
+#define FF_DEBUG_MB_TYPE 8
+#define FF_DEBUG_QP 16
+#define FF_DEBUG_MV 32
+#define FF_DEBUG_DCT_COEFF 0x00000040
+#define FF_DEBUG_SKIP 0x00000080
+#define FF_DEBUG_STARTCODE 0x00000100
+#define FF_DEBUG_PTS 0x00000200
+#define FF_DEBUG_ER 0x00000400
+#define FF_DEBUG_MMCO 0x00000800
+#define FF_DEBUG_BUGS 0x00001000
+#define FF_DEBUG_VIS_QP 0x00002000
+#define FF_DEBUG_VIS_MB_TYPE 0x00004000
+#define FF_DEBUG_BUFFERS 0x00008000
+#define FF_DEBUG_THREADS 0x00010000
/**
+ * debug
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by user.
*/
- int min_prediction_order;
+ int debug_mv;
+#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
+#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
+#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
/**
- * - encoding: Set by user.
- * - decoding: unused
+ * Error recognition; may misdetect some more or less valid parts as errors.
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- int max_prediction_order;
+ int err_recognition;
+#define AV_EF_CRCCHECK (1<<0)
+#define AV_EF_BITSTREAM (1<<1)
+#define AV_EF_BUFFER (1<<2)
+#define AV_EF_EXPLODE (1<<3)
-#if FF_API_FLAC_GLOBAL_OPTS
/**
- * @name FLAC options
- * @deprecated Use FLAC encoder private options instead.
- * @{
+ * opaque 64bit number (generally a PTS) that will be reordered and
+ * output in AVFrame.reordered_opaque
+ * @deprecated in favor of pkt_pts
+ * - encoding: unused
+ * - decoding: Set by user.
*/
+ int64_t reordered_opaque;
/**
- * LPC coefficient precision - used by FLAC encoder
- * - encoding: Set by user.
- * - decoding: unused
+ * Hardware accelerator in use
+ * - encoding: unused.
+ * - decoding: Set by libavcodec
*/
- attribute_deprecated int lpc_coeff_precision;
+ struct AVHWAccel *hwaccel;
/**
- * search method for selecting prediction order
- * - encoding: Set by user.
- * - decoding: unused
+ * Hardware accelerator context.
+ * For some hardware accelerators, a global context needs to be
+ * provided by the user. In that case, this holds display-dependent
+ * data Libav cannot instantiate itself. Please refer to the
+ * Libav HW accelerator documentation to know how to fill this
+ * is. e.g. for VA API, this is a struct vaapi_context.
+ * - encoding: unused
+ * - decoding: Set by user
*/
- attribute_deprecated int prediction_order_method;
+ void *hwaccel_context;
/**
- * - encoding: Set by user.
+ * error
+ * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
* - decoding: unused
*/
- attribute_deprecated int min_partition_order;
+ uint64_t error[AV_NUM_DATA_POINTERS];
/**
+ * DCT algorithm, see FF_DCT_* below
* - encoding: Set by user.
* - decoding: unused
*/
- attribute_deprecated int max_partition_order;
- /**
- * @}
- */
-#endif
+ int dct_algo;
+#define FF_DCT_AUTO 0
+#define FF_DCT_FASTINT 1
+#define FF_DCT_INT 2
+#define FF_DCT_MMX 3
+#define FF_DCT_ALTIVEC 5
+#define FF_DCT_FAAN 6
/**
- * GOP timecode frame start number, in non drop frame format
+ * IDCT algorithm, see FF_IDCT_* below.
* - encoding: Set by user.
- * - decoding: unused
- */
- int64_t timecode_frame_start;
-
-#if FF_API_REQUEST_CHANNELS
- /**
- * Decoder should decode to this many channels if it can (0 for default)
- * - encoding: unused
* - decoding: Set by user.
- * @deprecated Deprecated in favor of request_channel_layout.
*/
- int request_channels;
-#endif
+ int idct_algo;
+#define FF_IDCT_AUTO 0
+#define FF_IDCT_INT 1
+#define FF_IDCT_SIMPLE 2
+#define FF_IDCT_SIMPLEMMX 3
+#define FF_IDCT_LIBMPEG2MMX 4
+#define FF_IDCT_MMI 5
+#define FF_IDCT_ARM 7
+#define FF_IDCT_ALTIVEC 8
+#define FF_IDCT_SH4 9
+#define FF_IDCT_SIMPLEARM 10
+#define FF_IDCT_H264 11
+#define FF_IDCT_VP3 12
+#define FF_IDCT_IPP 13
+#define FF_IDCT_XVIDMMX 14
+#define FF_IDCT_CAVS 15
+#define FF_IDCT_SIMPLEARMV5TE 16
+#define FF_IDCT_SIMPLEARMV6 17
+#define FF_IDCT_SIMPLEVIS 18
+#define FF_IDCT_WMV2 19
+#define FF_IDCT_FAAN 20
+#define FF_IDCT_EA 21
+#define FF_IDCT_SIMPLENEON 22
+#define FF_IDCT_SIMPLEALPHA 23
+#define FF_IDCT_BINK 24
-#if FF_API_DRC_SCALE
/**
- * Percentage of dynamic range compression to be applied by the decoder.
- * The default value is 1.0, corresponding to full compression.
- * - encoding: unused
- * - decoding: Set by user.
- * @deprecated use AC3 decoder private option instead.
+ * dsp_mask could be add used to disable unwanted CPU features
+ * CPU features (i.e. MMX, SSE. ...)
+ *
+ * With the FORCE flag you may instead enable given CPU features.
+ * (Dangerous: Usable in case of misdetection, improper usage however will
+ * result into program crash.)
*/
- attribute_deprecated float drc_scale;
-#endif
+ unsigned dsp_mask;
/**
- * opaque 64bit number (generally a PTS) that will be reordered and
- * output in AVFrame.reordered_opaque
- * @deprecated in favor of pkt_pts
- * - encoding: unused
+ * bits per sample/pixel from the demuxer (needed for huffyuv).
+ * - encoding: Set by libavcodec.
* - decoding: Set by user.
*/
- int64_t reordered_opaque;
+ int bits_per_coded_sample;
/**
* Bits per sample/pixel of internal libavcodec pixel/sample format.
int bits_per_raw_sample;
/**
- * Audio channel layout.
- * - encoding: set by user.
- * - decoding: set by libavcodec.
- */
- uint64_t channel_layout;
-
- /**
- * Request decoder to use this channel layout if it can (0 for default)
+ * low resolution decoding, 1-> 1/2 size, 2->1/4 size
* - encoding: unused
* - decoding: Set by user.
*/
- uint64_t request_channel_layout;
+ int lowres;
/**
- * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
- * - encoding: Set by user.
- * - decoding: unused.
+ * the picture in the bitstream
+ * - encoding: Set by libavcodec.
+ * - decoding: Set by libavcodec.
*/
- float rc_max_available_vbv_use;
+ AVFrame *coded_frame;
/**
- * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
+ * thread count
+ * is used to decide how many independent tasks should be passed to execute()
* - encoding: Set by user.
- * - decoding: unused.
- */
- float rc_min_vbv_overflow_use;
-
- /**
- * Hardware accelerator in use
- * - encoding: unused.
- * - decoding: Set by libavcodec
+ * - decoding: Set by user.
*/
- struct AVHWAccel *hwaccel;
+ int thread_count;
/**
- * For some codecs, the time base is closer to the field rate than the frame rate.
- * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
- * if no telecine is used ...
+ * Which multithreading methods to use.
+ * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
+ * so clients which cannot provide future frames should not use it.
*
- * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
- */
- int ticks_per_frame;
-
- /**
- * Hardware accelerator context.
- * For some hardware accelerators, a global context needs to be
- * provided by the user. In that case, this holds display-dependent
- * data Libav cannot instantiate itself. Please refer to the
- * Libav HW accelerator documentation to know how to fill this
- * is. e.g. for VA API, this is a struct vaapi_context.
- * - encoding: unused
- * - decoding: Set by user
- */
- void *hwaccel_context;
-
- /**
- * Chromaticity coordinates of the source primaries.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVColorPrimaries color_primaries;
-
- /**
- * Color Transfer Characteristic.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * - encoding: Set by user, otherwise the default is used.
+ * - decoding: Set by user, otherwise the default is used.
*/
- enum AVColorTransferCharacteristic color_trc;
+ int thread_type;
+#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once
+#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once
/**
- * YUV colorspace type.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * Which multithreading methods are in use by the codec.
+ * - encoding: Set by libavcodec.
+ * - decoding: Set by libavcodec.
*/
- enum AVColorSpace colorspace;
+ int active_thread_type;
/**
- * MPEG vs JPEG YUV range.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * Set by the client if its custom get_buffer() callback can be called
+ * from another thread, which allows faster multithreaded decoding.
+ * draw_horiz_band() will be called from other threads regardless of this setting.
+ * Ignored if the default get_buffer() is used.
+ * - encoding: Set by user.
+ * - decoding: Set by user.
*/
- enum AVColorRange color_range;
+ int thread_safe_callbacks;
/**
- * This defines the location of chroma samples.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * The codec may call this to execute several independent things.
+ * It will return only after finishing all tasks.
+ * The user may replace this with some multithreaded implementation,
+ * the default implementation will execute the parts serially.
+ * @param count the number of things to execute
+ * - encoding: Set by libavcodec, user can override.
+ * - decoding: Set by libavcodec, user can override.
*/
- enum AVChromaLocation chroma_sample_location;
+ int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
/**
* The codec may call this to execute several independent things.
*/
int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
-#if FF_API_X264_GLOBAL_OPTS
- /**
- * explicit P-frame weighted prediction analysis method
- * 0: off
- * 1: fast blind weighting (one reference duplicate with -1 offset)
- * 2: smart weighting (full fade detection analysis)
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int weighted_p_pred;
-
- /**
- * AQ mode
- * 0: Disabled
- * 1: Variance AQ (complexity mask)
- * 2: Auto-variance AQ (experimental)
- * - encoding: Set by user
- * - decoding: unused
- */
- attribute_deprecated int aq_mode;
-
/**
- * AQ strength
- * Reduces blocking and blurring in flat and textured areas.
- * - encoding: Set by user
- * - decoding: unused
- */
- attribute_deprecated float aq_strength;
-
- /**
- * PSY RD
- * Strength of psychovisual optimization
- * - encoding: Set by user
- * - decoding: unused
- */
- attribute_deprecated float psy_rd;
-
- /**
- * PSY trellis
- * Strength of psychovisual optimization
- * - encoding: Set by user
- * - decoding: unused
+ * thread opaque
+ * Can be used by execute() to store some per AVCodecContext stuff.
+ * - encoding: set by execute()
+ * - decoding: set by execute()
*/
- attribute_deprecated float psy_trellis;
+ void *thread_opaque;
/**
- * RC lookahead
- * Number of frames for frametype and ratecontrol lookahead
- * - encoding: Set by user
+ * noise vs. sse weight for the nsse comparsion function
+ * - encoding: Set by user.
* - decoding: unused
*/
- attribute_deprecated int rc_lookahead;
+ int nsse_weight;
/**
- * Constant rate factor maximum
- * With CRF encoding mode and VBV restrictions enabled, prevents quality from being worse
- * than crf_max, even if doing so would violate VBV restrictions.
+ * profile
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by libavcodec.
*/
- attribute_deprecated float crf_max;
-#endif
-
- int log_level_offset;
+ int profile;
+#define FF_PROFILE_UNKNOWN -99
+#define FF_PROFILE_RESERVED -100
-#if FF_API_FLAC_GLOBAL_OPTS
- /**
- * Determine which LPC analysis algorithm to use.
- * - encoding: Set by user
- * - decoding: unused
- */
- attribute_deprecated enum AVLPCType lpc_type;
+#define FF_PROFILE_AAC_MAIN 0
+#define FF_PROFILE_AAC_LOW 1
+#define FF_PROFILE_AAC_SSR 2
+#define FF_PROFILE_AAC_LTP 3
- /**
- * Number of passes to use for Cholesky factorization during LPC analysis
- * - encoding: Set by user
- * - decoding: unused
- */
- attribute_deprecated int lpc_passes;
-#endif
+#define FF_PROFILE_DTS 20
+#define FF_PROFILE_DTS_ES 30
+#define FF_PROFILE_DTS_96_24 40
+#define FF_PROFILE_DTS_HD_HRA 50
+#define FF_PROFILE_DTS_HD_MA 60
- /**
- * Number of slices.
- * Indicates number of picture subdivisions. Used for parallelized
- * decoding.
- * - encoding: Set by user
- * - decoding: unused
- */
- int slices;
+#define FF_PROFILE_MPEG2_422 0
+#define FF_PROFILE_MPEG2_HIGH 1
+#define FF_PROFILE_MPEG2_SS 2
+#define FF_PROFILE_MPEG2_SNR_SCALABLE 3
+#define FF_PROFILE_MPEG2_MAIN 4
+#define FF_PROFILE_MPEG2_SIMPLE 5
- /**
- * Header containing style information for text subtitles.
- * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
- * [Script Info] and [V4+ Styles] section, plus the [Events] line and
- * the Format line following. It shouldn't include any Dialogue line.
- * - encoding: Set/allocated/freed by user (before avcodec_open2())
- * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
- */
- uint8_t *subtitle_header;
- int subtitle_header_size;
+#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
+#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
- /**
- * Current packet as passed into the decoder, to avoid having
- * to pass the packet into every function. Currently only valid
- * inside lavc and get/release_buffer callbacks.
- * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
- * - encoding: unused
- */
- AVPacket *pkt;
+#define FF_PROFILE_H264_BASELINE 66
+#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
+#define FF_PROFILE_H264_MAIN 77
+#define FF_PROFILE_H264_EXTENDED 88
+#define FF_PROFILE_H264_HIGH 100
+#define FF_PROFILE_H264_HIGH_10 110
+#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
+#define FF_PROFILE_H264_HIGH_422 122
+#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
+#define FF_PROFILE_H264_HIGH_444 144
+#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244
+#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
+#define FF_PROFILE_H264_CAVLC_444 44
-#if FF_API_INTERNAL_CONTEXT
- /**
- * Whether this is a copy of the context which had init() called on it.
- * This is used by multithreading - shared tables and picture pointers
- * should be freed from the original context only.
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- *
- * @deprecated this field has been moved to an internal context
- */
- attribute_deprecated int is_copy;
-#endif
+#define FF_PROFILE_VC1_SIMPLE 0
+#define FF_PROFILE_VC1_MAIN 1
+#define FF_PROFILE_VC1_COMPLEX 2
+#define FF_PROFILE_VC1_ADVANCED 3
- /**
- * Which multithreading methods to use.
- * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
- * so clients which cannot provide future frames should not use it.
- *
- * - encoding: Set by user, otherwise the default is used.
- * - decoding: Set by user, otherwise the default is used.
- */
- int thread_type;
-#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once
-#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once
+#define FF_PROFILE_MPEG4_SIMPLE 0
+#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1
+#define FF_PROFILE_MPEG4_CORE 2
+#define FF_PROFILE_MPEG4_MAIN 3
+#define FF_PROFILE_MPEG4_N_BIT 4
+#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5
+#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
+#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
+#define FF_PROFILE_MPEG4_HYBRID 8
+#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
+#define FF_PROFILE_MPEG4_CORE_SCALABLE 10
+#define FF_PROFILE_MPEG4_ADVANCED_CODING 11
+#define FF_PROFILE_MPEG4_ADVANCED_CORE 12
+#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
+#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14
+#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15
/**
- * Which multithreading methods are in use by the codec.
- * - encoding: Set by libavcodec.
+ * level
+ * - encoding: Set by user.
* - decoding: Set by libavcodec.
*/
- int active_thread_type;
+ int level;
+#define FF_LEVEL_UNKNOWN -99
/**
- * Set by the client if its custom get_buffer() callback can be called
- * from another thread, which allows faster multithreaded decoding.
- * draw_horiz_band() will be called from other threads regardless of this setting.
- * Ignored if the default get_buffer() is used.
- * - encoding: Set by user.
+ *
+ * - encoding: unused
* - decoding: Set by user.
*/
- int thread_safe_callbacks;
+ enum AVDiscard skip_loop_filter;
/**
- * VBV delay coded in the last frame (in periods of a 27 MHz clock).
- * Used for compliant TS muxing.
- * - encoding: Set by libavcodec.
- * - decoding: unused.
+ *
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- uint64_t vbv_delay;
+ enum AVDiscard skip_idct;
/**
- * Type of service that the audio stream conveys.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ *
+ * - encoding: unused
+ * - decoding: Set by user.
*/
- enum AVAudioServiceType audio_service_type;
+ enum AVDiscard skip_frame;
/**
- * Used to request a sample format from the decoder.
- * - encoding: unused.
- * - decoding: Set by user.
+ * Header containing style information for text subtitles.
+ * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
+ * [Script Info] and [V4+ Styles] section, plus the [Events] line and
+ * the Format line following. It shouldn't include any Dialogue line.
+ * - encoding: Set/allocated/freed by user (before avcodec_open2())
+ * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
*/
- enum AVSampleFormat request_sample_fmt;
+ uint8_t *subtitle_header;
+ int subtitle_header_size;
/**
- * Error recognition; may misdetect some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: Set by user.
+ * Simulates errors in the bitstream to test error concealment.
+ * - encoding: Set by user.
+ * - decoding: unused
*/
- int err_recognition;
-#define AV_EF_CRCCHECK (1<<0)
-#define AV_EF_BITSTREAM (1<<1)
-#define AV_EF_BUFFER (1<<2)
-#define AV_EF_EXPLODE (1<<3)
+ int error_rate;
/**
- * Private context used for internal data.
- *
- * Unlike priv_data, this is not codec-specific. It is used in general
- * libavcodec functions.
+ * Current packet as passed into the decoder, to avoid having
+ * to pass the packet into every function. Currently only valid
+ * inside lavc and get/release_buffer callbacks.
+ * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
+ * - encoding: unused
*/
- struct AVCodecInternal *internal;
+ AVPacket *pkt;
- /** Field order
- * - encoding: set by libavcodec
- * - decoding: Set by libavcodec
+ /**
+ * VBV delay coded in the last frame (in periods of a 27 MHz clock).
+ * Used for compliant TS muxing.
+ * - encoding: Set by libavcodec.
+ * - decoding: unused.
*/
- enum AVFieldOrder field_order;
+ uint64_t vbv_delay;
} AVCodecContext;
/**
* This is the primary way to find a codec from the user perspective.
*/
const char *name;
+ /**
+ * Descriptive name for the codec, meant to be more human readable than name.
+ * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
+ */
+ const char *long_name;
enum AVMediaType type;
enum CodecID id;
- int priv_data_size;
- int (*init)(AVCodecContext *);
- int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
- int (*close)(AVCodecContext *);
- int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
/**
* Codec capabilities.
* see CODEC_CAP_*
*/
int capabilities;
- struct AVCodec *next;
- /**
- * Flush buffers.
- * Will be called when seeking
- */
- void (*flush)(AVCodecContext *);
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
- /**
- * Descriptive name for the codec, meant to be more human readable than name.
- * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
- */
- const char *long_name;
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
+ /*****************************************************************
+ * No fields below this line are part of the public API. They
+ * may not be used outside of libavcodec and can be changed and
+ * removed at will.
+ * New public fields should be added right above.
+ *****************************************************************
+ */
+ int priv_data_size;
+ struct AVCodec *next;
/**
* @name Frame-level threading support functions
* @{
*/
void (*init_static_data)(struct AVCodec *codec);
+ int (*init)(AVCodecContext *);
+ int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
/**
* Encode data to an AVPacket.
*
*/
int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
int *got_packet_ptr);
+ int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
+ int (*close)(AVCodecContext *);
+ /**
+ * Flush buffers.
+ * Will be called when seeking
+ */
+ void (*flush)(AVCodecContext *);
} AVCodec;
/**
#define AVPALETTE_SIZE 1024
#define AVPALETTE_COUNT 256
-#if FF_API_PALETTE_CONTROL
-/**
- * AVPaletteControl
- * This structure defines a method for communicating palette changes
- * between and demuxer and a decoder.
- *
- * @deprecated Use AVPacket to send palette changes instead.
- * This is totally broken.
- */
-typedef struct AVPaletteControl {
-
- /* Demuxer sets this to 1 to indicate the palette has changed;
- * decoder resets to 0. */
- int palette_changed;
-
- /* 4-byte ARGB palette entries, stored in native byte order; note that
- * the individual palette components should be on a 8-bit scale; if
- * the palette data comes from an IBM VGA native format, the component
- * data is probably 6 bits in size and needs to be scaled. */
- unsigned int palette[AVPALETTE_COUNT];
-
-} AVPaletteControl attribute_deprecated;
-#endif
enum AVSubtitleType {
SUBTITLE_NONE,
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
int size);
+/**
+ * Shrink the already allocated side data buffer
+ *
+ * @param pkt packet
+ * @param type side information type
+ * @param size new side information size
+ * @return 0 on success, < 0 on failure
+ */
+int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+ int size);
+
/**
* Get side information from packet.
*
int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height);
void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift);
-#if FF_API_GET_PIX_FMT_NAME
-/**
- * @deprecated Deprecated in favor of av_get_pix_fmt_name().
- */
-attribute_deprecated
-const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt);
-#endif
-
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
/**
enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
int has_alpha, int *loss_ptr);
-#if FF_API_GET_ALPHA_INFO
-#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
-#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
-
-/**
- * Tell if an image really has transparent alpha values.
- * @return ored mask of FF_ALPHA_xxx constants
- */
-attribute_deprecated
-int img_get_alpha_info(const AVPicture *src,
- enum PixelFormat pix_fmt, int width, int height);
-#endif
-
/* deinterlace a picture */
/* deinterlace - if not supported return -1 */
int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
*/
const char *avcodec_license(void);
-#if FF_API_AVCODEC_INIT
-/**
- * @deprecated this function is called automatically from avcodec_register()
- * and avcodec_register_all(), there is no need to call it manually
- */
-attribute_deprecated
-void avcodec_init(void);
-#endif
-
/**
* Register the codec codec and initialize libavcodec.
*
*/
const char *av_get_profile_name(const AVCodec *codec, int profile);
-#if FF_API_ALLOC_CONTEXT
-/**
- * Set the fields of the given AVCodecContext to default values.
- *
- * @param s The AVCodecContext of which the fields should be set to default values.
- * @deprecated use avcodec_get_context_defaults3
- */
-attribute_deprecated
-void avcodec_get_context_defaults(AVCodecContext *s);
-
-/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! */
-attribute_deprecated
-void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType);
-#endif
-
/**
* Set the fields of the given AVCodecContext to default values corresponding
* to the given codec (defaults may be codec-dependent).
*/
int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec);
-#if FF_API_ALLOC_CONTEXT
-/**
- * Allocate an AVCodecContext and set its fields to default values. The
- * resulting struct can be deallocated by simply calling av_free().
- *
- * @return An AVCodecContext filled with default values or NULL on failure.
- * @see avcodec_get_context_defaults
- *
- * @deprecated use avcodec_alloc_context3()
- */
-attribute_deprecated
-AVCodecContext *avcodec_alloc_context(void);
-
-/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! */
-attribute_deprecated
-AVCodecContext *avcodec_alloc_context2(enum AVMediaType);
-#endif
-
/**
* Allocate an AVCodecContext and set its fields to default values. The
- * resulting struct can be deallocated by simply calling av_free().
+ * resulting struct can be deallocated by calling avcodec_close() on it followed
+ * by av_free().
*
* @param codec if non-NULL, allocate private data and initialize defaults
* for the given codec. It is illegal to then call avcodec_open2()
* with a different codec.
+ * If NULL, then the codec-specific defaults won't be initialized,
+ * which may result in suboptimal default settings (this is
+ * important mainly for encoders, e.g. libx264).
*
* @return An AVCodecContext filled with default values or NULL on failure.
* @see avcodec_get_context_defaults
enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
-#if FF_API_THREAD_INIT
-/**
- * @deprecated Set s->thread_count before calling avcodec_open2() instead of calling this.
- */
-attribute_deprecated
-int avcodec_thread_init(AVCodecContext *s, int thread_count);
-#endif
-
int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
//FIXME func typedef
-#if FF_API_AVCODEC_OPEN
-/**
- * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
- * function the context has to be allocated.
- *
- * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
- * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
- * retrieving a codec.
- *
- * @warning This function is not thread safe!
- *
- * @code
- * avcodec_register_all();
- * codec = avcodec_find_decoder(CODEC_ID_H264);
- * if (!codec)
- * exit(1);
- *
- * context = avcodec_alloc_context3(codec);
- *
- * if (avcodec_open(context, codec) < 0)
- * exit(1);
- * @endcode
- *
- * @param avctx The context which will be set up to use the given codec.
- * @param codec The codec to use within the context.
- * @return zero on success, a negative value on error
- * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close
- *
- * @deprecated use avcodec_open2
- */
-attribute_deprecated
-int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
-#endif
-
/**
* Initialize the AVCodecContext to use the given AVCodec. Prior to using this
* function the context has to be allocated with avcodec_alloc_context3().
* @endcode
*
* @param avctx The context to initialize.
+ * @param codec The codec to open this context for. If a non-NULL codec has been
+ * previously passed to avcodec_alloc_context3() or
+ * avcodec_get_context_defaults3() for this context, then this
+ * parameter MUST be either NULL or equal to the previously passed
+ * codec.
* @param options A dictionary filled with AVCodecContext and codec-private options.
* On return this object will be filled with options that were not found.
*
* avpkt->data is NULL, the encoder will allocate it.
* The encoder will set avpkt->size to the size of the
* output packet.
+ *
+ * If this function fails or produces no output, avpkt will be
+ * freed using av_free_packet() (i.e. avpkt->destruct will be
+ * called to free the user supplied buffer).
* @param[in] frame AVFrame containing the raw audio data to be encoded.
* May be NULL when flushing an encoder that has the
* CODEC_CAP_DELAY capability set.
enum AVSampleFormat sample_fmt, const uint8_t *buf,
int buf_size, int align);
+#if FF_API_OLD_ENCODE_VIDEO
/**
+ * @deprecated use avcodec_encode_video2() instead.
+ *
* Encode a video frame from pict into buf.
* The input picture should be
* stored using a specific format, namely avctx.pix_fmt.
* @return On error a negative value is returned, on success zero or the number
* of bytes used from the output buffer.
*/
+attribute_deprecated
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
const AVFrame *pict);
+#endif
+
+/**
+ * Encode a frame of video.
+ *
+ * Takes input raw video data from frame and writes the next output packet, if
+ * available, to avpkt. The output packet does not necessarily contain data for
+ * the most recent frame, as encoders can delay and reorder input frames
+ * internally as needed.
+ *
+ * @param avctx codec context
+ * @param avpkt output AVPacket.
+ * The user can supply an output buffer by setting
+ * avpkt->data and avpkt->size prior to calling the
+ * function, but if the size of the user-provided data is not
+ * large enough, encoding will fail. All other AVPacket fields
+ * will be reset by the encoder using av_init_packet(). If
+ * avpkt->data is NULL, the encoder will allocate it.
+ * The encoder will set avpkt->size to the size of the
+ * output packet. The returned data (if any) belongs to the
+ * caller, he is responsible for freeing it.
+ *
+ * If this function fails or produces no output, avpkt will be
+ * freed using av_free_packet() (i.e. avpkt->destruct will be
+ * called to free the user supplied buffer).
+ * @param[in] frame AVFrame containing the raw video data to be encoded.
+ * May be NULL when flushing an encoder that has the
+ * CODEC_CAP_DELAY capability set.
+ * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
+ * output packet is non-empty, and to 0 if it is
+ * empty. If the function returns an error, the
+ * packet can be assumed to be invalid, and the
+ * value of got_packet_ptr is undefined and should
+ * not be used.
+ * @return 0 on success, negative error code on failure
+ */
+int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
+ const AVFrame *frame, int *got_packet_ptr);
+
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
const AVSubtitle *sub);
+/**
+ * Close a given AVCodecContext and free all the data associated with it
+ * (but not the AVCodecContext itself).
+ *
+ * Calling this function on an AVCodecContext that hasn't been opened will free
+ * the codec-specific data allocated in avcodec_alloc_context3() /
+ * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
+ * do nothing.
+ */
int avcodec_close(AVCodecContext *avctx);
/**
/* misc useful functions */
-#if FF_API_OLD_FF_PICT_TYPES
/**
- * Return a single letter to describe the given picture type pict_type.
+ * Return codec bits per sample.
*
- * @param[in] pict_type the picture type
- * @return A single character representing the picture type.
- * @deprecated Use av_get_picture_type_char() instead.
+ * @param[in] codec_id the codec
+ * @return Number of bits per sample or zero if unknown for the given codec.
*/
-attribute_deprecated
-char av_get_pict_type_char(int pict_type);
-#endif
+int av_get_bits_per_sample(enum CodecID codec_id);
/**
* Return codec bits per sample.
+ * Only return non-zero if the bits per sample is exactly correct, not an
+ * approximation.
*
* @param[in] codec_id the codec
* @return Number of bits per sample or zero if unknown for the given codec.
*/
-int av_get_bits_per_sample(enum CodecID codec_id);
+int av_get_exact_bits_per_sample(enum CodecID codec_id);
-#if FF_API_OLD_SAMPLE_FMT
/**
- * @deprecated Use av_get_bytes_per_sample() instead.
+ * Return audio frame duration.
+ *
+ * @param avctx codec context
+ * @param frame_bytes size of the frame, or 0 if unknown
+ * @return frame duration, in samples, if known. 0 if not able to
+ * determine.
*/
-attribute_deprecated
-int av_get_bits_per_sample_format(enum AVSampleFormat sample_fmt);
-#endif
+int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
/* frame parsing */
typedef struct AVCodecParserContext {
* Previous frame byte position.
*/
int64_t last_pos;
+
+ /**
+ * Duration of the current frame.
+ * For audio, this is in units of 1 / AVCodecContext.sample_rate.
+ * For all other types, this is in units of AVCodecContext.time_base.
+ */
+ int duration;
} AVCodecParserContext;
typedef struct AVCodecParser {
*/
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
+/**
+ * Allocate a buffer with padding, reusing the given one if large enough.
+ *
+ * Same behaviour av_fast_malloc but the buffer has additional
+ * FF_INPUT_PADDING_SIZE at the end which will always memset to 0.
+ *
+ */
+void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
+
/**
* Copy image src to dst. Wraps av_picture_data_copy() above.
*/
*/
const AVClass *avcodec_get_class(void);
+/**
+ * @return a positive value if s is open (i.e. avcodec_open2() was called on it
+ * with no corresponding avcodec_close()), 0 otherwise.
+ */
+int avcodec_is_open(AVCodecContext *s);
+
+/**
+ * @return a non-zero number if codec is an encoder, zero otherwise
+ */
+int av_codec_is_encoder(AVCodec *codec);
+
+/**
+ * @return a non-zero number if codec is a decoder, zero otherwise
+ */
+int av_codec_is_decoder(AVCodec *codec);
+
#endif /* AVCODEC_AVCODEC_H */