FFmpeg源代码简单分析-通用-结构体分析-AVCodecContext

参考链接

  • FFMPEG结构体分析:AVCodecContext_雷霄骅的博客-CSDN博客_avcodeccontext

AVCodecContext

  • AVCodecContext是包含变量较多的结构体(感觉差不多是变量最多的结构体)
  • 结构体的定义位于avcodec.h

 

  • 关键的变量如下所示(仅仅考虑解码范畴) 
    • enum AVMediaType codec_type:编解码器的类型(视频,音频...)
    • struct AVCodec  *codec:采用的解码器AVCodec(H.264,MPEG2...)
    • int bit_rate:平均比特率
    • uint8_t *extradata; int extradata_size:针对特定编码器包含的附加信息(例如对于H.264解码器来说,存储SPS,PPS等)
    • AVRational time_base:根据该参数,可以把PTS转化为实际的时间(单位为秒s)
    • int width, height:如果是视频的话,代表宽和高
    • int refs:运动估计参考帧的个数(H.264的话会有多帧,MPEG2这类的一般就没有了)
    • int sample_rate:采样率(音频)
    • int channels:声道数(音频)
    • enum AVSampleFormat sample_fmt:采样格式
    • int profile:型(H.264里面就有,其他编码标准应该也有)
    • int level:级(和profile差不太多)
  • 在这里需要注意:AVCodecContext中很多的参数是编码的时候使用的,不适用于解码。

重点参数类型的分析

codec_type

  • enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
  • 编解码器类型

/*** @addtogroup lavu_media Media Type* @brief Media Type*/enum AVMediaType {AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATAAVMEDIA_TYPE_VIDEO,AVMEDIA_TYPE_AUDIO,AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous 不透明的数据信息通常是连续的AVMEDIA_TYPE_SUBTITLE,AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse 不透明的数据信息通常是稀疏的AVMEDIA_TYPE_NB
};

sample_fmt

  • enum AVSampleFormat sample_fmt;  ///< sample format
  • 在FFMPEG中音频采样格式有以下几种:
/*** Audio sample formats** - The data described by the sample format is always in native-endian order.*   Sample values can be expressed by native C types, hence the lack of a signed*   24-bit sample format even though it is a common raw audio data format.*   示例格式所描述的数据始终采用 native-endian 顺序。 样本值可以用原生 C 类型表示,*   因此即使是常见的原始音频数据格式,也缺少有符号的 24 位样本格式。* - The floating-point formats are based on full volume being in the range*   [-1.0, 1.0]. Any values outside this range are beyond full volume level.*   浮点格式基于 [-1.0, 1.0] 范围内的完整音量。 此范围之外的任何值都超出了全音量级别。* - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg*   (such as AVFrame in libavcodec) is as follows:** @par* For planar sample formats, each audio channel is in a separate data plane,* and linesize is the buffer size, in bytes, for a single plane. All data* planes must be the same size. For packed sample formats, only the first data* plane is used, and samples for each channel are interleaved. In this case,* linesize is the buffer size, in bytes, for the 1 plane.* 对于平面样本格式,每个音频通道都位于单独的数据平面中,而 linesize 是单个平面的缓冲区大小,* 以字节为单位。 所有数据平面的大小必须相同。 对于打包样本格式,仅使用第一个数据平面,并且* 每个通道的样本都是交错的。 在这种情况下,linesize 是第 1 个平面的缓冲区大小,以字节为单位。*/
enum AVSampleFormat {AV_SAMPLE_FMT_NONE = -1,AV_SAMPLE_FMT_U8,          ///< unsigned 8 bitsAV_SAMPLE_FMT_S16,         ///< signed 16 bitsAV_SAMPLE_FMT_S32,         ///< signed 32 bitsAV_SAMPLE_FMT_FLT,         ///< floatAV_SAMPLE_FMT_DBL,         ///< doubleAV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planarAV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planarAV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planarAV_SAMPLE_FMT_FLTP,        ///< float, planarAV_SAMPLE_FMT_DBLP,        ///< double, planarAV_SAMPLE_FMT_S64,         ///< signed 64 bitsAV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planarAV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
};

profile

  • 在FFMPEG中型有以下几种,可以看出AAC,MPEG2,H.264,VC-1,MPEG4都有型的概念。

#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_AAC_HE   4
#define FF_PROFILE_AAC_HE_V2 28
#define FF_PROFILE_AAC_LD   22
#define FF_PROFILE_AAC_ELD  38
#define FF_PROFILE_MPEG2_AAC_LOW 128
#define FF_PROFILE_MPEG2_AAC_HE  131#define FF_PROFILE_DNXHD         0
#define FF_PROFILE_DNXHR_LB      1
#define FF_PROFILE_DNXHR_SQ      2
#define FF_PROFILE_DNXHR_HQ      3
#define FF_PROFILE_DNXHR_HQX     4
#define FF_PROFILE_DNXHR_444     5#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_DTS_EXPRESS 70#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_MULTIVIEW_HIGH       118
#define FF_PROFILE_H264_HIGH_422             122
#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_STEREO_HIGH          128
#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#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2
#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768
#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
#define FF_PROFILE_JPEG2000_DCINEMA_4K              4#define FF_PROFILE_VP9_0                            0
#define FF_PROFILE_VP9_1                            1
#define FF_PROFILE_VP9_2                            2
#define FF_PROFILE_VP9_3                            3#define FF_PROFILE_HEVC_MAIN                        1
#define FF_PROFILE_HEVC_MAIN_10                     2
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
#define FF_PROFILE_HEVC_REXT                        4#define FF_PROFILE_VVC_MAIN_10                      1
#define FF_PROFILE_VVC_MAIN_10_444                 33#define FF_PROFILE_AV1_MAIN                         0
#define FF_PROFILE_AV1_HIGH                         1
#define FF_PROFILE_AV1_PROFESSIONAL                 2#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT            0xc0
#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT         0xc2
#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS                0xc3
#define FF_PROFILE_MJPEG_JPEG_LS                         0xf7#define FF_PROFILE_SBC_MSBC                         1#define FF_PROFILE_PRORES_PROXY     0
#define FF_PROFILE_PRORES_LT        1
#define FF_PROFILE_PRORES_STANDARD  2
#define FF_PROFILE_PRORES_HQ        3
#define FF_PROFILE_PRORES_4444      4
#define FF_PROFILE_PRORES_XQ        5#define FF_PROFILE_ARIB_PROFILE_A 0
#define FF_PROFILE_ARIB_PROFILE_C 1#define FF_PROFILE_KLVA_SYNC 0
#define FF_PROFILE_KLVA_ASYNC 1

 

