diff options
author | Anton Khirnov <anton@khirnov.net> | 2013-04-10 14:46:20 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-04-30 11:48:23 +0200 |
commit | 3d624420086ed3cd0c74f4510f0285968e21c117 (patch) | |
tree | 634e8ec42094fa9ae2bb4be52ed1eadeed74f310 /avconv_opt.c | |
parent | a1e05b0487a1939334c2920fc7f9936bc9efe876 (diff) | |
download | ffmpeg-3d624420086ed3cd0c74f4510f0285968e21c117.tar.gz |
avconv_opt: allocate an OutputFile before the streams.
This way OutputFile variables like recording time can be used when
creating the streams.
Diffstat (limited to 'avconv_opt.c')
-rw-r--r-- | avconv_opt.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/avconv_opt.c b/avconv_opt.c index 1a4d891a0b..b15c54f4ee 100644 --- a/avconv_opt.c +++ b/avconv_opt.c @@ -820,7 +820,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e exit(1); output_streams[nb_output_streams - 1] = ost; - ost->file_index = nb_output_files; + ost->file_index = nb_output_files - 1; ost->index = idx; ost->st = st; st->codec->codec_type = type; @@ -1294,6 +1294,19 @@ static int open_output_file(OptionsContext *o, const char *filename) exit(1); } + GROW_ARRAY(output_files, nb_output_files); + of = av_mallocz(sizeof(*of)); + if (!of) + exit(1); + output_files[nb_output_files - 1] = of; + + of->ost_index = nb_output_streams; + of->recording_time = o->recording_time; + of->start_time = o->start_time; + of->limit_filesize = o->limit_filesize; + of->shortest = o->shortest; + av_dict_copy(&of->opts, o->g->format_opts, 0); + if (!strcmp(filename, "-")) filename = "pipe:"; @@ -1302,6 +1315,9 @@ static int open_output_file(OptionsContext *o, const char *filename) print_error(filename, AVERROR(ENOMEM)); exit(1); } + of->ctx = oc; + if (o->recording_time != INT64_MAX) + oc->duration = o->recording_time; if (o->format) { file_oformat = av_guess_format(o->format, NULL, NULL); @@ -1477,23 +1493,6 @@ loop_end: avio_close(pb); } - GROW_ARRAY(output_files, nb_output_files); - of = av_mallocz(sizeof(*of)); - if (!of) - exit(1); - output_files[nb_output_files - 1] = of; - - of->ctx = oc; - of->ost_index = nb_output_streams - oc->nb_streams; - of->recording_time = o->recording_time; - if (o->recording_time != INT64_MAX) - oc->duration = o->recording_time; - of->start_time = o->start_time; - of->limit_filesize = o->limit_filesize; - of->shortest = o->shortest; - av_dict_copy(&of->opts, o->g->format_opts, 0); - - /* check if all codec options have been used */ unused_opts = strip_specifiers(o->g->codec_opts); for (i = of->ost_index; i < nb_output_streams; i++) { |