- ptrdiff_t i_available_bytes = (p_input->fifo.p_first->p_buffer
- - (byte_t *)p_in)
- + p_input->fifo.p_first->i_nb_samples
- * sizeof(u32)
- * p_input->input.i_channels;
- int i_available_samples = i_available_bytes
- / p_input->input.i_channels
- / sizeof(u32);
-
- if ( i_available_samples < i_nb_samples )
- {
- aout_buffer_t * p_old_buffer;
-
- if ( i_available_samples > 0 )
- SparseCopy( p_out, p_in, i_available_samples,
- p_aout->mixer.output.i_channels,
- p_input->input.i_channels );
- i_nb_samples -= i_available_samples;
- p_out += i_available_samples * p_aout->mixer.output.i_channels;
-
- /* Next buffer */
- p_old_buffer = aout_FifoPop( p_aout, &p_input->fifo );
- aout_BufferFree( p_old_buffer );
- if ( p_input->fifo.p_first == NULL )
- {
- msg_Err( p_aout, "internal amix error" );
- return;
- }
- p_in = (u32 *)p_input->fifo.p_first->p_buffer;
- }
- else
- {
- SparseCopy( p_out, p_in, i_nb_samples,
- p_aout->mixer.output.i_channels,
- p_input->input.i_channels );
- p_input->p_first_byte_to_mix = (byte_t *)p_in
- + i_nb_samples * p_input->input.i_channels
- * sizeof(u32);
- break;
- }