X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Favcodec.h;h=ea833d0e9479f8d1ab4f1c8132ab7b0e85e3c6b1;hb=b7ce3242f8000ad497a17c3288a59aa508cef31c;hp=8513cebde10eb1878ab1610477f551df07d837ef;hpb=18d0a16fc9d189b1d5593f9a42bb2316e9a66ca9;p=ffmpeg diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 8513cebde10..ea833d0e947 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -80,7 +80,7 @@ * If you add a codec ID to this list, add it so that * 1. no value of a existing codec ID changes (that would break ABI), * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec. - * This ensures that 2 forks can independantly add CodecIDs without producing conflicts. + * This ensures that 2 forks can independently add CodecIDs without producing conflicts. */ enum CodecID { CODEC_ID_NONE, @@ -246,8 +246,12 @@ enum CodecID { CODEC_ID_DXTORY, CODEC_ID_V410, CODEC_ID_XWD, + CODEC_ID_CDXL, + CODEC_ID_XBM, + CODEC_ID_ZEROCODEC, CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), + CODEC_ID_EXR = MKBETAG('0','E','X','R'), CODEC_ID_AVRP = MKBETAG('A','V','R','P'), CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), @@ -392,8 +396,9 @@ enum CodecID { CODEC_ID_8SVX_EXP, CODEC_ID_8SVX_FIB, CODEC_ID_BMV_AUDIO, + CODEC_ID_RALF, CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), - CODEC_ID_8SVX_RAW = MKBETAG('8','S','V','X'), + CODEC_ID_8SVX_RAW = MKBETAG('8','S','V','X'), CODEC_ID_SONIC = MKBETAG('S','O','N','C'), CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), @@ -581,17 +586,19 @@ typedef struct RcOverride{ #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. #define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!! +#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 +#endif #define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. #define CODEC_FLAG2_SHOW_ALL 0x00400000 ///< Show all frames before the first keyframe @@ -769,6 +776,7 @@ enum AVPacketSideDataType { AV_PKT_DATA_PALETTE, AV_PKT_DATA_NEW_EXTRADATA, AV_PKT_DATA_PARAM_CHANGE, + AV_PKT_DATA_H263_MB_INFO, }; typedef struct AVPacket { @@ -851,6 +859,24 @@ 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, @@ -890,12 +916,48 @@ typedef struct AVFrame { 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. @@ -910,6 +972,21 @@ typedef struct AVFrame { */ 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. @@ -918,6 +995,20 @@ typedef struct AVFrame { */ 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 @@ -961,6 +1052,11 @@ typedef struct AVFrame { */ int qstride; + /** + * + */ + int qscale_type; + /** * mbskip_table[mb]>=1 if MB didn't change * stride= mb_width = (width+15)>>4 @@ -992,12 +1088,19 @@ typedef struct AVFrame { 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 @@ -1029,11 +1132,6 @@ typedef struct AVFrame { */ int repeat_pict; - /** - * - */ - int qscale_type; - /** * The content of the picture is interlaced. * - encoding: Set by user. @@ -1048,13 +1146,6 @@ typedef struct AVFrame { */ 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) @@ -1070,19 +1161,11 @@ typedef struct AVFrame { 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 @@ -1104,20 +1187,6 @@ typedef struct AVFrame { */ 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. @@ -1133,54 +1202,12 @@ typedef struct AVFrame { void *thread_opaque; /** - * number of audio samples (per channel) described by this frame - * - encoding: Set by user - * - 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; /** * frame timestamp estimated using various heuristics, in stream time base @@ -1199,7 +1226,6 @@ typedef struct AVFrame { * - decoding: Read by user. */ int64_t pkt_pos; - } AVFrame; struct AVCodecInternal; @@ -1228,6 +1254,60 @@ typedef struct AVCodecContext { * - set by avcodec_alloc_context3 */ 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; + +#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. + */ + void *opaque; + /** * the average bitrate * - encoding: Set by user; unused for constant quantizer encoding. @@ -1244,30 +1324,33 @@ typedef struct AVCodecContext { 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. - * - decoding: Set by user. + * - decoding: unused */ - int flags; + int global_quality; /** - * 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?) + * - encoding: Set by user. + * - decoding: unused */ - int sub_id; + int compression_level; +#define FF_COMPRESSION_DEFAULT -1 /** - * 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 + * CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. */ - 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. @@ -1293,6 +1376,39 @@ typedef struct AVCodecContext { */ 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; + + /** + * Encoding: Number of frames delay there will be from the encoder input to + * the decoder output. (we assume the decoder matches the spec) + * Decoding: Number of frames delay in addition to what a standard decoder + * as specified in the spec would produce. + * + * 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: Set by libavcodec. + */ + int delay; + + /* video only */ /** * picture width / height. @@ -1303,6 +1419,13 @@ typedef struct AVCodecContext { */ 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 /** @@ -1321,6 +1444,15 @@ typedef struct AVCodecContext { */ 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 @@ -1348,817 +1480,685 @@ typedef struct AVCodecContext { 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. + * 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. */ - 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 frame_number; ///< audio or video frame number + int max_b_frames; /** - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * qscale factor between IP and B-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 delay; + float b_quant_factor; - /* - 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) + /** obsolete FIXME remove */ + int rc_strategy; +#define FF_RC_STRATEGY_XVID 1 + + int b_frame_strategy; +#if FF_API_MPV_GLOBAL_OPTS /** - * minimum quantizer + * luma single coefficient elimination threshold * - encoding: Set by user. * - decoding: unused */ - int qmin; + attribute_deprecated int luma_elim_threshold; /** - * maximum quantizer + * chroma single coeff elimination threshold * - encoding: Set by user. * - decoding: unused */ - int qmax; + attribute_deprecated int chroma_elim_threshold; +#endif /** - * maximum quantizer difference between frames + * qscale offset between IP and B-frames * - encoding: Set by user. * - decoding: unused */ - int max_qdiff; + float b_quant_offset; /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. + * 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 has_b_frames; + + /** + * 0-> h263 quant 1-> mpeg quant * - encoding: Set by user. * - decoding: unused */ - int max_b_frames; + int mpeg_quant; /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * 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 */ - float b_quant_factor; - - /** obsolete FIXME remove */ - int rc_strategy; -#define FF_RC_STRATEGY_XVID 1 - - 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; + float i_quant_factor; /** - * number of bits used for the previously encoded frame - * - encoding: Set by libavcodec. + * qscale offset between P and I-frames + * - encoding: Set by user. * - decoding: unused */ - int frame_bits; + float i_quant_offset; /** - * Private data of the user, can be used to carry app specific stuff. + * luminance masking (0-> disabled) * - 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 */ + float lumi_masking; /** - * 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. + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused */ - unsigned int codec_tag; + float temporal_cplx_masking; /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused */ - 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 + float spatial_cplx_masking; /** - * luma single coefficient elimination threshold + * p block masking (0-> disabled) * - encoding: Set by user. * - decoding: unused */ - int luma_elim_threshold; + float p_masking; /** - * chroma single coeff elimination threshold + * darkness masking (0-> disabled) * - encoding: Set by user. * - decoding: unused */ - int chroma_elim_threshold; + float dark_masking; /** - * strictly follow the standard (MPEG4, ...). - * - 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) + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). */ - 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. - + int slice_count; /** - * qscale offset between IP and B-frames + * prediction method (needed for huffyuv) * - encoding: Set by user. * - decoding: unused */ - float b_quant_offset; + int prediction_method; +#define FF_PRED_LEFT 0 +#define FF_PRED_PLANE 1 +#define FF_PRED_MEDIAN 2 /** - * 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. + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). */ - void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); + int *slice_offset; /** - * 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. + * 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: 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. + * motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused */ - int block_align; - + int me_cmp; /** - * 0-> h263 quant 1-> mpeg quant + * subpixel motion estimation comparison function * - encoding: Set by user. * - decoding: unused */ - int mpeg_quant; - + int me_sub_cmp; /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. + * macroblock comparison function (not supported yet) + * - encoding: Set by user. * - decoding: unused */ - char *stats_out; - + int mb_cmp; /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. + * interlaced DCT comparison function + * - encoding: Set by user. * - decoding: unused */ - char *stats_in; + 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 /** - * ratecontrol qmin qmax limiting method - * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. + * ME diamond size & shape * - encoding: Set by user. * - decoding: unused */ - float rc_qsquish; - - float rc_qmod_amp; - int rc_qmod_freq; + int dia_size; /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. * - decoding: unused */ - RcOverride *rc_override; - int rc_override_count; + int last_predictor_count; /** - * rate control equation - * - encoding: Set by user + * prepass for motion estimation + * - encoding: Set by user. * - decoding: unused */ - const char *rc_eq; + int pre_me; /** - * maximum bitrate + * motion estimation prepass comparison function * - encoding: Set by user. * - decoding: unused */ - int rc_max_rate; + int me_pre_cmp; /** - * minimum bitrate + * ME prepass diamond size & shape * - encoding: Set by user. * - decoding: unused */ - int rc_min_rate; + int pre_dia_size; /** - * decoder bitstream buffer size + * subpel ME quality * - encoding: Set by user. * - decoding: unused */ - int rc_buffer_size; - float rc_buffer_aggressivity; + int me_subpel_quality; /** - * 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 + * 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 i_quant_factor; + 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 /** - * qscale offset between P and I-frames + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * * - encoding: Set by user. * - decoding: unused */ - float i_quant_offset; + int me_range; /** - * initial complexity for pass1 ratecontrol + * intra quantizer bias * - encoding: Set by user. * - decoding: unused */ - float rc_initial_cplx; + int intra_quant_bias; +#define FF_DEFAULT_QUANT_BIAS 999999 /** - * DCT algorithm, see FF_DCT_* below + * inter quantizer bias * - 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 inter_quant_bias; +#if FF_API_COLOR_TABLE_ID /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused + * color table ID + * - encoding: unused + * - decoding: Which clrtable should be used for 8bit RGB images. + * Tables have to be stored somewhere. FIXME */ - float lumi_masking; + attribute_deprecated int color_table_id; +#endif /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused + * slice flags + * - encoding: unused + * - decoding: Set by user. */ - float temporal_cplx_masking; + 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) /** - * spatial complexity masking (0-> disabled) + * XVideo Motion Acceleration + * - encoding: forbidden + * - decoding: set by decoder + */ + int xvmc_acceleration; + + /** + * macroblock decision mode * - encoding: Set by user. * - decoding: unused */ - float spatial_cplx_masking; + 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 /** - * p block masking (0-> disabled) + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + */ + uint16_t *intra_matrix; + + /** + * custom inter quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + */ + uint16_t *inter_matrix; + + /** + * scene change detection threshold + * 0 is default, larger means fewer detected scene changes. * - encoding: Set by user. * - decoding: unused */ - float p_masking; + int scenechange_threshold; /** - * darkness masking (0-> disabled) + * noise reduction strength * - encoding: Set by user. * - decoding: unused */ - float dark_masking; + int noise_reduction; +#if FF_API_INTER_THRESHOLD /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. + * @deprecated this field is unused */ - 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 - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; + attribute_deprecated int inter_threshold; +#endif +#if FF_API_MPV_GLOBAL_OPTS /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. + * @deprecated use mpegvideo private options instead */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 + attribute_deprecated int quantizer_noise_shaping; +#endif /** - * dsp_mask could be add used to disable unwanted CPU features - * CPU features (i.e. MMX, SSE. ...) + * Motion estimation threshold below which no motion estimation is + * performed, but instead the user specified motion vectors are used. * - * 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; - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. + * - encoding: Set by user. + * - decoding: unused */ - int bits_per_coded_sample; + int me_threshold; /** - * prediction method (needed for huffyuv) + * Macroblock threshold below which the user specified macroblock types will be used. * - 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 mb_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. + * precision of the intra DC coefficient - 8 * - encoding: Set by user. - * - decoding: Set by libavcodec. + * - decoding: unused */ - AVRational sample_aspect_ratio; + int intra_dc_precision; /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. */ - AVFrame *coded_frame; + int skip_top; /** - * debug - * - encoding: Set by user. + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused * - decoding: Set by user. */ - 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 + int skip_bottom; /** - * debug + * Border processing masking, raises the quantizer for mbs on the borders + * of the picture. * - 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 + float border_masking; /** - * error - * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. + * minimum MB lagrange multipler + * - encoding: Set by user. * - decoding: unused */ - uint64_t error[AV_NUM_DATA_POINTERS]; + int mb_lmin; /** - * motion estimation comparison function + * maximum MB lagrange multipler * - encoding: Set by user. * - decoding: unused */ - int me_cmp; + int mb_lmax; + /** - * subpixel motion estimation comparison function + * * - encoding: Set by user. * - decoding: unused */ - int me_sub_cmp; + int me_penalty_compensation; + /** - * macroblock comparison function (not supported yet) + * * - encoding: Set by user. * - decoding: unused */ - int mb_cmp; + int bidir_refine; + /** - * interlaced DCT comparison function + * * - 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 + int brd_scale; /** - * ME diamond size & shape + * minimum GOP size * - encoding: Set by user. * - decoding: unused */ - int dia_size; + int keyint_min; /** - * amount of previous MV predictors (2a+1 x 2a+1 square) + * number of reference frames * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by lavc. */ - int last_predictor_count; + int refs; /** - * prepass for motion estimation + * chroma qp offset from luma * - encoding: Set by user. * - decoding: unused */ - int pre_me; + int chromaoffset; /** - * motion estimation prepass comparison function + * Multiplied by qscale for each frame and added to scene_change_score. * - encoding: Set by user. * - decoding: unused */ - int me_pre_cmp; + int scenechange_factor; /** - * ME prepass diamond size & shape + * + * Note: Value depends upon the compare function used for fullpel ME. * - encoding: Set by user. * - decoding: unused */ - int pre_dia_size; + int mv0_threshold; /** - * subpel ME quality + * Adjust sensitivity of b_frame_strategy 1. * - encoding: Set by user. * - decoding: unused */ - int me_subpel_quality; + int b_sensitivity; /** - * 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. + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec */ - enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt); + enum AVColorPrimaries color_primaries; /** - * 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. + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec */ - 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 + enum AVColorTransferCharacteristic color_trc; /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec */ - int me_range; + enum AVColorSpace colorspace; /** - * intra quantizer bias - * - encoding: Set by user. - * - decoding: unused + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec */ - int intra_quant_bias; -#define FF_DEFAULT_QUANT_BIAS 999999 + enum AVColorRange color_range; /** - * inter quantizer bias - * - encoding: Set by user. - * - decoding: unused + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec */ - int inter_quant_bias; + enum AVChromaLocation chroma_sample_location; /** - * color table ID - * - encoding: unused - * - decoding: Which clrtable should be used for 8bit RGB images. - * Tables have to be stored somewhere. FIXME + * Number of slices. + * Indicates number of picture subdivisions. Used for parallelized + * decoding. + * - encoding: Set by user + * - decoding: unused */ - int color_table_id; + int slices; - /** - * 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 + /** Field order + * - encoding: set by libavcodec + * - decoding: Set by libavcodec */ - int global_quality; + enum AVFieldOrder field_order; + + /* audio only */ + int sample_rate; ///< samples per second + int channels; ///< number of audio channels -#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 + * audio sample format * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by libavcodec. */ - int coder_type; + enum AVSampleFormat sample_fmt; ///< sample format + /* The following data should not be initialized. */ /** - * context model - * - encoding: Set by user. - * - decoding: unused + * Samples per packet, initialized when calling 'init'. */ - int context_model; + int frame_size; /** - * slice flags - * - encoding: unused - * - decoding: Set by user. + * 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 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) + int frame_number; /** - * XVideo Motion Acceleration - * - encoding: forbidden - * - decoding: set by decoder + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. */ - int xvmc_acceleration; + int block_align; /** - * macroblock decision mode + * Audio cutoff bandwidth (0 means "automatic") * - encoding: Set by user. * - decoding: unused */ - 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 cutoff; +#if FF_API_REQUEST_CHANNELS /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. + * 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. */ - uint16_t *intra_matrix; + int request_channels; +#endif /** - * custom inter quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by user, may be overwritten 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'). - * This is used to work around some encoder bugs. + * Request decoder to use this channel layout 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. */ - unsigned int stream_codec_tag; + uint64_t request_channel_layout; /** - * scene change detection threshold - * 0 is default, larger means fewer detected scene changes. + * Type of service that the audio stream conveys. * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by libavcodec. */ - int scenechange_threshold; + enum AVAudioServiceType audio_service_type; /** - * minimum Lagrange multipler - * - encoding: Set by user. - * - decoding: unused + * desired sample format + * - encoding: Not used. + * - decoding: Set by user. + * Decoder will decode to this format if it can. */ - int lmin; + enum AVSampleFormat request_sample_fmt; /** - * maximum Lagrange multipler - * - 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 lmax; + int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); /** - * noise reduction strength - * - encoding: Set by user. - * - decoding: unused + * 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. */ - int noise_reduction; + void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); /** * Called at the beginning of a frame to get cr buffer for it. @@ -2174,199 +2174,141 @@ typedef struct AVCodecContext { */ 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) + float qblur; ///< amount of qscale smoothing over time (0.0-1.0) /** - * + * minimum quantizer * - encoding: Set by user. * - decoding: unused */ - int inter_threshold; + int qmin; /** - * CODEC_FLAG2_* + * maximum quantizer * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused */ - int flags2; + int qmax; /** - * Simulates errors in the bitstream to test error concealment. + * maximum quantizer difference between frames * - encoding: Set by user. * - decoding: unused */ - int error_rate; + int max_qdiff; /** - * quantizer noise shaping + * 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 quantizer_noise_shaping; + float rc_qsquish; + + float rc_qmod_amp; + int rc_qmod_freq; /** - * thread count - * is used to decide how many independent tasks should be passed to execute() + * decoder bitstream buffer size * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused */ - int thread_count; + int rc_buffer_size; /** - * 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. + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); + int rc_override_count; + RcOverride *rc_override; /** - * thread opaque - * Can be used by execute() to store some per AVCodecContext stuff. - * - encoding: set by execute() - * - decoding: set by execute() + * rate control equation + * - encoding: Set by user + * - decoding: unused */ - void *thread_opaque; + const char *rc_eq; /** - * 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, 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, 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 @@ -2397,170 +2339,274 @@ typedef struct AVCodecContext { 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; /** - * - * - encoding: Set by user. - * - decoding: unused + * GOP timecode frame start number + * - encoding: Set by user, in non drop frame format + * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) */ - 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. */ + + /* 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: unused - * - decoding: Set by user. + * number of bits used for the previously encoded frame + * - encoding: Set by libavcodec. + * - decoding: unused */ - enum AVDiscard skip_frame; + int frame_bits; /** - * - * - encoding: Set by user. + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. * - decoding: unused */ - int bidir_refine; + char *stats_out; /** - * - * - 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 */ - int brd_scale; + char *stats_in; /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user */ - int keyint_min; + 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 /** - * number of reference frames + * strictly follow the standard (MPEG4, ...). * - encoding: Set by user. - * - decoding: Set by lavc. + * - 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 refs; + 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. /** - * chroma qp offset from luma - * - encoding: Set by user. - * - decoding: unused + * error concealment flags + * - encoding: unused + * - decoding: Set by user. */ - int chromaoffset; + int error_concealment; +#define FF_EC_GUESS_MVS 1 +#define FF_EC_DEBLOCK 2 /** - * trellis RD quantization + * debug * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. */ - int trellis; + 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 /** - * Audio cutoff bandwidth (0 means "automatic") + * debug * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. */ - int cutoff; + 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 /** - * Multiplied by qscale for each frame and added to scene_change_score. - * - 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 scenechange_factor; + 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) + +#define AV_EF_CAREFUL (1<<16) +#define AV_EF_COMPLIANT (1<<17) +#define AV_EF_AGGRESSIVE (1<<18) + /** - * - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused + * 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. */ - int mv0_threshold; + int64_t reordered_opaque; /** - * Adjust sensitivity of b_frame_strategy 1. - * - encoding: Set by user. - * - decoding: unused + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec */ - int b_sensitivity; + struct AVHWAccel *hwaccel; /** - * - 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 FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg 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 */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 + void *hwaccel_context; /** - * - encoding: Set by user. + * error + * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. * - decoding: unused */ - int min_prediction_order; + uint64_t error[AV_NUM_DATA_POINTERS]; /** + * DCT algorithm, see FF_DCT_* below * - encoding: Set by user. * - decoding: unused */ - int max_prediction_order; + 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 - * - encoding: Set by user, in non drop frame format - * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. */ - int64_t timecode_frame_start; + 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_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. + * 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.) */ - int request_channels; -#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. @@ -2570,95 +2616,66 @@ typedef struct AVCodecContext { int bits_per_raw_sample; /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten 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, 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, 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 FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg 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. @@ -2680,117 +2697,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 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. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user + * noise vs. sse weight for the nsse comparsion function + * - encoding: Set by user. * - decoding: unused */ - int slices; + int nsse_weight; /** - * 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()) + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. */ - uint8_t *subtitle_header; - int subtitle_header_size; + 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 /** - * 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 + * level + * - encoding: Set by user. + * - decoding: Set by libavcodec. */ - 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. - * - decoding: Set by user, otherwise the default is used. + * - encoding: unused + * - decoding: Set by user. */ - 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 + enum AVDiscard skip_loop_filter; /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * + * - encoding: unused + * - 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. - * 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_frame; /** - * 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. + * 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()) */ - 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. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. + * - decoding: unused */ - 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 - * - decoding: Set by user. */ - 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) - -#define AV_EF_CAREFUL (1<<16) -#define AV_EF_COMPLIANT (1<<17) -#define AV_EF_AGGRESSIVE (1<<18) + AVPacket *pkt; /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** 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; /** * Current statistics for PTS correction. @@ -2801,7 +2851,6 @@ typedef struct AVCodecContext { int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far int64_t pts_correction_last_pts; /// PTS of the last frame int64_t pts_correction_last_dts; /// DTS of the last frame - } AVCodecContext; /** @@ -3130,6 +3179,17 @@ void av_free_packet(AVPacket *pkt); 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. * @@ -3917,6 +3977,10 @@ int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, * 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. @@ -3960,7 +4024,10 @@ int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, 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. @@ -3972,8 +4039,48 @@ int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, * @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); @@ -4017,6 +4124,34 @@ void avcodec_default_free_buffers(AVCodecContext *s); */ int av_get_bits_per_sample(enum CodecID codec_id); +/** + * Return the PCM codec associated with a sample format. + * @param be endianness, 0 for little, 1 for big, + * -1 (or anything else) for native + * @return CODEC_ID_PCM_* or CODEC_ID_NONE + */ +enum CodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); + +/** + * 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_exact_bits_per_sample(enum CodecID codec_id); + +/** + * 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. + */ +int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); + /* frame parsing */ typedef struct AVCodecParserContext { void *priv_data; @@ -4144,6 +4279,13 @@ 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 { @@ -4383,4 +4525,14 @@ const AVClass *avcodec_get_frame_class(void); */ 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 */