aboutsummaryrefslogtreecommitdiffstats
path: root/avconv_opt.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2013-04-10 14:46:20 +0200
committerAnton Khirnov <anton@khirnov.net>2013-04-30 11:48:23 +0200
commit3d624420086ed3cd0c74f4510f0285968e21c117 (patch)
tree634e8ec42094fa9ae2bb4be52ed1eadeed74f310 /avconv_opt.c
parenta1e05b0487a1939334c2920fc7f9936bc9efe876 (diff)
downloadffmpeg-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.c35
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++) {