X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Faudio_output%2Ffilters.c;h=5a2ffad6cb18c93c95f80a1fab60968b60e65343;hb=cb02b264b58150bf45d0f68019ac32c02d2b5f1e;hp=62a5800277bc7a2a93bbe8d062a65a4b168577e6;hpb=89298c16e4964b9033ab4cb6290a953775e92c76;p=vlc diff --git a/src/audio_output/filters.c b/src/audio_output/filters.c index 62a5800277..5a2ffad6cb 100644 --- a/src/audio_output/filters.c +++ b/src/audio_output/filters.c @@ -1,7 +1,7 @@ /***************************************************************************** * filters.c : audio output filters management ***************************************************************************** - * Copyright (C) 2002-2006 the VideoLAN team + * Copyright (C) 2002-2007 the VideoLAN team * $Id$ * * Authors: Christophe Massiot @@ -24,17 +24,18 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* calloc(), malloc(), free() */ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif -#include -#include +#include +#include #ifdef HAVE_ALLOCA_H # include #endif -#include "audio_output.h" +#include #include "aout_internal.h" /***************************************************************************** @@ -57,11 +58,11 @@ static aout_filter_t * FindFilter( aout_instance_t * p_aout, if ( p_filter->p_module == NULL ) { vlc_object_detach( p_filter ); - vlc_object_destroy( p_filter ); + vlc_object_release( p_filter ); return NULL; } - p_filter->b_continuity = VLC_FALSE; + p_filter->b_continuity = false; return p_filter; } @@ -79,10 +80,10 @@ static int SplitConversion( const audio_sample_format_t * p_input_format, const audio_sample_format_t * p_output_format, audio_sample_format_t * p_middle_format ) { - vlc_bool_t b_format = + bool b_format = (p_input_format->i_format != p_output_format->i_format); - vlc_bool_t b_rate = (p_input_format->i_rate != p_output_format->i_rate); - vlc_bool_t b_channels = + bool b_rate = (p_input_format->i_rate != p_output_format->i_rate); + bool b_channels = (p_input_format->i_physical_channels != p_output_format->i_physical_channels) || (p_input_format->i_original_channels @@ -121,7 +122,7 @@ static void ReleaseFilter( aout_filter_t * p_filter ) { module_Unneed( p_filter, p_filter->p_module ); vlc_object_detach( p_filter ); - vlc_object_destroy( p_filter ); + vlc_object_release( p_filter ); } /***************************************************************************** @@ -151,7 +152,7 @@ int aout_FiltersCreatePipeline( aout_instance_t * p_aout, if( *pi_nb_filters + 1 > AOUT_MAX_FILTERS ) { msg_Err( p_aout, "max filter reached (%d)", AOUT_MAX_FILTERS ); - intf_UserFatal( p_aout, VLC_FALSE, _("Audio filtering failed"), + intf_UserFatal( p_aout, false, _("Audio filtering failed"), _("The maximum number of filters (%d) was reached."), AOUT_MAX_FILTERS ); return -1; @@ -198,7 +199,7 @@ int aout_FiltersCreatePipeline( aout_instance_t * p_aout, { ReleaseFilter( pp_filters[0] ); msg_Err( p_aout, "max filter reached (%d)", AOUT_MAX_FILTERS ); - intf_UserFatal( p_aout, VLC_FALSE, _("Audio filtering failed"), + intf_UserFatal( p_aout, false, _("Audio filtering failed"), _("The maximum number of filters (%d) was reached."), AOUT_MAX_FILTERS ); return -1; @@ -221,7 +222,7 @@ int aout_FiltersCreatePipeline( aout_instance_t * p_aout, { ReleaseFilter( pp_filters[0] ); msg_Err( p_aout, "max filter reached (%d)", AOUT_MAX_FILTERS ); - intf_UserFatal( p_aout, VLC_FALSE, _("Audio filtering failed"), + intf_UserFatal( p_aout, false, _("Audio filtering failed"), _("The maximum number of filters (%d) was reached."), AOUT_MAX_FILTERS ); return -1; @@ -266,12 +267,13 @@ void aout_FiltersDestroyPipeline( aout_instance_t * p_aout, int i_nb_filters ) { int i; + (void)p_aout; for ( i = 0; i < i_nb_filters; i++ ) { module_Unneed( pp_filters[i], pp_filters[i]->p_module ); vlc_object_detach( pp_filters[i] ); - vlc_object_destroy( pp_filters[i] ); + vlc_object_release( pp_filters[i] ); } } @@ -292,10 +294,10 @@ void aout_FiltersHintBuffers( aout_instance_t * p_aout, aout_filter_t * p_filter = pp_filters[i]; int i_output_size = p_filter->output.i_bytes_per_frame - * p_filter->output.i_rate + * p_filter->output.i_rate * AOUT_MAX_INPUT_RATE / p_filter->output.i_frame_length; int i_input_size = p_filter->input.i_bytes_per_frame - * p_filter->input.i_rate + * p_filter->input.i_rate * AOUT_MAX_INPUT_RATE / p_filter->input.i_frame_length; p_first_alloc->i_bytes_per_sec = __MAX( p_first_alloc->i_bytes_per_sec, @@ -341,10 +343,7 @@ void aout_FiltersPlay( aout_instance_t * p_aout, * 1000000 / p_filter->input.i_rate, *pp_input_buffer, p_output_buffer ); if ( p_output_buffer == NULL ) - { - msg_Err( p_aout, "out of memory" ); return; - } /* Please note that p_output_buffer->i_nb_samples & i_nb_bytes * shall be set by the filter plug-in. */ @@ -356,6 +355,9 @@ void aout_FiltersPlay( aout_instance_t * p_aout, aout_BufferFree( *pp_input_buffer ); *pp_input_buffer = p_output_buffer; } + + if( p_output_buffer->i_nb_samples <= 0 ) + break; } }