From e3111b1ff8592b7bafe5accd9708e7f3cab60adb Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 12 Apr 2016 11:17:47 -0300 Subject: avformat/framehash: Add more information to the output Signed-off-by: Michael Niedermayer Signed-off-by: James Almer --- libavformat/framecrcenc.c | 2 +- libavformat/framehash.c | 17 ++++++++++++++++- libavformat/hashenc.c | 6 +++--- libavformat/internal.h | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libavformat/framecrcenc.c b/libavformat/framecrcenc.c index 91bcdcd99e..3533c52e79 100644 --- a/libavformat/framecrcenc.c +++ b/libavformat/framecrcenc.c @@ -39,7 +39,7 @@ static int framecrc_write_header(struct AVFormatContext *s) } } - return ff_framehash_write_header(s); + return ff_framehash_write_header(s, 1); } static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt) diff --git a/libavformat/framehash.c b/libavformat/framehash.c index a8357b04ae..7431d45c22 100644 --- a/libavformat/framehash.c +++ b/libavformat/framehash.c @@ -20,7 +20,7 @@ #include "internal.h" -int ff_framehash_write_header(AVFormatContext *s) +int ff_framehash_write_header(AVFormatContext *s, int version) { int i; @@ -28,7 +28,22 @@ int ff_framehash_write_header(AVFormatContext *s) avio_printf(s->pb, "#software: %s\n", LIBAVFORMAT_IDENT); for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; + AVCodecParameters *avctx = st->codecpar; avio_printf(s->pb, "#tb %d: %d/%d\n", i, st->time_base.num, st->time_base.den); + if (version > 1) { + avio_printf(s->pb, "#media_type %d: %s\n", i, av_get_media_type_string(avctx->codec_type)); + avio_printf(s->pb, "#codec_id %d: %s\n", i, avcodec_get_name(avctx->codec_id)); + switch (avctx->codec_type) { + case AVMEDIA_TYPE_AUDIO: + avio_printf(s->pb, "#sample_rate %d: %d\n", i,avctx->sample_rate); + avio_printf(s->pb, "#channel_layout %d: %"PRIx64"\n", i,avctx->channel_layout); + break; + case AVMEDIA_TYPE_VIDEO: + avio_printf(s->pb, "#dimensions %d: %dx%d\n", i, avctx->width, avctx->height); + avio_printf(s->pb, "#sar %d: %d/%d\n", i, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); + break; + } + } avio_flush(s->pb); } return 0; diff --git a/libavformat/hashenc.c b/libavformat/hashenc.c index ef886a04a0..614c8157a5 100644 --- a/libavformat/hashenc.c +++ b/libavformat/hashenc.c @@ -57,7 +57,7 @@ static void hash_finish(struct AVFormatContext *s, char *buf) #if CONFIG_HASH_MUXER || CONFIG_FRAMEHASH_MUXER static const AVOption hash_options[] = { { "hash", "set hash to use", OFFSET(hash_name), AV_OPT_TYPE_STRING, {.str = "sha256"}, 0, 0, ENC }, - { "format_version", "file format version", OFFSET(format_version), AV_OPT_TYPE_INT, {.i64 = 1}, 1, 1, ENC }, + { "format_version", "file format version", OFFSET(format_version), AV_OPT_TYPE_INT, {.i64 = 1}, 1, 2, ENC }, { NULL }, }; #endif @@ -65,7 +65,7 @@ static const AVOption hash_options[] = { #if CONFIG_MD5_MUXER || CONFIG_FRAMEMD5_MUXER static const AVOption md5_options[] = { { "hash", "set hash to use", OFFSET(hash_name), AV_OPT_TYPE_STRING, {.str = "md5"}, 0, 0, ENC }, - { "format_version", "file format version", OFFSET(format_version), AV_OPT_TYPE_INT, {.i64 = 1}, 1, 1, ENC }, + { "format_version", "file format version", OFFSET(format_version), AV_OPT_TYPE_INT, {.i64 = 1}, 1, 2, ENC }, { NULL }, }; #endif @@ -158,7 +158,7 @@ static int framehash_write_header(struct AVFormatContext *s) avio_printf(s->pb, "#format: frame checksums\n"); avio_printf(s->pb, "#version: %d\n", c->format_version); avio_printf(s->pb, "#hash: %s\n", av_hash_get_name(c->hash)); - ff_framehash_write_header(s); + ff_framehash_write_header(s, c->format_version); avio_printf(s->pb, "#stream#, dts, pts, duration, size, hash\n"); return 0; } diff --git a/libavformat/internal.h b/libavformat/internal.h index 1719deb219..8e0cb34d76 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -401,7 +401,7 @@ int ff_add_param_change(AVPacket *pkt, int32_t channels, * Set the timebase for each stream from the corresponding codec timebase and * print it. */ -int ff_framehash_write_header(AVFormatContext *s); +int ff_framehash_write_header(AVFormatContext *s, int version); /** * Read a transport packet from a media file. -- cgit v1.2.3