源码

typedef struct AVCodecContext {/*** information on struct for av_log* - set by avcodec_alloc_context3*/const AVClass *av_class;int log_level_offset;enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */const struct AVCodec  *codec;enum AVCodecID     codec_id; /* see AV_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;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.* - decoding: Set by user, may be overwritten by libavcodec*             if this info is available in the stream*/int64_t bit_rate;/*** number of bits the bitstream is allowed to diverge from the reference.*           the reference can be CBR (for CBR pass1) or VBR (for pass2)* - encoding: Set by user; unused for constant quantizer encoding.* - decoding: unused*/int bit_rate_tolerance;/*** Global quality for codecs which cannot change it per frame.* This should be proportional to MPEG-1/2/4 qscale.* - encoding: Set by user.* - decoding: unused*/int global_quality;/*** - encoding: Set by user.* - decoding: unused*/int compression_level;
#define FF_COMPRESSION_DEFAULT -1/*** AV_CODEC_FLAG_*.* - encoding: Set by user.* - decoding: Set by user.*/int flags;/*** AV_CODEC_FLAG2_** - encoding: Set by user.* - decoding: Set by user.*/int flags2;/*** some codecs need / can use extradata like Huffman tables.* MJPEG: Huffman tables* rv10: additional flags* MPEG-4: global headers (they can be in the bitstream or here)* The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger* than extradata_size to avoid problems if it is read with the bitstream reader.* The bytewise contents of extradata must not depend on the architecture or CPU endianness.* Must be allocated with the av_malloc() family of functions.* - encoding: Set/allocated/freed by libavcodec.* - decoding: Set/allocated/freed by user.*/uint8_t *extradata;int extradata_size;/*** This is the fundamental unit of time (in seconds) in terms* of which frame timestamps are represented. For fixed-fps content,* timebase should be 1/framerate and timestamp increments should be* identically 1.* This often, but not always is the inverse of the frame rate or field rate* for video. 1/time_base is not the average frame rate if the frame rate is not* constant.** Like containers, elementary streams also can store timestamps, 1/time_base* is the unit in which these timestamps are specified.* As example of such codec time base see ISO/IEC 14496-2:2001(E)* vop_time_increment_resolution and fixed_vop_rate* (fixed_vop_rate == 0 implies that it is different from the framerate)** - encoding: MUST be set by user.* - decoding: the use of this field for decoding is deprecated.*             Use framerate instead.*/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;/*** Codec delay.** 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:*   For encoding, this field is unused (see initial_padding).**   For decoding, this is the number of samples the decoder needs to*   output before the decoder's output is valid. When seeking, you should*   start decoding this many samples prior to your desired seek point.** - encoding: Set by libavcodec.* - decoding: Set by libavcodec.*/int delay;/* video only *//*** picture width / height.** @note Those fields may not match the values of the last* AVFrame output by avcodec_receive_frame() due frame* reordering.** - encoding: MUST be set by user.* - decoding: May be set by the user before opening the decoder if known e.g.*             from the container. Some decoders will require the dimensions*             to be set by the caller. During decoding, the decoder may*             overwrite those values as required while parsing the data.*/int width, height;/*** Bitstream width / height, may be different from width/height e.g. when* the decoded frame is cropped before being output or lowres is enabled.** @note Those field may not match the value of the last* AVFrame output by avcodec_receive_frame() due frame* reordering.** - encoding: unused* - decoding: May be set by the user before opening the decoder if known*             e.g. from the container. During decoding, the decoder may*             overwrite those values as required while parsing the data.*/int coded_width, coded_height;/*** the number of pictures in a group of pictures, or 0 for intra_only* - encoding: Set by user.* - decoding: unused*/int gop_size;/*** Pixel format, see AV_PIX_FMT_xxx.* May be set by the demuxer if known from headers.* May be overridden by the decoder if it knows better.** @note This field may not match the value of the last* AVFrame output by avcodec_receive_frame() due frame* reordering.** - encoding: Set by user.* - decoding: Set by user if known, overridden by libavcodec while*             parsing the data.*/enum AVPixelFormat pix_fmt;/*** If non NULL, 'draw_horiz_band' is called by the libavcodec* decoder to draw a horizontal band. It improves cache usage. Not* all codecs can do that. You must check the codec capabilities* beforehand.* When multithreading is used, it may be called from multiple threads* at the same time; threads might draw different parts of the same AVFrame,* or multiple AVFrames, and there is no guarantee that slices will be drawn* in order.* The function is also used by hardware acceleration APIs.* It is called at least once during frame decoding to pass* the data needed for hardware render.* In that mode instead of pixel data, AVFrame points to* a structure specific to the acceleration API. The application* reads the structure and can change some fields to indicate progress* or mark state.* - encoding: unused* - decoding: Set by user.* @param height the height of the slice* @param y the y position of the slice* @param type 1->top field, 2->bottom field, 3->frame* @param offset offset into the AVFrame.data from which the slice should be read*/void (*draw_horiz_band)(struct AVCodecContext *s,const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],int y, int type, int height);/*** Callback to negotiate the pixel format. Decoding only, may be set by the* caller before avcodec_open2().** Called by some decoders to select the pixel format that will be used for* the output frames. This is mainly used to set up hardware acceleration,* then the provided format list contains the corresponding hwaccel pixel* formats alongside the "software" one. The software pixel format may also* be retrieved from \ref sw_pix_fmt.** This callback will be called when the coded frame properties (such as* resolution, pixel format, etc.) change and more than one output format is* supported for those new properties. If a hardware pixel format is chosen* and initialization for it fails, the callback may be called again* immediately.** This callback may be called from different threads if the decoder is* multi-threaded, but not from more than one thread simultaneously.** @param fmt list of formats which may be used in the current*            configuration, terminated by AV_PIX_FMT_NONE.* @warning Behavior is undefined if the callback returns a value other*          than one of the formats in fmt or AV_PIX_FMT_NONE.* @return the chosen format or AV_PIX_FMT_NONE*/enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);/*** 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 max_b_frames;/*** 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*/float b_quant_factor;/*** qscale offset between IP and B-frames* - encoding: Set by user.* - decoding: unused*/float b_quant_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.* - decoding: Set by libavcodec.*/int has_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 normal ratecontrol will be done (q= -normal_q*factor+offset).* - encoding: Set by user.* - decoding: unused*/float i_quant_factor;/*** qscale offset between P and I-frames* - encoding: Set by user.* - decoding: unused*/float i_quant_offset;/*** luminance masking (0-> disabled)* - encoding: Set by user.* - decoding: unused*/float lumi_masking;/*** temporary complexity masking (0-> disabled)* - encoding: Set by user.* - decoding: unused*/float temporal_cplx_masking;/*** spatial complexity masking (0-> disabled)* - encoding: Set by user.* - decoding: unused*/float spatial_cplx_masking;/*** p block masking (0-> disabled)* - encoding: Set by user.* - decoding: unused*/float p_masking;/*** darkness masking (0-> disabled)* - encoding: Set by user.* - decoding: unused*/float dark_masking;/*** 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;/*** 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.*/AVRational sample_aspect_ratio;/*** motion estimation comparison function* - encoding: Set by user.* - decoding: unused*/int me_cmp;/*** subpixel motion estimation comparison function* - encoding: Set by user.* - decoding: unused*/int me_sub_cmp;/*** macroblock comparison function (not supported yet)* - encoding: Set by user.* - decoding: unused*/int mb_cmp;/*** 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_MEDIAN_SAD   15
#define FF_CMP_CHROMA       256/*** ME diamond size & shape* - encoding: Set by user.* - decoding: unused*/int dia_size;/*** amount of previous MV predictors (2a+1 x 2a+1 square)* - encoding: Set by user.* - decoding: unused*/int last_predictor_count;/*** motion estimation prepass comparison function* - encoding: Set by user.* - decoding: unused*/int me_pre_cmp;/*** ME prepass diamond size & shape* - encoding: Set by user.* - decoding: unused*/int pre_dia_size;/*** subpel ME quality* - encoding: Set by user.* - decoding: unused*/int me_subpel_quality;/*** maximum motion estimation search range in subpel units* If 0 then no limit.** - encoding: Set by user.* - decoding: unused*/int me_range;/*** slice flags* - encoding: unused* - decoding: Set by user.*/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 (MPEG-2 field pics)
#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)/*** macroblock decision mode* - 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/*** custom intra quantization matrix* Must be allocated with the av_malloc() family of functions, and will be freed in* avcodec_free_context().* - encoding: Set/allocated by user, freed by libavcodec. Can be NULL.* - decoding: Set/allocated/freed by libavcodec.*/uint16_t *intra_matrix;/*** custom inter quantization matrix* Must be allocated with the av_malloc() family of functions, and will be freed in* avcodec_free_context().* - encoding: Set/allocated by user, freed by libavcodec. Can be NULL.* - decoding: Set/allocated/freed by libavcodec.*/uint16_t *inter_matrix;/*** precision of the intra DC coefficient - 8* - encoding: Set by user.* - decoding: Set by libavcodec*/int intra_dc_precision;/*** 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;/*** minimum MB Lagrange multiplier* - encoding: Set by user.* - decoding: unused*/int mb_lmin;/*** maximum MB Lagrange multiplier* - encoding: Set by user.* - decoding: unused*/int mb_lmax;/*** - encoding: Set by user.* - decoding: unused*/int bidir_refine;/*** minimum GOP size* - encoding: Set by user.* - decoding: unused*/int keyint_min;/*** number of reference frames* - encoding: Set by user.* - decoding: Set by lavc.*/int refs;/*** Note: Value depends upon the compare function used for fullpel ME.* - encoding: Set by user.* - decoding: unused*/int mv0_threshold;/*** 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*/enum AVColorTransferCharacteristic color_trc;/*** YUV colorspace type.* - 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*/int slices;/** Field order* - encoding: set by libavcodec* - decoding: Set by user.*/enum AVFieldOrder field_order;/* audio only */int sample_rate; ///< samples per second#if FF_API_OLD_CHANNEL_LAYOUT/*** number of audio channels* @deprecated use ch_layout.nb_channels*/attribute_deprecatedint channels;
#endif/*** audio sample format* - encoding: Set by user.* - decoding: Set by libavcodec.*/enum AVSampleFormat sample_fmt;  ///< sample format/* The following data should not be initialized. *//*** Number of samples per channel in an audio frame.** - encoding: set by libavcodec in avcodec_open2(). Each submitted frame*   except the last must contain exactly frame_size samples per channel.*   May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the*   frame size is not restricted.* - decoding: may be set by some decoders to indicate constant frame size*/int frame_size;/*** 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 frame_number;/*** number of bytes per packet if constant and known or 0* Used by some WAV based audio codecs.*/int block_align;/*** Audio cutoff bandwidth (0 means "automatic")* - encoding: Set by user.* - decoding: unused*/int cutoff;#if FF_API_OLD_CHANNEL_LAYOUT/*** Audio channel layout.* - encoding: set by user.* - decoding: set by user, may be overwritten by libavcodec.* @deprecated use ch_layout*/attribute_deprecateduint64_t channel_layout;/*** Request decoder to use this channel layout if it can (0 for default)* - encoding: unused* - decoding: Set by user.* @deprecated use "downmix" codec private option*/attribute_deprecateduint64_t request_channel_layout;
#endif/*** Type of service that the audio stream conveys.* - 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.*/enum AVSampleFormat request_sample_fmt;/*** This callback is called at the beginning of each frame to get data* buffer(s) for it. There may be one contiguous buffer for all the data or* there may be a buffer per each data plane or anything in between. What* this means is, you may set however many entries in buf[] you feel necessary.* Each buffer must be reference-counted using the AVBuffer API (see description* of buf[] below).** The following fields will be set in the frame before this callback is* called:* - format* - width, height (video only)* - sample_rate, channel_layout, nb_samples (audio only)* Their values may differ from the corresponding values in* AVCodecContext. This callback must use the frame values, not the codec* context values, to calculate the required buffer size.** This callback must fill the following fields in the frame:* - data[]* - linesize[]* - extended_data:*   * if the data is planar audio with more than 8 channels, then this*     callback must allocate and fill extended_data to contain all pointers*     to all data planes. data[] must hold as many pointers as it can.*     extended_data must be allocated with av_malloc() and will be freed in*     av_frame_unref().*   * otherwise extended_data must point to data* - buf[] must contain one or more pointers to AVBufferRef structures. Each of*   the frame's data and extended_data pointers must be contained in these. That*   is, one AVBufferRef for each allocated chunk of memory, not necessarily one*   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),*   and av_buffer_ref().* - extended_buf and nb_extended_buf must be allocated with av_malloc() by*   this callback and filled with the extra buffers if there are more*   buffers than buf[] can hold. extended_buf will be freed in*   av_frame_unref().** If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call* avcodec_default_get_buffer2() instead of providing buffers allocated by* some other means.** Each data plane must be aligned to the maximum required by the target* CPU.** @see avcodec_default_get_buffer2()** Video:** If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused* (read and/or written to if it is writable) 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.** Some decoders do not support linesizes changing between frames.** If frame multithreading is used, this callback may be called from a* different thread, but not from more than one at once. Does not need to be* reentrant.** @see avcodec_align_dimensions2()** Audio:** Decoders request a buffer of a particular size by setting* AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,* however, utilize only part of the buffer by setting AVFrame.nb_samples* to a smaller value in the output frame.** As a convenience, av_samples_get_buffer_size() and* av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()* 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_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);/* - encoding parameters */float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)/*** minimum quantizer* - encoding: Set by user.* - decoding: unused*/int qmin;/*** maximum quantizer* - encoding: Set by user.* - decoding: unused*/int qmax;/*** maximum quantizer difference between frames* - encoding: Set by user.* - decoding: unused*/int max_qdiff;/*** decoder bitstream buffer size* - encoding: Set by user.* - decoding: unused*/int rc_buffer_size;/*** ratecontrol override, see RcOverride* - encoding: Allocated/set/freed by user.* - decoding: unused*/int rc_override_count;RcOverride *rc_override;/*** maximum bitrate* - encoding: Set by user.* - decoding: Set by user, may be overwritten by libavcodec.*/int64_t rc_max_rate;/*** minimum bitrate* - encoding: Set by user.* - decoding: unused*/int64_t rc_min_rate;/*** Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.* - encoding: Set by user.* - decoding: unused.*/float rc_max_available_vbv_use;/*** Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.* - encoding: Set by user.* - decoding: unused.*/float rc_min_vbv_overflow_use;/*** 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;/*** trellis RD quantization* - encoding: Set by user.* - decoding: unused*/int trellis;/*** 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;/*** Work around bugs in encoders which sometimes cannot be detected automatically.* - encoding: Set by user* - decoding: Set by user*/int workaround_bugs;
#define FF_BUG_AUTODETECT       1  ///< autodetection
#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_QPEL_CHROMA      64
#define FF_BUG_STD_QPEL         128
#define FF_BUG_QPEL_CHROMA2     256
#define FF_BUG_DIRECT_BLOCKSIZE 512
#define FF_BUG_EDGE             1024
#define FF_BUG_HPEL_CHROMA      2048
#define FF_BUG_DC_CLIP          4096
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
#define FF_BUG_TRUNCATED       16384
#define FF_BUG_IEDGE           32768/*** strictly follow the standard (MPEG-4, ...).* - 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)*/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./*** error concealment flags* - encoding: unused* - decoding: Set by user.*/int error_concealment;
#define FF_EC_GUESS_MVS   1
#define FF_EC_DEBLOCK     2
#define FF_EC_FAVOR_INTER 256/*** debug* - encoding: Set by user.* - 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_DCT_COEFF   0x00000040
#define FF_DEBUG_SKIP        0x00000080
#define FF_DEBUG_STARTCODE   0x00000100
#define FF_DEBUG_ER          0x00000400
#define FF_DEBUG_MMCO        0x00000800
#define FF_DEBUG_BUGS        0x00001000
#define FF_DEBUG_BUFFERS     0x00008000
#define FF_DEBUG_THREADS     0x00010000
#define FF_DEBUG_GREEN_MD    0x00800000
#define FF_DEBUG_NOMC        0x01000000/*** Error recognition; may misdetect some more or less valid parts as errors.* - encoding: Set by user.* - decoding: Set by user.*/int err_recognition;/*** Verify checksums embedded in the bitstream (could be of either encoded or* decoded data, depending on the codec) and print an error message on mismatch.* If AV_EF_EXPLODE is also set, a mismatching checksum will result in the* decoder returning an error.*/
#define AV_EF_CRCCHECK  (1<<0)
#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error/*** opaque 64-bit number (generally a PTS) that will be reordered and* output in AVFrame.reordered_opaque* - encoding: Set by libavcodec to the reordered_opaque of the input*             frame corresponding to the last returned packet. Only*             supported by encoders with the*             AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability.* - decoding: Set by user.*/int64_t reordered_opaque;/*** Hardware accelerator in use* - encoding: unused.* - decoding: Set by libavcodec*/const struct AVHWAccel *hwaccel;/*** 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.* - encoding: unused* - decoding: Set by user*/void *hwaccel_context;/*** error* - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR.* - decoding: unused*/uint64_t error[AV_NUM_DATA_POINTERS];/*** DCT algorithm, see FF_DCT_* below* - 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_ALTIVEC 5
#define FF_DCT_FAAN    6/*** IDCT algorithm, see FF_IDCT_* below.* - encoding: Set by user.* - decoding: Set by user.*/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_ARM           7
#define FF_IDCT_ALTIVEC       8
#define FF_IDCT_SIMPLEARM     10
#define FF_IDCT_XVID          14
#define FF_IDCT_SIMPLEARMV5TE 16
#define FF_IDCT_SIMPLEARMV6   17
#define FF_IDCT_FAAN          20
#define FF_IDCT_SIMPLENEON    22
#if FF_API_IDCT_NONE
// formerly used by xvmc
#define FF_IDCT_NONE          24
#endif
#define FF_IDCT_SIMPLEAUTO    128/*** 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;/*** low resolution decoding, 1-> 1/2 size, 2->1/4 size* - encoding: unused* - decoding: Set by user.*/int lowres;/*** thread count* is used to decide how many independent tasks should be passed to execute()* - encoding: Set by user.* - decoding: Set by user.*/int thread_count;/*** Which multithreading methods to use.* Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,* so clients which cannot provide future frames should not use it.** - encoding: Set by user, otherwise the default is used.* - decoding: Set by user, otherwise the default is used.*/int thread_type;
#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once/*** Which multithreading methods are in use by the codec.* - encoding: Set by libavcodec.* - decoding: Set by libavcodec.*/int active_thread_type;#if FF_API_THREAD_SAFE_CALLBACKS/*** Set by the client if its custom get_buffer() callback can be called* synchronously 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.** @deprecated the custom get_buffer2() callback should always be*   thread-safe. Thread-unsafe get_buffer2() implementations will be*   invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words,*   libavcodec will behave as if this field was always set to 1.*   Callers that want to be forward compatible with future libavcodec*   versions should wrap access to this field in*     #if LIBAVCODEC_VERSION_MAJOR < 60*/attribute_deprecatedint thread_safe_callbacks;
#endif/*** 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);/*** 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.* Also see avcodec_thread_init and e.g. the --enable-pthread configure option.* @param c context passed also to func* @param count the number of things to execute* @param arg2 argument passed unchanged to func* @param ret return values of executed functions, must have space for "count" values. May be NULL.* @param func function that will be called count times, with jobnr from 0 to count-1.*             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no*             two instances of func executing at the same time will have the same threadnr.* @return always 0 currently, but code should handle a future improvement where when any call to func*         returns < 0 no further calls to func may be done and < 0 is returned.* - encoding: Set by libavcodec, user can override.* - decoding: Set by libavcodec, user can override.*/int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);/*** noise vs. sse weight for the nsse comparison function* - encoding: Set by user.* - decoding: unused*/int nsse_weight;/*** profile* - encoding: Set by user.* - decoding: Set by libavcodec.*/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_AAC_HE   4
#define FF_PROFILE_AAC_HE_V2 28
#define FF_PROFILE_AAC_LD   22
#define FF_PROFILE_AAC_ELD  38
#define FF_PROFILE_MPEG2_AAC_LOW 128
#define FF_PROFILE_MPEG2_AAC_HE  131#define FF_PROFILE_DNXHD         0
#define FF_PROFILE_DNXHR_LB      1
#define FF_PROFILE_DNXHR_SQ      2
#define FF_PROFILE_DNXHR_HQ      3
#define FF_PROFILE_DNXHR_HQX     4
#define FF_PROFILE_DNXHR_444     5#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_DTS_EXPRESS 70#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_MULTIVIEW_HIGH       118
#define FF_PROFILE_H264_HIGH_422             122
#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_STEREO_HIGH          128
#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#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2
#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768
#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
#define FF_PROFILE_JPEG2000_DCINEMA_4K              4#define FF_PROFILE_VP9_0                            0
#define FF_PROFILE_VP9_1                            1
#define FF_PROFILE_VP9_2                            2
#define FF_PROFILE_VP9_3                            3#define FF_PROFILE_HEVC_MAIN                        1
#define FF_PROFILE_HEVC_MAIN_10                     2
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
#define FF_PROFILE_HEVC_REXT                        4#define FF_PROFILE_VVC_MAIN_10                      1
#define FF_PROFILE_VVC_MAIN_10_444                 33#define FF_PROFILE_AV1_MAIN                         0
#define FF_PROFILE_AV1_HIGH                         1
#define FF_PROFILE_AV1_PROFESSIONAL                 2#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT            0xc0
#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT         0xc2
#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS                0xc3
#define FF_PROFILE_MJPEG_JPEG_LS                         0xf7#define FF_PROFILE_SBC_MSBC                         1#define FF_PROFILE_PRORES_PROXY     0
#define FF_PROFILE_PRORES_LT        1
#define FF_PROFILE_PRORES_STANDARD  2
#define FF_PROFILE_PRORES_HQ        3
#define FF_PROFILE_PRORES_4444      4
#define FF_PROFILE_PRORES_XQ        5#define FF_PROFILE_ARIB_PROFILE_A 0
#define FF_PROFILE_ARIB_PROFILE_C 1#define FF_PROFILE_KLVA_SYNC 0
#define FF_PROFILE_KLVA_ASYNC 1/*** level* - encoding: Set by user.* - decoding: Set by libavcodec.*/int level;
#define FF_LEVEL_UNKNOWN -99/*** Skip loop filtering for selected frames.* - encoding: unused* - decoding: Set by user.*/enum AVDiscard skip_loop_filter;/*** Skip IDCT/dequantization for selected frames.* - encoding: unused* - decoding: Set by user.*/enum AVDiscard skip_idct;/*** Skip decoding for selected frames.* - encoding: unused* - decoding: Set by user.*/enum AVDiscard skip_frame;/*** Header containing style information for text subtitles.* For SUBTITLE_ASS subtitle type, it should contain the whole ASS* [Script Info] and [V4+ Styles] section, plus the [Events] line and* the Format line following. It shouldn't include any Dialogue line.* - encoding: Set/allocated/freed by user (before avcodec_open2())* - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())*/uint8_t *subtitle_header;int subtitle_header_size;/*** Audio only. The number of "priming" samples (padding) inserted by the* encoder at the beginning of the audio. I.e. this number of leading* decoded samples must be discarded by the caller to get the original audio* without leading padding.** - decoding: unused* - encoding: Set by libavcodec. The timestamps on the output packets are*             adjusted by the encoder so that they always refer to the*             first sample of the data actually contained in the packet,*             including any added padding.  E.g. if the timebase is*             1/samplerate and the timestamp of the first input sample is*             0, the timestamp of the first output packet will be*             -initial_padding.*/int initial_padding;/*** - decoding: For codecs that store a framerate value in the compressed*             bitstream, the decoder may export it here. { 0, 1} when*             unknown.* - encoding: May be used to signal the framerate of CFR content to an*             encoder.*/AVRational framerate;/*** Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.* - encoding: unused.* - decoding: Set by libavcodec before calling get_format()*/enum AVPixelFormat sw_pix_fmt;/*** Timebase in which pkt_dts/pts and AVPacket.dts/pts are.* - encoding unused.* - decoding set by user.*/AVRational pkt_timebase;/*** AVCodecDescriptor* - encoding: unused.* - decoding: set by libavcodec.*/const AVCodecDescriptor *codec_descriptor;/*** Current statistics for PTS correction.* - decoding: maintained and used by libavcodec, not intended to be used by user apps* - encoding: unused*/int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so farint64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so farint64_t pts_correction_last_pts;       /// PTS of the last frameint64_t pts_correction_last_dts;       /// DTS of the last frame/*** Character encoding of the input subtitles file.* - decoding: set by user* - encoding: unused*/char *sub_charenc;/*** Subtitles character encoding mode. Formats or codecs might be adjusting* this setting (if they are doing the conversion themselves for instance).* - decoding: set by libavcodec* - encoding: unused*/int sub_charenc_mode;
#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
#define FF_SUB_CHARENC_MODE_IGNORE       2  ///< neither convert the subtitles, nor check them for valid UTF-8/*** Skip processing alpha if supported by codec.* Note that if the format uses pre-multiplied alpha (common with VP6,* and recommended due to better video quality/compression)* the image will look as if alpha-blended onto a black background.* However for formats that do not use pre-multiplied alpha* there might be serious artefacts (though e.g. libswscale currently* assumes pre-multiplied alpha anyway).** - decoding: set by user* - encoding: unused*/int skip_alpha;/*** Number of samples to skip after a discontinuity* - decoding: unused* - encoding: set by libavcodec*/int seek_preroll;#if FF_API_DEBUG_MV/*** @deprecated unused*/attribute_deprecatedint 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
#endif/*** custom intra quantization matrix* - encoding: Set by user, can be NULL.* - decoding: unused.*/uint16_t *chroma_intra_matrix;/*** dump format separator.* can be ", " or "\n      " or anything else* - encoding: Set by user.* - decoding: Set by user.*/uint8_t *dump_separator;/*** ',' separated list of allowed decoders.* If NULL then all are allowed* - encoding: unused* - decoding: set by user*/char *codec_whitelist;/*** Properties of the stream that gets decoded* - encoding: unused* - decoding: set by libavcodec*/unsigned properties;
#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
#define FF_CODEC_PROPERTY_FILM_GRAIN      0x00000004/*** Additional data associated with the entire coded stream.** - decoding: unused* - encoding: may be set by libavcodec after avcodec_open2().*/AVPacketSideData *coded_side_data;int            nb_coded_side_data;/*** A reference to the AVHWFramesContext describing the input (for encoding)* or output (decoding) frames. The reference is set by the caller and* afterwards owned (and freed) by libavcodec - it should never be read by* the caller after being set.** - decoding: This field should be set by the caller from the get_format()*             callback. The previous reference (if any) will always be*             unreffed by libavcodec before the get_format() call.**             If the default get_buffer2() is used with a hwaccel pixel*             format, then this AVHWFramesContext will be used for*             allocating the frame buffers.** - encoding: For hardware encoders configured to use a hwaccel pixel*             format, this field should be set by the caller to a reference*             to the AVHWFramesContext describing input frames.*             AVHWFramesContext.format must be equal to*             AVCodecContext.pix_fmt.**             This field should be set before avcodec_open2() is called.*/AVBufferRef *hw_frames_ctx;#if FF_API_SUB_TEXT_FORMAT/*** @deprecated unused*/attribute_deprecatedint sub_text_format;
#define FF_SUB_TEXT_FMT_ASS              0
#endif/*** Audio only. The amount of padding (in samples) appended by the encoder to* the end of the audio. I.e. this number of decoded samples must be* discarded by the caller from the end of the stream to get the original* audio without any trailing padding.** - decoding: unused* - encoding: unused*/int trailing_padding;/*** The number of pixels per image to maximally accept.** - decoding: set by user* - encoding: set by user*/int64_t max_pixels;/*** A reference to the AVHWDeviceContext describing the device which will* be used by a hardware encoder/decoder.  The reference is set by the* caller and afterwards owned (and freed) by libavcodec.** This should be used if either the codec device does not require* hardware frames or any that are used are to be allocated internally by* libavcodec.  If the user wishes to supply any of the frames used as* encoder input or decoder output then hw_frames_ctx should be used* instead.  When hw_frames_ctx is set in get_format() for a decoder, this* field will be ignored while decoding the associated stream segment, but* may again be used on a following one after another get_format() call.** For both encoders and decoders this field should be set before* avcodec_open2() is called and must not be written to thereafter.** Note that some decoders may require this field to be set initially in* order to support hw_frames_ctx at all - in that case, all frames* contexts used must be created on the same device.*/AVBufferRef *hw_device_ctx;/*** Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated* decoding (if active).* - encoding: unused* - decoding: Set by user (either before avcodec_open2(), or in the*             AVCodecContext.get_format callback)*/int hwaccel_flags;/*** Video decoding only. Certain video codecs support cropping, meaning that* only a sub-rectangle of the decoded frame is intended for display.  This* option controls how cropping is handled by libavcodec.** When set to 1 (the default), libavcodec will apply cropping internally.* I.e. it will modify the output frame width/height fields and offset the* data pointers (only by as much as possible while preserving alignment, or* by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that* the frames output by the decoder refer only to the cropped area. The* crop_* fields of the output frames will be zero.** When set to 0, the width/height fields of the output frames will be set* to the coded dimensions and the crop_* fields will describe the cropping* rectangle. Applying the cropping is left to the caller.** @warning When hardware acceleration with opaque output frames is used,* libavcodec is unable to apply cropping from the top/left border.** @note when this option is set to zero, the width/height fields of the* AVCodecContext and output AVFrames have different meanings. The codec* context fields store display dimensions (with the coded dimensions in* coded_width/height), while the frame fields store the coded dimensions* (with the display dimensions being determined by the crop_* fields).*/int apply_cropping;/** Video decoding only.  Sets the number of extra hardware frames which* the decoder will allocate for use by the caller.  This must be set* before avcodec_open2() is called.** Some hardware decoders require all frames that they will use for* output to be defined in advance before decoding starts.  For such* decoders, the hardware frame pool must therefore be of a fixed size.* The extra frames set here are on top of any number that the decoder* needs internally in order to operate normally (for example, frames* used as reference pictures).*/int extra_hw_frames;/*** The percentage of damaged samples to discard a frame.** - decoding: set by user* - encoding: unused*/int discard_damaged_percentage;/*** The number of samples per frame to maximally accept.** - decoding: set by user* - encoding: set by user*/int64_t max_samples;/*** Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of* metadata exported in frame, packet, or coded stream side data by* decoders and encoders.** - decoding: set by user* - encoding: set by user*/int export_side_data;/*** This callback is called at the beginning of each packet to get a data* buffer for it.** The following field will be set in the packet before this callback is* called:* - size* This callback must use the above value to calculate the required buffer size,* which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes.** In some specific cases, the encoder may not use the entire buffer allocated by this* callback. This will be reflected in the size value in the packet once returned by* avcodec_receive_packet().** This callback must fill the following fields in the packet:* - data: alignment requirements for AVPacket apply, if any. Some architectures and*   encoders may benefit from having aligned data.* - buf: must contain a pointer to an AVBufferRef structure. The packet's*   data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(),*   and av_buffer_ref().** If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call* avcodec_default_get_encode_buffer() instead of providing a buffer allocated by* some other means.** The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags.* They may be used for example to hint what use the buffer may get after being* created.* Implementations of this callback may ignore flags they don't understand.* If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused* (read and/or written to if it is writable) later by libavcodec.** This callback must be thread-safe, as when frame threading is used, it may* be called from multiple threads simultaneously.** @see avcodec_default_get_encode_buffer()** - encoding: Set by libavcodec, user can override.* - decoding: unused*/int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags);/*** Audio channel layout.* - encoding: must be set by the caller, to one of AVCodec.ch_layouts.* - decoding: may be set by the caller if known e.g. from the container.*             The decoder can then override during decoding as needed.*/AVChannelLayout ch_layout;
} AVCodecContext;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hello OpenGL——OpenGL在Visual c++6.0安装和配置

