Skip to content

Commit

Permalink
avconv_opt: allocate an OutputFile before the streams.
Browse files Browse the repository at this point in the history
This way OutputFile variables like recording time can be used when
creating the streams.
  • Loading branch information
elenril committed Apr 30, 2013
1 parent a1e05b0 commit 3d62442
Showing 1 changed file with 17 additions and 18 deletions.
35 changes: 17 additions & 18 deletions avconv_opt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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:";

Expand All @@ -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);
Expand Down Expand Up @@ -1477,23 +1493,6 @@ static int open_output_file(OptionsContext *o, const char *filename)
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++) {
Expand Down

0 comments on commit 3d62442

Please sign in to comment.