[libav-commits] avconv: fix a segfault when default encoder for a format doesn't exist.

Anton Khirnov git at libav.org
Sat Apr 21 06:52:23 CEST 2012


Module: libav
Branch: master
Commit: 2994913d70050b8951e83b57c12baa7e4cf7e47e

Author:    Anton Khirnov <anton at khirnov.net>
Committer: Anton Khirnov <anton at khirnov.net>
Date:      Wed Apr 18 06:53:11 2012 +0200

avconv: fix a segfault when default encoder for a format doesn't exist.

Fail earlier and with a more descriptive error message.

---

 avconv.c |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/avconv.c b/avconv.c
index 3da123c..a43a6f8 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;



More information about the libav-commits mailing list