1、下载并安装glut库opengl的glut库 GLUT不是OpenGL所必须的&#xff0c;但它会给我们的学习带来一定的方便&#xff0c;推荐安装。 Windows环境下的GLUT下载地址&#xff1a;&#xff08;大小约为150k&#xff09; http://www.opengl.org/resources/libraries/glut/glutdlls37…

FFmpeg源代码简单分析-通用-结构体分析-AVIOContext

参考链接 FFMPEG结构体分析&#xff1a;AVIOContext_雷霄骅的博客-CSDN博客_aviocontext AVIOContext AVIOContext是FFMPEG管理输入输出数据的结构体结构体的定义位于位于avio.h关键的变量如下所示 unsigned char *buffer&#xff1a;缓存开始位置int buffer_size&#xff1…

初闻动态规划

前言 本文以一道常见的算法面试题开篇&#xff0c;引入动态规划的基础概念&#xff0c; 介绍其思考过程。 正文 一、常见的一道算法面试题——上台阶 有一个楼梯总共n个台阶&#xff0c;只能往上走&#xff0c;每次只能上1个、2个台阶&#xff0c;总共有多少种走法。 解决…

FFmpeg源代码简单分析-通用-结构体分析-AVCodec

参考链接 FFMPEG结构体分析&#xff1a;AVCodec_雷霄骅的博客-CSDN博客_avcodec AVCodec AVCodec是存储编解码器信息的结构体结构体的定义位于avcodec.h文件中最主要的几个变量 const char *name&#xff1a;编解码器的名字&#xff0c;比较短const char *long_name&#xff…

