Commit b1edfce0 authored by Anton Khirnov's avatar Anton Khirnov

lavc: reorder AVCodecContext fields.

Put related fields together, move the important ones closer to the
beginning, try to eliminate holes.
parent 1d428004
...@@ -1177,6 +1177,63 @@ typedef struct AVCodecContext { ...@@ -1177,6 +1177,63 @@ typedef struct AVCodecContext {
* - set by avcodec_alloc_context3 * - set by avcodec_alloc_context3
*/ */
const AVClass *av_class; const AVClass *av_class;
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 */
/**
* 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.
*/
unsigned int codec_tag;
/**
* 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;
/**
* 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?)
*/
int sub_id;
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.
*/
void *opaque;
/** /**
* the average bitrate * the average bitrate
* - encoding: Set by user; unused for constant quantizer encoding. * - encoding: Set by user; unused for constant quantizer encoding.
...@@ -1193,30 +1250,33 @@ typedef struct AVCodecContext { ...@@ -1193,30 +1250,33 @@ typedef struct AVCodecContext {
int bit_rate_tolerance; int bit_rate_tolerance;
/** /**
* CODEC_FLAG_*. * Global quality for codecs which cannot change it per frame.
* This should be proportional to MPEG-1/2/4 qscale.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/ */
int flags; int global_quality;
/** /**
* Some codecs need additional format info. It is stored here. * - encoding: Set by user.
* If any muxer uses this then ALL demuxers/parsers AND encoders for the * - decoding: unused
* 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?)
*/ */
int sub_id; int compression_level;
#define FF_COMPRESSION_DEFAULT -1
/** /**
* Motion estimation algorithm used for video coding. * CODEC_FLAG_*.
* 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), * - encoding: Set by user.
* 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] * - decoding: Set by user.
* - encoding: MUST be set by user.
* - decoding: unused
*/ */
int me_method; int flags;
/**
* CODEC_FLAG2_*
* - encoding: Set by user.
* - decoding: Set by user.
*/
int flags2;
/** /**
* some codecs need / can use extradata like Huffman tables. * some codecs need / can use extradata like Huffman tables.
...@@ -1242,6 +1302,36 @@ typedef struct AVCodecContext { ...@@ -1242,6 +1302,36 @@ typedef struct AVCodecContext {
*/ */
AVRational time_base; 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 */ /* video only */
/** /**
* picture width / height. * picture width / height.
...@@ -1252,6 +1342,13 @@ typedef struct AVCodecContext { ...@@ -1252,6 +1342,13 @@ typedef struct AVCodecContext {
*/ */
int 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 #define FF_ASPECT_EXTENDED 15
/** /**
...@@ -1270,6 +1367,15 @@ typedef struct AVCodecContext { ...@@ -1270,6 +1367,15 @@ typedef struct AVCodecContext {
*/ */
enum PixelFormat pix_fmt; 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 * If non NULL, 'draw_horiz_band' is called by the libavcodec
* decoder to draw a horizontal band. It improves cache usage. Not * decoder to draw a horizontal band. It improves cache usage. Not
...@@ -1297,825 +1403,670 @@ typedef struct AVCodecContext { ...@@ -1297,825 +1403,670 @@ typedef struct AVCodecContext {
const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
int y, int type, int height); int y, int type, int height);
/* audio only */
int sample_rate; ///< samples per second
int channels; ///< number of audio channels
/** /**
* audio sample format * callback to negotiate the pixelFormat
* - encoding: Set by user. * @param fmt is the list of formats which are supported by the codec,
* - decoding: Set by libavcodec. * 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.
*/ */
enum AVSampleFormat sample_fmt; ///< sample format enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
/* The following data should not be initialized. */
/** /**
* Samples per packet, initialized when calling 'init'. * maximum number of B-frames between non-B-frames
* Note: The output will be delayed by max_b_frames+1 relative to the input.
* - encoding: Set by user.
* - decoding: unused
*/ */
int frame_size; int max_b_frames;
int frame_number; ///< audio or video frame number
/** /**
* Encoder delay. * qscale factor between IP and B-frames
* * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
* Video: * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
* Number of frames the decoded output will be delayed relative to the * - encoding: Set by user.
* 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 * - decoding: unused
*/ */
int delay; float b_quant_factor;
/* - encoding parameters */ /** obsolete FIXME remove */
float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) int rc_strategy;
float qblur; ///< amount of qscale smoothing over time (0.0-1.0) #define FF_RC_STRATEGY_XVID 1
int b_frame_strategy;
/** /**
* minimum quantizer * luma single coefficient elimination threshold
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int qmin; int luma_elim_threshold;
/** /**
* maximum quantizer * chroma single coeff elimination threshold
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int qmax; int chroma_elim_threshold;
/** /**
* maximum quantizer difference between frames * qscale offset between IP and B-frames
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int max_qdiff; float b_quant_offset;
/** /**
* maximum number of B-frames between non-B-frames * Size of the frame reordering buffer in the decoder.
* Note: The output will be delayed by max_b_frames+1 relative to the input. * For MPEG-2 it is 1 IPB or 0 low delay IP.
* - encoding: Set by libavcodec.
* - decoding: Set by libavcodec.
*/
int has_b_frames;
/**
* 0-> h263 quant 1-> mpeg quant
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int max_b_frames; int mpeg_quant;
/** /**
* qscale factor between IP and B-frames * 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 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). * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float b_quant_factor; float i_quant_factor;
/** obsolete FIXME remove */
int rc_strategy;
#define FF_RC_STRATEGY_XVID 1
int b_frame_strategy; /**
* qscale offset between P and I-frames
* - encoding: Set by user.
* - decoding: unused
*/
float i_quant_offset;
struct AVCodec *codec; /**
* luminance masking (0-> disabled)
* - encoding: Set by user.
* - decoding: unused
*/
float lumi_masking;
void *priv_data; /**
* temporary complexity masking (0-> disabled)
* - encoding: Set by user.
* - decoding: unused
*/
float temporal_cplx_masking;
int rtp_payload_size; /* The size of the RTP payload: the coder will */ /**
/* do its best to deliver a chunk with size */ * spatial complexity masking (0-> disabled)
/* below rtp_payload_size, the chunk will start */ * - encoding: Set by user.
/* with a start code on some codecs like H.263. */ * - decoding: unused
/* This doesn't take account of any particular */ */
/* headers inside the transmitted RTP payload. */ float spatial_cplx_masking;
/* 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;
/**
* number of bits used for the previously encoded frame
* - encoding: Set by libavcodec.
* - decoding: unused
*/
int frame_bits;
/**
* Private data of the user, can be used to carry app specific stuff.
* - encoding: Set by user.
* - decoding: Set by user.
*/
void *opaque;
char codec_name[32];
enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
enum CodecID codec_id; /* see CODEC_ID_xxx */
/**
* 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.
*/
unsigned int codec_tag;
/** /**
* Work around bugs in encoders which sometimes cannot be detected automatically. * p block masking (0-> disabled)
* - encoding: Set by user
* - decoding: Set by user
*/
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
/**
* luma single coefficient elimination threshold
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int luma_elim_threshold; float p_masking;
/** /**
* chroma single coeff elimination threshold * darkness masking (0-> disabled)
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int chroma_elim_threshold; float dark_masking;
/** /**
* strictly follow the standard (MPEG4, ...). * slice count
* - encoding: Set by user. * - encoding: Set by libavcodec.
* - decoding: Set by user. * - decoding: Set by user (or 0).
* 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 strict_std_compliance; int slice_count;
#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.
/** /**
* qscale offset between IP and B-frames * prediction method (needed for huffyuv)
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float b_quant_offset; int prediction_method;
#define FF_PRED_LEFT 0
/** #define FF_PRED_PLANE 1
* Called at the beginning of each frame to get a buffer for it. #define FF_PRED_MEDIAN 2
*
* 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. * slice offsets in the frame in bytes
* A released buffer can be reused in get_buffer(). * - encoding: Set/allocated by libavcodec.
* pic.data[*] must be set to NULL. * - decoding: Set/allocated by user (or 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); int *slice_offset;
/** /**
* Size of the frame reordering buffer in the decoder. * sample aspect ratio (0 if unknown)
* For MPEG-2 it is 1 IPB or 0 low delay IP. * That is the width of a pixel divided by the height of the pixel.
* - encoding: Set by libavcodec. * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
* - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: Set by libavcodec.
*/ */
int has_b_frames; AVRational sample_aspect_ratio;
/**
* number of bytes per packet if constant and known or 0
* Used by some WAV based audio codecs.
*/
int block_align;
/** /**
* 0-> h263 quant 1-> mpeg quant * motion estimation comparison function
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int mpeg_quant; int me_cmp;
/**
* pass1 encoding statistics output buffer
* - encoding: Set by libavcodec.
* - decoding: unused
*/
char *stats_out;
/**
* pass2 encoding statistics input buffer
* Concatenated stuff from stats_out of pass1 should be placed here.
* - encoding: Allocated/set/freed by user.
* - decoding: unused
*/
char *stats_in;
/** /**
* ratecontrol qmin qmax limiting method * subpixel motion estimation comparison function
* 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float rc_qsquish; int me_sub_cmp;
float rc_qmod_amp;
int rc_qmod_freq;
/**
* ratecontrol override, see RcOverride
* - encoding: Allocated/set/freed by user.
* - decoding: unused
*/
RcOverride *rc_override;
int rc_override_count;
/**
* rate control equation
* - encoding: Set by user
* - decoding: unused
*/
const char *rc_eq;
/** /**
* maximum bitrate * macroblock comparison function (not supported yet)
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int rc_max_rate; int mb_cmp;
/** /**
* minimum bitrate * interlaced DCT comparison function
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int rc_buffer_size; int dia_size;
float rc_buffer_aggressivity;
/** /**
* qscale factor between P and I-frames * amount of previous MV predictors (2a+1 x 2a+1 square)
* 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. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float i_quant_offset; int pre_me;
/** /**
* initial complexity for pass1 ratecontrol * motion estimation prepass comparison function
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int dct_algo; int pre_dia_size;
#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
/** /**
* luminance masking (0-> disabled) * subpel ME quality
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float lumi_masking; int me_subpel_quality;
/** /**
* temporary complexity masking (0-> disabled) * DTG active format information (additional aspect ratio
* - encoding: Set by user. * information only used in DVB MPEG-2 transport streams)
* - decoding: unused * 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float spatial_cplx_masking; int me_range;
/** /**
* p block masking (0-> disabled) * intra quantizer bias
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float dark_masking; int inter_quant_bias;
/** /**
* IDCT algorithm, see FF_IDCT_* below. * color table ID
* - encoding: Set by user. * - encoding: unused
* - decoding: Set by user. * - decoding: Which clrtable should be used for 8bit RGB images.
* Tables have to be stored somewhere. FIXME
*/ */
int idct_algo; int color_table_id;
#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
/** /**
* slice count * slice flags
* - encoding: Set by libavcodec. * - encoding: unused
* - decoding: Set by user (or 0). * - 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 * XVideo Motion Acceleration
* - encoding: Set/allocated by libavcodec. * - encoding: forbidden
* - decoding: Set/allocated by user (or NULL). * - decoding: set by decoder
*/ */
int *slice_offset; int xvmc_acceleration;
/** /**
* error concealment flags * macroblock decision mode
* - encoding: unused * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/ */
int error_concealment; int mb_decision;
#define FF_EC_GUESS_MVS 1 #define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
#define FF_EC_DEBLOCK 2 #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 * custom intra quantization matrix
* CPU features (i.e. MMX, SSE. ...) * - encoding: Set by user, can be NULL.
* * - decoding: Set by libavcodec.
* 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.)
*/ */
unsigned dsp_mask; uint16_t *intra_matrix;
/** /**
* bits per sample/pixel from the demuxer (needed for huffyuv). * custom inter quantization matrix
* - encoding: Set by libavcodec. * - encoding: Set by user, can be NULL.
* - decoding: Set by user. * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int prediction_method; int scenechange_threshold;
#define FF_PRED_LEFT 0
#define FF_PRED_PLANE 1
#define FF_PRED_MEDIAN 2
/** /**
* sample aspect ratio (0 if unknown) * noise reduction strength
* 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. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: unused
*/ */
AVRational sample_aspect_ratio; int noise_reduction;
/** /**
* the picture in the bitstream *
* - encoding: Set by libavcodec. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: unused
*/ */
AVFrame *coded_frame; int inter_threshold;
/** /**
* debug * quantizer noise shaping
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/ */
int debug; int quantizer_noise_shaping;
#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 * Motion estimation threshold below which no motion estimation is
* performed, but instead the user specified motion vectors are used.
*
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/ */
int debug_mv; int me_threshold;
#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
/** /**
* error * Macroblock threshold below which the user specified macroblock types will be used.
* - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int me_cmp; int intra_dc_precision;
/** /**
* subpixel motion estimation comparison function * Number of macroblock rows at the top which are skipped.
* - encoding: Set by user. * - encoding: unused
* - decoding: unused * - decoding: Set by user.
*/ */
int me_sub_cmp; int skip_top;
/** /**
* macroblock comparison function (not supported yet) * Number of macroblock rows at the bottom which are skipped.
* - encoding: Set by user. * - encoding: unused
* - decoding: 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int ildct_cmp; float border_masking;
#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
/** /**
* ME diamond size & shape * minimum MB lagrange multipler
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int last_predictor_count; int mb_lmax;
/** /**
* prepass for motion estimation *
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int pre_me; int me_penalty_compensation;
/** /**
* motion estimation prepass comparison function *
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int me_pre_cmp; int bidir_refine;
/** /**
* ME prepass diamond size & shape *
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int pre_dia_size; int brd_scale;
/** /**
* subpel ME quality * minimum GOP size
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int me_subpel_quality; int keyint_min;
/** /**
* callback to negotiate the pixelFormat * number of reference frames
* @param fmt is the list of formats which are supported by the codec, * - encoding: Set by user.
* it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. * - decoding: Set by lavc.
* 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.
*/ */
enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt); int refs;
/** /**
* DTG active format information (additional aspect ratio * chroma qp offset from luma
* information only used in DVB MPEG-2 transport streams) * - encoding: Set by user.
* 0 if not set. * - decoding: unused
*
* - encoding: unused
* - decoding: Set by decoder.
*/ */
int dtg_active_format; int chromaoffset;
#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
/** /**
* maximum motion estimation search range in subpel units * Multiplied by qscale for each frame and added to scene_change_score.
* If 0 then no limit.
*
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - 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. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int intra_quant_bias; int mv0_threshold;
#define FF_DEFAULT_QUANT_BIAS 999999
/** /**
* inter quantizer bias * Adjust sensitivity of b_frame_strategy 1.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int inter_quant_bias; int b_sensitivity;
/** /**
* color table ID * Chromaticity coordinates of the source primaries.
* - encoding: unused * - encoding: Set by user
* - decoding: Which clrtable should be used for 8bit RGB images. * - decoding: Set by libavcodec
* Tables have to be stored somewhere. FIXME
*/ */
int color_table_id; enum AVColorPrimaries color_primaries;
/** /**
* Global quality for codecs which cannot change it per frame. * Color Transfer Characteristic.
* This should be proportional to MPEG-1/2/4 qscale. * - encoding: Set by user
* - encoding: Set by user. * - decoding: Set by libavcodec
* - decoding: unused
*/ */
int global_quality; enum AVColorTransferCharacteristic color_trc;
#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 * YUV colorspace type.
* - encoding: Set by user. * - encoding: Set by user
* - decoding: Set by libavcodec
*/
enum AVColorSpace colorspace;
/**
* MPEG vs JPEG YUV range.
* - encoding: Set by user
* - decoding: Set by libavcodec
*/
enum AVColorRange color_range;
/**
* This defines the location of chroma samples.
* - encoding: Set by user
* - decoding: Set by libavcodec
*/
enum AVChromaLocation chroma_sample_location;
/**
* Number of slices.
* Indicates number of picture subdivisions. Used for parallelized
* decoding.
* - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int coder_type; int slices;
/** Field order
* - encoding: set by libavcodec
* - decoding: Set by libavcodec
*/
enum AVFieldOrder field_order;
/* audio only */
int sample_rate; ///< samples per second
int channels; ///< number of audio channels
/** /**
* context model * audio sample format
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: Set by libavcodec.
*/ */
int context_model; enum AVSampleFormat sample_fmt; ///< sample format
/* The following data should not be initialized. */
/** /**
* slice flags * Samples per packet, initialized when calling 'init'.
* - encoding: unused
* - decoding: Set by user.
*/ */
int slice_flags; int frame_size;
#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display int frame_number; ///< audio or video frame number
#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)
/** /**
* XVideo Motion Acceleration * number of bytes per packet if constant and known or 0
* - encoding: forbidden * Used by some WAV based audio codecs.
* - decoding: set by decoder
*/ */
int xvmc_acceleration; int block_align;
/** /**
* macroblock decision mode * Audio cutoff bandwidth (0 means "automatic")
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int mb_decision; int cutoff;
#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
#if FF_API_REQUEST_CHANNELS
/** /**
* custom intra quantization matrix * Decoder should decode to this many channels if it can (0 for default)
* - encoding: Set by user, can be NULL. * - encoding: unused
* - decoding: Set by libavcodec. * - decoding: Set by user.
* @deprecated Deprecated in favor of request_channel_layout.
*/ */
uint16_t *intra_matrix; int request_channels;
#endif
/** /**
* custom inter quantization matrix * Audio channel layout.
* - encoding: Set by user, can be NULL. * - encoding: set by user.
* - decoding: Set by libavcodec. * - decoding: set by libavcodec.
*/ */
uint16_t *inter_matrix; uint64_t channel_layout;
/** /**
* fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). * Request decoder to use this channel layout if it can (0 for default)
* This is used to work around some encoder bugs.
* - encoding: unused * - encoding: unused
* - decoding: Set by user, will be converted to uppercase by libavcodec during init. * - decoding: Set by user.
*/ */
unsigned int stream_codec_tag; uint64_t request_channel_layout;
/** /**
* scene change detection threshold * Type of service that the audio stream conveys.
* 0 is default, larger means fewer detected scene changes.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: Set by libavcodec.
*/ */
int scenechange_threshold; enum AVAudioServiceType audio_service_type;
/** /**
* minimum Lagrange multipler * Used to request a sample format from the decoder.
* - encoding: Set by user. * - encoding: unused.
* - decoding: unused * - decoding: Set by user.
*/ */
int lmin; enum AVSampleFormat request_sample_fmt;
/** /**
* maximum Lagrange multipler * Called at the beginning of each frame to get a buffer for it.
* - encoding: Set by user. *
* - decoding: unused * 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 lmax; int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
/** /**
* noise reduction strength * Called to release buffers which were allocated with get_buffer.
* - encoding: Set by user. * A released buffer can be reused in get_buffer().
* - decoding: unused * 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.
*/ */
int noise_reduction; void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
/** /**
* Called at the beginning of a frame to get cr buffer for it. * Called at the beginning of a frame to get cr buffer for it.
...@@ -2131,384 +2082,338 @@ typedef struct AVCodecContext { ...@@ -2131,384 +2082,338 @@ typedef struct AVCodecContext {
*/ */
int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic); int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
/**
* Number of bits which should be loaded into the rc buffer before decoding starts.
* - encoding: Set by user.
* - decoding: unused
*/
int rc_initial_buffer_occupancy;
/** /* - encoding parameters */
* float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
* - encoding: Set by user. float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
* - decoding: unused
*/
int inter_threshold;
/** /**
* CODEC_FLAG2_* * minimum quantizer
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/ */
int flags2; int qmin;
/** /**
* Simulates errors in the bitstream to test error concealment. * maximum quantizer
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int error_rate; int qmax;
/** /**
* quantizer noise shaping * maximum quantizer difference between frames
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int quantizer_noise_shaping; int max_qdiff;
/** /**
* thread count * ratecontrol qmin qmax limiting method
* is used to decide how many independent tasks should be passed to execute() * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user. * - decoding: unused
*/
int thread_count;
/**
* 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); float rc_qsquish;
/** float rc_qmod_amp;
* thread opaque int rc_qmod_freq;
* 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 * decoder bitstream buffer size
* performed, but instead the user specified motion vectors are used.
*
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int me_threshold; int rc_buffer_size;
/** /**
* Macroblock threshold below which the user specified macroblock types will be used. * ratecontrol override, see RcOverride
* - encoding: Set by user. * - encoding: Allocated/set/freed by user.
* - decoding: unused * - decoding: unused
*/ */
int mb_threshold; int rc_override_count;
RcOverride *rc_override;
/** /**
* precision of the intra DC coefficient - 8 * rate control equation
* - encoding: Set by user. * - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int intra_dc_precision; const char *rc_eq;
/** /**
* noise vs. sse weight for the nsse comparsion function * maximum bitrate
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int nsse_weight; int rc_max_rate;
/**
* Number of macroblock rows at the top which are skipped.
* - encoding: unused
* - decoding: Set by user.
*/
int skip_top;
/**
* Number of macroblock rows at the bottom which are skipped.
* - encoding: unused
* - decoding: Set by user.
*/
int skip_bottom;
/** /**
* profile * minimum bitrate
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: unused
*/ */
int profile; int rc_min_rate;
#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 float rc_buffer_aggressivity;
#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
/** /**
* level * initial complexity for pass1 ratecontrol
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: unused
*/
int level;
#define FF_LEVEL_UNKNOWN -99
/**
* low resolution decoding, 1-> 1/2 size, 2->1/4 size
* - encoding: unused
* - decoding: Set by user.
*/ */
int lowres; float rc_initial_cplx;
/** /**
* Bitstream width / height, may be different from width/height if lowres enabled. * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
* - encoding: unused * - encoding: Set by user.
* - decoding: Set by user before init if known. Codec should override / dynamically change if needed. * - decoding: unused.
*/ */
int coded_width, coded_height; float rc_max_available_vbv_use;
/** /**
* frame skip threshold * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused.
*/ */
int frame_skip_threshold; float rc_min_vbv_overflow_use;
/** /**
* frame skip factor * Number of bits which should be loaded into the rc buffer before decoding starts.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int frame_skip_factor; 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
/** /**
* frame skip exponent * coder type
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int frame_skip_exp; int coder_type;
/** /**
* frame skip comparison function * context model
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int frame_skip_cmp; int context_model;
/** /**
* Border processing masking, raises the quantizer for mbs on the borders * minimum Lagrange multipler
* of the picture.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
float border_masking; int lmin;
/** /**
* minimum MB lagrange multipler * maximum Lagrange multipler
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int mb_lmin; int lmax;
/** /**
* maximum MB lagrange multipler * frame skip threshold
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int mb_lmax; int frame_skip_threshold;
/** /**
* * frame skip factor
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int me_penalty_compensation; int frame_skip_factor;
/**
*
* - encoding: unused
* - decoding: Set by user.
*/
enum AVDiscard skip_loop_filter;
/**
*
* - encoding: unused
* - decoding: Set by user.
*/
enum AVDiscard skip_idct;
/**
*
* - encoding: unused
* - decoding: Set by user.
*/
enum AVDiscard skip_frame;
/** /**
* * frame skip exponent
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int bidir_refine; int frame_skip_exp;
/** /**
* * frame skip comparison function
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int brd_scale; int frame_skip_cmp;
/** /**
* minimum GOP size * trellis RD quantization
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int keyint_min; int trellis;
/** /**
* number of reference frames
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by lavc. * - decoding: unused
*/ */
int refs; int min_prediction_order;
/** /**
* chroma qp offset from luma
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int chromaoffset; int max_prediction_order;
/** /**
* trellis RD quantization * GOP timecode frame start number, in non drop frame format
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: unused
*/ */
int trellis; int64_t timecode_frame_start;
/* 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);
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. */
/* 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;
/** /**
* Audio cutoff bandwidth (0 means "automatic") * number of bits used for the previously encoded frame
* - encoding: Set by user. * - encoding: Set by libavcodec.
* - decoding: unused * - decoding: unused
*/ */
int cutoff; int frame_bits;
/** /**
* Multiplied by qscale for each frame and added to scene_change_score. * pass1 encoding statistics output buffer
* - encoding: Set by user. * - encoding: Set by libavcodec.
* - decoding: unused * - decoding: unused
*/ */
int scenechange_factor; char *stats_out;
/** /**
* * pass2 encoding statistics input buffer
* Note: Value depends upon the compare function used for fullpel ME. * Concatenated stuff from stats_out of pass1 should be placed here.
* - encoding: Set by user. * - encoding: Allocated/set/freed by user.
* - decoding: unused * - decoding: unused
*/ */
int mv0_threshold; char *stats_in;
/** /**
* Adjust sensitivity of b_frame_strategy 1. * Work around bugs in encoders which sometimes cannot be detected automatically.
* - encoding: Set by user. * - encoding: Set by user
* - decoding: unused * - decoding: Set by user
*/ */
int b_sensitivity; 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
/** /**
* strictly follow the standard (MPEG4, ...).
* - encoding: Set by user. * - 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 compression_level; int strict_std_compliance;
#define FF_COMPRESSION_DEFAULT -1 #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.
/** /**
* - encoding: Set by user. * error concealment flags
* - decoding: unused * - encoding: unused
* - decoding: Set by user.
*/ */
int min_prediction_order; int error_concealment;
#define FF_EC_GUESS_MVS 1
#define FF_EC_DEBLOCK 2
/** /**
* debug
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: Set by user.
*/ */
int max_prediction_order; 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
/** /**
* GOP timecode frame start number, in non drop frame format * debug
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused * - decoding: Set by user.
*/ */
int64_t timecode_frame_start; 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
#if FF_API_REQUEST_CHANNELS
/** /**
* Decoder should decode to this many channels if it can (0 for default) * Error recognition; may misdetect some more or less valid parts as errors.
* - encoding: unused * - encoding: unused
* - decoding: Set by user. * - decoding: Set by user.
* @deprecated Deprecated in favor of request_channel_layout.
*/ */
int request_channels; int err_recognition;
#endif #define AV_EF_CRCCHECK (1<<0)
#define AV_EF_BITSTREAM (1<<1)
#define AV_EF_BUFFER (1<<2)
#define AV_EF_EXPLODE (1<<3)
/** /**
* opaque 64bit number (generally a PTS) that will be reordered and * opaque 64bit number (generally a PTS) that will be reordered and
...@@ -2520,102 +2425,160 @@ typedef struct AVCodecContext { ...@@ -2520,102 +2425,160 @@ typedef struct AVCodecContext {
int64_t reordered_opaque; int64_t reordered_opaque;
/** /**
* Bits per sample/pixel of internal libavcodec pixel/sample format. * Hardware accelerator in use
* - encoding: set by user. * - encoding: unused.
* - decoding: set by libavcodec. * - decoding: Set by libavcodec
*/ */
int bits_per_raw_sample; struct AVHWAccel *hwaccel;
/** /**
* Audio channel layout. * Hardware accelerator context.
* - encoding: set by user. * For some hardware accelerators, a global context needs to be
* - decoding: set by libavcodec. * 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
*/ */
uint64_t channel_layout; void *hwaccel_context;
/** /**
* Request decoder to use this channel layout if it can (0 for default) * error
* - encoding: unused * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
* - decoding: Set by user. * - decoding: unused
*/ */
uint64_t request_channel_layout; uint64_t error[AV_NUM_DATA_POINTERS];
/** /**
* Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. * DCT algorithm, see FF_DCT_* below
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused. * - decoding: unused
*/ */
float rc_max_available_vbv_use; 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
/** /**
* Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. * IDCT algorithm, see FF_IDCT_* below.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: unused. * - decoding: Set by user.
*/ */
float rc_min_vbv_overflow_use; 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
/** /**
* Hardware accelerator in use * dsp_mask could be add used to disable unwanted CPU features
* - encoding: unused. * CPU features (i.e. MMX, SSE. ...)
* - decoding: Set by libavcodec *
* 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.)
*/ */
struct AVHWAccel *hwaccel; unsigned dsp_mask;
/**
* bits per sample/pixel from the demuxer (needed for huffyuv).
* - encoding: Set by libavcodec.
* - decoding: Set by user.
*/
int bits_per_coded_sample;
/**
* Bits per sample/pixel of internal libavcodec pixel/sample format.
* - encoding: set by user.
* - decoding: set by libavcodec.
*/
int bits_per_raw_sample;
/** /**
* For some codecs, the time base is closer to the field rate than the frame rate. * low resolution decoding, 1-> 1/2 size, 2->1/4 size
* Most notably, H.264 and MPEG-2 specify time_base as half of frame duration * - encoding: unused
* if no telecine is used ... * - decoding: Set by user.
*
* Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
*/ */
int ticks_per_frame; int lowres;
/** /**
* Hardware accelerator context. * the picture in the bitstream
* For some hardware accelerators, a global context needs to be * - encoding: Set by libavcodec.
* provided by the user. In that case, this holds display-dependent * - decoding: Set by libavcodec.
* 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; AVFrame *coded_frame;
/** /**
* Chromaticity coordinates of the source primaries. * thread count
* - encoding: Set by user * is used to decide how many independent tasks should be passed to execute()
* - decoding: Set by libavcodec * - encoding: Set by user.
* - decoding: Set by user.
*/ */
enum AVColorPrimaries color_primaries; int thread_count;
/** /**
* Color Transfer Characteristic. * Which multithreading methods to use.
* - encoding: Set by user * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
* - decoding: Set by libavcodec * 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.
*/ */
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. * Which multithreading methods are in use by the codec.
* - encoding: Set by user * - encoding: Set by libavcodec.
* - decoding: Set by libavcodec * - decoding: Set by libavcodec.
*/ */
enum AVColorSpace colorspace; int active_thread_type;
/** /**
* MPEG vs JPEG YUV range. * Set by the client if its custom get_buffer() callback can be called
* - encoding: Set by user * from another thread, which allows faster multithreaded decoding.
* - decoding: Set by libavcodec * 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. * The codec may call this to execute several independent things.
* - encoding: Set by user * It will return only after finishing all tasks.
* - decoding: Set by libavcodec * 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. * The codec may call this to execute several independent things.
...@@ -2637,112 +2600,150 @@ typedef struct AVCodecContext { ...@@ -2637,112 +2600,150 @@ typedef struct AVCodecContext {
*/ */
int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
int log_level_offset; /**
* thread opaque
* Can be used by execute() to store some per AVCodecContext stuff.
* - encoding: set by execute()
* - decoding: set by execute()
*/
void *thread_opaque;
/** /**
* Number of slices. * noise vs. sse weight for the nsse comparsion function
* Indicates number of picture subdivisions. Used for parallelized * - encoding: Set by user.
* decoding.
* - encoding: Set by user
* - decoding: unused * - decoding: unused
*/ */
int slices; int nsse_weight;
/** /**
* Header containing style information for text subtitles. * profile
* For SUBTITLE_ASS subtitle type, it should contain the whole ASS * - encoding: Set by user.
* [Script Info] and [V4+ Styles] section, plus the [Events] line and * - decoding: Set by libavcodec.
* 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 profile;
int subtitle_header_size; #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
/** /**
* Current packet as passed into the decoder, to avoid having * level
* to pass the packet into every function. Currently only valid * - encoding: Set by user.
* inside lavc and get/release_buffer callbacks. * - decoding: Set by libavcodec.
* - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
* - encoding: unused
*/ */
AVPacket *pkt; int level;
#define FF_LEVEL_UNKNOWN -99
/** /**
* 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. * - encoding: unused
* - decoding: Set by user, otherwise the default is used. * - decoding: Set by user.
*/ */
int thread_type; enum AVDiscard skip_loop_filter;
#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
/** /**
* Which multithreading methods are in use by the codec. *
* - encoding: Set by libavcodec. * - encoding: unused
* - decoding: Set by libavcodec. * - decoding: Set by user.
*/ */
int active_thread_type; enum AVDiscard skip_idct;
/** /**
* Set by the client if its custom get_buffer() callback can be called *
* from another thread, which allows faster multithreaded decoding. * - encoding: unused
* 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. * - decoding: Set by user.
*/ */
int thread_safe_callbacks; enum AVDiscard skip_frame;
/** /**
* VBV delay coded in the last frame (in periods of a 27 MHz clock). * Header containing style information for text subtitles.
* Used for compliant TS muxing. * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
* - encoding: Set by libavcodec. * [Script Info] and [V4+ Styles] section, plus the [Events] line and
* - decoding: unused. * 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())
*/ */
uint64_t vbv_delay; uint8_t *subtitle_header;
int subtitle_header_size;
/** /**
* Type of service that the audio stream conveys. * Simulates errors in the bitstream to test error concealment.
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by libavcodec. * - decoding: unused
*/
enum AVAudioServiceType audio_service_type;
/**
* Used to request a sample format from the decoder.
* - encoding: unused.
* - decoding: Set by user.
*/ */
enum AVSampleFormat request_sample_fmt; int error_rate;
/** /**
* Error recognition; may misdetect some more or less valid parts as errors. * 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 * - encoding: unused
* - decoding: Set by user.
*/ */
int err_recognition; AVPacket *pkt;
#define AV_EF_CRCCHECK (1<<0)
#define AV_EF_BITSTREAM (1<<1)
#define AV_EF_BUFFER (1<<2)
#define AV_EF_EXPLODE (1<<3)
/** /**
* Private context used for internal data. * VBV delay coded in the last frame (in periods of a 27 MHz clock).
* * Used for compliant TS muxing.
* Unlike priv_data, this is not codec-specific. It is used in general * - encoding: Set by libavcodec.
* libavcodec functions. * - decoding: unused.
*/
struct AVCodecInternal *internal;
/** Field order
* - encoding: set by libavcodec
* - decoding: Set by libavcodec
*/ */
enum AVFieldOrder field_order; uint64_t vbv_delay;
} AVCodecContext; } AVCodecContext;
/** /**
......
...@@ -465,7 +465,7 @@ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src) ...@@ -465,7 +465,7 @@ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src)
dst->slice_flags = src->slice_flags; dst->slice_flags = src->slice_flags;
dst->flags2 = src->flags2; dst->flags2 = src->flags2;
copy_fields(skip_loop_filter, bidir_refine); copy_fields(skip_loop_filter, subtitle_header);
dst->frame_number = src->frame_number; dst->frame_number = src->frame_number;
dst->reordered_opaque = src->reordered_opaque; dst->reordered_opaque = src->reordered_opaque;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment