From: Anton Khirnov Date: Wed, 18 Apr 2012 04:53:11 +0000 (+0200) Subject: avconv: fix a segfault when default encoder for a format doesn't exist. X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=2994913d70050b8951e83b57c12baa7e4cf7e47e;p=ffmpeg avconv: fix a segfault when default encoder for a format doesn't exist. Fail earlier and with a more descriptive error message. --- diff --git a/avconv.c b/avconv.c index 3da123cd229..a43a6f8ea3f 100644 --- a/avconv.c +++ b/avconv.c @@ -2684,8 +2684,16 @@ static int transcode_init(void) abort(); } } else { - if (!ost->enc) - ost->enc = avcodec_find_encoder(ost->st->codec->codec_id); + if (!ost->enc) { + /* should only happen when a default codec is not present. */ + snprintf(error, sizeof(error), "Automatic encoder selection " + "failed for output stream #%d:%d. Default encoder for " + "format %s is probably disabled. Please choose an " + "encoder manually.\n", ost->file_index, ost->index, + oc->oformat->name); + ret = AVERROR(EINVAL); + goto dump_format; + } if (ist) ist->decoding_needed = 1; @@ -2819,12 +2827,6 @@ static int transcode_init(void) if (ost->encoding_needed) { AVCodec *codec = ost->enc; AVCodecContext *dec = NULL; - if (!codec) { - snprintf(error, sizeof(error), "Encoder (codec id %d) not found for output stream #%d:%d", - ost->st->codec->codec_id, ost->file_index, ost->index); - ret = AVERROR(EINVAL); - goto dump_format; - } if ((ist = get_input_stream(ost))) dec = ist->st->codec;