From bb62d5c1f06e7ff0446abb9cbe6a102cdbd38cc0 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 27 Dec 2010 07:46:44 +0000 Subject: [PATCH] Allow output formats without any streams. Required for future metadata format. Originally committed as revision 26100 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 2 +- libavformat/avformat.h | 1 + libavformat/utils.c | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index 71e5d3b693..94919814bc 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1990,7 +1990,7 @@ static int transcode(AVFormatContext **output_files, nb_ostreams = 0; for(i=0;inb_streams) { + if (!os->nb_streams && !(os->oformat->flags & AVFMT_NOSTREAMS)) { dump_format(output_files[i], i, output_files[i]->filename, 1); fprintf(stderr, "Output file #%d does not contain any stream\n", i); ret = AVERROR(EINVAL); diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 1e878819d0..4f4693555a 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -323,6 +323,7 @@ typedef struct AVFormatParameters { #define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ #define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ #define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ +#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ typedef struct AVOutputFormat { const char *name; diff --git a/libavformat/utils.c b/libavformat/utils.c index 58e06e8688..e9a8099c95 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2709,7 +2709,7 @@ int av_write_header(AVFormatContext *s) AVStream *st; // some sanity checks - if (s->nb_streams == 0) { + if (s->nb_streams == 0 && !(s->oformat->flags & AVFMT_NOSTREAMS)) { av_log(s, AV_LOG_ERROR, "no streams\n"); return AVERROR(EINVAL); } @@ -2777,7 +2777,7 @@ int av_write_header(AVFormatContext *s) #endif /* set muxer identification string */ - if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) { + if (s->nb_streams && !(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) { av_metadata_set2(&s->metadata, "encoder", LIBAVFORMAT_IDENT, 0); }