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
*****************************************************************************/
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 ) );
......
......@@ -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;
......
......@@ -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 )",
......
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