SLF4J简介与使用(整合log4j)

SLF4J简介与使用(整合log4j) 一、概念 SLF4J的全称是Simple Logging Facade for Java&#xff0c;即简单日志门面。SLF4J并不是具体的日志框架&#xff0c;而是作为一个简单门面服务于各类日志框架&#xff0c;如java.util.logging, logback和log4j。 SLF4J提供了统一的记录…

multism中ui和uo应该怎么表示_王者荣耀:梦泪直播时谈到体验服大改动,表示装备的改动很关键...

王者荣耀的主播梦泪&#xff0c;大家都很熟了&#xff0c;也是一个很强的主播&#xff0c;他对于王者荣耀的理解&#xff0c;还是非常深刻的&#xff0c;而最近王者荣耀的体验服&#xff0c;进行了大改动&#xff0c;也是改变了很多的东西。对此&#xff0c;网友们也是非常的在…

怎么关闭或者卸载ivanti_电脑软件卸载不了怎么办,教您解决电脑软件无法卸载方法技巧...

我们在使用电脑的过程中&#xff0c;肯定会安装各种软件&#xff0c;但是一些软件在使用完之后就不会再使用了&#xff0c;但又无法卸载。下面由小编分享一下电脑安装的软件无法卸载解决方法&#xff0c;如果你在某卸载软件的时候出现无法卸载的情况&#xff0c;不妨通过以下方…

解决Github图片加载失败

问题描述 浏览自己Github某仓库的README.md内时&#xff0c;发现文档的图片始终加载不出&#xff0c;打开浏览器后台&#xff0c;冒出一片红&#xff0c;Failed to load resource: net::ERR_CONNECTION_RESET&#xff0c;如下图所示&#xff1a; 问题分析 可能造成这问题的原…

FFmpeg源代码简单分析-通用-结构体分析-关键结构体之间的关系

参考链接 FFMPEG中最关键的结构体之间的关系_雷霄骅的博客-CSDN博客_ffmpeg 结构体关系 最关键的结构体可以分成以下几类&#xff1a; 解协议&#xff08;http,rtsp,rtmp,mms&#xff09; AVIOContext&#xff0c;URLProtocol&#xff0c;URLContext主要存储视音频使用的协…

用Python下载文件

前提条件 需要事先安装requests模块&#xff1a; pip install requests 放码过来 import requestsurl XXX #文件下载来源URL filename #下载到本地后新文件名 r requests.get(url) with open(filename, "wb") as code:code.write(r.content)实战演习 从目标…

FFmpeg源代码简单分析-通用-常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

参考链接 FFmpeg源代码简单分析&#xff1a;常见结构体的初始化和销毁&#xff08;AVFormatContext&#xff0c;AVFrame等&#xff09;_雷霄骅的博客-CSDN博客 结构体 AVFormatContext&#xff1a;统领全局的基本结构体。主要用于处理封装格式&#xff08;FLV/MKV/RMVB等&…

