[vlmc-devel] [PATCH] MLTBackend: Add MLT service info in logHandler
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Fri Jul 29 18:52:50 CEST 2016
On 07/29/2016 06:48 PM, Pawel Golinski wrote:
> ---
> src/Backend/MLT/MLTBackend.cpp | 33 +++++++++++++++++++++++++++++++--
> 1 file changed, 31 insertions(+), 2 deletions(-)
>
> diff --git a/src/Backend/MLT/MLTBackend.cpp b/src/Backend/MLT/MLTBackend.cpp
> index 3d39930..f49ba0d 100644
> --- a/src/Backend/MLT/MLTBackend.cpp
> +++ b/src/Backend/MLT/MLTBackend.cpp
> @@ -28,10 +28,12 @@
> #include <mlt++/MltRepository.h>
>
> #include <mlt/framework/mlt_log.h>
> +#include <mlt/framework/mlt_service.h>
>
> #include "MLTFilter.h"
>
> #include <mutex>
> +#include <sstream>
>
> #include "Tools/VlmcDebug.h"
> #include "vlmc.h"
> @@ -101,8 +103,28 @@ void
> MLTBackend::setLogHandler( IBackend::LogHandler logHandler )
> {
> staticLogHandler = logHandler;
> - mlt_log_set_callback( []( void*, int level, const char* format, va_list vl )
> + mlt_log_set_callback( []( void* ptr, int level, const char* format, va_list vl )
> {
> + std::string prefix_str;
> +
> + Mlt::Properties properties( mlt_service_properties( ( mlt_service )ptr ) );
> +
> + if ( properties.is_valid() )
> + {
> + const char *mlt_type = properties.get( "mlt_type" );
> + const char *mlt_service = properties.get( "mlt_service" );
> + std::ostringstream os;
> +
> + if ( mlt_service && mlt_type )
> + os << "[" << mlt_type << " " << mlt_service << "] ";
> + else if ( mlt_type )
> + {
> + os << "[" << mlt_type << " " << ptr << "] ";
> + }
> +
> + prefix_str = os.str();
> + }
> +
> char* buffer = nullptr;
>
> auto lvl = IBackend::None;
> @@ -118,7 +140,14 @@ MLTBackend::setLogHandler( IBackend::LogHandler logHandler )
> if ( vasprintf( &buffer, format, vl ) < 0 )
> return;
>
> - staticLogHandler( lvl, buffer );
> + std::string msg_str;
Now you don't need to have msg_str no? It seems ok to base yourself on
prefix_str directly
> + msg_str += prefix_str;
> + if ( buffer )
> + msg_str += buffer;
> +
> + if ( msg_str.compare( "" ) )
!msg_str.empty() seems clearer
> + staticLogHandler( lvl, msg_str.c_str() );
> +
> free( buffer );
> } );
> }
>
That should be the last nagging I had :)
Thanks for the patch!
More information about the Vlmc-devel
mailing list