@@ -122,6 +122,14 @@ STATIC size_t audio_dma_convert_samples(audio_dma_t *dma, uint8_t *input, uint32
122122 // Not currently used, but might be in the future.
123123 mp_raise_RuntimeError (MP_ERROR_TEXT ("Audio conversion not implemented" ));
124124 }
125+ if (dma -> swap_channel ) {
126+ // Loop for swapping left and right channels
127+ for (uint32_t i = 0 ; i < out_i ; i += 2 ) {
128+ uint16_t temp = ((uint16_t * )output )[i ];
129+ ((uint16_t * )output )[i ] = ((uint16_t * )output )[i + 1 ];
130+ ((uint16_t * )output )[i + 1 ] = temp ;
131+ }
132+ }
125133 #pragma GCC diagnostic pop
126134 return output_length_used ;
127135}
@@ -183,7 +191,8 @@ audio_dma_result audio_dma_setup_playback(
183191 bool output_signed ,
184192 uint8_t output_resolution ,
185193 uint32_t output_register_address ,
186- uint8_t dma_trigger_source ) {
194+ uint8_t dma_trigger_source ,
195+ bool swap_channel ) {
187196
188197 // Use two DMA channels to play because the DMA can't wrap to itself without the
189198 // buffer being power of two aligned.
@@ -212,6 +221,7 @@ audio_dma_result audio_dma_setup_playback(
212221 dma -> output_resolution = output_resolution ;
213222 dma -> sample_resolution = audiosample_bits_per_sample (sample );
214223 dma -> output_register_address = output_register_address ;
224+ dma -> swap_channel = swap_channel ;
215225
216226 audiosample_reset_buffer (sample , single_channel_output , audio_channel );
217227
0 commit comments