Re: [libav-devel] [PATCH] avconv: only apply presets when we have an encoder.

2012-10-22 Thread Luca Barbato
On 10/22/2012 10:42 PM, Anton Khirnov wrote:
> Fixes a crash when using a preset with stream copy.
> 

Ok.

lu

___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel


[libav-devel] [PATCH] avconv: only apply presets when we have an encoder.

2012-10-22 Thread Anton Khirnov
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