[FFmpeg-devel] [PATCH 3/3] lavf: deprecate avformat_transfer_internal_stream_timing_info()

Anton Khirnov anton at khirnov.net
Fri Jul 5 13:42:33 EEST 2024


And av_stream_get_codec_timebase().

They were both added for ffmpeg CLI, which no longer calls either of
them. Furthermore the notion of "internal stream timing info" that needs
to be transferred with a special magic API function is fundamentally
flawed and should be removed.
---
 doc/APIchanges              |  4 ++++
 libavformat/avformat.c      |  2 ++
 libavformat/avformat.h      | 18 +++++++-----------
 libavformat/internal.h      |  2 ++
 libavformat/options.c       |  2 ++
 libavformat/version_major.h |  1 +
 6 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index ac7953a49c..0dcb17eb35 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,10 @@ The last version increases of all libraries were on 2024-03-07
 
 API changes, most recent first:
 
+2024-07-xx - xxxxxxxxxx - lavf 61 - avformat.h
+  Deprecate avformat_transfer_internal_stream_timing_info()
+  and av_stream_get_codec_timebase() without replacement.
+
 2024-07-02 - xxxxxxxxxx - lavu 59.28.100 - hwcontext_d3d12va.h
   Add AVD3D12VAFramesContext.flags
 
diff --git a/libavformat/avformat.c b/libavformat/avformat.c
index 140fb5b6aa..b4f20502fb 100644
--- a/libavformat/avformat.c
+++ b/libavformat/avformat.c
@@ -770,6 +770,7 @@ AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *f
     return fr;
 }
 
+#if FF_API_INTERNAL_TIMING
 int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
                                                   AVStream *ost, const AVStream *ist,
                                                   enum AVTimebaseSource copy_tb)
@@ -849,6 +850,7 @@ AVRational av_stream_get_codec_timebase(const AVStream *st)
 {
     return cffstream(st)->avctx ? cffstream(st)->avctx->time_base : cffstream(st)->transferred_mux_tb;
 }
+#endif
 
 void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits,
                          unsigned int pts_num, unsigned int pts_den)
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 8afdcd9fd0..90920072aa 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -3042,6 +3042,7 @@ int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
 
 int avformat_queue_attached_pictures(AVFormatContext *s);
 
+#if FF_API_INTERNAL_TIMING
 enum AVTimebaseSource {
     AVFMT_TBCF_AUTO = -1,
     AVFMT_TBCF_DECODER,
@@ -3052,25 +3053,20 @@ enum AVTimebaseSource {
 };
 
 /**
- * Transfer internal timing information from one stream to another.
- *
- * This function is useful when doing stream copy.
- *
- * @param ofmt     target output format for ost
- * @param ost      output stream which needs timings copy and adjustments
- * @param ist      reference input stream to copy timings from
- * @param copy_tb  define from where the stream codec timebase needs to be imported
+ * @deprecated do not call this function
  */
+attribute_deprecated
 int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
                                                   AVStream *ost, const AVStream *ist,
                                                   enum AVTimebaseSource copy_tb);
 
 /**
- * Get the internal codec timebase from a stream.
- *
- * @param st  input stream to extract the timebase from
+ * @deprecated do not call this function
  */
+attribute_deprecated
 AVRational av_stream_get_codec_timebase(const AVStream *st);
+#endif
+
 
 /**
  * @}
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 6bad4fd119..8e8971bfeb 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -411,7 +411,9 @@ typedef struct FFStream {
 
     const struct AVCodecDescriptor *codec_desc;
 
+#if FF_API_INTERNAL_TIMING
     AVRational transferred_mux_tb;
+#endif
 } FFStream;
 
 static av_always_inline FFStream *ffstream(AVStream *st)
diff --git a/libavformat/options.c b/libavformat/options.c
index 60a73d79b9..2f3f8e0c96 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -317,7 +317,9 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
         sti->pts_buffer[i] = AV_NOPTS_VALUE;
 
     st->sample_aspect_ratio = (AVRational) { 0, 1 };
+#if FF_API_INTERNAL_TIMING
     sti->transferred_mux_tb = (AVRational) { 0, 1 };;
+#endif
 
 #if FF_API_AVSTREAM_SIDE_DATA
     sti->inject_global_side_data = si->inject_global_side_data;
diff --git a/libavformat/version_major.h b/libavformat/version_major.h
index 44ad23c6b6..7a9b06703d 100644
--- a/libavformat/version_major.h
+++ b/libavformat/version_major.h
@@ -47,6 +47,7 @@
 #define FF_API_AVSTREAM_SIDE_DATA       (LIBAVFORMAT_VERSION_MAJOR < 62)
 
 #define FF_API_GET_DUR_ESTIMATE_METHOD  (LIBAVFORMAT_VERSION_MAJOR < 62)
+#define FF_API_INTERNAL_TIMING          (LIBAVFORMAT_VERSION_MAJOR < 62)
 
 #define FF_API_R_FRAME_RATE            1
 
-- 
2.43.0



More information about the ffmpeg-devel mailing list