+void aout_ChannelExtract( void *p_dst, int i_dst_channels,
+ const void *p_src, int i_src_channels,
+ int i_sample_count, const int *pi_selection, int i_bits_per_sample )
+{
+ /* It does not work in place */
+ assert( p_dst != p_src );
+
+ /* Force the compiler to inline for the specific cases so it can optimize */
+ if( i_bits_per_sample == 8 )
+ ExtractChannel( p_dst, i_dst_channels, p_src, i_src_channels, i_sample_count, pi_selection, 1 );
+ else if( i_bits_per_sample == 16 )
+ ExtractChannel( p_dst, i_dst_channels, p_src, i_src_channels, i_sample_count, pi_selection, 2 );
+ else if( i_bits_per_sample == 24 )
+ ExtractChannel( p_dst, i_dst_channels, p_src, i_src_channels, i_sample_count, pi_selection, 3 );
+ else if( i_bits_per_sample == 32 )
+ ExtractChannel( p_dst, i_dst_channels, p_src, i_src_channels, i_sample_count, pi_selection, 4 );
+ else if( i_bits_per_sample == 64 )
+ ExtractChannel( p_dst, i_dst_channels, p_src, i_src_channels, i_sample_count, pi_selection, 8 );
+}
+
+bool aout_CheckChannelExtraction( int *pi_selection,
+ uint32_t *pi_layout, int *pi_channels,
+ const uint32_t pi_order_dst[AOUT_CHAN_MAX],
+ const uint32_t *pi_order_src, int i_channels )