Signed-off-by: Michael Niedermayer <michae...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel