History

avcodec, avformat: deprecate anything related to side data merging

This patch deprecates anything that has to do with merging/splitting side data. Automatic side data merging (and splitting), as well as all API symbols involved in it, are removed completely. Two FF_API_ defines are dedicated to deprecating API symbols related to this: FF_API_MERGE_SD_API removes av_packet_split/merge_side_data in libavcodec, and FF_API_LAVF_KEEPSIDE_FLAG deprecates AVFMT_FLAG_KEEP_SIDE_DATA in libavformat. Since it was claimed that changing the default from merging side data to not doing it is an ABI change, there are two additional FF_API_ defines, which stop using the side data merging/splitting by default (and remove any code in avformat/avcodec doing this): FF_API_MERGE_SD in libavcodec, and FF_API_LAVF_MERGE_SD in libavformat. It is very much intended that FF_API_MERGE_SD and FF_API_LAVF_MERGE_SD are quickly defined to 0 in the next ABI bump, while the API symbols are retained for a longer time for the sake of compatibility. AVFMT_FLAG_KEEP_SIDE_DATA will (very much intentionally) do nothing for most of the time it will still be defined. Keep in mind that no code exists that actually tries to unset this flag for any reason, nor does such code need to exist. Code setting this flag explicitly will work as before. Thus it's ok for AVFMT_FLAG_KEEP_SIDE_DATA to do nothing once side data merging has been removed from libavformat. In order to avoid that anyone in the future does this incorrectly, here is a small guide how to update the internal code on bumps: - next ABI bump (probably soon): - define FF_API_LAVF_MERGE_SD to 0, and remove all code covered by it - define FF_API_MERGE_SD to 0, and remove all code covered by it - next API bump (typically two years in the future or so): - define FF_API_LAVF_KEEPSIDE_FLAG to 0, and remove all code covered by it - define FF_API_MERGE_SD_API to 0, and remove all code covered by it This forces anyone who actually wants packet side data to temporarily use deprecated API to get it all. If you ask me, this is batshit fucked up crazy, but it's how we roll. Making AVFMT_FLAG_KEEP_SIDE_DATA to be set by default was rejected as an ABI change, so I'm going all the way to get rid of this once and for all.

wm4 committed 9 years ago

Commit d682ae71 parent 5e3a41810 files · +73 −3Browse files

Unified · Split

10 files
  1. doc/APIchanges +5 −0
  2. libavcodec/avcodec.h +4 −0
  3. libavcodec/avpacket.c +4 −0
  4. libavcodec/utils.c +24 −0
  5. libavcodec/version.h +8 −1
  6. libavformat/avformat.h +3 −1
  7. libavformat/mux.c +12 −0
  8. libavformat/options_table.h +2 −0
  9. libavformat/utils.c +4 −0
  10. libavformat/version.h +7 −1
