From a2b6703a369f6cdbfec1f150c408dadc877631fb Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Wed, 29 Jun 2011 06:37:04 +0000 Subject: Commit FS#12150 - Fully-functional audio mixer - and finally whip old limitations about playback of voice and other sounds when paused. Channels are independent in state and amplitude. Fade on stop/pause is handled by the channel's volume control rather than global volume which means it now works from anywhere. Opens up the possibility of plugin sounds during music playback by merely adding an additional channel enum. If any PCM drivers were not properly modified, see one of the last comments in the task for a description of the simple change that is expected. Some params are tunable in firmware/export/pcm-mixer.h as well. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30097 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/pcm.h | 44 ++------------------------------------------ 1 file changed, 2 insertions(+), 42 deletions(-) (limited to 'firmware/export/pcm.h') diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h index 80b5b09a79..22c5ef350e 100644 --- a/firmware/export/pcm.h +++ b/firmware/export/pcm.h @@ -49,7 +49,7 @@ /** RAW PCM routines used with playback and recording **/ -/* Typedef for registered callback */ +/* Typedef for registered callbacks */ typedef void (*pcm_play_callback_type)(unsigned char **start, size_t *size); typedef void (*pcm_rec_callback_type)(int status, void **start, size_t *size); @@ -90,34 +90,7 @@ void pcm_play_pause(bool play); bool pcm_is_paused(void); bool pcm_is_playing(void); -/** The following are for internal use between pcm.c and target- - specific portion **/ - -/* Called by the bottom layer ISR when more data is needed. Returns non- - * zero size if more data is to be played. Setting start to NULL - * forces stop. */ -void pcm_play_get_more_callback(void **start, size_t *size); - -extern unsigned long pcm_curr_sampr; -extern unsigned long pcm_sampr; -extern int pcm_fsel; - -#ifdef HAVE_PCM_DMA_ADDRESS -void * pcm_dma_addr(void *addr); -#endif - -extern volatile bool pcm_playing; -extern volatile bool pcm_paused; - -void pcm_play_dma_lock(void); -void pcm_play_dma_unlock(void); -void pcm_play_dma_init(void) INIT_ATTR; -void pcm_play_dma_start(const void *addr, size_t size); -void pcm_play_dma_stop(void); -void pcm_play_dma_pause(bool pause); -const void * pcm_play_dma_get_peak_buffer(int *count); - -void pcm_dma_apply_settings(void); +void pcm_play_set_dma_started_callback(void (* callback)(void)); #ifdef HAVE_RECORDING @@ -148,19 +121,6 @@ void pcm_rec_more_ready_callback(int status, void **start, size_t *size); void pcm_calculate_rec_peaks(int *left, int *right); -/** The following are for internal use between pcm.c and target- - specific portion **/ -/* DMA transfer in is currently active */ -extern volatile bool pcm_recording; - -/* APIs implemented in the target-specific portion */ -void pcm_rec_dma_init(void); -void pcm_rec_dma_close(void); -void pcm_rec_dma_start(void *addr, size_t size); -void pcm_rec_dma_record_more(void *start, size_t size); -void pcm_rec_dma_stop(void); -const void * pcm_rec_dma_get_peak_buffer(void); - #endif /* HAVE_RECORDING */ #endif /* PCM_PLAYBACK_H */ -- cgit v1.2.3