]> git.sesse.net Git - vlc/commitdiff
* modules/codec/ffmpeg: ffmpeg's av_log() messages now go to our messages
authorChristophe Massiot <massiot@videolan.org>
Thu, 11 Aug 2005 13:39:43 +0000 (13:39 +0000)
committerChristophe Massiot <massiot@videolan.org>
Thu, 11 Aug 2005 13:39:43 +0000 (13:39 +0000)
   bank instead of being fprintf'd to stderr.

include/vlc_messages.h
modules/codec/ffmpeg/encoder.c
modules/codec/ffmpeg/ffmpeg.c

index 4d7c4cd2bcf4fe03536f2faa84311ee27f68943c..f21a827054604956bb27ff7661cda61483c464f8 100644 (file)
@@ -105,6 +105,7 @@ struct msg_subscription_t
  *****************************************************************************/
 VLC_EXPORT( void, __msg_Generic, ( vlc_object_t *, int, const char *, const char *, ... ) ATTRIBUTE_FORMAT( 4, 5 ) );
 VLC_EXPORT( void, __msg_GenericVa, ( vlc_object_t *, int, const char *, const char *, va_list args ) );
+#define msg_GenericVa(a, b, c, d, e) __msg_GenericVa(VLC_OBJECT(a), b, c, d, e)
 VLC_EXPORT( void, __msg_Info,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
 VLC_EXPORT( void, __msg_Err,     ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
 VLC_EXPORT( void, __msg_Warn,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
index 64a407d0ff6721fad2a0a4093c8f3d25ec91ea79..a341cf936f50e07cf0216640e24b6e8124707279 100644 (file)
@@ -238,6 +238,8 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
     p_sys->p_buffer = NULL;
 
     p_sys->p_context = p_context = avcodec_alloc_context();
+    p_context->debug = config_GetInt( p_enc, "ffmpeg-debug" );
+    p_context->opaque = (void *)p_this;
 
     /* Set CPU capabilities */
     p_context->dsp_mask = 0;
index a7b82212542c4558fd0f05c7f3027aa14b0ecf96..ca33d4692ae0ab159036d3583b72d92b9ab8ecc0 100644 (file)
@@ -240,6 +240,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     /* *** get a p_context *** */
     p_context = avcodec_alloc_context();
     p_context->debug = config_GetInt( p_dec, "ffmpeg-debug" );
+    p_context->opaque = (void *)p_this;
 
     /* Set CPU capabilities */
     p_context->dsp_mask = 0;
@@ -325,6 +326,46 @@ static void CloseDecoder( vlc_object_t *p_this )
 /*****************************************************************************
  * local Functions
  *****************************************************************************/
+static void LibavcodecCallback( void *p_opaque, int i_level,
+                                const char *psz_format, va_list va )
+{
+    int i_vlc_level;
+    AVCodecContext *p_avctx = (AVCodecContext *)p_opaque;
+    AVClass *p_avc;
+    vlc_object_t *p_this;
+    char *psz_new_format;
+    const char *psz_item_name;
+
+    if( p_avctx == NULL || p_avctx->opaque == NULL )
+        return;
+    p_this = (vlc_object_t *)p_avctx->opaque;
+    p_avc = p_avctx->av_class;
+
+    switch( i_level )
+    {
+    case AV_LOG_QUIET:
+        i_vlc_level = VLC_MSG_ERR;
+        break;
+    case AV_LOG_ERROR:
+        i_vlc_level = VLC_MSG_WARN;
+        break;
+    case AV_LOG_INFO:
+        i_vlc_level = VLC_MSG_DBG;
+        break;
+    case AV_LOG_DEBUG:
+    default:
+        return;
+    }
+
+    psz_item_name = p_avc->item_name(p_opaque);
+    psz_new_format = malloc( strlen(psz_format) + strlen(psz_item_name)
+                              + 16 + 7 );
+    sprintf( psz_new_format, "%s (%s@0x%p)", psz_format,
+             p_avc->item_name(p_opaque), p_opaque );
+    msg_GenericVa( p_this, i_vlc_level, MODULE_STRING, psz_new_format, va );
+    free( psz_new_format );
+}
+
 void E_(InitLibavcodec)( vlc_object_t *p_object )
 {
     static int b_ffmpeginit = 0;
@@ -338,6 +379,7 @@ void E_(InitLibavcodec)( vlc_object_t *p_object )
     {
         avcodec_init();
         avcodec_register_all();
+        av_log_set_callback( LibavcodecCallback );
         b_ffmpeginit = 1;
 
         msg_Dbg( p_object, "libavcodec initialized (interface %d )",