From: Christophe Massiot Date: Thu, 11 Aug 2005 13:39:43 +0000 (+0000) Subject: * modules/codec/ffmpeg: ffmpeg's av_log() messages now go to our messages X-Git-Tag: 0.8.4~909 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=fab9512e82e81d7b0a5d001f128e92877a5dbc66;p=vlc * modules/codec/ffmpeg: ffmpeg's av_log() messages now go to our messages bank instead of being fprintf'd to stderr. --- diff --git a/include/vlc_messages.h b/include/vlc_messages.h index 4d7c4cd2bc..f21a827054 100644 --- a/include/vlc_messages.h +++ b/include/vlc_messages.h @@ -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 ) ); diff --git a/modules/codec/ffmpeg/encoder.c b/modules/codec/ffmpeg/encoder.c index 64a407d0ff..a341cf936f 100644 --- a/modules/codec/ffmpeg/encoder.c +++ b/modules/codec/ffmpeg/encoder.c @@ -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; diff --git a/modules/codec/ffmpeg/ffmpeg.c b/modules/codec/ffmpeg/ffmpeg.c index a7b8221254..ca33d4692a 100644 --- a/modules/codec/ffmpeg/ffmpeg.c +++ b/modules/codec/ffmpeg/ffmpeg.c @@ -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 )",