Commit fab9512e authored by Christophe Massiot's avatar Christophe Massiot

* modules/codec/ffmpeg: ffmpeg's av_log() messages now go to our messages

   bank instead of being fprintf'd to stderr.
parent ca7e34b3
...@@ -105,6 +105,7 @@ struct msg_subscription_t ...@@ -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_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 ) ); 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_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_Err, ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
VLC_EXPORT( void, __msg_Warn, ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) ); VLC_EXPORT( void, __msg_Warn, ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
......
...@@ -238,6 +238,8 @@ int E_(OpenEncoder)( vlc_object_t *p_this ) ...@@ -238,6 +238,8 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
p_sys->p_buffer = NULL; p_sys->p_buffer = NULL;
p_sys->p_context = p_context = avcodec_alloc_context(); 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 */ /* Set CPU capabilities */
p_context->dsp_mask = 0; p_context->dsp_mask = 0;
......
...@@ -240,6 +240,7 @@ static int OpenDecoder( vlc_object_t *p_this ) ...@@ -240,6 +240,7 @@ static int OpenDecoder( vlc_object_t *p_this )
/* *** get a p_context *** */ /* *** get a p_context *** */
p_context = avcodec_alloc_context(); p_context = avcodec_alloc_context();
p_context->debug = config_GetInt( p_dec, "ffmpeg-debug" ); p_context->debug = config_GetInt( p_dec, "ffmpeg-debug" );
p_context->opaque = (void *)p_this;
/* Set CPU capabilities */ /* Set CPU capabilities */
p_context->dsp_mask = 0; p_context->dsp_mask = 0;
...@@ -325,6 +326,46 @@ static void CloseDecoder( vlc_object_t *p_this ) ...@@ -325,6 +326,46 @@ static void CloseDecoder( vlc_object_t *p_this )
/***************************************************************************** /*****************************************************************************
* local Functions * 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 ) void E_(InitLibavcodec)( vlc_object_t *p_object )
{ {
static int b_ffmpeginit = 0; static int b_ffmpeginit = 0;
...@@ -338,6 +379,7 @@ void E_(InitLibavcodec)( vlc_object_t *p_object ) ...@@ -338,6 +379,7 @@ void E_(InitLibavcodec)( vlc_object_t *p_object )
{ {
avcodec_init(); avcodec_init();
avcodec_register_all(); avcodec_register_all();
av_log_set_callback( LibavcodecCallback );
b_ffmpeginit = 1; b_ffmpeginit = 1;
msg_Dbg( p_object, "libavcodec initialized (interface %d )", msg_Dbg( p_object, "libavcodec initialized (interface %d )",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment