[FFmpeg-devel] [PATCH 1/2] avformat/framehash: don't share write_header code with framecrc muxers
James Almer
jamrial at gmail.com
Wed Apr 13 00:32:44 CEST 2016
The uncodedframecrc muxer didn't like the new ff_framehash_write_header signature.
This may also simplify further improvements to the output of framehash.
Signed-off-by: James Almer <jamrial at gmail.com>
---
libavformat/Makefile | 8 ++++----
libavformat/{framehash.c => framecrc.c} | 19 ++-----------------
libavformat/framecrcenc.c | 2 +-
libavformat/hashenc.c | 27 +++++++++++++++++++++++++--
libavformat/internal.h | 2 +-
libavformat/uncodedframecrcenc.c | 2 +-
6 files changed, 34 insertions(+), 26 deletions(-)
rename libavformat/{framehash.c => framecrc.c} (54%)
diff --git a/libavformat/Makefile b/libavformat/Makefile
index 4bae3b7..bea5a59 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -174,9 +174,9 @@ OBJS-$(CONFIG_FLV_DEMUXER) += flvdec.o
OBJS-$(CONFIG_LIVE_FLV_DEMUXER) += flvdec.o
OBJS-$(CONFIG_FLV_MUXER) += flvenc.o avc.o
OBJS-$(CONFIG_FOURXM_DEMUXER) += 4xm.o
-OBJS-$(CONFIG_FRAMECRC_MUXER) += framecrcenc.o framehash.o
-OBJS-$(CONFIG_FRAMEHASH_MUXER) += hashenc.o framehash.o
-OBJS-$(CONFIG_FRAMEMD5_MUXER) += hashenc.o framehash.o
+OBJS-$(CONFIG_FRAMECRC_MUXER) += framecrcenc.o framecrc.o
+OBJS-$(CONFIG_FRAMEHASH_MUXER) += hashenc.o
+OBJS-$(CONFIG_FRAMEMD5_MUXER) += hashenc.o
OBJS-$(CONFIG_FRM_DEMUXER) += frmdec.o
OBJS-$(CONFIG_FSB_DEMUXER) += fsb.o
OBJS-$(CONFIG_GIF_MUXER) += gif.o
@@ -461,7 +461,7 @@ OBJS-$(CONFIG_TRUEHD_MUXER) += rawenc.o
OBJS-$(CONFIG_TTA_DEMUXER) += tta.o apetag.o img2.o
OBJS-$(CONFIG_TTY_DEMUXER) += tty.o sauce.o
OBJS-$(CONFIG_TXD_DEMUXER) += txd.o
-OBJS-$(CONFIG_UNCODEDFRAMECRC_MUXER) += uncodedframecrcenc.o framehash.o
+OBJS-$(CONFIG_UNCODEDFRAMECRC_MUXER) += uncodedframecrcenc.o framecrc.o
OBJS-$(CONFIG_V210_DEMUXER) += v210.o
OBJS-$(CONFIG_V210X_DEMUXER) += v210.o
OBJS-$(CONFIG_VAG_DEMUXER) += vag.o
diff --git a/libavformat/framehash.c b/libavformat/framecrc.c
similarity index 54%
rename from libavformat/framehash.c
rename to libavformat/framecrc.c
index 7431d45..436da2c 100644
--- a/libavformat/framehash.c
+++ b/libavformat/framecrc.c
@@ -1,5 +1,5 @@
/*
- * Common functions for the frame{crc,md5} muxers
+ * Common functions for the framecrc muxers
*
* This file is part of FFmpeg.
*
@@ -20,7 +20,7 @@
#include "internal.h"
-int ff_framehash_write_header(AVFormatContext *s, int version)
+int ff_framecrc_write_header(AVFormatContext *s)
{
int i;
@@ -28,22 +28,7 @@ int ff_framehash_write_header(AVFormatContext *s, int version)
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/framecrcenc.c b/libavformat/framecrcenc.c
index 3533c52..348e913 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, 1);
+ return ff_framecrc_write_header(s);
}
static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt)
diff --git a/libavformat/hashenc.c b/libavformat/hashenc.c
index 614c815..a45cc42 100644
--- a/libavformat/hashenc.c
+++ b/libavformat/hashenc.c
@@ -152,13 +152,36 @@ AVOutputFormat ff_md5_muxer = {
static int framehash_write_header(struct AVFormatContext *s)
{
struct HashContext *c = s->priv_data;
- int res = av_hash_alloc(&c->hash, c->hash_name);
+ int i, res = av_hash_alloc(&c->hash, c->hash_name);
if (res < 0)
return res;
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, c->format_version);
+ if (s->nb_streams && !(s->flags & AVFMT_FLAG_BITEXACT))
+ avio_printf(s->pb, "#software: %s\n", LIBAVFORMAT_IDENT);
+
+ for (i = 0; i < s->nb_streams; i++) {
+ AVStream *st = s->streams[i];
+ AVCodecParameters *par = st->codecpar;
+ avio_printf(s->pb, "#tb %d: %d/%d\n", i, st->time_base.num, st->time_base.den);
+ if (c->format_version > 1) {
+ avio_printf(s->pb, "#media_type %d: %s\n", i, av_get_media_type_string(par->codec_type));
+ avio_printf(s->pb, "#codec_id %d: %s\n", i, avcodec_get_name(par->codec_id));
+ switch (par->codec_type) {
+ case AVMEDIA_TYPE_AUDIO:
+ avio_printf(s->pb, "#sample_rate %d: %d\n", i,par->sample_rate);
+ avio_printf(s->pb, "#channel_layout %d: %"PRIx64"\n", i,par->channel_layout);
+ break;
+ case AVMEDIA_TYPE_VIDEO:
+ avio_printf(s->pb, "#dimensions %d: %dx%d\n", i, par->width, par->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);
+ }
+
avio_printf(s->pb, "#stream#, dts, pts, duration, size, hash\n");
return 0;
}
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 8e0cb34..5f475f3 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 version);
+int ff_framecrc_write_header(AVFormatContext *s);
/**
* Read a transport packet from a media file.
diff --git a/libavformat/uncodedframecrcenc.c b/libavformat/uncodedframecrcenc.c
index 9702a70..f4602d1 100644
--- a/libavformat/uncodedframecrcenc.c
+++ b/libavformat/uncodedframecrcenc.c
@@ -164,7 +164,7 @@ AVOutputFormat ff_uncodedframecrc_muxer = {
.long_name = NULL_IF_CONFIG_SMALL("uncoded framecrc testing"),
.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO,
- .write_header = ff_framehash_write_header,
+ .write_header = ff_framecrc_write_header,
.write_packet = write_packet,
.write_uncoded_frame = write_frame,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
--
2.8.1
More information about the ffmpeg-devel
mailing list