From cae132ad79ec0608a7d1efb5c1f2e45ac65bc9e3 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Tue, 15 Jun 2021 00:14:41 -0700 Subject: [PATCH] Updated FFmpeg to version 4.4 --- .../vgmstream/src/coding/ffmpeg_decoder.c | 15 +- .../ffmpeg/include/libavcodec/avcodec.h | 186 ++++++++----- ThirdParty/ffmpeg/include/libavcodec/bsf.h | 2 +- ThirdParty/ffmpeg/include/libavcodec/codec.h | 50 ++-- .../ffmpeg/include/libavcodec/codec_id.h | 15 ++ ThirdParty/ffmpeg/include/libavcodec/packet.h | 64 ++++- .../ffmpeg/include/libavcodec/version.h | 39 ++- .../ffmpeg/include/libavformat/avformat.h | 251 ++++++------------ .../ffmpeg/include/libavformat/version.h | 11 +- ThirdParty/ffmpeg/include/libavutil/adler32.h | 16 +- .../ffmpeg/include/libavutil/avstring.h | 19 ++ ThirdParty/ffmpeg/include/libavutil/buffer.h | 48 ++++ .../ffmpeg/include/libavutil/channel_layout.h | 6 + ThirdParty/ffmpeg/include/libavutil/common.h | 158 +++++------ ThirdParty/ffmpeg/include/libavutil/cpu.h | 3 + .../ffmpeg/include/libavutil/ffversion.h | 2 +- .../include/libavutil/film_grain_params.h | 168 ++++++++++++ ThirdParty/ffmpeg/include/libavutil/frame.h | 26 +- ThirdParty/ffmpeg/include/libavutil/hash.h | 1 + .../ffmpeg/include/libavutil/imgutils.h | 14 + ThirdParty/ffmpeg/include/libavutil/log.h | 18 ++ ThirdParty/ffmpeg/include/libavutil/mem.h | 6 + ThirdParty/ffmpeg/include/libavutil/murmur3.h | 1 + ThirdParty/ffmpeg/include/libavutil/opt.h | 31 ++- ThirdParty/ffmpeg/include/libavutil/pixdesc.h | 2 + ThirdParty/ffmpeg/include/libavutil/pixfmt.h | 57 +++- ThirdParty/ffmpeg/include/libavutil/ripemd.h | 1 + .../ffmpeg/include/libavutil/timecode.h | 67 ++++- ThirdParty/ffmpeg/include/libavutil/tx.h | 24 +- ThirdParty/ffmpeg/include/libavutil/version.h | 15 +- .../include/libavutil/video_enc_params.h | 10 +- .../ffmpeg/include/libswresample/version.h | 2 +- ThirdParty/ffmpeg/lib/libavcodec.a | Bin 18998456 -> 19207376 bytes ThirdParty/ffmpeg/lib/libavformat.a | Bin 9841976 -> 9916680 bytes ThirdParty/ffmpeg/lib/libavutil.a | Bin 4247544 -> 4369856 bytes ThirdParty/ffmpeg/lib/libswresample.a | Bin 793568 -> 795544 bytes 36 files changed, 942 insertions(+), 386 deletions(-) create mode 100644 ThirdParty/ffmpeg/include/libavutil/film_grain_params.h diff --git a/Frameworks/vgmstream/vgmstream/src/coding/ffmpeg_decoder.c b/Frameworks/vgmstream/vgmstream/src/coding/ffmpeg_decoder.c index f1f46520a..76e9cc7b1 100644 --- a/Frameworks/vgmstream/vgmstream/src/coding/ffmpeg_decoder.c +++ b/Frameworks/vgmstream/vgmstream/src/coding/ffmpeg_decoder.c @@ -329,10 +329,8 @@ ffmpeg_codec_data* init_ffmpeg_header_offset_subsong(STREAMFILE* sf, uint8_t* he /* expose start samples to be skipped (encoder delay, usually added by MDCT-based encoders like AAC/MP3/ATRAC3/XMA/etc) * get after init_seek because some demuxers like AAC only fill skip_samples for the first packet */ - if (stream->start_skip_samples) /* samples to skip in the first packet */ - data->skipSamples = stream->start_skip_samples; - else if (stream->skip_samples) /* samples to skip in any packet (first in this case), used sometimes instead (ex. AAC) */ - data->skipSamples = stream->skip_samples; + if (stream->start_time) + data->skipSamples = av_rescale_q(stream->start_time, stream->time_base, tb); /* check ways to skip encoder delay/padding, for debugging purposes (some may be old/unused/encoder only/etc) */ VGM_ASSERT(data->codecCtx->delay > 0, "FFMPEG: delay %i\n", (int)data->codecCtx->delay);//delay: OPUS @@ -340,8 +338,7 @@ ffmpeg_codec_data* init_ffmpeg_header_offset_subsong(STREAMFILE* sf, uint8_t* he VGM_ASSERT(stream->codecpar->initial_padding > 0, "FFMPEG: initial_padding %i\n", (int)stream->codecpar->initial_padding);//delay: OPUS VGM_ASSERT(stream->codecpar->trailing_padding > 0, "FFMPEG: trailing_padding %i\n", (int)stream->codecpar->trailing_padding); VGM_ASSERT(stream->codecpar->seek_preroll > 0, "FFMPEG: seek_preroll %i\n", (int)stream->codecpar->seek_preroll);//seek delay: OPUS - VGM_ASSERT(stream->skip_samples > 0, "FFMPEG: skip_samples %i\n", (int)stream->skip_samples); //delay: MP4 - VGM_ASSERT(stream->start_skip_samples > 0, "FFMPEG: start_skip_samples %i\n", (int)stream->start_skip_samples); //delay: MP3 + VGM_ASSERT(stream->start_time > 0, "FFMPEG: start_time %i\n", (int)stream->start_time); //delay VGM_ASSERT(stream->first_discard_sample > 0, "FFMPEG: first_discard_sample %i\n", (int)stream->first_discard_sample); //padding: MP3 VGM_ASSERT(stream->last_discard_sample > 0, "FFMPEG: last_discard_sample %i\n", (int)stream->last_discard_sample); //padding: MP3 /* also negative timestamp for formats like OGG/OPUS */ @@ -795,8 +792,7 @@ void seek_ffmpeg(ffmpeg_codec_data* data, int32_t num_sample) { if (data->skip_samples_set) { AVStream *stream = data->formatCtx->streams[data->streamIndex]; /* sometimes (ex. AAC) after seeking to the first packet skip_samples is restored, but we want our value */ - stream->skip_samples = 0; - stream->start_skip_samples = 0; + stream->start_time = 0; data->samples_discard += data->skipSamples; } @@ -880,8 +876,7 @@ void ffmpeg_set_skip_samples(ffmpeg_codec_data* data, int skip_samples) { /* overwrite FFmpeg's skip samples */ stream = data->formatCtx->streams[data->streamIndex]; - stream->start_skip_samples = 0; /* used for the first packet *if* pts=0 */ - stream->skip_samples = 0; /* skip_samples can be used for any packet */ + stream->start_time = 0; /* set skip samples with our internal discard */ data->skip_samples_set = 1; diff --git a/ThirdParty/ffmpeg/include/libavcodec/avcodec.h b/ThirdParty/ffmpeg/include/libavcodec/avcodec.h index c91b2fd16..8a71c0423 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/avcodec.h +++ b/ThirdParty/ffmpeg/include/libavcodec/avcodec.h @@ -410,6 +410,11 @@ typedef struct RcOverride{ * Export the AVVideoEncParams structure through frame side data. */ #define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) +/** + * Decoding only. + * Do not apply film grain, export it instead. + */ +#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) /** * Pan Scan area. @@ -508,6 +513,11 @@ typedef struct AVProducerReferenceTime { */ #define AV_GET_BUFFER_FLAG_REF (1 << 0) +/** + * The encoder will keep a reference to the packet and may reuse it later. + */ +#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) + struct AVCodecInternal; /** @@ -1314,9 +1324,9 @@ typedef struct AVCodecContext { * * Some decoders do not support linesizes changing between frames. * - * If frame multithreading is used and thread_safe_callbacks is set, - * this callback may be called from a different thread, but not from more - * than one at once. Does not need to be reentrant. + * 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() * @@ -1340,6 +1350,7 @@ typedef struct AVCodecContext { */ int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); +#if FF_API_OLD_ENCDEC /** * If non-zero, the decoded audio and video frames returned from * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted @@ -1355,6 +1366,7 @@ typedef struct AVCodecContext { */ attribute_deprecated int refcounted_frames; +#endif /* - encoding parameters */ float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) @@ -1614,42 +1626,20 @@ typedef struct AVCodecContext { #define FF_DEBUG_BITSTREAM 4 #define FF_DEBUG_MB_TYPE 8 #define FF_DEBUG_QP 16 -#if FF_API_DEBUG_MV -/** - * @deprecated this option does nothing - */ -#define FF_DEBUG_MV 32 -#endif #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 -#if FF_API_DEBUG_MV -#define FF_DEBUG_VIS_QP 0x00002000 -#define FF_DEBUG_VIS_MB_TYPE 0x00004000 -#endif #define FF_DEBUG_BUFFERS 0x00008000 #define FF_DEBUG_THREADS 0x00010000 #define FF_DEBUG_GREEN_MD 0x00800000 #define FF_DEBUG_NOMC 0x01000000 -#if FF_API_DEBUG_MV - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - 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 -#endif - /** * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: unused + * - encoding: Set by user. * - decoding: Set by user. */ int err_recognition; @@ -1756,14 +1746,12 @@ typedef struct AVCodecContext { */ int bits_per_raw_sample; -#if FF_API_LOWRES /** * low resolution decoding, 1-> 1/2 size, 2->1/4 size * - encoding: unused * - decoding: Set by user. */ int lowres; -#endif #if FF_API_CODED_FRAME /** @@ -1803,6 +1791,7 @@ typedef struct AVCodecContext { */ 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. @@ -1810,8 +1799,18 @@ typedef struct AVCodecContext { * 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_deprecated int thread_safe_callbacks; +#endif /** * The codec may call this to execute several independent things. @@ -1949,6 +1948,9 @@ typedef struct AVCodecContext { #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 @@ -2089,15 +2091,6 @@ typedef struct AVCodecContext { */ const AVCodecDescriptor *codec_descriptor; -#if !FF_API_LOWRES - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; -#endif - /** * Current statistics for PTS correction. * - decoding: maintained and used by libavcodec, not intended to be used by user apps @@ -2148,12 +2141,11 @@ typedef struct AVCodecContext { */ int seek_preroll; -#if !FF_API_DEBUG_MV +#if FF_API_DEBUG_MV /** - * debug motion vectors - * - encoding: Set by user. - * - decoding: Set by user. + * @deprecated unused */ + attribute_deprecated 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 @@ -2352,6 +2344,44 @@ typedef struct AVCodecContext { * - 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. + * + * 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); } AVCodecContext; #if FF_API_CODEC_GET_SET @@ -2372,12 +2402,10 @@ void av_codec_set_codec_descriptor(AVCodecContext *avctx, co attribute_deprecated unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); -#if FF_API_LOWRES attribute_deprecated int av_codec_get_lowres(const AVCodecContext *avctx); attribute_deprecated void av_codec_set_lowres(AVCodecContext *avctx, int val); -#endif attribute_deprecated int av_codec_get_seek_preroll(const AVCodecContext *avctx); @@ -2727,25 +2755,13 @@ const char *avcodec_license(void); #if FF_API_NEXT /** - * Register the codec codec and initialize libavcodec. - * - * @warning either this function or avcodec_register_all() must be called - * before any other libavcodec functions. - * - * @see avcodec_register_all() + * @deprecated Calling this function is unnecessary. */ attribute_deprecated void avcodec_register(AVCodec *codec); /** - * Register all the codecs, parsers and bitstream filters which were enabled at - * configuration time. If you do not call this function you can select exactly - * which formats you want to support, by using the individual registration - * functions. - * - * @see avcodec_register - * @see av_register_codec_parser - * @see av_register_bitstream_filter + * @deprecated Calling this function is unnecessary. */ attribute_deprecated void avcodec_register_all(void); @@ -2789,14 +2805,13 @@ int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); */ const AVClass *avcodec_get_class(void); -#if FF_API_COPY_CONTEXT +#if FF_API_GET_FRAME_CLASS /** - * Get the AVClass for AVFrame. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). + * @deprecated This function should not be used. */ +attribute_deprecated const AVClass *avcodec_get_frame_class(void); +#endif /** * Get the AVClass for AVSubtitleRect. It can be used in combination with @@ -2806,6 +2821,7 @@ const AVClass *avcodec_get_frame_class(void); */ const AVClass *avcodec_get_subtitle_rect_class(void); +#if FF_API_COPY_CONTEXT /** * Copy the settings of the source AVCodecContext into the destination * AVCodecContext. The resulting destination codec context will be @@ -2862,7 +2878,6 @@ int avcodec_parameters_to_context(AVCodecContext *codec, * @ref avcodec_receive_frame()). * * @code - * avcodec_register_all(); * av_dict_set(&opts, "b", "2.5M", 0); * codec = avcodec_find_decoder(AV_CODEC_ID_H264); * if (!codec) @@ -2926,6 +2941,13 @@ void avsubtitle_free(AVSubtitle *sub); */ int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); +/** + * The default callback for AVCodecContext.get_encode_buffer(). It is made public so + * it can be called by custom get_encode_buffer() implementations for encoders without + * AV_CODEC_CAP_DR1 set. + */ +int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); + /** * Modify width and height values so that they will result in a memory * buffer that is acceptable for the codec if you do not use any horizontal @@ -2967,6 +2989,7 @@ int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); */ enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); +#if FF_API_OLD_ENCDEC /** * Decode the audio frame of size avpkt->size from avpkt->data into frame. * @@ -3073,6 +3096,7 @@ attribute_deprecated int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt); +#endif /** * Decode a subtitle message. @@ -3529,7 +3553,10 @@ typedef struct AVCodecParser { const uint8_t *buf, int buf_size); void (*parser_close)(AVCodecParserContext *s); int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); +#if FF_API_NEXT + attribute_deprecated struct AVCodecParser *next; +#endif } AVCodecParser; /** @@ -3543,11 +3570,13 @@ typedef struct AVCodecParser { */ const AVCodecParser *av_parser_iterate(void **opaque); +#if FF_API_NEXT attribute_deprecated AVCodecParser *av_parser_next(const AVCodecParser *c); attribute_deprecated void av_register_codec_parser(AVCodecParser *parser); +#endif AVCodecParserContext *av_parser_init(int codec_id); /** @@ -3588,14 +3617,18 @@ int av_parser_parse2(AVCodecParserContext *s, int64_t pts, int64_t dts, int64_t pos); +#if FF_API_PARSER_CHANGE /** * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated use AVBitStreamFilter + * @deprecated Use dump_extradata, remove_extra or extract_extradata + * bitstream filters instead. */ +attribute_deprecated int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe); +#endif void av_parser_close(AVCodecParserContext *s); /** @@ -3608,6 +3641,7 @@ void av_parser_close(AVCodecParserContext *s); * @{ */ +#if FF_API_OLD_ENCDEC /** * Encode a frame of audio. * @@ -3646,7 +3680,9 @@ void av_parser_close(AVCodecParserContext *s); * not be used. * @return 0 on success, negative error code on failure * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. + * If allowed and required, set AVCodecContext.get_encode_buffer to + * a custom function to pass user supplied output buffers. */ attribute_deprecated int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, @@ -3685,11 +3721,14 @@ int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, * not be used. * @return 0 on success, negative error code on failure * - * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. + * If allowed and required, set AVCodecContext.get_encode_buffer to + * a custom function to pass user supplied output buffers. */ attribute_deprecated int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr); +#endif int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVSubtitle *sub); @@ -3796,12 +3835,6 @@ void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int */ unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); -/** - * @deprecated see av_get_pix_fmt_loss() - */ -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); - /** * Find the best pixel format to convert to given a certain source pixel * format. When converting from one pixel format to another, information loss @@ -3823,15 +3856,24 @@ enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *p enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); +#if FF_API_AVCODEC_PIX_FMT +/** + * @deprecated see av_get_pix_fmt_loss() + */ +attribute_deprecated +int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, + int has_alpha); /** * @deprecated see av_find_best_pix_fmt_of_2() */ +attribute_deprecated enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); attribute_deprecated enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); +#endif enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); diff --git a/ThirdParty/ffmpeg/include/libavcodec/bsf.h b/ThirdParty/ffmpeg/include/libavcodec/bsf.h index 7ed51677e..3b5faa85c 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/bsf.h +++ b/ThirdParty/ffmpeg/include/libavcodec/bsf.h @@ -215,7 +215,7 @@ int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); /** - * Reset the internal bitstream filter state / flush internal buffers. + * Reset the internal bitstream filter state. Should be called e.g. when seeking. */ void av_bsf_flush(AVBSFContext *ctx); diff --git a/ThirdParty/ffmpeg/include/libavcodec/codec.h b/ThirdParty/ffmpeg/include/libavcodec/codec.h index 1fda619ee..50a22f6e3 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/codec.h +++ b/ThirdParty/ffmpeg/include/libavcodec/codec.h @@ -43,9 +43,11 @@ */ #define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) /** - * Codec uses get_buffer() for allocating buffers and supports custom allocators. - * If not set, it might not use get_buffer() at all or use operations that - * assume the buffer was allocated by avcodec_default_get_buffer. + * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and + * supports custom allocators. + * If not set, it might not use get_buffer() or get_encode_buffer() at all, or + * use operations that assume the buffer was allocated by + * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. */ #define AV_CODEC_CAP_DR1 (1 << 1) #define AV_CODEC_CAP_TRUNCATED (1 << 3) @@ -113,9 +115,14 @@ */ #define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) /** - * Codec supports avctx->thread_count == 0 (auto). + * Codec supports multithreading through a method other than slice- or + * frame-level multithreading. Typically this marks wrappers around + * multithreading-capable external libraries. */ -#define AV_CODEC_CAP_AUTO_THREADS (1 << 15) +#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) +#if FF_API_AUTO_THREADS +#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS +#endif /** * Audio encoder supports receiving a different number of samples in each call. */ @@ -236,7 +243,9 @@ typedef struct AVCodec { ***************************************************************** */ int priv_data_size; +#if FF_API_NEXT struct AVCodec *next; +#endif /** * @name Frame-level threading support functions * @{ @@ -257,7 +266,7 @@ typedef struct AVCodec { const AVCodecDefault *defaults; /** - * Initialize codec static data, called from avcodec_register(). + * Initialize codec static data, called from av_codec_iterate(). * * This is not intended for time consuming operations as it is * run for every codec regardless of that codec being used. @@ -271,7 +280,7 @@ typedef struct AVCodec { * Encode data to an AVPacket. * * @param avctx codec context - * @param avpkt output AVPacket (may contain a user-provided buffer) + * @param avpkt output AVPacket * @param[in] frame AVFrame containing the raw data to be encoded * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a * non-empty packet was returned in avpkt. @@ -279,17 +288,26 @@ typedef struct AVCodec { */ int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, const struct AVFrame *frame, int *got_packet_ptr); - int (*decode)(struct AVCodecContext *, void *outdata, int *outdata_size, struct AVPacket *avpkt); + /** + * Decode picture or subtitle data. + * + * @param avctx codec context + * @param outdata codec type dependent output struct + * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a + * non-empty frame or subtitle was returned in + * outdata. + * @param[in] avpkt AVPacket containing the data to be decoded + * @return amount of bytes read from the packet on success, negative error + * code on failure + */ + int (*decode)(struct AVCodecContext *avctx, void *outdata, + int *got_frame_ptr, struct AVPacket *avpkt); int (*close)(struct AVCodecContext *); /** - * Encode API with decoupled packet/frame dataflow. The API is the - * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except - * that: - * - never called if the codec is closed or the wrong type, - * - if AV_CODEC_CAP_DELAY is not set, drain frames are never sent, - * - only one drain frame is ever passed down, + * Encode API with decoupled frame/packet dataflow. This function is called + * to get one output packet. It should call ff_encode_get_frame() to obtain + * input data. */ - int (*send_frame)(struct AVCodecContext *avctx, const struct AVFrame *frame); int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); /** @@ -322,7 +340,7 @@ typedef struct AVCodec { * * The user can only access this field via avcodec_get_hw_config(). */ - const struct AVCodecHWConfigInternal **hw_configs; + const struct AVCodecHWConfigInternal *const *hw_configs; /** * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. diff --git a/ThirdParty/ffmpeg/include/libavcodec/codec_id.h b/ThirdParty/ffmpeg/include/libavcodec/codec_id.h index d885962c9..ab7bc68ee 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/codec_id.h +++ b/ThirdParty/ffmpeg/include/libavcodec/codec_id.h @@ -241,6 +241,11 @@ enum AVCodecID { AV_CODEC_ID_SCREENPRESSO, AV_CODEC_ID_RSCC, AV_CODEC_ID_AVS2, + AV_CODEC_ID_PGX, + AV_CODEC_ID_AVS3, + AV_CODEC_ID_MSP2, + AV_CODEC_ID_VVC, +#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC AV_CODEC_ID_Y41P = 0x8000, AV_CODEC_ID_AVRP, @@ -295,6 +300,13 @@ enum AVCodecID { AV_CODEC_ID_MV30, AV_CODEC_ID_NOTCHLC, AV_CODEC_ID_PFM, + AV_CODEC_ID_MOBICLIP, + AV_CODEC_ID_PHOTOCD, + AV_CODEC_ID_IPU, + AV_CODEC_ID_ARGO, + AV_CODEC_ID_CRI, + AV_CODEC_ID_SIMBIOSIS_IMX, + AV_CODEC_ID_SGA_VIDEO, /* various PCM "codecs" */ AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs @@ -335,6 +347,7 @@ enum AVCodecID { AV_CODEC_ID_PCM_F16LE, AV_CODEC_ID_PCM_F24LE, AV_CODEC_ID_PCM_VIDC, + AV_CODEC_ID_PCM_SGA, /* various ADPCM codecs */ AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, @@ -387,6 +400,7 @@ enum AVCodecID { AV_CODEC_ID_ADPCM_IMA_ALP, AV_CODEC_ID_ADPCM_IMA_MTF, AV_CODEC_ID_ADPCM_IMA_CUNNING, + AV_CODEC_ID_ADPCM_IMA_MOFLEX, /* AMR */ AV_CODEC_ID_AMR_NB = 0x12000, @@ -502,6 +516,7 @@ enum AVCodecID { AV_CODEC_ID_MPEGH_3D_AUDIO, AV_CODEC_ID_SIREN, AV_CODEC_ID_HCA, + AV_CODEC_ID_FASTAUDIO, /* subtitle codecs */ AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. diff --git a/ThirdParty/ffmpeg/include/libavcodec/packet.h b/ThirdParty/ffmpeg/include/libavcodec/packet.h index 41485f452..ca18ae631 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/packet.h +++ b/ThirdParty/ffmpeg/include/libavcodec/packet.h @@ -282,6 +282,14 @@ enum AVPacketSideDataType { */ AV_PKT_DATA_DOVI_CONF, + /** + * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t + * where the first uint32_t describes how many (1-3) of the other timecodes are used. + * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() + * function in libavutil/timecode.h. + */ + AV_PKT_DATA_S12M_TIMECODE, + /** * The number of side data types. * This is not part of the public API/ABI in the sense that it may @@ -297,7 +305,11 @@ enum AVPacketSideDataType { typedef struct AVPacketSideData { uint8_t *data; +#if FF_API_BUFFER_SIZE_T int size; +#else + size_t size; +#endif enum AVPacketSideDataType type; } AVPacketSideData; @@ -311,10 +323,6 @@ typedef struct AVPacketSideData { * packets, with no compressed data, containing only side data * (e.g. to update some stream parameters at the end of encoding). * - * AVPacket is one of the few structs in FFmpeg, whose size is a part of public - * ABI. Thus it may be allocated on stack and no new fields can be added to it - * without libavcodec and libavformat major bump. - * * The semantics of data ownership depends on the buf field. * If it is set, the packet data is dynamically allocated and is * valid indefinitely until a call to av_packet_unref() reduces the @@ -326,6 +334,12 @@ typedef struct AVPacketSideData { * The side data is always allocated with av_malloc(), copied by * av_packet_ref() and freed by av_packet_unref(). * + * sizeof(AVPacket) being a part of the public ABI is deprecated. once + * av_init_packet() is removed, new packets will only be able to be allocated + * with av_packet_alloc(), and new fields may be added to the end of the struct + * with a minor bump. + * + * @see av_packet_alloc * @see av_packet_ref * @see av_packet_unref */ @@ -385,6 +399,14 @@ typedef struct AVPacket { #endif } AVPacket; +#if FF_API_INIT_PACKET +attribute_deprecated +typedef struct AVPacketList { + AVPacket pkt; + struct AVPacketList *next; +} AVPacketList; +#endif + #define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe #define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted /** @@ -447,6 +469,7 @@ AVPacket *av_packet_clone(const AVPacket *src); */ void av_packet_free(AVPacket **pkt); +#if FF_API_INIT_PACKET /** * Initialize optional fields of a packet with default values. * @@ -454,8 +477,16 @@ void av_packet_free(AVPacket **pkt); * initialized separately. * * @param pkt packet + * + * @see av_packet_alloc + * @see av_packet_unref + * + * @deprecated This function is deprecated. Once it's removed, + sizeof(AVPacket) will not be a part of the ABI anymore. */ +attribute_deprecated void av_init_packet(AVPacket *pkt); +#endif /** * Allocate the payload of a packet and initialize its fields with @@ -546,7 +577,11 @@ void av_free_packet(AVPacket *pkt); * @return pointer to fresh allocated data or NULL otherwise */ uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +#if FF_API_BUFFER_SIZE_T int size); +#else + size_t size); +#endif /** * Wrap an existing array as a packet side data. @@ -573,18 +608,27 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, * @return 0 on success, < 0 on failure */ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +#if FF_API_BUFFER_SIZE_T int size); +#else + size_t size); +#endif /** * Get side information from packet. * * @param pkt packet * @param type desired side information type - * @param size pointer for side information size to store (optional) + * @param size If supplied, *size will be set to the size of the side data + * or to zero if the desired side data is not present. * @return pointer to data if present or NULL otherwise */ uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, +#if FF_API_BUFFER_SIZE_T int *size); +#else + size_t *size); +#endif #if FF_API_MERGE_SD_API attribute_deprecated @@ -603,7 +647,11 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type); * @param size pointer to store the size of the returned data * @return pointer to data if successful, NULL otherwise */ +#if FF_API_BUFFER_SIZE_T uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); +#else +uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); +#endif /** * Unpack a dictionary from side_data. * @@ -612,8 +660,12 @@ uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); * @param dict the metadata storage dictionary * @return 0 on success, < 0 on failure */ +#if FF_API_BUFFER_SIZE_T int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); - +#else +int av_packet_unpack_dictionary(const uint8_t *data, size_t size, + AVDictionary **dict); +#endif /** * Convenience function to free all the side data stored. diff --git a/ThirdParty/ffmpeg/include/libavcodec/version.h b/ThirdParty/ffmpeg/include/libavcodec/version.h index 85fbe24dc..cfdde4696 100644 --- a/ThirdParty/ffmpeg/include/libavcodec/version.h +++ b/ThirdParty/ffmpeg/include/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 91 +#define LIBAVCODEC_VERSION_MINOR 134 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -51,12 +51,6 @@ * at once through the bump. This improves the git bisect-ability of the change. */ -#ifndef FF_API_LOWRES -#define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 59) -#endif -#ifndef FF_API_DEBUG_MV -#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 58) -#endif #ifndef FF_API_AVCTX_TIMEBASE #define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) #endif @@ -144,6 +138,35 @@ #ifndef FF_API_UNUSED_CODEC_CAPS #define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) #endif - +#ifndef FF_API_AVPRIV_PUT_BITS +#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_OLD_ENCDEC +#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_AVCODEC_PIX_FMT +#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_MPV_RC_STRATEGY +#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_PARSER_CHANGE +#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_THREAD_SAFE_CALLBACKS +#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) +#endif +#ifndef FF_API_DEBUG_MV +#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) +#endif +#ifndef FF_API_GET_FRAME_CLASS +#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) +#endif +#ifndef FF_API_AUTO_THREADS +#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) +#endif +#ifndef FF_API_INIT_PACKET +#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) +#endif #endif /* AVCODEC_VERSION_H */ diff --git a/ThirdParty/ffmpeg/include/libavformat/avformat.h b/ThirdParty/ffmpeg/include/libavformat/avformat.h index 21c282a10..56708c024 100644 --- a/ThirdParty/ffmpeg/include/libavformat/avformat.h +++ b/ThirdParty/ffmpeg/include/libavformat/avformat.h @@ -356,7 +356,7 @@ struct AVDeviceCapabilitiesQuery; * sorting will have '-sort' appended. E.g. artist="The Beatles", * artist-sort="Beatles, The". * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_packet(), AVFormatContext.event_flags or AVStream.event_flags + * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags * will be updated to indicate if metadata changed. In order to detect metadata * changes on a stream, you need to loop through all streams in the AVFormatContext * and check their individual event_flags. @@ -534,7 +534,9 @@ typedef struct AVOutputFormat { #else #define ff_const59 const #endif +#if FF_API_NEXT ff_const59 struct AVOutputFormat *next; +#endif /** * size of private data so that it can be allocated in the wrapper */ @@ -588,6 +590,7 @@ typedef struct AVOutputFormat { * @see avdevice_list_devices() for more details. */ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); +#if LIBAVFORMAT_VERSION_MAJOR < 59 /** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. @@ -598,6 +601,7 @@ typedef struct AVOutputFormat { * @see avdevice_capabilities_free() for more details. */ int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); +#endif enum AVCodecID data_codec; /**< default data codec */ /** * Initialize format. May allocate data here, and set any AVFormatContext or @@ -679,7 +683,9 @@ typedef struct AVInputFormat { * New public fields should be added right above. ***************************************************************** */ +#if FF_API_NEXT ff_const59 struct AVInputFormat *next; +#endif /** * Raw demuxers store their codec ID here. @@ -765,6 +771,7 @@ typedef struct AVInputFormat { */ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); +#if LIBAVFORMAT_VERSION_MAJOR < 59 /** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. @@ -776,6 +783,7 @@ typedef struct AVInputFormat { * @see avdevice_capabilities_free() for more details. */ int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); +#endif } AVInputFormat; /** * @} @@ -973,12 +981,30 @@ typedef struct AVStream { int nb_side_data; /** - * Flags for the user to detect events happening on the stream. Flags must - * be cleared by the user once the event has been handled. - * A combination of AVSTREAM_EVENT_FLAG_*. + * Flags indicating events happening on the stream, a combination of + * AVSTREAM_EVENT_FLAG_*. + * + * - demuxing: may be set by the demuxer in avformat_open_input(), + * avformat_find_stream_info() and av_read_frame(). Flags must be cleared + * by the user once the event has been handled. + * - muxing: may be set by the user after avformat_write_header(). to + * indicate a user-triggered event. The muxer will clear the flags for + * events it has handled in av_[interleaved]_write_frame(). */ int event_flags; -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. +/** + * - demuxing: the demuxer read new metadata from the file and updated + * AVStream.metadata accordingly + * - muxing: the user updated AVStream.metadata and wishes the muxer to write + * it into the file + */ +#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 +/** + * - demuxing: new packets for this stream were read from the file. This + * event is informational only and does not guarantee that new packets + * for this stream will necessarily be returned from av_read_frame(). + */ +#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) /** * Real base framerate of the stream. @@ -1023,38 +1049,10 @@ typedef struct AVStream { ***************************************************************** */ -#define MAX_STD_TIMEBASES (30*12+30+3+6) - /** - * Stream information used internally by avformat_find_stream_info() - */ - struct { - int64_t last_dts; - int64_t duration_gcd; - int duration_count; - int64_t rfps_duration_sum; - double (*duration_error)[2][MAX_STD_TIMEBASES]; - int64_t codec_info_duration; - int64_t codec_info_duration_fields; - int frame_delay_evidence; - - /** - * 0 -> decoder has not been searched for yet. - * >0 -> decoder found - * <0 -> decoder with codec_id == -found_decoder has not been found - */ - int found_decoder; - - int64_t last_duration; - - /** - * Those are used for average framerate estimation. - */ - int64_t fps_first_dts; - int fps_first_dts_idx; - int64_t fps_last_dts; - int fps_last_dts_idx; - - } *info; +#if LIBAVFORMAT_VERSION_MAJOR < 59 + // kept for ABI compatibility only, do not access in any way + void *unused; +#endif int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ @@ -1085,14 +1083,12 @@ typedef struct AVStream { enum AVStreamParseType need_parsing; struct AVCodecParserContext *parser; - /** - * last packet in packet_buffer for this stream when muxing. - */ - struct AVPacketList *last_in_packet_buffer; - AVProbeData probe_data; -#define MAX_REORDER_DELAY 16 - int64_t pts_buffer[MAX_REORDER_DELAY+1]; - +#if LIBAVFORMAT_VERSION_MAJOR < 59 + // kept for ABI compatibility only, do not access in any way + void *unused7; + AVProbeData unused6; + int64_t unused5[16+1]; +#endif AVIndexEntry *index_entries; /**< Only used if the format does not support seeking natively. */ int nb_index_entries; @@ -1105,115 +1101,12 @@ typedef struct AVStream { */ int stream_identifier; - /** - * Details of the MPEG-TS program which created this stream. - */ - int program_num; - int pmt_version; - int pmt_stream_idx; - - int64_t interleaver_chunk_size; - int64_t interleaver_chunk_duration; - - /** - * stream probing state - * -1 -> probing finished - * 0 -> no probing requested - * rest -> perform probing with request_probe being the minimum score to accept. - */ - int request_probe; - /** - * Indicates that everything up to the next keyframe - * should be discarded. - */ - int skip_to_keyframe; - - /** - * Number of samples to skip at the start of the frame decoded from the next packet. - */ - int skip_samples; - - /** - * If not 0, the number of samples that should be skipped from the start of - * the stream (the samples are removed from packets with pts==0, which also - * assumes negative timestamps do not happen). - * Intended for use with formats such as mp3 with ad-hoc gapless audio - * support. - */ - int64_t start_skip_samples; - - /** - * If not 0, the first audio sample that should be discarded from the stream. - * This is broken by design (needs global sample count), but can't be - * avoided for broken by design formats such as mp3 with ad-hoc gapless - * audio support. - */ - int64_t first_discard_sample; - - /** - * The sample after last sample that is intended to be discarded after - * first_discard_sample. Works on frame boundaries only. Used to prevent - * early EOF if the gapless info is broken (considered concatenated mp3s). - */ - int64_t last_discard_sample; - - /** - * Number of internally decoded frames, used internally in libavformat, do not access - * its lifetime differs from info which is why it is not in that structure. - */ - int nb_decoded_frames; - - /** - * Timestamp offset added to timestamps before muxing - */ - int64_t mux_ts_offset; - - /** - * Internal data to check for wrapping of the time stamp - */ - int64_t pts_wrap_reference; - - /** - * Options for behavior, when a wrap is detected. - * - * Defined by AV_PTS_WRAP_ values. - * - * If correction is enabled, there are two possibilities: - * If the first time stamp is near the wrap point, the wrap offset - * will be subtracted, which will create negative time stamps. - * Otherwise the offset will be added. - */ - int pts_wrap_behavior; - - /** - * Internal data to prevent doing update_initial_durations() twice - */ - int update_initial_durations_done; - - /** - * Internal data to generate dts from pts - */ - int64_t pts_reorder_error[MAX_REORDER_DELAY+1]; - uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]; - - /** - * Internal data to analyze DTS and detect faulty mpeg streams - */ - int64_t last_dts_for_order_check; - uint8_t dts_ordered; - uint8_t dts_misordered; - - /** - * Internal data to inject global side data - */ - int inject_global_side_data; - - /** - * display aspect ratio (0 if unknown) - * - encoding: unused - * - decoding: Set by libavformat to calculate sample_aspect_ratio internally - */ - AVRational display_aspect_ratio; +#if LIBAVFORMAT_VERSION_MAJOR < 59 + // kept for ABI compatibility only, do not access in any way + int unused8; + int unused9; + int unused10; +#endif /** * An opaque field for libavformat internal usage. @@ -1292,7 +1185,11 @@ typedef struct AVProgram { change dynamically at runtime. */ typedef struct AVChapter { +#if FF_API_CHAPTER_ID_INT int id; ///< unique ID to identify the chapter +#else + int64_t id; ///< unique ID to identify the chapter +#endif AVRational time_base; ///< time base in which the start/end timestamps are specified int64_t start, end; ///< chapter start/end time in time_base units AVDictionary *metadata; @@ -1487,7 +1384,9 @@ typedef struct AVFormatContext { #define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Deprecated, does nothing. #endif #define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) +#if FF_API_LAVF_PRIV_OPT +#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (deprecated, will do nothing once av_demuxer_open() is removed) +#endif #if FF_API_LAVF_KEEPSIDE_FLAG #define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Deprecated, does nothing. #endif @@ -1645,12 +1544,24 @@ typedef struct AVFormatContext { int strict_std_compliance; /** - * Flags for the user to detect events happening on the file. Flags must - * be cleared by the user once the event has been handled. - * A combination of AVFMT_EVENT_FLAG_*. + * Flags indicating events happening on the file, a combination of + * AVFMT_EVENT_FLAG_*. + * + * - demuxing: may be set by the demuxer in avformat_open_input(), + * avformat_find_stream_info() and av_read_frame(). Flags must be cleared + * by the user once the event has been handled. + * - muxing: may be set by the user after avformat_write_header() to + * indicate a user-triggered event. The muxer will clear the flags for + * events it has handled in av_[interleaved]_write_frame(). */ int event_flags; -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. +/** + * - demuxing: the demuxer read new metadata from the file and updated + * AVFormatContext.metadata accordingly + * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to + * write it into the file + */ +#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 /** * Maximum number of packets to read while waiting for the first timestamp. @@ -2007,12 +1918,6 @@ void av_format_inject_global_side_data(AVFormatContext *s); */ enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; - - /** * @defgroup lavf_core Core functions * @ingroup libavf @@ -2183,17 +2088,26 @@ int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, * @return pointer to fresh allocated data or NULL otherwise */ uint8_t *av_stream_new_side_data(AVStream *stream, +#if FF_API_BUFFER_SIZE_T enum AVPacketSideDataType type, int size); +#else + enum AVPacketSideDataType type, size_t size); +#endif /** * Get side information from stream. * * @param stream stream * @param type desired side information type - * @param size pointer for side information size to store (optional) + * @param size If supplied, *size will be set to the size of the side data + * or to zero if the desired side data is not present. * @return pointer to data if present or NULL otherwise */ uint8_t *av_stream_get_side_data(const AVStream *stream, +#if FF_API_BUFFER_SIZE_T enum AVPacketSideDataType type, int *size); +#else + enum AVPacketSideDataType type, size_t *size); +#endif AVProgram *av_new_program(AVFormatContext *s, int id); @@ -2311,8 +2225,13 @@ int av_probe_input_buffer(AVIOContext *pb, ff_const59 AVInputFormat **fmt, */ int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); +#if FF_API_DEMUXER_OPEN +/** + * @deprecated Use an AVDictionary to pass options to a demuxer. + */ attribute_deprecated int av_demuxer_open(AVFormatContext *ic); +#endif /** * Read packets of a media file to get stream information. This diff --git a/ThirdParty/ffmpeg/include/libavformat/version.h b/ThirdParty/ffmpeg/include/libavformat/version.h index 13c8a615a..46dc51a22 100644 --- a/ThirdParty/ffmpeg/include/libavformat/version.h +++ b/ThirdParty/ffmpeg/include/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 45 +#define LIBAVFORMAT_VERSION_MINOR 76 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ @@ -106,6 +106,15 @@ #ifndef FF_API_AVIOFORMAT #define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) #endif +#ifndef FF_API_DEMUXER_OPEN +#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_CHAPTER_ID_INT +#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_LAVF_PRIV_OPT +#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60) +#endif #ifndef FF_API_R_FRAME_RATE diff --git a/ThirdParty/ffmpeg/include/libavutil/adler32.h b/ThirdParty/ffmpeg/include/libavutil/adler32.h index a1f035b73..e7a8f8372 100644 --- a/ThirdParty/ffmpeg/include/libavutil/adler32.h +++ b/ThirdParty/ffmpeg/include/libavutil/adler32.h @@ -27,8 +27,10 @@ #ifndef AVUTIL_ADLER32_H #define AVUTIL_ADLER32_H +#include #include #include "attributes.h" +#include "version.h" /** * @defgroup lavu_adler32 Adler-32 @@ -38,6 +40,12 @@ * @{ */ +#if FF_API_CRYPTO_SIZE_T +typedef unsigned long AVAdler; +#else +typedef uint32_t AVAdler; +#endif + /** * Calculate the Adler32 checksum of a buffer. * @@ -50,8 +58,12 @@ * @param len size of input buffer * @return updated checksum */ -unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, - unsigned int len) av_pure; +AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, +#if FF_API_CRYPTO_SIZE_T + unsigned int len) av_pure; +#else + size_t len) av_pure; +#endif /** * @} diff --git a/ThirdParty/ffmpeg/include/libavutil/avstring.h b/ThirdParty/ffmpeg/include/libavutil/avstring.h index 274335cfb..fae446c30 100644 --- a/ThirdParty/ffmpeg/include/libavutil/avstring.h +++ b/ThirdParty/ffmpeg/include/libavutil/avstring.h @@ -24,6 +24,7 @@ #include #include #include "attributes.h" +#include "version.h" /** * @addtogroup lavu_string @@ -155,10 +156,14 @@ static inline size_t av_strnlen(const char *s, size_t len) */ char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); +#if FF_API_D2STR /** * Convert a number to an av_malloced string. + * @deprecated use av_asprintf() with "%f" or a more specific format */ +attribute_deprecated char *av_d2str(double d); +#endif /** * Unescape the given string until a non escaped terminating char, @@ -319,6 +324,7 @@ enum AVEscapeMode { AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. + AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. }; /** @@ -338,6 +344,19 @@ enum AVEscapeMode { */ #define AV_ESCAPE_FLAG_STRICT (1 << 1) +/** + * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single + * quoted attributes. + */ +#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) + +/** + * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double + * quoted attributes. + */ +#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) + + /** * Escape string in src, and put the escaped string in an allocated * string in *dst, which must be freed with av_free(). diff --git a/ThirdParty/ffmpeg/include/libavutil/buffer.h b/ThirdParty/ffmpeg/include/libavutil/buffer.h index c0f3f6cc9..241a80ed6 100644 --- a/ThirdParty/ffmpeg/include/libavutil/buffer.h +++ b/ThirdParty/ffmpeg/include/libavutil/buffer.h @@ -25,8 +25,11 @@ #ifndef AVUTIL_BUFFER_H #define AVUTIL_BUFFER_H +#include #include +#include "version.h" + /** * @defgroup lavu_buffer AVBuffer * @ingroup lavu_data @@ -90,7 +93,11 @@ typedef struct AVBufferRef { /** * Size of data in bytes. */ +#if FF_API_BUFFER_SIZE_T int size; +#else + size_t size; +#endif } AVBufferRef; /** @@ -98,13 +105,21 @@ typedef struct AVBufferRef { * * @return an AVBufferRef of given size or NULL when out of memory */ +#if FF_API_BUFFER_SIZE_T AVBufferRef *av_buffer_alloc(int size); +#else +AVBufferRef *av_buffer_alloc(size_t size); +#endif /** * Same as av_buffer_alloc(), except the returned buffer will be initialized * to zero. */ +#if FF_API_BUFFER_SIZE_T AVBufferRef *av_buffer_allocz(int size); +#else +AVBufferRef *av_buffer_allocz(size_t size); +#endif /** * Always treat the buffer as read-only, even when it has only one @@ -127,7 +142,11 @@ AVBufferRef *av_buffer_allocz(int size); * * @return an AVBufferRef referring to data on success, NULL on failure. */ +#if FF_API_BUFFER_SIZE_T AVBufferRef *av_buffer_create(uint8_t *data, int size, +#else +AVBufferRef *av_buffer_create(uint8_t *data, size_t size, +#endif void (*free)(void *opaque, uint8_t *data), void *opaque, int flags); @@ -195,7 +214,27 @@ int av_buffer_make_writable(AVBufferRef **buf); * reference to it (i.e. the one passed to this function). In all other cases * a new buffer is allocated and the data is copied. */ +#if FF_API_BUFFER_SIZE_T int av_buffer_realloc(AVBufferRef **buf, int size); +#else +int av_buffer_realloc(AVBufferRef **buf, size_t size); +#endif + +/** + * Ensure dst refers to the same data as src. + * + * When *dst is already equivalent to src, do nothing. Otherwise unreference dst + * and replace it with a new reference to src. + * + * @param dst Pointer to either a valid buffer reference or NULL. On success, + * this will point to a buffer reference equivalent to src. On + * failure, dst will be left untouched. + * @param src A buffer reference to replace dst with. May be NULL, then this + * function is equivalent to av_buffer_unref(dst). + * @return 0 on success + * AVERROR(ENOMEM) on memory allocation failure. + */ +int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); /** * @} @@ -246,7 +285,11 @@ typedef struct AVBufferPool AVBufferPool; * (av_buffer_alloc()). * @return newly created buffer pool on success, NULL on error. */ +#if FF_API_BUFFER_SIZE_T AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); +#else +AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); +#endif /** * Allocate and initialize a buffer pool with a more complex allocator. @@ -263,8 +306,13 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); * data. May be NULL. * @return newly created buffer pool on success, NULL on error. */ +#if FF_API_BUFFER_SIZE_T AVBufferPool *av_buffer_pool_init2(int size, void *opaque, AVBufferRef* (*alloc)(void *opaque, int size), +#else +AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, + AVBufferRef* (*alloc)(void *opaque, size_t size), +#endif void (*pool_free)(void *opaque)); /** diff --git a/ThirdParty/ffmpeg/include/libavutil/channel_layout.h b/ThirdParty/ffmpeg/include/libavutil/channel_layout.h index 50bb8f03c..d39ae1177 100644 --- a/ThirdParty/ffmpeg/include/libavutil/channel_layout.h +++ b/ThirdParty/ffmpeg/include/libavutil/channel_layout.h @@ -71,6 +71,11 @@ #define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL #define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL #define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL +#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL +#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL +#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL +#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL +#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL /** Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests the channel order of the decoder output @@ -110,6 +115,7 @@ #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) +#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) enum AVMatrixEncoding { AV_MATRIX_ENCODING_NONE, diff --git a/ThirdParty/ffmpeg/include/libavutil/common.h b/ThirdParty/ffmpeg/include/libavutil/common.h index 92b721a59..aee353d39 100644 --- a/ThirdParty/ffmpeg/include/libavutil/common.h +++ b/ThirdParty/ffmpeg/include/libavutil/common.h @@ -80,6 +80,15 @@ */ #define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) +/** + * Unsigned Absolute value. + * This takes the absolute value of a signed int and returns it as a unsigned. + * This also works with INT_MIN which would otherwise not be representable + * As with many macros, this evaluates its argument twice. + */ +#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) +#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) + /** * Comparator. * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 @@ -106,8 +115,72 @@ # include "intmath.h" #endif -/* Pull in unguarded fallback defines at the end of this file. */ -#include "common.h" +#ifndef av_ceil_log2 +# define av_ceil_log2 av_ceil_log2_c +#endif +#ifndef av_clip +# define av_clip av_clip_c +#endif +#ifndef av_clip64 +# define av_clip64 av_clip64_c +#endif +#ifndef av_clip_uint8 +# define av_clip_uint8 av_clip_uint8_c +#endif +#ifndef av_clip_int8 +# define av_clip_int8 av_clip_int8_c +#endif +#ifndef av_clip_uint16 +# define av_clip_uint16 av_clip_uint16_c +#endif +#ifndef av_clip_int16 +# define av_clip_int16 av_clip_int16_c +#endif +#ifndef av_clipl_int32 +# define av_clipl_int32 av_clipl_int32_c +#endif +#ifndef av_clip_intp2 +# define av_clip_intp2 av_clip_intp2_c +#endif +#ifndef av_clip_uintp2 +# define av_clip_uintp2 av_clip_uintp2_c +#endif +#ifndef av_mod_uintp2 +# define av_mod_uintp2 av_mod_uintp2_c +#endif +#ifndef av_sat_add32 +# define av_sat_add32 av_sat_add32_c +#endif +#ifndef av_sat_dadd32 +# define av_sat_dadd32 av_sat_dadd32_c +#endif +#ifndef av_sat_sub32 +# define av_sat_sub32 av_sat_sub32_c +#endif +#ifndef av_sat_dsub32 +# define av_sat_dsub32 av_sat_dsub32_c +#endif +#ifndef av_sat_add64 +# define av_sat_add64 av_sat_add64_c +#endif +#ifndef av_sat_sub64 +# define av_sat_sub64 av_sat_sub64_c +#endif +#ifndef av_clipf +# define av_clipf av_clipf_c +#endif +#ifndef av_clipd +# define av_clipd av_clipd_c +#endif +#ifndef av_popcount +# define av_popcount av_popcount_c +#endif +#ifndef av_popcount64 +# define av_popcount64 av_popcount64_c +#endif +#ifndef av_parity +# define av_parity av_parity_c +#endif #ifndef av_log2 av_const int av_log2(unsigned v); @@ -303,11 +376,10 @@ static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) { int64_t tmp; return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); #else - if (b >= 0 && a >= INT64_MAX - b) - return INT64_MAX; - if (b <= 0 && a <= INT64_MIN - b) - return INT64_MIN; - return a + b; + int64_t s = a+(uint64_t)b; + if ((int64_t)(a^b | ~s^b) >= 0) + return INT64_MAX ^ (b >> 63); + return s; #endif } @@ -534,75 +606,3 @@ static av_always_inline av_const int av_parity_c(uint32_t v) #endif /* HAVE_AV_CONFIG_H */ #endif /* AVUTIL_COMMON_H */ - -/* - * The following definitions are outside the multiple inclusion guard - * to ensure they are immediately available in intmath.h. - */ - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif diff --git a/ThirdParty/ffmpeg/include/libavutil/cpu.h b/ThirdParty/ffmpeg/include/libavutil/cpu.h index 8bb9eb606..83099dd96 100644 --- a/ThirdParty/ffmpeg/include/libavutil/cpu.h +++ b/ThirdParty/ffmpeg/include/libavutil/cpu.h @@ -71,6 +71,9 @@ #define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations #define AV_CPU_FLAG_SETEND (1 <<16) +#define AV_CPU_FLAG_MMI (1 << 0) +#define AV_CPU_FLAG_MSA (1 << 1) + /** * Return the flags which specify extensions supported by the CPU. * The returned value is affected by av_force_cpu_flags() if that was used diff --git a/ThirdParty/ffmpeg/include/libavutil/ffversion.h b/ThirdParty/ffmpeg/include/libavutil/ffversion.h index a218de1e5..70c967f19 100644 --- a/ThirdParty/ffmpeg/include/libavutil/ffversion.h +++ b/ThirdParty/ffmpeg/include/libavutil/ffversion.h @@ -1,5 +1,5 @@ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n4.3.2" +#define FFMPEG_VERSION "4.4" #endif /* AVUTIL_FFVERSION_H */ diff --git a/ThirdParty/ffmpeg/include/libavutil/film_grain_params.h b/ThirdParty/ffmpeg/include/libavutil/film_grain_params.h new file mode 100644 index 000000000..7629e3a04 --- /dev/null +++ b/ThirdParty/ffmpeg/include/libavutil/film_grain_params.h @@ -0,0 +1,168 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_FILM_GRAIN_PARAMS_H +#define AVUTIL_FILM_GRAIN_PARAMS_H + +#include "frame.h" + +enum AVFilmGrainParamsType { + AV_FILM_GRAIN_PARAMS_NONE = 0, + + /** + * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) + */ + AV_FILM_GRAIN_PARAMS_AV1, +}; + +/** + * This structure describes how to handle film grain synthesis for AOM codecs. + * + * @note The struct must be allocated as part of AVFilmGrainParams using + * av_film_grain_params_alloc(). Its size is not a part of the public ABI. + */ +typedef struct AVFilmGrainAOMParams { + /** + * Number of points, and the scale and value for each point of the + * piecewise linear scaling function for the uma plane. + */ + int num_y_points; + uint8_t y_points[14][2 /* value, scaling */]; + + /** + * Signals whether to derive the chroma scaling function from the luma. + * Not equivalent to copying the luma values and scales. + */ + int chroma_scaling_from_luma; + + /** + * If chroma_scaling_from_luma is set to 0, signals the chroma scaling + * function parameters. + */ + int num_uv_points[2 /* cb, cr */]; + uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; + + /** + * Specifies the shift applied to the chroma components. For AV1, its within + * [8; 11] and determines the range and quantization of the film grain. + */ + int scaling_shift; + + /** + * Specifies the auto-regression lag. + */ + int ar_coeff_lag; + + /** + * Luma auto-regression coefficients. The number of coefficients is given by + * 2 * ar_coeff_lag * (ar_coeff_lag + 1). + */ + int8_t ar_coeffs_y[24]; + + /** + * Chroma auto-regression coefficients. The number of coefficients is given by + * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. + */ + int8_t ar_coeffs_uv[2 /* cb, cr */][25]; + + /** + * Specifies the range of the auto-regressive coefficients. Values of 6, + * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and + * so on. For AV1 must be between 6 and 9. + */ + int ar_coeff_shift; + + /** + * Signals the down shift applied to the generated gaussian numbers during + * synthesis. + */ + int grain_scale_shift; + + /** + * Specifies the luma/chroma multipliers for the index to the component + * scaling function. + */ + int uv_mult[2 /* cb, cr */]; + int uv_mult_luma[2 /* cb, cr */]; + + /** + * Offset used for component scaling function. For AV1 its a 9-bit value + * with a range [-256, 255] + */ + int uv_offset[2 /* cb, cr */]; + + /** + * Signals whether to overlap film grain blocks. + */ + int overlap_flag; + + /** + * Signals to clip to limited color levels after film grain application. + */ + int limit_output_range; +} AVFilmGrainAOMParams; + +/** + * This structure describes how to handle film grain synthesis in video + * for specific codecs. Must be present on every frame where film grain is + * meant to be synthesised for correct presentation. + * + * @note The struct must be allocated with av_film_grain_params_alloc() and + * its size is not a part of the public ABI. + */ +typedef struct AVFilmGrainParams { + /** + * Specifies the codec for which this structure is valid. + */ + enum AVFilmGrainParamsType type; + + /** + * Seed to use for the synthesis process, if the codec allows for it. + */ + uint64_t seed; + + /** + * Additional fields may be added both here and in any structure included. + * If a codec's film grain structure differs slightly over another + * codec's, fields within may change meaning depending on the type. + */ + union { + AVFilmGrainAOMParams aom; + } codec; +} AVFilmGrainParams; + +/** + * Allocate an AVFilmGrainParams structure and set its fields to + * default values. The resulting struct can be freed using av_freep(). + * If size is not NULL it will be set to the number of bytes allocated. + * + * @return An AVFilmGrainParams filled with default values or NULL + * on failure. + */ +AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); + +/** + * Allocate a complete AVFilmGrainParams and add it to the frame. + * + * @param frame The frame which side data is added to. + * + * @return The AVFilmGrainParams structure to be filled by caller. + */ +AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); + +#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/ThirdParty/ffmpeg/include/libavutil/frame.h b/ThirdParty/ffmpeg/include/libavutil/frame.h index fc67db0f6..7d1f8e293 100644 --- a/ThirdParty/ffmpeg/include/libavutil/frame.h +++ b/ThirdParty/ffmpeg/include/libavutil/frame.h @@ -162,8 +162,8 @@ enum AVFrameSideDataType { /** * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.c. + * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() + * function in libavutil/timecode.h. */ AV_FRAME_DATA_S12M_TIMECODE, @@ -184,6 +184,20 @@ enum AVFrameSideDataType { * Encoding parameters for a video frame, as described by AVVideoEncParams. */ AV_FRAME_DATA_VIDEO_ENC_PARAMS, + + /** + * User data unregistered metadata associated with a video frame. + * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose + * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of + * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. + */ + AV_FRAME_DATA_SEI_UNREGISTERED, + + /** + * Film grain parameters for a frame, described by AVFilmGrainParams. + * Must be present for every frame which should have film grain applied. + */ + AV_FRAME_DATA_FILM_GRAIN_PARAMS, }; enum AVActiveFormatDescription { @@ -206,7 +220,11 @@ enum AVActiveFormatDescription { typedef struct AVFrameSideData { enum AVFrameSideDataType type; uint8_t *data; +#if FF_API_BUFFER_SIZE_T int size; +#else + size_t size; +#endif AVDictionary *metadata; AVBufferRef *buf; } AVFrameSideData; @@ -899,7 +917,11 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); */ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, +#if FF_API_BUFFER_SIZE_T int size); +#else + size_t size); +#endif /** * Add a new side data to a frame from an existing AVBufferRef diff --git a/ThirdParty/ffmpeg/include/libavutil/hash.h b/ThirdParty/ffmpeg/include/libavutil/hash.h index 7693e6bf0..af4719e42 100644 --- a/ThirdParty/ffmpeg/include/libavutil/hash.h +++ b/ThirdParty/ffmpeg/include/libavutil/hash.h @@ -27,6 +27,7 @@ #ifndef AVUTIL_HASH_H #define AVUTIL_HASH_H +#include #include #include "version.h" diff --git a/ThirdParty/ffmpeg/include/libavutil/imgutils.h b/ThirdParty/ffmpeg/include/libavutil/imgutils.h index 5b790ecf0..5eccbf0bf 100644 --- a/ThirdParty/ffmpeg/include/libavutil/imgutils.h +++ b/ThirdParty/ffmpeg/include/libavutil/imgutils.h @@ -67,6 +67,20 @@ int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); */ int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); +/** + * Fill plane sizes for an image with pixel format pix_fmt and height height. + * + * @param size the array to be filled with the size of each image plane + * @param linesizes the array containing the linesize for each + * plane, should be filled by av_image_fill_linesizes() + * @return >= 0 in case of success, a negative error code otherwise + * + * @note The linesize parameters have the type ptrdiff_t here, while they are + * int for av_image_fill_linesizes(). + */ +int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, + int height, const ptrdiff_t linesizes[4]); + /** * Fill plane data pointers for an image with pixel format pix_fmt and * height height. diff --git a/ThirdParty/ffmpeg/include/libavutil/log.h b/ThirdParty/ffmpeg/include/libavutil/log.h index 9c14188a9..8edd6bbf2 100644 --- a/ThirdParty/ffmpeg/include/libavutil/log.h +++ b/ThirdParty/ffmpeg/include/libavutil/log.h @@ -112,6 +112,7 @@ typedef struct AVClass { */ void* (*child_next)(void *obj, void *prev); +#if FF_API_CHILD_CLASS_NEXT /** * Return an AVClass corresponding to the next potential * AVOptions-enabled child. @@ -120,7 +121,9 @@ typedef struct AVClass { * child_next iterates over _already existing_ objects, while * child_class_next iterates over _all possible_ children. */ + attribute_deprecated const struct AVClass* (*child_class_next)(const struct AVClass *prev); +#endif /** * Category used for visualization (like color) @@ -140,6 +143,21 @@ typedef struct AVClass { * available since version (52.12) */ int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); + + /** + * Iterate over the AVClasses corresponding to potential AVOptions-enabled + * children. + * + * @param iter pointer to opaque iteration state. The caller must initialize + * *iter to NULL before the first call. + * @return AVClass for the next AVOptions-enabled child or NULL if there are + * no more such children. + * + * @note The difference between child_next and this is that child_next + * iterates over _already existing_ objects, while child_class_iterate + * iterates over _all possible_ children. + */ + const struct AVClass* (*child_class_iterate)(void **iter); } AVClass; /** diff --git a/ThirdParty/ffmpeg/include/libavutil/mem.h b/ThirdParty/ffmpeg/include/libavutil/mem.h index 5fb1a02dd..e21a1feaa 100644 --- a/ThirdParty/ffmpeg/include/libavutil/mem.h +++ b/ThirdParty/ffmpeg/include/libavutil/mem.h @@ -33,6 +33,7 @@ #include "attributes.h" #include "error.h" #include "avutil.h" +#include "version.h" /** * @addtogroup lavu_mem @@ -49,6 +50,10 @@ * dealing with memory consistently possible on all platforms. * * @{ + */ + +#if FF_API_DECLARE_ALIGNED +/** * * @defgroup lavu_mem_macros Alignment Macros * Helper macros for declaring aligned variables. @@ -125,6 +130,7 @@ /** * @} */ +#endif /** * @defgroup lavu_mem_attrs Function Attributes diff --git a/ThirdParty/ffmpeg/include/libavutil/murmur3.h b/ThirdParty/ffmpeg/include/libavutil/murmur3.h index 1b09175c1..b3b3a07de 100644 --- a/ThirdParty/ffmpeg/include/libavutil/murmur3.h +++ b/ThirdParty/ffmpeg/include/libavutil/murmur3.h @@ -27,6 +27,7 @@ #ifndef AVUTIL_MURMUR3_H #define AVUTIL_MURMUR3_H +#include #include #include "version.h" diff --git a/ThirdParty/ffmpeg/include/libavutil/opt.h b/ThirdParty/ffmpeg/include/libavutil/opt.h index e46119572..8dc020a82 100644 --- a/ThirdParty/ffmpeg/include/libavutil/opt.h +++ b/ThirdParty/ffmpeg/include/libavutil/opt.h @@ -114,7 +114,7 @@ * libavcodec exports generic options, while its priv_data field exports * codec-specific options). In such a case, it is possible to set up the * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_next() in the + * implement AVClass.child_next() and AVClass.child_class_iterate() in the * parent struct's AVClass. * Assuming that the test_struct from above now also contains a * child_struct field: @@ -143,23 +143,25 @@ * return t->child_struct; * return NULL * } - * const AVClass child_class_next(const AVClass *prev) + * const AVClass child_class_iterate(void **iter) * { - * return prev ? NULL : &child_class; + * const AVClass *c = *iter ? NULL : &child_class; + * *iter = (void*)(uintptr_t)c; + * return c; * } * @endcode - * Putting child_next() and child_class_next() as defined above into + * Putting child_next() and child_class_iterate() as defined above into * test_class will now make child_struct's options accessible through * test_struct (again, proper setup as described above needs to be done on * child_struct right after it is created). * * From the above example it might not be clear why both child_next() - * and child_class_next() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_next() + * and child_class_iterate() are needed. The distinction is that child_next() + * iterates over actually existing objects, while child_class_iterate() * iterates over all possible child classes. E.g. if an AVCodecContext * was initialized to use a codec which has private options, then its * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_next() on AVCodecContext.av_class will + * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will * iterate over all available codecs with private options. * * @subsection avoptions_implement_named_constants Named constants @@ -194,7 +196,7 @@ * For enumerating there are basically two cases. The first is when you want to * get all options that may potentially exist on the struct and its children * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_next() recursively on the parent struct's AVClass. The + * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The * second case is when you have an already initialized struct with all its * children and you want to get all options that can be actually written or read * from it. In that case you should call av_opt_child_next() recursively (and @@ -646,13 +648,26 @@ const AVOption *av_opt_next(const void *obj, const AVOption *prev); */ void *av_opt_child_next(void *obj, void *prev); +#if FF_API_CHILD_CLASS_NEXT /** * Iterate over potential AVOptions-enabled children of parent. * * @param prev result of a previous call to this function or NULL * @return AVClass corresponding to next potential child or NULL + * + * @deprecated use av_opt_child_class_iterate */ +attribute_deprecated const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); +#endif + +/** + * Iterate over potential AVOptions-enabled children of parent. + * + * @param iter a pointer where iteration state is stored. + * @return AVClass corresponding to next potential child or NULL + */ +const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); /** * @defgroup opt_set_funcs Option setting functions diff --git a/ThirdParty/ffmpeg/include/libavutil/pixdesc.h b/ThirdParty/ffmpeg/include/libavutil/pixdesc.h index c055810ae..9b9d386ae 100644 --- a/ThirdParty/ffmpeg/include/libavutil/pixdesc.h +++ b/ThirdParty/ffmpeg/include/libavutil/pixdesc.h @@ -147,6 +147,7 @@ typedef struct AVPixFmtDescriptor { */ #define AV_PIX_FMT_FLAG_RGB (1 << 5) +#if FF_API_PSEUDOPAL /** * The pixel format is "pseudo-paletted". This means that it contains a * fixed palette in the 2nd plane but the palette is fixed/constant for each @@ -164,6 +165,7 @@ typedef struct AVPixFmtDescriptor { * before the deprecation, though). */ #define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) +#endif /** * The pixel format has an alpha channel. This is set on all formats that diff --git a/ThirdParty/ffmpeg/include/libavutil/pixfmt.h b/ThirdParty/ffmpeg/include/libavutil/pixfmt.h index 1c625cfc8..46ef211ad 100644 --- a/ThirdParty/ffmpeg/include/libavutil/pixfmt.h +++ b/ThirdParty/ffmpeg/include/libavutil/pixfmt.h @@ -358,6 +358,8 @@ enum AVPixelFormat { AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian + AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined + AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -447,6 +449,7 @@ enum AVPixelFormat { #define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) #define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) +#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) /** * Chromaticity coordinates of the source primaries. @@ -527,12 +530,60 @@ enum AVColorSpace { }; /** - * MPEG vs JPEG YUV range. + * Visual content value range. + * + * These values are based on definitions that can be found in multiple + * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance + * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital + * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit + * integer representation). At the time of writing, the BT.2100 one is + * recommended, as it also defines the full range representation. + * + * Common definitions: + * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, + * 'E' is the original value in range of 0.0 to 1.0. + * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original + * value in range of -0.5 to 0.5. + * - 'n' is the output bit depth. + * - For additional definitions such as rounding and clipping to valid n + * bit unsigned integer range, please refer to BT.2100 (Table 9). */ enum AVColorRange { AVCOL_RANGE_UNSPECIFIED = 0, - AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges - AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + + /** + * Narrow or limited range content. + * + * - For luminance planes: + * + * (219 * E + 16) * 2^(n-8) + * + * F.ex. the range of 16-235 for 8 bits + * + * - For chrominance planes: + * + * (224 * E + 128) * 2^(n-8) + * + * F.ex. the range of 16-240 for 8 bits + */ + AVCOL_RANGE_MPEG = 1, + + /** + * Full range content. + * + * - For RGB and luminance planes: + * + * (2^n - 1) * E + * + * F.ex. the range of 0-255 for 8 bits + * + * - For chrominance planes: + * + * (2^n - 1) * E + 2^(n - 1) + * + * F.ex. the range of 1-255 for 8 bits + */ + AVCOL_RANGE_JPEG = 2, AVCOL_RANGE_NB ///< Not part of ABI }; diff --git a/ThirdParty/ffmpeg/include/libavutil/ripemd.h b/ThirdParty/ffmpeg/include/libavutil/ripemd.h index 0db6858ff..921aa6668 100644 --- a/ThirdParty/ffmpeg/include/libavutil/ripemd.h +++ b/ThirdParty/ffmpeg/include/libavutil/ripemd.h @@ -28,6 +28,7 @@ #ifndef AVUTIL_RIPEMD_H #define AVUTIL_RIPEMD_H +#include #include #include "attributes.h" diff --git a/ThirdParty/ffmpeg/include/libavutil/timecode.h b/ThirdParty/ffmpeg/include/libavutil/timecode.h index 37c1361bc..060574a17 100644 --- a/ThirdParty/ffmpeg/include/libavutil/timecode.h +++ b/ThirdParty/ffmpeg/include/libavutil/timecode.h @@ -49,9 +49,9 @@ typedef struct { * Adjust frame number for NTSC drop frame time code. * * @param framenum frame number to adjust - * @param fps frame per second, 30 or 60 + * @param fps frame per second, multiples of 30 * @return adjusted frame number - * @warning adjustment is only valid in NTSC 29.97 and 59.94 + * @warning adjustment is only valid for multiples of NTSC 29.97 */ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); @@ -62,14 +62,39 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); * @param framenum frame number * @return the SMPTE binary representation * + * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" + * the format description as follows: + * bits 0-5: hours, in BCD(6bits) + * bits 6: BGF1 + * bits 7: BGF2 (NTSC) or FIELD (PAL) + * bits 8-14: minutes, in BCD(7bits) + * bits 15: BGF0 (NTSC) or BGF2 (PAL) + * bits 16-22: seconds, in BCD(7bits) + * bits 23: FIELD (NTSC) or BGF0 (PAL) + * bits 24-29: frames, in BCD(6bits) + * bits 30: drop frame flag (0: non drop, 1: drop) + * bits 31: color frame flag (0: unsync mode, 1: sync mode) + * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. * @note Frame number adjustment is automatically done in case of drop timecode, * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). * @note The frame number is relative to tc->start. - * @note Color frame (CF), binary group flags (BGF) and biphase mark polarity - * correction (PC) bits are set to zero. + * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. */ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); +/** + * Convert sei info to SMPTE 12M binary representation. + * + * @param rate frame rate in rational form + * @param drop drop flag + * @param hh hour + * @param mm minute + * @param ss second + * @param ff frame number + * @return the SMPTE binary representation + */ +uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); + /** * Load timecode string in buf. * @@ -84,6 +109,23 @@ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum) */ char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); +/** + * Get the timecode string from the SMPTE timecode format. + * + * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 + * fps timecodes by using the field bit. + * + * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long + * @param rate frame rate of the timecode + * @param tcsmpte the 32-bit SMPTE timecode + * @param prevent_df prevent the use of a drop flag when it is known the DF bit + * is arbitrary + * @param skip_field prevent the use of a field flag when it is known the field + * bit is arbitrary (e.g. because it is used as PC flag) + * @return the buf parameter + */ +char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); + /** * Get the timecode string from the SMPTE timecode format. * @@ -118,6 +160,23 @@ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); */ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); +/** + * Init a timecode struct from the passed timecode components. + * + * @param log_ctx a pointer to an arbitrary struct of which the first field + * is a pointer to an AVClass struct (used for av_log) + * @param tc pointer to an allocated AVTimecode + * @param rate frame rate in rational form + * @param flags miscellaneous flags such as drop frame, +24 hours, ... + * (see AVTimecodeFlag) + * @param hh hours + * @param mm minutes + * @param ss seconds + * @param ff frames + * @return 0 on success, AVERROR otherwise + */ +int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); + /** * Parse timecode representation (hh:mm:ss[:;.]ff). * diff --git a/ThirdParty/ffmpeg/include/libavutil/tx.h b/ThirdParty/ffmpeg/include/libavutil/tx.h index 418e8ec1e..bfc0c7f2a 100644 --- a/ThirdParty/ffmpeg/include/libavutil/tx.h +++ b/ThirdParty/ffmpeg/include/libavutil/tx.h @@ -43,6 +43,7 @@ enum AVTXType { * The stride parameter is ignored. */ AV_TX_FLOAT_FFT = 0, + /** * Standard MDCT with sample data type of float and a scale type of * float. Length is the frame size, not the window size (which is 2x frame) @@ -51,21 +52,27 @@ enum AVTXType { * For inverse transforms, the stride specifies the spacing between each * sample in the input array in bytes. The output will be a flat array. * Stride must be a non-zero multiple of sizeof(float). + * NOTE: the inverse transform is half-length, meaning the output will not + * contain redundant data. This is what most codecs work with. */ AV_TX_FLOAT_MDCT = 1, + /** * Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble. */ AV_TX_DOUBLE_FFT = 2, + /** * Same as AV_TX_FLOAT_MDCT with data and scale type of double. * Stride must be a non-zero multiple of sizeof(double). */ AV_TX_DOUBLE_MDCT = 3, + /** * Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32. */ AV_TX_INT32_FFT = 4, + /** * Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float. * Only scale values less than or equal to 1.0 are supported. @@ -91,10 +98,21 @@ enum AVTXType { */ typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); +/** + * Flags for av_tx_init() + */ +enum AVTXFlags { + /** + * Performs an in-place transformation on the input. The output argument + * of av_tn_fn() MUST match the input. May be unsupported or slower for some + * transform types. + */ + AV_TX_INPLACE = 1ULL << 0, +}; + /** * Initialize a transform context with the given configuration - * Currently power of two lengths from 2 to 131072 are supported, along with - * any length decomposable to a power of two and either 3, 5 or 15. + * (i)MDCTs with an odd length are currently not supported. * * @param ctx the context to allocate, will be NULL on error * @param tx pointer to the transform function pointer to set @@ -102,7 +120,7 @@ typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); * @param inv whether to do an inverse or a forward transform * @param len the size of the transform in samples * @param scale pointer to the value to scale the output if supported by type - * @param flags currently unused + * @param flags a bitmask of AVTXFlags or 0 * * @return 0 on success, negative error code on failure */ diff --git a/ThirdParty/ffmpeg/include/libavutil/version.h b/ThirdParty/ffmpeg/include/libavutil/version.h index 0ff722fbf..f888dbb2d 100644 --- a/ThirdParty/ffmpeg/include/libavutil/version.h +++ b/ThirdParty/ffmpeg/include/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 51 +#define LIBAVUTIL_VERSION_MINOR 70 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ @@ -129,7 +129,18 @@ #ifndef FF_API_PSEUDOPAL #define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) #endif - +#ifndef FF_API_CHILD_CLASS_NEXT +#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) +#endif +#ifndef FF_API_BUFFER_SIZE_T +#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) +#endif +#ifndef FF_API_D2STR +#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) +#endif +#ifndef FF_API_DECLARE_ALIGNED +#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) +#endif /** * @} diff --git a/ThirdParty/ffmpeg/include/libavutil/video_enc_params.h b/ThirdParty/ffmpeg/include/libavutil/video_enc_params.h index 43fa44315..fc0c3bc1a 100644 --- a/ThirdParty/ffmpeg/include/libavutil/video_enc_params.h +++ b/ThirdParty/ffmpeg/include/libavutil/video_enc_params.h @@ -55,6 +55,14 @@ enum AVVideoEncParamsType { * as AVVideoBlockParams.qp_delta. */ AV_VIDEO_ENC_PARAMS_H264, + + /* + * MPEG-2-compatible quantizer. + * + * Summing the frame-level qp with the per-block delta_qp gives the + * resulting quantizer for the block. + */ + AV_VIDEO_ENC_PARAMS_MPEG2, }; /** @@ -153,7 +161,7 @@ AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, /** * Allocates memory for AVEncodeInfoFrame plus an array of * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_ENCODE_INFO + * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS * and initializes the variables. */ AVVideoEncParams* diff --git a/ThirdParty/ffmpeg/include/libswresample/version.h b/ThirdParty/ffmpeg/include/libswresample/version.h index 257739195..0a99e0f13 100644 --- a/ThirdParty/ffmpeg/include/libswresample/version.h +++ b/ThirdParty/ffmpeg/include/libswresample/version.h @@ -29,7 +29,7 @@ #include "libavutil/avutil.h" #define LIBSWRESAMPLE_VERSION_MAJOR 3 -#define LIBSWRESAMPLE_VERSION_MINOR 7 +#define LIBSWRESAMPLE_VERSION_MINOR 9 #define LIBSWRESAMPLE_VERSION_MICRO 100 #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ diff --git a/ThirdParty/ffmpeg/lib/libavcodec.a b/ThirdParty/ffmpeg/lib/libavcodec.a index d18ca3cad0f4ec0c77f1ed53722628243f1864d6..0acd5e7867beab2f84925d43d148ea8a2ac2719d 100644 GIT binary patch delta 7450305 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