X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Favcodec.h;h=aff150796286d33016c2bd4300faed47855b5ee4;hb=aa425ada542ad8c4e9d19414492b7e39cb4ef05f;hp=667fe2a31d54bc5fadb7465f2a5ded79a1b9702f;hpb=76a448ed4f5a3f588dcb2a0ccb0f6a4b4a49e957;p=ffmpeg diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 667fe2a31d5..aff15079628 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -28,12 +28,17 @@ #include "libavutil/avutil.h" -#include /* size_t */ -#define LIBAVCODEC_VERSION_TRIPLET 51,50,1 +#define LIBAVCODEC_VERSION_MAJOR 51 +#define LIBAVCODEC_VERSION_MINOR 63 +#define LIBAVCODEC_VERSION_MICRO 0 -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_TRIPLET) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_TRIPLET) +#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ + LIBAVCODEC_VERSION_MINOR, \ + LIBAVCODEC_VERSION_MICRO) +#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ + LIBAVCODEC_VERSION_MINOR, \ + LIBAVCODEC_VERSION_MICRO) #define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) @@ -56,6 +61,8 @@ */ enum CodecID { CODEC_ID_NONE, + + /* video codecs */ CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding CODEC_ID_MPEG2VIDEO_XVMC, @@ -170,6 +177,18 @@ enum CodecID { CODEC_ID_VB, CODEC_ID_PCX, CODEC_ID_SUNRAST, + CODEC_ID_INDEO4, + CODEC_ID_INDEO5, + CODEC_ID_MIMIC, + CODEC_ID_RL2, + CODEC_ID_8SVX_EXP, + CODEC_ID_8SVX_FIB, + CODEC_ID_ESCAPE124, + CODEC_ID_DIRAC, + CODEC_ID_BFI, + CODEC_ID_CMV, + CODEC_ID_MOTIONPIXELS, + CODEC_ID_TGV, /* various PCM "codecs" */ CODEC_ID_PCM_S16LE= 0x10000, @@ -191,6 +210,8 @@ enum CodecID { CODEC_ID_PCM_S24DAUD, CODEC_ID_PCM_ZORK, CODEC_ID_PCM_S16LE_PLANAR, + CODEC_ID_PCM_DVD, + CODEC_ID_PCM_F32BE, /* various ADPCM codecs */ CODEC_ID_ADPCM_IMA_QT= 0x11000, @@ -219,6 +240,7 @@ enum CodecID { CODEC_ID_ADPCM_IMA_EA_SEAD, CODEC_ID_ADPCM_IMA_EA_EACS, CODEC_ID_ADPCM_EA_XAS, + CODEC_ID_ADPCM_EA_MAXIS_XA, /* AMR */ CODEC_ID_AMR_NB= 0x12000, @@ -234,6 +256,7 @@ enum CodecID { CODEC_ID_XAN_DPCM, CODEC_ID_SOL_DPCM, + /* audio codecs */ CODEC_ID_MP2= 0x15000, CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 CODEC_ID_AAC, @@ -278,6 +301,8 @@ enum CodecID { CODEC_ID_SPEEX, CODEC_ID_WMAVOICE, CODEC_ID_WMAPRO, + CODEC_ID_WMALOSSLESS, + CODEC_ID_ATRAC3P, /* subtitle codecs */ CODEC_ID_DVD_SUBTITLE= 0x17000, @@ -287,9 +312,11 @@ enum CodecID { CODEC_ID_SSA, CODEC_ID_MOV_TEXT, - /* other specific kind of codecs (generaly used for attachments) */ + /* other specific kind of codecs (generally used for attachments) */ CODEC_ID_TTF= 0x18000, + CODEC_ID_PROBE= 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it + CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS * stream (only used by libavformat) */ }; @@ -321,6 +348,7 @@ enum SampleFormat { SAMPLE_FMT_S24, ///< signed 24 bits SAMPLE_FMT_S32, ///< signed 32 bits SAMPLE_FMT_FLT, ///< float + SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec }; /* in bytes */ @@ -354,6 +382,7 @@ enum Motion_Est_ID { ME_HEX, ///< hexagon based search ME_UMH, ///< uneven multi-hexagon search ME_ITER, ///< iterative search + ME_TESA, ///< transformed exhaustive search algorithm }; enum AVDiscard{ @@ -405,7 +434,9 @@ typedef struct RcOverride{ #define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT. #define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay. #define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan. +#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) #define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< Use trellis quantization. +#endif #define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe. #define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT). /* Fx : Flag for h263+ extra options */ @@ -422,7 +453,7 @@ typedef struct RcOverride{ #define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 #define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation #define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data. -#define CODEC_FLAG_CLOSED_GOP ((int)0x80000000) +#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. @@ -592,6 +623,8 @@ typedef struct AVPanScan{ \ /**\ * is this picture used as reference\ + * The values for this are the same as the MpegEncContext.picture_structure\ + * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\ * - encoding: unused\ * - decoding: Set by libavcodec. (before get_buffer() call)).\ */\ @@ -742,12 +775,13 @@ typedef struct AVPanScan{ #define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything. -#define FF_I_TYPE 1 // Intra -#define FF_P_TYPE 2 // Predicted -#define FF_B_TYPE 3 // Bi-dir predicted -#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4 -#define FF_SI_TYPE 5 -#define FF_SP_TYPE 6 +#define FF_I_TYPE 1 ///< Intra +#define FF_P_TYPE 2 ///< Predicted +#define FF_B_TYPE 3 ///< Bi-dir predicted +#define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4 +#define FF_SI_TYPE 5 ///< Switching Intra +#define FF_SP_TYPE 6 ///< Switching Predicted +#define FF_BI_TYPE 7 #define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore). #define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer. @@ -781,7 +815,7 @@ typedef struct AVCodecContext { * information on struct for av_log * - set by avcodec_alloc_context */ - AVClass *av_class; + const AVClass *av_class; /** * the average bitrate * - encoding: Set by user; unused for constant quantizer encoding. @@ -817,7 +851,7 @@ typedef struct AVCodecContext { /** * 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) [7, 8 are x264 specific, 9 is snow specific] + * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] * - encoding: MUST be set by user. * - decoding: unused */ @@ -899,7 +933,7 @@ typedef struct AVCodecContext { /* audio only */ int sample_rate; ///< samples per second - int channels; + int channels; ///< number of audio channels /** * audio sample format @@ -959,6 +993,8 @@ typedef struct AVCodecContext { /** * 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 */ @@ -1086,7 +1122,14 @@ typedef struct AVCodecContext { /** * strictly follow the standard (MPEG4, ...). * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. + * Setting this to STRICT or higher means the encoder and decoder will + * generally do stupid things. While setting it to inofficial or lower + * will mean the encoder might use things that are not supported by all + * spec compliant decoders. Decoders make no difference between normal, + * inofficial and experimental, that is they always try to decode things + * when they can unless they are explicitly asked to behave stupid + * (=strictly conform to the specs) */ int strict_std_compliance; #define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to a older more strict version of the spec or reference software. @@ -1097,8 +1140,6 @@ typedef struct AVCodecContext { /** * qscale offset 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 */ @@ -1127,7 +1168,7 @@ typedef struct AVCodecContext { int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); /** - * Called to release buffers which where allocated with get_buffer. + * 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. * - encoding: unused @@ -1326,6 +1367,7 @@ typedef struct AVCodecContext { #define FF_IDCT_SIMPLEARMV6 17 #define FF_IDCT_SIMPLEVIS 18 #define FF_IDCT_WMV2 19 +#define FF_IDCT_FAAN 20 /** * slice count @@ -1423,6 +1465,7 @@ typedef struct AVCodecContext { #define FF_DEBUG_BUGS 0x00001000 #define FF_DEBUG_VIS_QP 0x00002000 #define FF_DEBUG_VIS_MB_TYPE 0x00004000 +#define FF_DEBUG_BUFFERS 0x00008000 /** * debug @@ -1676,7 +1719,7 @@ typedef struct AVCodecContext { 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 distoration +#define FF_MB_DECISION_RD 2 ///< rate distortion /** * custom intra quantization matrix @@ -2204,11 +2247,26 @@ typedef struct AVCodec { int (*close)(AVCodecContext *); int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, const uint8_t *buf, int buf_size); + /** + * Codec capabilities. + * see CODEC_CAP_* + */ int capabilities; struct AVCodec *next; + /** + * Flush buffers. + * Will be called when seeking + */ void (*flush)(AVCodecContext *); - const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1 + const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 + /** + * Descriptive name for the codec, meant to be more human readable than \p name. + * You \e should use the NULL_IF_CONFIG_SMALL() macro to define it. + */ + const char *long_name; + const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 + const enum SampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 } AVCodec; /** @@ -2472,8 +2530,10 @@ AVCodec *av_codec_next(AVCodec *c); /* returns LIBAVCODEC_VERSION_INT constant */ unsigned avcodec_version(void); +#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) /* returns LIBAVCODEC_BUILD constant */ -unsigned avcodec_build(void); +attribute_deprecated unsigned avcodec_build(void); +#endif /** * Initializes libavcodec. @@ -2716,6 +2776,8 @@ int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata, * @param[in] samples the input buffer containing the samples * The number of samples read from this buffer is frame_size*channels, * both of which are defined in \p avctx. + * For PCM audio the number of samples read from \p samples is equal to + * \p buf_size * input_sample_size / output_sample_size. * @return On error a negative value is returned, on success zero or the number * of bytes used to encode the data read from the input buffer. */ @@ -2786,7 +2848,7 @@ typedef struct AVCodecParserContext { int64_t frame_offset; /* offset of the current frame */ int64_t cur_offset; /* current offset (incremented by each av_parser_parse()) */ - int64_t last_frame_offset; /* offset of the last frame */ + int64_t next_frame_offset; /* offset of the next frame */ /* video info */ int pict_type; /* XXX: Put it back in AVCodecContext. */ int repeat_pict; /* XXX: Put it back in AVCodecContext. */ @@ -2808,7 +2870,7 @@ typedef struct AVCodecParserContext { #define PARSER_FLAG_COMPLETE_FRAMES 0x0001 int64_t offset; ///< byte offset from starting packet start - int64_t last_offset; + int64_t cur_frame_end[AV_PARSER_PTS_NB]; } AVCodecParserContext; typedef struct AVCodecParser { @@ -2882,30 +2944,6 @@ AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); */ void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); -/* for static data only */ - -/** - * Frees all static arrays and resets their pointers to 0. - * Call this function to release all statically allocated tables. - * - * @deprecated. Code which uses av_free_static is broken/misdesigned - * and should correctly use static arrays - * - */ -attribute_deprecated void av_free_static(void); - -/** - * Allocation of static arrays. - * - * @warning Do not use for normal allocation. - * - * @param[in] size The amount of memory you need in bytes. - * @return block of memory of the requested size - * @deprecated. Code which uses av_mallocz_static is broken/misdesigned - * and should correctly use static arrays - */ -attribute_deprecated void *av_mallocz_static(unsigned int size); - /** * Copy image 'src' to 'dst'. */