From 69b165935b1cb68695f7b22fd051ca3406e0086b Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Tue, 25 Aug 2009 22:42:40 +0200 Subject: [PATCH] Updated "audio mixer" to new aout_mixer_t module API. --- modules/audio_mixer/float32.c | 41 ++++++++++++++++------------------- modules/audio_mixer/spdif.c | 30 ++++++++++++------------- modules/audio_mixer/trivial.c | 36 +++++++++++++++--------------- 3 files changed, 52 insertions(+), 55 deletions(-) diff --git a/modules/audio_mixer/float32.c b/modules/audio_mixer/float32.c index 474dd520a6..f35a6a5ea5 100644 --- a/modules/audio_mixer/float32.c +++ b/modules/audio_mixer/float32.c @@ -39,7 +39,7 @@ *****************************************************************************/ static int Create ( vlc_object_t * ); -static void DoWork ( aout_instance_t *, aout_buffer_t * ); +static void DoWork ( aout_mixer_t *, aout_buffer_t * ); /***************************************************************************** * Module descriptor @@ -57,27 +57,25 @@ vlc_module_end () *****************************************************************************/ static int Create( vlc_object_t *p_this ) { - aout_instance_t * p_aout = (aout_instance_t *)p_this; + aout_mixer_t * p_mixer = (aout_mixer_t *)p_this; - if ( p_aout->mixer.mixer.i_format != VLC_CODEC_FL32 ) - { + if ( p_mixer->fmt.i_format != VLC_CODEC_FL32 ) return -1; - } /* Use the trivial mixer when we can */ - if ( p_aout->i_nb_inputs == 1 && p_aout->mixer.f_multiplier == 1.0 ) + if ( p_mixer->input_count == 1 && p_mixer->multiplier == 1.0 ) { int i; - for( i = 0; i < p_aout->i_nb_inputs; i++ ) + for( i = 0; i < p_mixer->input_count; i++ ) { - if( p_aout->pp_inputs[i]->f_multiplier != 1.0 ) + if( p_mixer->input[i]->multiplier != 1.0 ) break; } - if( i >= p_aout->i_nb_inputs ) + if( i >= p_mixer->input_count ) return -1; } - p_aout->mixer.pf_do_work = DoWork; + p_mixer->mix = DoWork; return 0; } @@ -117,23 +115,23 @@ static void MeanWords( float * p_out, const float * p_in, size_t i_nb_words, * Terminology : in this function a word designates a single float32, eg. * a stereo sample is consituted of two words. *****************************************************************************/ -static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) +static void DoWork( aout_mixer_t * p_mixer, aout_buffer_t * p_buffer ) { - const int i_nb_inputs = p_aout->i_nb_inputs; - const float f_multiplier_global = p_aout->mixer.f_multiplier; - const int i_nb_channels = aout_FormatNbChannels( &p_aout->mixer.mixer ); + const int i_nb_inputs = p_mixer->input_count; + const float f_multiplier_global = p_mixer->multiplier; + const int i_nb_channels = aout_FormatNbChannels( &p_mixer->fmt ); int i_input; for ( i_input = 0; i_input < i_nb_inputs; i_input++ ) { int i_nb_words = p_buffer->i_nb_samples * i_nb_channels; - aout_input_t * p_input = p_aout->pp_inputs[i_input]; - float f_multiplier = f_multiplier_global * p_input->f_multiplier; + aout_mixer_input_t * p_input = p_mixer->input[i_input]; + float f_multiplier = f_multiplier_global * p_input->multiplier; float * p_out = (float *)p_buffer->p_buffer; - float * p_in = (float *)p_input->p_first_byte_to_mix; + float * p_in = (float *)p_input->begin; - if ( p_input->b_error || p_input->b_paused ) + if ( p_input->is_invalid ) continue; for ( ; ; ) @@ -165,11 +163,11 @@ static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) p_out += i_available_words; /* Next buffer */ - p_old_buffer = aout_FifoPop( p_aout, &p_input->fifo ); + p_old_buffer = aout_FifoPop( NULL, &p_input->fifo ); aout_BufferFree( p_old_buffer ); if ( p_input->fifo.p_first == NULL ) { - msg_Err( p_aout, "internal amix error" ); + msg_Err( p_mixer, "internal amix error" ); return; } p_in = (float *)p_input->fifo.p_first->p_buffer; @@ -189,8 +187,7 @@ static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) f_multiplier ); } } - p_input->p_first_byte_to_mix = (void *)(p_in - + i_nb_words); + p_input->begin = (void *)(p_in + i_nb_words); break; } } diff --git a/modules/audio_mixer/spdif.c b/modules/audio_mixer/spdif.c index 9e935428c8..4005f831b5 100644 --- a/modules/audio_mixer/spdif.c +++ b/modules/audio_mixer/spdif.c @@ -38,7 +38,7 @@ *****************************************************************************/ static int Create ( vlc_object_t * ); -static void DoWork ( aout_instance_t *, aout_buffer_t * ); +static void DoWork ( aout_mixer_t *, aout_buffer_t * ); /***************************************************************************** * Module descriptor @@ -56,17 +56,17 @@ vlc_module_end () *****************************************************************************/ static int Create( vlc_object_t *p_this ) { - aout_instance_t * p_aout = (aout_instance_t *)p_this; + aout_mixer_t *p_mixer = (aout_mixer_t *)p_this; - if ( !AOUT_FMT_NON_LINEAR(&p_aout->mixer.mixer) ) + if ( !AOUT_FMT_NON_LINEAR(&p_mixer->fmt) ) { return -1; } - p_aout->mixer.pf_do_work = DoWork; + p_mixer->mix = DoWork; /* This is a bit kludgy - do not ask for a new buffer, since the one * provided by the first input will be good enough. */ - p_aout->mixer.output_alloc.i_alloc_type = AOUT_ALLOC_NONE; + p_mixer->allocation.i_alloc_type = AOUT_ALLOC_NONE; return 0; } @@ -74,25 +74,25 @@ static int Create( vlc_object_t *p_this ) /***************************************************************************** * DoWork: mix a new output buffer - this does nothing, indeed *****************************************************************************/ -static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) +static void DoWork( aout_mixer_t * p_mixer, aout_buffer_t * p_buffer ) { VLC_UNUSED( p_buffer ); - int i = 0; - aout_input_t * p_input = p_aout->pp_inputs[i]; - while ( p_input->b_error || p_input->b_paused ) - p_input = p_aout->pp_inputs[++i]; + unsigned i = 0; + aout_mixer_input_t * p_input = p_mixer->input[i]; + while ( p_input->is_invalid ) + p_input = p_mixer->input[++i]; - aout_buffer_t * p_old_buffer = aout_FifoPop( p_aout, &p_input->fifo ); + aout_buffer_t * p_old_buffer = aout_FifoPop( NULL, &p_input->fifo ); aout_BufferFree( p_old_buffer ); /* Empty other FIFOs to avoid a memory leak. */ - for ( i++; i < p_aout->i_nb_inputs; i++ ) + for ( i++; i < p_mixer->input_count; i++ ) { - p_input = p_aout->pp_inputs[i]; - if ( p_input->b_error || p_input->b_paused ) + p_input = p_mixer->input[i]; + if ( p_input->is_invalid ) continue; - while ((p_old_buffer = aout_FifoPop( p_aout, &p_input->fifo ))) + while ((p_old_buffer = aout_FifoPop( NULL, &p_input->fifo ))) aout_BufferFree( p_old_buffer ); } } diff --git a/modules/audio_mixer/trivial.c b/modules/audio_mixer/trivial.c index 3cdd04c16c..b77e1d9e78 100644 --- a/modules/audio_mixer/trivial.c +++ b/modules/audio_mixer/trivial.c @@ -39,7 +39,7 @@ *****************************************************************************/ static int Create ( vlc_object_t * ); -static void DoWork ( aout_instance_t *, aout_buffer_t * ); +static void DoWork ( aout_mixer_t *, aout_buffer_t * ); /***************************************************************************** * Module descriptor @@ -57,15 +57,15 @@ vlc_module_end () *****************************************************************************/ static int Create( vlc_object_t *p_this ) { - aout_instance_t * p_aout = (aout_instance_t *)p_this; + aout_mixer_t *p_mixer = (aout_mixer_t *)p_this; - if ( p_aout->mixer.mixer.i_format != VLC_CODEC_FL32 - && p_aout->mixer.mixer.i_format != VLC_CODEC_FI32 ) + if ( p_mixer->fmt.i_format != VLC_CODEC_FL32 + && p_mixer->fmt.i_format != VLC_CODEC_FI32 ) { return -1; } - p_aout->mixer.pf_do_work = DoWork; + p_mixer->mix = DoWork; return 0; } @@ -73,23 +73,23 @@ static int Create( vlc_object_t *p_this ) /***************************************************************************** * DoWork: mix a new output buffer *****************************************************************************/ -static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) +static void DoWork( aout_mixer_t *p_mixer, aout_buffer_t * p_buffer ) { - int i = 0; - aout_input_t * p_input = p_aout->pp_inputs[i]; - int i_nb_channels = aout_FormatNbChannels( &p_aout->mixer.mixer ); + unsigned i = 0; + aout_mixer_input_t * p_input = p_mixer->input[i]; + int i_nb_channels = aout_FormatNbChannels( &p_mixer->fmt ); int i_nb_bytes = p_buffer->i_nb_samples * sizeof(int32_t) * i_nb_channels; uint8_t * p_in; uint8_t * p_out; - while ( p_input->b_error || p_input->b_paused ) + while ( p_input->is_invalid ) { - p_input = p_aout->pp_inputs[++i]; + p_input = p_mixer->input[++i]; /* This can't crash because if no input has b_error == 0, the * audio mixer cannot run and we can't be here. */ } - p_in = p_input->p_first_byte_to_mix; + p_in = p_input->begin; p_out = p_buffer->p_buffer; for ( ; ; ) @@ -109,11 +109,11 @@ static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) p_out += i_available_bytes; /* Next buffer */ - p_old_buffer = aout_FifoPop( p_aout, &p_input->fifo ); + p_old_buffer = aout_FifoPop( NULL, &p_input->fifo ); aout_BufferFree( p_old_buffer ); if ( p_input->fifo.p_first == NULL ) { - msg_Err( p_aout, "internal amix error" ); + msg_Err( p_mixer, "internal amix error" ); return; } p_in = p_input->fifo.p_first->p_buffer; @@ -121,19 +121,19 @@ static void DoWork( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) else { vlc_memcpy( p_out, p_in, i_nb_bytes ); - p_input->p_first_byte_to_mix = p_in + i_nb_bytes; + p_input->begin = p_in + i_nb_bytes; break; } } /* Empty other FIFOs to avoid a memory leak. */ - for ( i++; i < p_aout->i_nb_inputs; i++ ) + for ( i++; i < p_mixer->input_count; i++ ) { aout_fifo_t * p_fifo; aout_buffer_t * p_deleted; - p_input = p_aout->pp_inputs[i]; - if ( p_input->b_error || p_input->b_paused ) + p_input = p_mixer->input[i]; + if ( p_input->is_invalid ) continue; p_fifo = &p_input->fifo; p_deleted = p_fifo->p_first; -- 2.39.2