Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

pcm: implement pcm_switch_sink

Change-Id: Iace01c2e97950cc794f3cf755dc358da6f3daa7f

mojyack be4b0591 8ac866a7

+35
+1
firmware/export/pcm.h
··· 64 64 65 65 enum pcm_sink_ids pcm_current_sink(void); 66 66 const struct pcm_sink_caps* pcm_sink_caps(enum pcm_sink_ids sink); 67 + bool pcm_switch_sink(enum pcm_sink_ids sink); 67 68 68 69 /* shortcut for plugins */ 69 70 const struct pcm_sink_caps* pcm_current_sink_caps(void);
+34
firmware/pcm.c
··· 291 291 return pcm_sink_caps(pcm_current_sink()); 292 292 } 293 293 294 + bool pcm_switch_sink(enum pcm_sink_ids sink) 295 + { 296 + logf("pcm_switch_sink %d to %d", cur_sink, sink); 297 + if(sink >= ARRAYLEN(sinks)) { 298 + return false; 299 + } 300 + 301 + if(cur_sink == sink) { 302 + return true; 303 + } 304 + /* save current sink before switching */ 305 + struct pcm_sink* old_sink = sinks[cur_sink]; 306 + /* update sink index */ 307 + cur_sink = sink; 308 + /* synchronize frequency */ 309 + unsigned long cur_sampr = old_sink->caps.samprs[old_sink->pending_freq]; 310 + pcm_set_frequency(cur_sampr); 311 + pcm_apply_settings(); 312 + /* when playing, continue playing on new sink */ 313 + if(pcm_playing) { 314 + old_sink->ops.stop(); 315 + /* need more */ 316 + const void *start; 317 + size_t size; 318 + if(pcm_get_more_int(&start, &size)) { 319 + pcm_play_dma_start_int(start, size); 320 + } else { 321 + pcm_play_stop_int(); 322 + } 323 + } 324 + 325 + return true; 326 + } 327 + 294 328 void pcm_play_data(pcm_play_callback_type get_more, 295 329 pcm_status_callback_type status_cb, 296 330 const void *start, size_t size)