Fixes a crash when using a preset with stream copy.
CC: libav-sta...@libav.org
---
avconv_opt.c | 55 ---
1 file changed, 28 insertions(+), 27 deletions(-)
diff --git a/avconv_opt.c b/avconv_opt.c
index 79444eb..0eb601b 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -754,8 +754,6 @@ static OutputStream *new_output_stream(OptionsContext *o,
AVFormatContext *oc, e
char *bsf = NULL, *next, *codec_tag = NULL;
AVBitStreamFilterContext *bsfc, *bsfc_prev = NULL;
double qscale = -1;
-char *buf = NULL, *arg = NULL, *preset = NULL;
-AVIOContext *s = NULL;
if (!st) {
av_log(NULL, AV_LOG_FATAL, "Could not alloc stream.\n");
@@ -777,37 +775,40 @@ static OutputStream *new_output_stream(OptionsContext *o,
AVFormatContext *oc, e
st->codec->codec_type = type;
choose_encoder(o, oc, ost);
if (ost->enc) {
+AVIOContext *s = NULL;
+char *buf = NULL, *arg = NULL, *preset = NULL;
+
ost->opts = filter_codec_opts(codec_opts, ost->enc->id, oc, st,
ost->enc);
+
+MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
+if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name,
&s {
+do {
+buf = get_line(s);
+if (!buf[0] || buf[0] == '#') {
+av_free(buf);
+continue;
+}
+if (!(arg = strchr(buf, '='))) {
+av_log(NULL, AV_LOG_FATAL, "Invalid line found in the
preset file.\n");
+exit(1);
+}
+*arg++ = 0;
+av_dict_set(&ost->opts, buf, arg, AV_DICT_DONT_OVERWRITE);
+av_free(buf);
+} while (!s->eof_reached);
+avio_close(s);
+}
+if (ret) {
+av_log(NULL, AV_LOG_FATAL,
+ "Preset %s specified for stream %d:%d, but could not be
opened.\n",
+ preset, ost->file_index, ost->index);
+exit(1);
+}
}
avcodec_get_context_defaults3(st->codec, ost->enc);
st->codec->codec_type = type; // XXX hack, avcodec_get_context_defaults2()
sets type to unknown for stream copy
-MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
-if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name, &s {
-do {
-buf = get_line(s);
-if (!buf[0] || buf[0] == '#') {
-av_free(buf);
-continue;
-}
-if (!(arg = strchr(buf, '='))) {
-av_log(NULL, AV_LOG_FATAL, "Invalid line found in the preset
file.\n");
-exit(1);
-}
-*arg++ = 0;
-av_dict_set(&ost->opts, buf, arg, AV_DICT_DONT_OVERWRITE);
-av_free(buf);
-} while (!s->eof_reached);
-avio_close(s);
-}
-if (ret) {
-av_log(NULL, AV_LOG_FATAL,
- "Preset %s specified for stream %d:%d, but could not be
opened.\n",
- preset, ost->file_index, ost->index);
-exit(1);
-}
-
ost->max_frames = INT64_MAX;
MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
--
1.7.10.4
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel