[FFmpeg-devel] [PATCH 1/2] Factor avpriv_aspect_string() out

Michael Niedermayer michaelni at gmx.at
Sun Jan 18 14:57:40 CET 2015


Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
 libavcodec/internal.h |    6 ++++++
 libavcodec/utils.c    |   30 +++++++++++++++++++++---------
 libavformat/dump.c    |   16 ++++++++--------
 3 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index f4e12e8..fcdbdca 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -237,6 +237,12 @@ const uint8_t *avpriv_find_start_code(const uint8_t *p,
                                       uint32_t *state);
 
 /**
+ * Create a pretty aspect ratio string for user presentation.
+ */
+void avpriv_aspect_string(char *buf, int buf_size, AVRational sar,
+                          int width, int height, int overscan);
+
+/**
  * Check that the provided frame dimensions are valid and set them on the codec
  * context.
  */
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index e18ed2d..7b6677f 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -2982,6 +2982,22 @@ size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_ta
     return ret;
 }
 
+void avpriv_aspect_string(char *buf, int buf_size, AVRational sar,
+                          int width, int height, int overscan)
+{
+    AVRational dar;
+
+    av_reduce(&dar.num, &dar.den,
+              width * sar.num,
+              height * sar.den,
+              1024 * 1024);
+
+    snprintf(buf, buf_size,
+             "SAR %d:%d DAR %d:%d",
+             sar.num, sar.den,
+             dar.num, dar.den);
+}
+
 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
 {
     const char *codec_type;
@@ -2990,7 +3006,6 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
     const AVCodec *p;
     int bitrate;
     int new_line = 0;
-    AVRational display_aspect_ratio;
     const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";
 
     if (!buf || buf_size <= 0)
@@ -3081,14 +3096,11 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
                          " (%dx%d)", enc->coded_width, enc->coded_height);
 
             if (enc->sample_aspect_ratio.num) {
-                av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
-                          enc->width * enc->sample_aspect_ratio.num,
-                          enc->height * enc->sample_aspect_ratio.den,
-                          1024 * 1024);
-                snprintf(buf + strlen(buf), buf_size - strlen(buf),
-                         " [SAR %d:%d DAR %d:%d]",
-                         enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den,
-                         display_aspect_ratio.num, display_aspect_ratio.den);
+                snprintf(buf + strlen(buf), buf_size - strlen(buf), " [");
+                avpriv_aspect_string(buf + strlen(buf), buf_size - strlen(buf),
+                                     enc->sample_aspect_ratio,
+                                     enc->width, enc->height, -1);
+                snprintf(buf + strlen(buf), buf_size - strlen(buf), "]");
             }
             if (av_log_get_level() >= AV_LOG_DEBUG) {
                 int g = av_gcd(enc->time_base.num, enc->time_base.den);
diff --git a/libavformat/dump.c b/libavformat/dump.c
index 56b37ff..99b8270 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -32,6 +32,8 @@
 #include "libavutil/replaygain.h"
 #include "libavutil/stereo3d.h"
 
+#include "libavcodec/internal.h"
+
 #include "avformat.h"
 
 #define HEXDUMP_PRINT(...)                                                    \
@@ -369,14 +371,12 @@ static void dump_stream_format(AVFormatContext *ic, int i,
 
     if (st->sample_aspect_ratio.num && // default
         av_cmp_q(st->sample_aspect_ratio, st->codec->sample_aspect_ratio)) {
-        AVRational display_aspect_ratio;
-        av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
-                  st->codec->width  * st->sample_aspect_ratio.num,
-                  st->codec->height * st->sample_aspect_ratio.den,
-                  1024 * 1024);
-        av_log(NULL, AV_LOG_INFO, ", SAR %d:%d DAR %d:%d",
-               st->sample_aspect_ratio.num, st->sample_aspect_ratio.den,
-               display_aspect_ratio.num, display_aspect_ratio.den);
+        char buf[256];
+
+        avpriv_aspect_string(buf, sizeof(buf),
+                             st->sample_aspect_ratio,
+                             st->codec->width, st->codec->height, -1);
+        av_log(NULL, AV_LOG_INFO, ", %s", buf);
     }
 
     if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list