[FFmpeg-cvslog] ffmpeg: Support copying unknown streams
Michael Niedermayer
git at videolan.org
Thu May 21 18:42:14 CEST 2015
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu May 21 00:34:41 2015 +0200| [18833daf9d1b4e380065b107173fba76d7b46067] | committer: Michael Niedermayer
ffmpeg: Support copying unknown streams
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=18833daf9d1b4e380065b107173fba76d7b46067
---
ffmpeg.c | 1 +
ffmpeg_opt.c | 24 +++++++++++++++++++++++-
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index a89ae39..da3ab91 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2822,6 +2822,7 @@ static int transcode_init(void)
enc_ctx->width = dec_ctx->width;
enc_ctx->height = dec_ctx->height;
break;
+ case AVMEDIA_TYPE_UNKNOWN:
case AVMEDIA_TYPE_DATA:
case AVMEDIA_TYPE_ATTACHMENT:
break;
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index d70318c..8edc988 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -112,6 +112,7 @@ static int input_sync;
static int override_ffserver = 0;
static int input_stream_potentially_available = 0;
static int ignore_unknown_streams = 0;
+static int copy_unknown_streams = 0;
static void uninit_options(OptionsContext *o)
{
@@ -1566,6 +1567,19 @@ static OutputStream *new_data_stream(OptionsContext *o, AVFormatContext *oc, int
return ost;
}
+static OutputStream *new_unknown_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
+{
+ OutputStream *ost;
+
+ ost = new_output_stream(o, oc, AVMEDIA_TYPE_UNKNOWN, source_index);
+ if (!ost->stream_copy) {
+ av_log(NULL, AV_LOG_FATAL, "Unknown stream encoding not supported yet (only streamcopy)\n");
+ exit_program(1);
+ }
+
+ return ost;
+}
+
static OutputStream *new_attachment_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
{
OutputStream *ost = new_output_stream(o, oc, AVMEDIA_TYPE_ATTACHMENT, source_index);
@@ -2018,6 +2032,11 @@ loop_end:
case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream (o, oc, src_idx); break;
case AVMEDIA_TYPE_DATA: ost = new_data_stream (o, oc, src_idx); break;
case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break;
+ case AVMEDIA_TYPE_UNKNOWN:
+ if (copy_unknown_streams) {
+ ost = new_unknown_stream (o, oc, src_idx);
+ break;
+ }
default:
av_log(NULL, ignore_unknown_streams ? AV_LOG_WARNING : AV_LOG_FATAL,
"Cannot map stream #%d:%d - unsupported type.\n",
@@ -2025,7 +2044,8 @@ loop_end:
if (!ignore_unknown_streams) {
av_log(NULL, AV_LOG_FATAL,
"If you want unsupported types ignored instead "
- "of failing, please use the -ignore_unknown option\n");
+ "of failing, please use the -ignore_unknown option\n"
+ "If you want them copied, please use -copy_unknown\n");
exit_program(1);
}
}
@@ -2864,6 +2884,8 @@ const OptionDef options[] = {
"never overwrite output files" },
{ "ignore_unknown", OPT_BOOL, { &ignore_unknown_streams },
"Ignore unknown stream types" },
+ { "copy_unknown", OPT_BOOL | OPT_EXPERT, { ©_unknown_streams },
+ "Copy unknown stream types" },
{ "c", HAS_ARG | OPT_STRING | OPT_SPEC |
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
"codec name", "codec" },
More information about the ffmpeg-cvslog
mailing list