/***************************************************************************** * Convert *****************************************************************************/ static block_t *Convert( filter_t *p_filter, block_t *p_block ) { block_t *p_out; int i_out_size; if( !p_block || !p_block->i_nb_samples ) { if( p_block ) block_Release( p_block ); return NULL; } i_out_size = p_block->i_nb_samples * p_filter->p_sys->i_bitspersample/8 * aout_FormatNbChannels( &(p_filter->fmt_out.audio) ); p_out = block_Alloc( i_out_size ); if( !p_out ) { msg_Warn( p_filter, "can't get output buffer" ); block_Release( p_block ); return NULL; } p_out->i_nb_samples = (p_block->i_nb_samples / p_filter->p_sys->i_nb_channels) * aout_FormatNbChannels( &(p_filter->fmt_out.audio) ); #if 0 unsigned int i_in_size = in_buf.i_nb_samples * (p_filter->p_sys->i_bitspersample/8) * aout_FormatNbChannels( &(p_filter->fmt_in.audio) ); if( (in_buf.i_buffer != i_in_size) && ((i_in_size % 32) != 0) ) /* is it word aligned?? */ { msg_Err( p_filter, "input buffer is not word aligned" ); /* Fix output buffer to be word aligned */ } #endif memset( p_out->p_buffer, 0, i_out_size ); if( p_filter->p_sys->b_downmix ) { stereo2mono_downmix( p_filter, p_block, p_out ); mono( p_filter, p_out, p_block ); } else { stereo_to_mono( p_filter, p_out, p_block ); } block_Release( p_block ); return p_out; }
/***************************************************************************** * Convert *****************************************************************************/ static block_t *Convert( filter_t *p_filter, block_t *p_block ) { aout_filter_t aout_filter; aout_buffer_t in_buf, out_buf; block_t *p_out = NULL; unsigned int i_samples; int i_out_size; if( !p_block || !p_block->i_samples ) { if( p_block ) block_Release( p_block ); return NULL; } i_out_size = p_block->i_samples * p_filter->p_sys->i_bitspersample/8 * aout_FormatNbChannels( &(p_filter->fmt_out.audio) ); p_out = p_filter->pf_audio_buffer_new( p_filter, i_out_size ); if( !p_out ) { msg_Warn( p_filter, "can't get output buffer" ); block_Release( p_block ); return NULL; } p_out->i_samples = (p_block->i_samples / p_filter->p_sys->i_nb_channels) * aout_FormatNbChannels( &(p_filter->fmt_out.audio) ); p_out->i_dts = p_block->i_dts; p_out->i_pts = p_block->i_pts; p_out->i_length = p_block->i_length; aout_filter.p_sys = (struct aout_filter_sys_t *)p_filter->p_sys; aout_filter.input = p_filter->fmt_in.audio; aout_filter.input.i_format = p_filter->fmt_in.i_codec; aout_filter.output = p_filter->fmt_out.audio; aout_filter.output.i_format = p_filter->fmt_out.i_codec; in_buf.p_buffer = p_block->p_buffer; in_buf.i_nb_bytes = p_block->i_buffer; in_buf.i_nb_samples = p_block->i_samples; #if 0 unsigned int i_in_size = in_buf.i_nb_samples * (p_filter->p_sys->i_bitspersample/8) * aout_FormatNbChannels( &(p_filter->fmt_in.audio) ); if( (in_buf.i_nb_bytes != i_in_size) && ((i_in_size % 32) != 0) ) /* is it word aligned?? */ { msg_Err( p_filter, "input buffer is not word aligned" ); /* Fix output buffer to be word aligned */ } #endif out_buf.p_buffer = p_out->p_buffer; out_buf.i_nb_bytes = p_out->i_buffer; out_buf.i_nb_samples = p_out->i_samples; memset( p_out->p_buffer, 0, i_out_size ); if( p_filter->p_sys->b_downmix ) { stereo2mono_downmix( &aout_filter, &in_buf, &out_buf ); i_samples = mono( &aout_filter, &out_buf, &in_buf ); } else { i_samples = stereo_to_mono( &aout_filter, &out_buf, &in_buf ); } p_out->i_buffer = out_buf.i_nb_bytes; p_out->i_samples = out_buf.i_nb_samples; block_Release( p_block ); return p_out; }