+ uint8_t p_tmp[AOUT_CHAN_MAX * 4];
+ int i, j;
+
+ if( i_bits_per_sample == 8 )
+ {
+ for( i = 0; i < i_buffer / i_channels; i++ )
+ {
+ for( j = 0; j < i_channels; j++ )
+ {
+ p_tmp[pi_chan_table[j]] = p_buf[j];
+ }
+
+ memcpy( p_buf, p_tmp, i_channels );
+ p_buf += i_channels;
+ }
+ }
+ else if( i_bits_per_sample == 16 )
+ {
+ for( i = 0; i < i_buffer / i_channels / 2; i++ )
+ {
+ for( j = 0; j < i_channels; j++ )
+ {
+ p_tmp[2 * pi_chan_table[j]] = p_buf[2 * j];
+ p_tmp[2 * pi_chan_table[j] + 1] = p_buf[2 * j + 1];
+ }
+
+ memcpy( p_buf, p_tmp, 2 * i_channels );
+ p_buf += 2 * i_channels;
+ }
+ }
+ else if( i_bits_per_sample == 24 )
+ {
+ for( i = 0; i < i_buffer / i_channels / 3; i++ )
+ {
+ for( j = 0; j < i_channels; j++ )
+ {
+ p_tmp[3 * pi_chan_table[j]] = p_buf[3 * j];
+ p_tmp[3 * pi_chan_table[j] + 1] = p_buf[3 * j + 1];
+ p_tmp[3 * pi_chan_table[j] + 2] = p_buf[3 * j + 2];
+ }
+
+ memcpy( p_buf, p_tmp, 3 * i_channels );
+ p_buf += 3 * i_channels;
+ }
+ }
+ else if( i_bits_per_sample == 32 )
+ {
+ for( i = 0; i < i_buffer / i_channels / 4; i++ )
+ {
+ for( j = 0; j < i_channels; j++ )
+ {
+ p_tmp[4 * pi_chan_table[j]] = p_buf[4 * j];
+ p_tmp[4 * pi_chan_table[j] + 1] = p_buf[4 * j + 1];
+ p_tmp[4 * pi_chan_table[j] + 2] = p_buf[4 * j + 2];
+ p_tmp[4 * pi_chan_table[j] + 3] = p_buf[4 * j + 3];
+ }
+
+ memcpy( p_buf, p_tmp, 4 * i_channels );
+ p_buf += 4 * i_channels;
+ }
+ }