diff --git a/doc/APIchanges b/doc/APIchanges index 436fb71acb..aadf164254 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,11 @@ libavutil: 2015-08-28 API changes, most recent first: +2017-03-21 - xxxxxxx - lavf 57.66.105, lavc 57.83.101 - avformat.h, avcodec.h + Deprecate AVFMT_FLAG_KEEP_SIDE_DATA. It will be ignored after the next major + bump, and libavformat will behave as if it were always set. + Deprecate av_packet_merge_side_data() and av_packet_split_side_data(). + 2016-03-20 - xxxxxxx - lavu 55.50.100 / 55.21.0 - imgutils.h Add av_image_copy_uc_from(), a version of av_image_copy() for copying from GPU mapped memory. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index ea3cb4506b..fbdf89216d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -4576,9 +4576,13 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size); +#if FF_API_MERGE_SD_API +attribute_deprecated int av_packet_merge_side_data(AVPacket *pkt); +attribute_deprecated int av_packet_split_side_data(AVPacket *pkt); +#endif const char *av_packet_side_data_name(enum AVPacketSideDataType type); diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 3ea2511dea..8420d8b258 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -379,6 +379,8 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) return NULL; } +#if FF_API_MERGE_SD_API + #define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL int av_packet_merge_side_data(AVPacket *pkt){ @@ -460,6 +462,8 @@ int av_packet_split_side_data(AVPacket *pkt){ return 0; } +#endif + uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size) { AVDictionaryEntry *t = NULL; diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 84c28c8396..9b055d2b3e 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -2263,7 +2263,11 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) { +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS int did_split = av_packet_split_side_data(&tmp); +FF_ENABLE_DEPRECATION_WARNINGS +#endif ret = apply_param_change(avctx, &tmp); if (ret < 0) goto fail; @@ -2295,11 +2299,13 @@ fail: emms_c(); //needed to avoid an emms_c() call before every return; avctx->internal->pkt = NULL; +#if FF_API_MERGE_SD if (did_split) { av_packet_free_side_data(&tmp); if(ret == tmp.size) ret = avpkt->size; } +#endif if (picture->flags & AV_FRAME_FLAG_DISCARD) { *got_picture_ptr = 0; } @@ -2369,7 +2375,11 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, uint8_t discard_reason = 0; // copy to ensure we do not change avpkt AVPacket tmp = *avpkt; +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS int did_split = av_packet_split_side_data(&tmp); +FF_ENABLE_DEPRECATION_WARNINGS +#endif ret = apply_param_change(avctx, &tmp); if (ret < 0) goto fail; @@ -2481,11 +2491,13 @@ FF_ENABLE_DEPRECATION_WARNINGS } fail: avctx->internal->pkt = NULL; +#if FF_API_MERGE_SD if (did_split) { av_packet_free_side_data(&tmp); if(ret == tmp.size) ret = avpkt->size; } +#endif if (ret >= 0 && *got_frame_ptr) { if (!avctx->refcounted_frames) { @@ -2682,6 +2694,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) { AVPacket pkt_recoded; AVPacket tmp = *avpkt; +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS int did_split = av_packet_split_side_data(&tmp); //apply_param_change(avctx, &tmp); @@ -2694,6 +2708,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, memset(tmp.data + tmp.size, 0, FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE)); } +FF_ENABLE_DEPRECATION_WARNINGS +#endif pkt_recoded = tmp; ret = recode_subtitle(avctx, &pkt_recoded, &tmp); @@ -2753,11 +2769,13 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, avctx->internal->pkt = NULL; } +#if FF_API_MERGE_SD if (did_split) { av_packet_free_side_data(&tmp); if(ret == tmp.size) ret = avpkt->size; } +#endif if (*got_sub_ptr) avctx->frame_number++; @@ -2873,12 +2891,18 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke if (avctx->codec->send_packet) { if (avpkt) { AVPacket tmp = *avpkt; +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS int did_split = av_packet_split_side_data(&tmp); +FF_ENABLE_DEPRECATION_WARNINGS +#endif ret = apply_param_change(avctx, &tmp); if (ret >= 0) ret = avctx->codec->send_packet(avctx, &tmp); +#if FF_API_MERGE_SD if (did_split) av_packet_free_side_data(&tmp); +#endif return ret; } else { return avctx->codec->send_packet(avctx, NULL); diff --git a/libavcodec/version.h b/libavcodec/version.h index 3ed5a718d4..ec8651f086 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 83 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ @@ -157,6 +157,9 @@ #ifndef FF_API_VAAPI_CONTEXT #define FF_API_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 58) #endif +#ifndef FF_API_MERGE_SD +#define FF_API_MERGE_SD (LIBAVCODEC_VERSION_MAJOR < 58) +#endif #ifndef FF_API_AVCTX_TIMEBASE #define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) #endif @@ -229,5 +232,9 @@ #ifndef FF_API_STRUCT_VAAPI_CONTEXT #define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) #endif +#ifndef FF_API_MERGE_SD_API +#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) +#endif + #endif /* AVCODEC_VERSION_H */ diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 4c1b18e002..4ab217dc17 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1468,7 +1468,9 @@ typedef struct AVFormatContext { #define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload #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) -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. +#if FF_API_LAVF_KEEPSIDE_FLAG +#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. Deprecated, will be the default. +#endif #define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats #define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. #define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Wait for packet data before writing a header, and add bitstream filters as requested by the muxer diff --git a/libavformat/mux.c b/libavformat/mux.c index e500531789..11b09f1b6e 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -752,7 +752,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) } } +#if FF_API_LAVF_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS did_split = av_packet_split_side_data(pkt); +FF_ENABLE_DEPRECATION_WARNINGS +#endif if (!s->internal->header_written) { ret = s->internal->write_header_ret ? s->internal->write_header_ret : write_header_internal(s); @@ -777,8 +781,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) } fail: +#if FF_API_LAVF_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS if (did_split) av_packet_merge_side_data(pkt); +FF_ENABLE_DEPRECATION_WARNINGS +#endif if (ret < 0) { pkt->pts = pts_backup; @@ -875,8 +883,12 @@ static int do_packet_auto_bsf(AVFormatContext *s, AVPacket *pkt) { } } +#if FF_API_LAVF_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS if (st->internal->nb_bsfcs) av_packet_split_side_data(pkt); +FF_ENABLE_DEPRECATION_WARNINGS +#endif for (i = 0; i < st->internal->nb_bsfcs; i++) { AVBSFContext *ctx = st->internal->bsfcs[i]; diff --git a/libavformat/options_table.h b/libavformat/options_table.h index a537dda95e..0c1915d6d4 100644 --- a/libavformat/options_table.h +++ b/libavformat/options_table.h @@ -48,7 +48,9 @@ static const AVOption avformat_options[] = { {"igndts", "ignore dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_IGNDTS }, INT_MIN, INT_MAX, D, "fflags"}, {"discardcorrupt", "discard corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"}, {"sortdts", "try to interleave outputted packets by dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"}, +#if FF_API_LAVF_KEEPSIDE_FLAG {"keepside", "don't merge side data", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"}, +#endif {"fastseek", "fast but inaccurate seeks", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_FAST_SEEK }, INT_MIN, INT_MAX, D, "fflags"}, {"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"}, {"nobuffer", "reduce the latency introduced by optional buffering", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_NOBUFFER }, 0, INT_MAX, D, "fflags"}, diff --git a/libavformat/utils.c b/libavformat/utils.c index 37d7024465..8227d1bbe1 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1675,8 +1675,12 @@ FF_ENABLE_DEPRECATION_WARNINGS st->inject_global_side_data = 0; } +#if FF_API_LAVF_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS if (!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA)) av_packet_merge_side_data(pkt); +FF_ENABLE_DEPRECATION_WARNINGS +#endif } av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata); diff --git a/libavformat/version.h b/libavformat/version.h index dc689d45fb..bfc42e3f15 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -33,7 +33,7 @@ // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 57 #define LIBAVFORMAT_VERSION_MINOR 66 -#define LIBAVFORMAT_VERSION_MICRO 104 +#define LIBAVFORMAT_VERSION_MICRO 105 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ @@ -88,6 +88,12 @@ #ifndef FF_API_HLS_WRAP #define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 58) #endif +#ifndef FF_API_LAVF_MERGE_SD +#define FF_API_LAVF_MERGE_SD (LIBAVFORMAT_VERSION_MAJOR < 58) +#endif +#ifndef FF_API_LAVF_KEEPSIDE_FLAG +#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 58) +#endif #ifndef FF_API_R_FRAME_RATE