[vlc-commits] avcodec: specify which encoder failed to initialize (fixes #9418)

Rémi Denis-Courmont git at videolan.org
Sun Sep 22 11:01:32 CEST 2013


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Sep 22 12:00:59 2013 +0300| [334303f469656689cecf93dcb7e00d045dd59503] | committer: Rémi Denis-Courmont

avcodec: specify which encoder failed to initialize (fixes #9418)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=334303f469656689cecf93dcb7e00d045dd59503
---

 modules/codec/avcodec/encoder.c |   28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
index 92aa28d..f53ddbb 100644
--- a/modules/codec/avcodec/encoder.c
+++ b/modules/codec/avcodec/encoder.c
@@ -758,10 +758,25 @@ int OpenEncoder( vlc_object_t *p_this )
         if( p_enc->fmt_in.i_cat != AUDIO_ES ||
                 (p_context->channels <= 2 && i_codec_id != AV_CODEC_ID_MP2
                  && i_codec_id != AV_CODEC_ID_MP3) )
+errmsg:
         {
-            msg_Err( p_enc, "cannot open encoder" );
+            static const char types[][12] = {
+                [UNKNOWN_ES] = N_("unknown"), [VIDEO_ES] = N_("video"),
+                [AUDIO_ES] = N_("audio"), [SPU_ES] = N_("subpicture"),
+            };
+            const char *type = types[0];
+            union
+            {
+                vlc_fourcc_t value;
+                char txt[4];
+            } fcc = { .value = p_enc->fmt_out.i_codec };
+
+            if (likely((unsigned)p_enc->fmt_in.i_cat < sizeof (types) / sizeof (types[0])))
+                type = types[p_enc->fmt_in.i_cat];
+            msg_Err( p_enc, "cannot open %4.4s %s encoder", fcc.txt, type );
             dialog_Fatal( p_enc, _("Streaming / Transcoding failed"),
-                    "%s", _("VLC could not open the encoder.") );
+                          _("VLC could not open the %4.4s %s encoder."),
+                          fcc.txt, vlc_gettext(type) );
             av_dict_free(&options);
             goto error;
         }
@@ -810,14 +825,7 @@ int OpenEncoder( vlc_object_t *p_this )
         ret = avcodec_open2( p_context, p_codec, options ? &options : NULL );
         vlc_avcodec_unlock();
         if( ret )
-        {
-            msg_Err( p_enc, "cannot open encoder" );
-            dialog_Fatal( p_enc,
-                    _("Streaming / Transcoding failed"),
-                    "%s", _("VLC could not open the encoder.") );
-            av_dict_free(&options);
-            goto error;
-        }
+            goto errmsg;
     }
 
     av_dict_free(&options);



More information about the vlc-commits mailing list