1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
/**
* \file mlt_log.c
* \brief logging functions
*
* Copyright (c) 2003 Michel Bardiaux
*
* This file was a part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "mlt_log.h"
#include "mlt_service.h"
#include <string.h>
static int log_level = MLT_LOG_WARNING;
void default_callback( void* ptr, int level, const char* fmt, va_list vl )
{
static int print_prefix = 1;
mlt_properties properties = ptr ? MLT_SERVICE_PROPERTIES( ( mlt_service )ptr ) : NULL;
if ( level > log_level )
return;
if ( print_prefix && properties )
{
char *mlt_type = mlt_properties_get( properties, "mlt_type" );
char *mlt_service = mlt_properties_get( properties, "mlt_service" );
char *resource = mlt_properties_get( properties, "resource" );
if ( !( resource && *resource && resource[0] == '<' && resource[ strlen(resource) - 1 ] == '>' ) )
mlt_type = mlt_properties_get( properties, "mlt_type" );
if ( mlt_service )
fprintf( stderr, "[%s %s] ", mlt_type, mlt_service );
else
fprintf( stderr, "[%s %p] ", mlt_type, ptr );
if ( resource )
fprintf( stderr, "%s\n ", resource );
}
print_prefix = strstr( fmt, "\n" ) != NULL;
vfprintf( stderr, fmt, vl );
}
static void ( *callback )( void*, int, const char*, va_list ) = default_callback;
void mlt_log( void* service, int level, const char *fmt, ...)
{
va_list vl;
va_start( vl, fmt );
mlt_vlog( service, level, fmt, vl );
va_end( vl );
}
void mlt_vlog( void* service, int level, const char *fmt, va_list vl )
{
if ( callback ) callback( service, level, fmt, vl );
}
int mlt_log_get_level( void )
{
return log_level;
}
void mlt_log_set_level( int level )
{
log_level = level;
}
void mlt_log_set_callback( void (*new_callback)( void*, int, const char*, va_list ) )
{
callback = new_callback;
}
|