FFmpeg源代码简单分析-通用-avio_open2()

参考链接 FFmpeg源代码简单分析&#xff1a;avio_open2()_雷霄骅的博客-CSDN博客_avio_open avio_open2() 该函数用于打开FFmpeg的输入输出文件avio_open2()的声明位于libavformat\avio.h文件中&#xff0c;如下所示。 /*** Create and initialize a AVIOContext for accessi…

用Tomcat构建一个简单图片服务器

前提条件 Tomcat 7.0.90 方法一&#xff1a;修改配置文件 在TOMCAT_HOME/conf/server.xml配置文件内的<Host>内添加一子标签&#xff1a; <Context docBase"C:\exambase\" path"/img"/>方法二&#xff1a;添加Servlet 新建一应用&#xf…

FFmpeg源代码简单分析-通用-av_find_decoder()和av_find_encoder()

参考链接 FFmpeg源代码简单分析&#xff1a;av_find_decoder()和av_find_encoder()_雷霄骅的博客-CSDN博客_avcodec_find_encoder avcodec_find_encoder avcodec_find_encoder()用于查找FFmpeg的编码器avcodec_find_encoder()的声明位于libavcodec\codec.h 版本差异avcode…

post方法就反回了一个string字符串前台怎么接_Golang Web入门(2):如何实现一个RESTful风格的路由...

摘要在上一篇文章中&#xff0c;我们聊了聊在Golang中怎么实现一个Http服务器。但是在最后我们可以发现&#xff0c;固然DefaultServeMux可以做路由分发的功能&#xff0c;但是他的功能同样是不完善的。由DefaultServeMux做路由分发&#xff0c;是不能实现RESTful风格的API的&a…

FFmpeg源代码简单分析-通用-avcodec_open2()

参考链接 FFmpeg源代码简单分析&#xff1a;avcodec_open2()_雷霄骅的博客-CSDN博客 avcodec_open2() 该函数用于初始化一个音视频编解码器的AVCodecContextavcodec_open2()的声明位于libavcodec\avcodec.h&#xff0c;如下所示。 /*** Initialize the AVCodecContext to use…

统计MySQL中某数据库硬盘占用量大小

放码过来 select TABLE_NAME, concat(truncate(data_length/1024/1024,2), MB) as data_size, concat(truncate(index_length/1024/1024,2), MB) as index_size from information_schema.tables where TABLE_SCHEMA your_db_name order by data_length desc;运行结果 参考…

FFmpeg源代码简单分析-解码-打开媒体的函数avformat_open_input

参考链接 图解FFMPEG打开媒体的函数avformat_open_input_雷霄骅的博客-CSDN博客_avformat_open_input 使用FFmpeg源代码简单分析&#xff1a;avformat_open_input()_雷霄骅的博客-CSDN博客_avformat_open_input() avformat_open_input FFmpeg打开媒体的的过程开始于avformat_…

redis session java获取attribute_面试题:给我说说你能想到几种分布式session实现?...

作者&#xff1a;yanglbme 来源&#xff1a;https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/distributed-session.md# 面试官心理分析面试官问了你一堆 dubbo 是怎么玩儿的&#xff0c;你会玩儿 dubbo 就可以把单块系统弄成分布式系统&#xff0…

FFmpeg源代码简单分析-解码-avformat_find_stream_info()

参考链接 FFmpeg源代码简单分析&#xff1a;avformat_find_stream_info()_雷霄骅的博客-CSDN博客_avformat_find_stream_info avformat_find_stream_info() ​该函数可以读取一部分视音频数据并且获得一些相关的信息avformat_find_stream_info()的声明位于libavformat\avform…