doc/APIchanges+5−0
@@ -15,6 +15,11 @@ libavutil: 2015-08-28 · 14 unmodified lines
15 15
16API changes, most recent first:16API changes, most recent first:
17 17
182017-03-21 - xxxxxxx - lavf 57.66.105, lavc 57.83.101 - avformat.h, avcodec.h
19 Deprecate AVFMT_FLAG_KEEP_SIDE_DATA. It will be ignored after the next major
20 bump, and libavformat will behave as if it were always set.
21 Deprecate av_packet_merge_side_data() and av_packet_split_side_data().
22
182016-03-20 - xxxxxxx - lavu 55.50.100 / 55.21.0 - imgutils.h232016-03-20 - xxxxxxx - lavu 55.50.100 / 55.21.0 - imgutils.h
19 Add av_image_copy_uc_from(), a version of av_image_copy() for copying24 Add av_image_copy_uc_from(), a version of av_image_copy() for copying
20 from GPU mapped memory.25 from GPU mapped memory.
libavcodec/avcodec.h+4−0
@@ -4576,9 +4576,13 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, · 4575 unmodified lines
4576uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,4576uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
4577 int *size);4577 int *size);
4578 4578
4579#if FF_API_MERGE_SD_API
4580attribute_deprecated
4579int av_packet_merge_side_data(AVPacket *pkt);4581int av_packet_merge_side_data(AVPacket *pkt);
4580 4582
4583attribute_deprecated
4581int av_packet_split_side_data(AVPacket *pkt);4584int av_packet_split_side_data(AVPacket *pkt);
4585#endif
4582 4586
4583const char *av_packet_side_data_name(enum AVPacketSideDataType type);4587const char *av_packet_side_data_name(enum AVPacketSideDataType type);
4584 4588
libavcodec/avpacket.c+4−0
@@ -379,6 +379,8 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) · 378 unmodified lines
379 return NULL;379 return NULL;
380}380}
381 381
382#if FF_API_MERGE_SD_API
383
382#define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL384#define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL
383 385
384int av_packet_merge_side_data(AVPacket *pkt){386int av_packet_merge_side_data(AVPacket *pkt){
@@ -460,6 +462,8 @@ int av_packet_split_side_data(AVPacket *pkt){ · 75 unmodified lines
460 return 0;462 return 0;
461}463}
462 464
465#endif
466
463uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size)467uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size)
464{468{
465 AVDictionaryEntry *t = NULL;469 AVDictionaryEntry *t = NULL;
libavcodec/utils.c+24−0
@@ -2263,7 +2263,11 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi · 2262 unmodified lines
2263 2263
2264 if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size ||2264 if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size ||
2265 (avctx->active_thread_type & FF_THREAD_FRAME)) {2265 (avctx->active_thread_type & FF_THREAD_FRAME)) {
2266#if FF_API_MERGE_SD
2267FF_DISABLE_DEPRECATION_WARNINGS
2266 int did_split = av_packet_split_side_data(&tmp);2268 int did_split = av_packet_split_side_data(&tmp);
2269FF_ENABLE_DEPRECATION_WARNINGS
2270#endif
2267 ret = apply_param_change(avctx, &tmp);2271 ret = apply_param_change(avctx, &tmp);
2268 if (ret < 0)2272 if (ret < 0)
2269 goto fail;2273 goto fail;
@@ -2295,11 +2299,13 @@ fail: · 25 unmodified lines
2295 emms_c(); //needed to avoid an emms_c() call before every return;2299 emms_c(); //needed to avoid an emms_c() call before every return;
2296 2300
2297 avctx->internal->pkt = NULL;2301 avctx->internal->pkt = NULL;
2302#if FF_API_MERGE_SD
2298 if (did_split) {2303 if (did_split) {
2299 av_packet_free_side_data(&tmp);2304 av_packet_free_side_data(&tmp);
2300 if(ret == tmp.size)2305 if(ret == tmp.size)
2301 ret = avpkt->size;2306 ret = avpkt->size;
2302 }2307 }
2308#endif
2303 if (picture->flags & AV_FRAME_FLAG_DISCARD) {2309 if (picture->flags & AV_FRAME_FLAG_DISCARD) {
2304 *got_picture_ptr = 0;2310 *got_picture_ptr = 0;
2305 }2311 }
@@ -2369,7 +2375,11 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, · 63 unmodified lines
2369 uint8_t discard_reason = 0;2375 uint8_t discard_reason = 0;
2370 // copy to ensure we do not change avpkt2376 // copy to ensure we do not change avpkt
2371 AVPacket tmp = *avpkt;2377 AVPacket tmp = *avpkt;
2378#if FF_API_MERGE_SD
2379FF_DISABLE_DEPRECATION_WARNINGS
2372 int did_split = av_packet_split_side_data(&tmp);2380 int did_split = av_packet_split_side_data(&tmp);
2381FF_ENABLE_DEPRECATION_WARNINGS
2382#endif
2373 ret = apply_param_change(avctx, &tmp);2383 ret = apply_param_change(avctx, &tmp);
2374 if (ret < 0)2384 if (ret < 0)
2375 goto fail;2385 goto fail;
@@ -2481,11 +2491,13 @@ FF_ENABLE_DEPRECATION_WARNINGS · 105 unmodified lines
2481 }2491 }
2482fail:2492fail:
2483 avctx->internal->pkt = NULL;2493 avctx->internal->pkt = NULL;
2494#if FF_API_MERGE_SD
2484 if (did_split) {2495 if (did_split) {
2485 av_packet_free_side_data(&tmp);2496 av_packet_free_side_data(&tmp);
2486 if(ret == tmp.size)2497 if(ret == tmp.size)
2487 ret = avpkt->size;2498 ret = avpkt->size;
2488 }2499 }
2500#endif
2489 2501
2490 if (ret >= 0 && *got_frame_ptr) {2502 if (ret >= 0 && *got_frame_ptr) {
2491 if (!avctx->refcounted_frames) {2503 if (!avctx->refcounted_frames) {
@@ -2682,6 +2694,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, · 190 unmodified lines
2682 if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {2694 if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {
2683 AVPacket pkt_recoded;2695 AVPacket pkt_recoded;
2684 AVPacket tmp = *avpkt;2696 AVPacket tmp = *avpkt;
2697#if FF_API_MERGE_SD
2698FF_DISABLE_DEPRECATION_WARNINGS
2685 int did_split = av_packet_split_side_data(&tmp);2699 int did_split = av_packet_split_side_data(&tmp);
2686 //apply_param_change(avctx, &tmp);2700 //apply_param_change(avctx, &tmp);
2687 2701
@@ -2694,6 +2708,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, · 6 unmodified lines
2694 memset(tmp.data + tmp.size, 0,2708 memset(tmp.data + tmp.size, 0,
2695 FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE));2709 FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE));
2696 }2710 }
2711FF_ENABLE_DEPRECATION_WARNINGS
2712#endif
2697 2713
2698 pkt_recoded = tmp;2714 pkt_recoded = tmp;
2699 ret = recode_subtitle(avctx, &pkt_recoded, &tmp);2715 ret = recode_subtitle(avctx, &pkt_recoded, &tmp);
@@ -2753,11 +2769,13 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, · 53 unmodified lines
2753 avctx->internal->pkt = NULL;2769 avctx->internal->pkt = NULL;
2754 }2770 }
2755 2771
2772#if FF_API_MERGE_SD
2756 if (did_split) {2773 if (did_split) {
2757 av_packet_free_side_data(&tmp);2774 av_packet_free_side_data(&tmp);
2758 if(ret == tmp.size)2775 if(ret == tmp.size)
2759 ret = avpkt->size;2776 ret = avpkt->size;
2760 }2777 }
2778#endif
2761 2779
2762 if (*got_sub_ptr)2780 if (*got_sub_ptr)
2763 avctx->frame_number++;2781 avctx->frame_number++;
@@ -2873,12 +2891,18 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke · 109 unmodified lines
2873 if (avctx->codec->send_packet) {2891 if (avctx->codec->send_packet) {
2874 if (avpkt) {2892 if (avpkt) {
2875 AVPacket tmp = *avpkt;2893 AVPacket tmp = *avpkt;
2894#if FF_API_MERGE_SD
2895FF_DISABLE_DEPRECATION_WARNINGS
2876 int did_split = av_packet_split_side_data(&tmp);2896 int did_split = av_packet_split_side_data(&tmp);
2897FF_ENABLE_DEPRECATION_WARNINGS
2898#endif
2877 ret = apply_param_change(avctx, &tmp);2899 ret = apply_param_change(avctx, &tmp);
2878 if (ret >= 0)2900 if (ret >= 0)
2879 ret = avctx->codec->send_packet(avctx, &tmp);2901 ret = avctx->codec->send_packet(avctx, &tmp);
2902#if FF_API_MERGE_SD
2880 if (did_split)2903 if (did_split)
2881 av_packet_free_side_data(&tmp);2904 av_packet_free_side_data(&tmp);
2905#endif
2882 return ret;2906 return ret;
2883 } else {2907 } else {
2884 return avctx->codec->send_packet(avctx, NULL);2908 return avctx->codec->send_packet(avctx, NULL);
libavcodec/version.h+8−1
@@ -29,7 +29,7 @@ · 28 unmodified lines
29 29
30#define LIBAVCODEC_VERSION_MAJOR 5730#define LIBAVCODEC_VERSION_MAJOR 57
31#define LIBAVCODEC_VERSION_MINOR 8331#define LIBAVCODEC_VERSION_MINOR 83
32#define LIBAVCODEC_VERSION_MICRO 10032#define LIBAVCODEC_VERSION_MICRO 101
33 33
34#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \34#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
35 LIBAVCODEC_VERSION_MINOR, \35 LIBAVCODEC_VERSION_MINOR, \
@@ -157,6 +157,9 @@ · 121 unmodified lines
157#ifndef FF_API_VAAPI_CONTEXT157#ifndef FF_API_VAAPI_CONTEXT
158#define FF_API_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 58)158#define FF_API_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 58)
159#endif159#endif
160#ifndef FF_API_MERGE_SD
161#define FF_API_MERGE_SD (LIBAVCODEC_VERSION_MAJOR < 58)
162#endif
160#ifndef FF_API_AVCTX_TIMEBASE163#ifndef FF_API_AVCTX_TIMEBASE
161#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)164#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)
162#endif165#endif
@@ -229,5 +232,9 @@ · 66 unmodified lines
229#ifndef FF_API_STRUCT_VAAPI_CONTEXT232#ifndef FF_API_STRUCT_VAAPI_CONTEXT
230#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)233#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
231#endif234#endif
235#ifndef FF_API_MERGE_SD_API
236#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59)
237#endif
238
232 239
233#endif /* AVCODEC_VERSION_H */240#endif /* AVCODEC_VERSION_H */
libavformat/avformat.h+3−1
@@ -1468,7 +1468,9 @@ typedef struct AVFormatContext { · 1467 unmodified lines
1468#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload1468#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
1469#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)1469#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
1470#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)1470#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)
1471#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate.1471#if FF_API_LAVF_KEEPSIDE_FLAG
1472#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. Deprecated, will be the default.
1473#endif
1472#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats1474#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats
1473#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops.1475#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops.
1474#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Wait for packet data before writing a header, and add bitstream filters as requested by the muxer1476#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Wait for packet data before writing a header, and add bitstream filters as requested by the muxer
libavformat/mux.c+12−0
@@ -752,7 +752,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) · 751 unmodified lines
752 }752 }
753 }753 }
754 754
755#if FF_API_LAVF_MERGE_SD
756FF_DISABLE_DEPRECATION_WARNINGS
755 did_split = av_packet_split_side_data(pkt);757 did_split = av_packet_split_side_data(pkt);
758FF_ENABLE_DEPRECATION_WARNINGS
759#endif
756 760
757 if (!s->internal->header_written) {761 if (!s->internal->header_written) {
758 ret = s->internal->write_header_ret ? s->internal->write_header_ret : write_header_internal(s);762 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) · 18 unmodified lines
777 }781 }
778 782
779fail:783fail:
784#if FF_API_LAVF_MERGE_SD
785FF_DISABLE_DEPRECATION_WARNINGS
780 if (did_split)786 if (did_split)
781 av_packet_merge_side_data(pkt);787 av_packet_merge_side_data(pkt);
788FF_ENABLE_DEPRECATION_WARNINGS
789#endif
782 790
783 if (ret < 0) {791 if (ret < 0) {
784 pkt->pts = pts_backup;792 pkt->pts = pts_backup;
@@ -875,8 +883,12 @@ static int do_packet_auto_bsf(AVFormatContext *s, AVPacket *pkt) { · 90 unmodified lines
875 }883 }
876 }884 }
877 885
886#if FF_API_LAVF_MERGE_SD
887FF_DISABLE_DEPRECATION_WARNINGS
878 if (st->internal->nb_bsfcs)888 if (st->internal->nb_bsfcs)
879 av_packet_split_side_data(pkt);889 av_packet_split_side_data(pkt);
890FF_ENABLE_DEPRECATION_WARNINGS
891#endif
880 892
881 for (i = 0; i < st->internal->nb_bsfcs; i++) {893 for (i = 0; i < st->internal->nb_bsfcs; i++) {
882 AVBSFContext *ctx = st->internal->bsfcs[i];894 AVBSFContext *ctx = st->internal->bsfcs[i];
libavformat/options_table.h+2−0
@@ -48,7 +48,9 @@ static const AVOption avformat_options[] = { · 47 unmodified lines
48{"igndts", "ignore dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_IGNDTS }, INT_MIN, INT_MAX, D, "fflags"},48{"igndts", "ignore dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_IGNDTS }, INT_MIN, INT_MAX, D, "fflags"},
49{"discardcorrupt", "discard corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},49{"discardcorrupt", "discard corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},
50{"sortdts", "try to interleave outputted packets by dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},50{"sortdts", "try to interleave outputted packets by dts", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
51#if FF_API_LAVF_KEEPSIDE_FLAG
51{"keepside", "don't merge side data", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},52{"keepside", "don't merge side data", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
53#endif
52{"fastseek", "fast but inaccurate seeks", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_FAST_SEEK }, INT_MIN, INT_MAX, D, "fflags"},54{"fastseek", "fast but inaccurate seeks", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_FAST_SEEK }, INT_MIN, INT_MAX, D, "fflags"},
53{"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},55{"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
54{"nobuffer", "reduce the latency introduced by optional buffering", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_NOBUFFER }, 0, INT_MAX, D, "fflags"},56{"nobuffer", "reduce the latency introduced by optional buffering", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_FLAG_NOBUFFER }, 0, INT_MAX, D, "fflags"},
libavformat/utils.c+4−0
@@ -1675,8 +1675,12 @@ FF_ENABLE_DEPRECATION_WARNINGS · 1674 unmodified lines
1675 st->inject_global_side_data = 0;1675 st->inject_global_side_data = 0;
1676 }1676 }
1677 1677
1678#if FF_API_LAVF_MERGE_SD
1679FF_DISABLE_DEPRECATION_WARNINGS
1678 if (!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))1680 if (!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
1679 av_packet_merge_side_data(pkt);1681 av_packet_merge_side_data(pkt);
1682FF_ENABLE_DEPRECATION_WARNINGS
1683#endif
1680 }1684 }
1681 1685
1682 av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);1686 av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
libavformat/version.h+7−1
@@ -33,7 +33,7 @@ · 32 unmodified lines
33// Also please add any ticket numbers that you believe might be affected here33// Also please add any ticket numbers that you believe might be affected here
34#define LIBAVFORMAT_VERSION_MAJOR 5734#define LIBAVFORMAT_VERSION_MAJOR 57
35#define LIBAVFORMAT_VERSION_MINOR 6635#define LIBAVFORMAT_VERSION_MINOR 66
36#define LIBAVFORMAT_VERSION_MICRO 10436#define LIBAVFORMAT_VERSION_MICRO 105
37 37
38#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \38#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
39 LIBAVFORMAT_VERSION_MINOR, \39 LIBAVFORMAT_VERSION_MINOR, \
@@ -88,6 +88,12 @@ · 48 unmodified lines
88#ifndef FF_API_HLS_WRAP88#ifndef FF_API_HLS_WRAP
89#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 58)89#define FF_API_HLS_WRAP (LIBAVFORMAT_VERSION_MAJOR < 58)
90#endif90#endif
91#ifndef FF_API_LAVF_MERGE_SD
92#define FF_API_LAVF_MERGE_SD (LIBAVFORMAT_VERSION_MAJOR < 58)
93#endif
94#ifndef FF_API_LAVF_KEEPSIDE_FLAG
95#define FF_API_LAVF_KEEPSIDE_FLAG (LIBAVFORMAT_VERSION_MAJOR < 58)
96#endif
91 97
92 98
93#ifndef FF_API_R_FRAME_RATE99#ifndef FF_API_R_FRAME_RATE

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t