[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


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