-/*****************************************************************************
- * Resample
- *****************************************************************************/
-static block_t *Resample( filter_t *p_filter, block_t *p_block )
-{
- aout_filter_t aout_filter;
- aout_buffer_t in_buf, out_buf;
- block_t *p_out;
- int i_out_size;
- int i_bytes_per_frame;
-
- if( !p_block || !p_block->i_nb_samples )
- {
- if( p_block )
- block_Release( p_block );
- return NULL;
- }
-
- i_bytes_per_frame = p_filter->fmt_out.audio.i_channels *
- p_filter->fmt_out.audio.i_bitspersample / 8;
-
- i_out_size = i_bytes_per_frame * ( 1 + ( p_block->i_nb_samples *
- p_filter->fmt_out.audio.i_rate /
- p_filter->fmt_in.audio.i_rate) ) +
- p_filter->p_sys->i_buf_size;
-
- 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_nb_samples = i_out_size / i_bytes_per_frame;
- 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.fmt_in.audio = p_filter->fmt_in.audio;
- aout_filter.fmt_in.audio.i_bytes_per_frame = p_filter->fmt_in.audio.i_channels *
- p_filter->fmt_in.audio.i_bitspersample / 8;
- aout_filter.fmt_out.audio = p_filter->fmt_out.audio;
- aout_filter.fmt_out.audio.i_bytes_per_frame = p_filter->fmt_out.audio.i_channels *
- p_filter->fmt_out.audio.i_bitspersample / 8;
-
- in_buf.p_buffer = p_block->p_buffer;
- in_buf.i_buffer = p_block->i_buffer;
- in_buf.i_nb_samples = p_block->i_nb_samples;
- out_buf.p_buffer = p_out->p_buffer;
- out_buf.i_buffer = p_out->i_buffer;
- out_buf.i_nb_samples = p_out->i_nb_samples;
-
- DoWork( (aout_instance_t *)p_filter, &aout_filter, &in_buf, &out_buf );
-
- block_Release( p_block );
-
- p_out->i_buffer = out_buf.i_buffer;
- p_out->i_nb_samples = out_buf.i_nb_samples;
-
- return p_out;
-}
-