X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Faudio_output%2Foutput.c;h=b799855b43db43ac012c2ce0837f088aac515b64;hb=e0c708fec3e8a001994174b0d647f4ac34cd9e29;hp=c5106b3dd05856314c71981e05ead909551dd6f9;hpb=fe087a38282e93addb25fa9598393e40ea233b09;p=vlc diff --git a/src/audio_output/output.c b/src/audio_output/output.c index c5106b3dd0..b799855b43 100644 --- a/src/audio_output/output.c +++ b/src/audio_output/output.c @@ -18,18 +18,18 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* calloc(), malloc(), free() */ -#include - -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif -#include "audio_output.h" +#include +#include #include "aout_internal.h" /***************************************************************************** @@ -57,7 +57,7 @@ int aout_OutputNew( aout_instance_t * p_aout, p_aout->output.p_module = module_Need( p_aout, "audio output", "$aout", 0); if ( p_aout->output.p_module == NULL ) { - msg_Err( p_aout, "no suitable aout module" ); + msg_Err( p_aout, "no suitable audio output module" ); vlc_mutex_unlock( &p_aout->output_fifo_lock ); return -1; } @@ -156,7 +156,7 @@ int aout_OutputNew( aout_instance_t * p_aout, var_AddCallback( p_aout, "audio-channels", aout_ChannelsRestart, NULL ); } - val.b_bool = VLC_TRUE; + val.b_bool = true; var_Set( p_aout, "intf-change", val ); aout_FormatPrepare( &p_aout->output.output ); @@ -176,7 +176,7 @@ int aout_OutputNew( aout_instance_t * p_aout, { /* Non-S/PDIF mixer only deals with float32 or fixed32. */ p_aout->mixer.mixer.i_format - = (p_aout->p_libvlc->i_cpu & CPU_CAPABILITY_FPU) ? + = (vlc_CPU() & CPU_CAPABILITY_FPU) ? VLC_FOURCC('f','l','3','2') : VLC_FOURCC('f','i','3','2'); aout_FormatPrepare( &p_aout->mixer.mixer ); @@ -186,15 +186,16 @@ int aout_OutputNew( aout_instance_t * p_aout, p_aout->mixer.mixer.i_format = p_format->i_format; } - aout_FormatPrint( p_aout, "mixer", &p_aout->output.output ); + aout_FormatPrint( p_aout, "mixer", &p_aout->mixer.mixer ); /* Create filters. */ + p_aout->output.i_nb_filters = 0; if ( aout_FiltersCreatePipeline( p_aout, p_aout->output.pp_filters, &p_aout->output.i_nb_filters, &p_aout->mixer.mixer, &p_aout->output.output ) < 0 ) { - msg_Err( p_aout, "couldn't set an output pipeline" ); + msg_Err( p_aout, "couldn't create audio output pipeline" ); module_Unneed( p_aout, p_aout->output.p_module ); return -1; } @@ -230,9 +231,12 @@ void aout_OutputDelete( aout_instance_t * p_aout ) aout_FiltersDestroyPipeline( p_aout, p_aout->output.pp_filters, p_aout->output.i_nb_filters ); + + vlc_mutex_lock( &p_aout->output_fifo_lock ); aout_FifoDestroy( p_aout, &p_aout->output.fifo ); + vlc_mutex_unlock( &p_aout->output_fifo_lock ); - p_aout->output.b_error = VLC_TRUE; + p_aout->output.b_error = true; } /***************************************************************************** @@ -268,7 +272,7 @@ void aout_OutputPlay( aout_instance_t * p_aout, aout_buffer_t * p_buffer ) *****************************************************************************/ aout_buffer_t * aout_OutputNextBuffer( aout_instance_t * p_aout, mtime_t start_date, - vlc_bool_t b_can_sleek ) + bool b_can_sleek ) { aout_buffer_t * p_buffer; @@ -282,8 +286,8 @@ aout_buffer_t * aout_OutputNextBuffer( aout_instance_t * p_aout, while ( p_buffer && p_buffer->start_date < (b_can_sleek ? start_date : mdate()) - AOUT_PTS_TOLERANCE ) { - msg_Dbg( p_aout, "audio output is too slow ("I64Fd"), " - "trashing "I64Fd"us", mdate() - p_buffer->start_date, + msg_Dbg( p_aout, "audio output is too slow (%"PRId64"), " + "trashing %"PRId64"us", mdate() - p_buffer->start_date, p_buffer->end_date - p_buffer->start_date ); p_buffer = p_buffer->p_next; aout_BufferFree( p_aout->output.fifo.p_first ); @@ -295,7 +299,7 @@ aout_buffer_t * aout_OutputNextBuffer( aout_instance_t * p_aout, p_aout->output.fifo.pp_last = &p_aout->output.fifo.p_first; #if 0 /* This is bad because the audio output might just be trying to fill - * in it's internal buffers. And anyway, it's up to the audio output + * in its internal buffers. And anyway, it's up to the audio output * to deal with this kind of starvation. */ /* Set date to 0, to allow the mixer to send a new buffer ASAP */ @@ -322,10 +326,12 @@ aout_buffer_t * aout_OutputNextBuffer( aout_instance_t * p_aout, * --Gibalou */ { + const mtime_t i_delta = p_buffer->start_date - start_date; vlc_mutex_unlock( &p_aout->output_fifo_lock ); + if ( !p_aout->output.b_starving ) - msg_Dbg( p_aout, "audio output is starving ("I64Fd"), " - "playing silence", p_buffer->start_date - start_date ); + msg_Dbg( p_aout, "audio output is starving (%"PRId64"), " + "playing silence", i_delta ); p_aout->output.b_starving = 1; return NULL; } @@ -340,7 +346,7 @@ aout_buffer_t * aout_OutputNextBuffer( aout_instance_t * p_aout, int i; mtime_t difference = start_date - p_buffer->start_date; msg_Warn( p_aout, "output date isn't PTS date, requesting " - "resampling ("I64Fd")", difference ); + "resampling (%"PRId64")", difference ); vlc_mutex_lock( &p_aout->input_fifos_lock ); for ( i = 0; i < p_aout->i_nb_inputs; i++ )