[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