X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Faudio_output%2Finput.c;h=dd279cb76171ca1e01abd1dd612844da71741a09;hb=4d54fb133e9bb41ce33c60156cf767c53b1aca25;hp=728f0f857972c44023da0fa5cb7f8477a3851a1d;hpb=a087b40218aa408ea501741904c80553d7381b39;p=vlc diff --git a/src/audio_output/input.c b/src/audio_output/input.c index 728f0f8579..dd279cb761 100644 --- a/src/audio_output/input.c +++ b/src/audio_output/input.c @@ -42,6 +42,7 @@ #include /* for vout_Request */ #include +#include #include #include "aout_internal.h" @@ -248,7 +249,7 @@ int aout_InputNew( aout_instance_t * p_aout, aout_input_t * p_input, const aout_ while( psz_parser && *psz_parser ) { - aout_filter_t * p_filter = NULL; + filter_t * p_filter = NULL; if( p_input->i_nb_filters >= AOUT_MAX_FILTERS ) { @@ -290,14 +291,16 @@ int aout_InputNew( aout_instance_t * p_aout, aout_input_t * p_input, const aout_ /* request format */ memcpy( &p_filter->fmt_in.audio, &chain_output_format, sizeof(audio_sample_format_t) ); + p_filter->fmt_in.i_codec = chain_output_format.i_format; memcpy( &p_filter->fmt_out.audio, &chain_output_format, sizeof(audio_sample_format_t) ); - + p_filter->fmt_out.i_codec = chain_output_format.i_format; + p_filter->pf_audio_buffer_new = aout_FilterBufferNew; /* try to find the requested filter */ if( i_visual == 2 ) /* this can only be a visualization module */ { - p_filter->p_module = module_need( p_filter, "visualization", + p_filter->p_module = module_need( p_filter, "visualization2", psz_parser, true ); } else /* this can be a audio filter module as well as a visualization module */ @@ -327,7 +330,7 @@ int aout_InputNew( aout_instance_t * p_aout, aout_input_t * p_input, const aout_ memcpy( &p_filter->fmt_out.audio, &chain_output_format, sizeof(audio_sample_format_t) ); p_filter->p_module = module_need( p_filter, - "visualization", + "visualization2", psz_parser, true ); } } @@ -543,6 +546,8 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input, /* Run pre-filters. */ aout_FiltersPlay( p_aout, p_input->pp_filters, p_input->i_nb_filters, &p_buffer ); + if( !p_buffer ) + return 0; /* Actually run the resampler now. */ if ( p_input->i_nb_resamplers > 0 ) @@ -553,9 +558,11 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input, &p_buffer ); } + if( !p_buffer ) + return 0; if( p_buffer->i_nb_samples <= 0 ) { - aout_BufferFree( p_buffer ); + block_Release( p_buffer ); return 0; } #endif @@ -639,8 +646,9 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input, #ifndef AOUT_PROCESS_BEFORE_CHEKS /* Run pre-filters. */ - aout_FiltersPlay( p_aout, p_input->pp_filters, p_input->i_nb_filters, - &p_buffer ); + aout_FiltersPlay( p_input->pp_filters, p_input->i_nb_filters, &p_buffer ); + if( !p_buffer ) + return 0; #endif /* Run the resampler if needed. @@ -729,14 +737,15 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input, /* Actually run the resampler now. */ if ( p_input->i_nb_resamplers > 0 ) { - aout_FiltersPlay( p_aout, p_input->pp_resamplers, - p_input->i_nb_resamplers, + aout_FiltersPlay( p_input->pp_resamplers, p_input->i_nb_resamplers, &p_buffer ); } + if( !p_buffer ) + return 0; if( p_buffer->i_nb_samples <= 0 ) { - aout_BufferFree( p_buffer ); + block_Release( p_buffer ); return 0; } #endif @@ -807,7 +816,7 @@ static vout_thread_t *RequestVout( void *p_private, return vout_Request( p_aout, p_vout, p_fmt ); } -vout_thread_t *aout_filter_RequestVout( aout_filter_t *p_filter, +vout_thread_t *aout_filter_RequestVout( filter_t *p_filter, vout_thread_t *p_vout, video_format_t *p_fmt ) { aout_input_t *p_input = p_filter->p_owner->p_input;