@@ -122,6 +122,14 @@ STATIC size_t audio_dma_convert_samples(audio_dma_t *dma, uint8_t *input, uint32
122
122
// Not currently used, but might be in the future.
123
123
mp_raise_RuntimeError (MP_ERROR_TEXT ("Audio conversion not implemented" ));
124
124
}
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
+ }
125
133
#pragma GCC diagnostic pop
126
134
return output_length_used ;
127
135
}
@@ -183,7 +191,8 @@ audio_dma_result audio_dma_setup_playback(
183
191
bool output_signed ,
184
192
uint8_t output_resolution ,
185
193
uint32_t output_register_address ,
186
- uint8_t dma_trigger_source ) {
194
+ uint8_t dma_trigger_source ,
195
+ bool swap_channel ) {
187
196
188
197
// Use two DMA channels to play because the DMA can't wrap to itself without the
189
198
// buffer being power of two aligned.
@@ -212,6 +221,7 @@ audio_dma_result audio_dma_setup_playback(
212
221
dma -> output_resolution = output_resolution ;
213
222
dma -> sample_resolution = audiosample_bits_per_sample (sample );
214
223
dma -> output_register_address = output_register_address ;
224
+ dma -> swap_channel = swap_channel ;
215
225
216
226
audiosample_reset_buffer (sample , single_channel_output , audio_channel );
217
227
0 commit comments