From 51189b4cb41fb70f4800286f99573f590941ddea Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Wed, 6 Dec 2006 08:34:55 +0000 Subject: Small change to PCM recording API for low latency effects. Latency can be as low as 14 samples from input to output including the FIFOs (ColdFire) but 16 is more reasonable an expectation if only tranferring one sample per interrupt (\!). May convert PCM playback to use the same method as it can still be used in the old manner with some slight mods but has the potential to enable new features since it is more flexible. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11668 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/pcm_playback.h | 1 + firmware/export/pcm_record.h | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'firmware/export') diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h index e7c00edeed..80a1f557fe 100644 --- a/firmware/export/pcm_playback.h +++ b/firmware/export/pcm_playback.h @@ -24,6 +24,7 @@ /* Typedef for registered callback (play and record) */ typedef void (*pcm_more_callback_type)(unsigned char **start, size_t *size); +typedef int (*pcm_more_callback_type2)(int status); void pcm_init(void); diff --git a/firmware/export/pcm_record.h b/firmware/export/pcm_record.h index 30d2dc7e6f..f6dddb3424 100644 --- a/firmware/export/pcm_record.h +++ b/firmware/export/pcm_record.h @@ -20,9 +20,9 @@ #ifndef PCM_RECORD_H #define PCM_RECORD_H -#define DMA_REC_ERROR_DMA ((size_t)-1) +#define DMA_REC_ERROR_DMA (-1) #ifdef HAVE_SPDIF_IN -#define DMA_REC_ERROR_SPDIF ((size_t)-2) +#define DMA_REC_ERROR_SPDIF (-2) #endif /** @@ -36,12 +36,15 @@ void pcm_init_recording(void); void pcm_close_recording(void); /* Start recording "raw" PCM data */ -void pcm_record_data(pcm_more_callback_type more_ready, - unsigned char *start, size_t size); +void pcm_record_data(pcm_more_callback_type2 more_ready, + void *start, size_t size); /* Stop tranferring data into supplied buffer */ void pcm_stop_recording(void); +/* Continue transferring data in - call during interrupt handler */ +void pcm_record_more(void *start, size_t size); + void pcm_calculate_rec_peaks(int *left, int *right); /** General functions for high level codec recording **/ @@ -64,12 +67,12 @@ int pcm_get_num_unprocessed(void); /** The following are for internal use between pcm_record.c and target- specific portion **/ /* the registered callback function for when more data is available */ -extern volatile pcm_more_callback_type pcm_callback_more_ready; +extern volatile pcm_more_callback_type2 pcm_callback_more_ready; /* DMA transfer in is currently active */ -extern volatile bool pcm_recording; +extern volatile bool pcm_recording; /* APIs implemented in the target-specific portion */ -extern void pcm_rec_dma_start(const void *addr, size_t size); +extern void pcm_rec_dma_start(void *addr, size_t size); extern void pcm_rec_dma_stop(void); #endif /* PCM_RECORD_H */ -- cgit v1.2.3