[FFmpeg-cvslog] avformat/utils: Move guessing frame rate/SAR to avformat.c

Andreas Rheinhardt git at videolan.org
Tue May 10 09:35:53 EEST 2022


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sat May  7 06:21:09 2022 +0200| [9163faecd3cdd93b69ae98605e7f518bd228196e] | committer: Andreas Rheinhardt

avformat/utils: Move guessing frame rate/SAR to avformat.c

It is not explicitly forbidden to call these functions with muxers
(although it is probably intended to be only called by demuxers;
av_guess_sample_aspect_ratio even says that "the stream aspect ratio
is set by the demuxer").

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9163faecd3cdd93b69ae98605e7f518bd228196e
---

 libavformat/avformat.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 libavformat/utils.c    | 45 ---------------------------------------------
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/libavformat/avformat.c b/libavformat/avformat.c
index 7fab0dd99d..78bec2f736 100644
--- a/libavformat/avformat.c
+++ b/libavformat/avformat.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <math.h>
 #include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
@@ -436,6 +437,50 @@ error:
     return ret;
 }
 
+AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
+{
+    AVRational undef = {0, 1};
+    AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
+    AVRational codec_sample_aspect_ratio  = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
+    AVRational frame_sample_aspect_ratio  = frame  ? frame->sample_aspect_ratio  : codec_sample_aspect_ratio;
+
+    av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
+               stream_sample_aspect_ratio.num,  stream_sample_aspect_ratio.den, INT_MAX);
+    if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
+        stream_sample_aspect_ratio = undef;
+
+    av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
+               frame_sample_aspect_ratio.num,  frame_sample_aspect_ratio.den, INT_MAX);
+    if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
+        frame_sample_aspect_ratio = undef;
+
+    if (stream_sample_aspect_ratio.num)
+        return stream_sample_aspect_ratio;
+    else
+        return frame_sample_aspect_ratio;
+}
+
+AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
+{
+    AVRational fr = st->r_frame_rate;
+    AVCodecContext *const avctx = ffstream(st)->avctx;
+    AVRational codec_fr = avctx->framerate;
+    AVRational   avg_fr = st->avg_frame_rate;
+
+    if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
+        av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
+        fr = avg_fr;
+    }
+
+    if (avctx->ticks_per_frame > 1) {
+        if (   codec_fr.num > 0 && codec_fr.den > 0 &&
+            (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1))
+            fr = codec_fr;
+    }
+
+    return fr;
+}
+
 int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
                                                   AVStream *ost, const AVStream *ist,
                                                   enum AVTimebaseSource copy_tb)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index ebee44f47d..272b8790a6 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -808,51 +808,6 @@ int avformat_network_deinit(void)
     return 0;
 }
 
-AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
-{
-    AVRational undef = {0, 1};
-    AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
-    AVRational codec_sample_aspect_ratio  = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
-    AVRational frame_sample_aspect_ratio  = frame  ? frame->sample_aspect_ratio  : codec_sample_aspect_ratio;
-
-    av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
-               stream_sample_aspect_ratio.num,  stream_sample_aspect_ratio.den, INT_MAX);
-    if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
-        stream_sample_aspect_ratio = undef;
-
-    av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
-               frame_sample_aspect_ratio.num,  frame_sample_aspect_ratio.den, INT_MAX);
-    if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
-        frame_sample_aspect_ratio = undef;
-
-    if (stream_sample_aspect_ratio.num)
-        return stream_sample_aspect_ratio;
-    else
-        return frame_sample_aspect_ratio;
-}
-
-AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
-{
-    AVRational fr = st->r_frame_rate;
-    AVCodecContext *const avctx = ffstream(st)->avctx;
-    AVRational codec_fr = avctx->framerate;
-    AVRational   avg_fr = st->avg_frame_rate;
-
-    if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
-        av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
-        fr = avg_fr;
-    }
-
-
-    if (avctx->ticks_per_frame > 1) {
-        if (   codec_fr.num > 0 && codec_fr.den > 0 &&
-            (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1))
-            fr = codec_fr;
-    }
-
-    return fr;
-}
-
 void ff_format_io_close_default(AVFormatContext *s, AVIOContext *pb)
 {
     avio_close(pb);



More information about the ffmpeg-cvslog mailing list