summaryrefslogtreecommitdiff
path: root/firmware/export
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2006-12-06 08:34:55 +0000
committerMichael Sevakis <jethead71@rockbox.org>2006-12-06 08:34:55 +0000
commit51189b4cb41fb70f4800286f99573f590941ddea (patch)
tree09ca4c9ee4f2ade25e811e5a1f9018a7814c78b3 /firmware/export
parent1ff7652adf206eec517ae3236d02a5be9324942a (diff)
downloadrockbox-51189b4cb41fb70f4800286f99573f590941ddea.tar.gz
rockbox-51189b4cb41fb70f4800286f99573f590941ddea.zip
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
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/pcm_playback.h1
-rw-r--r--firmware/export/pcm_record.h17
2 files changed, 11 insertions, 7 deletions
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 @@
24/* Typedef for registered callback (play and record) */ 24/* Typedef for registered callback (play and record) */
25typedef void (*pcm_more_callback_type)(unsigned char **start, 25typedef void (*pcm_more_callback_type)(unsigned char **start,
26 size_t *size); 26 size_t *size);
27typedef int (*pcm_more_callback_type2)(int status);
27 28
28void pcm_init(void); 29void pcm_init(void);
29 30
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 @@
20#ifndef PCM_RECORD_H 20#ifndef PCM_RECORD_H
21#define PCM_RECORD_H 21#define PCM_RECORD_H
22 22
23#define DMA_REC_ERROR_DMA ((size_t)-1) 23#define DMA_REC_ERROR_DMA (-1)
24#ifdef HAVE_SPDIF_IN 24#ifdef HAVE_SPDIF_IN
25#define DMA_REC_ERROR_SPDIF ((size_t)-2) 25#define DMA_REC_ERROR_SPDIF (-2)
26#endif 26#endif
27 27
28/** 28/**
@@ -36,12 +36,15 @@ void pcm_init_recording(void);
36void pcm_close_recording(void); 36void pcm_close_recording(void);
37 37
38/* Start recording "raw" PCM data */ 38/* Start recording "raw" PCM data */
39void pcm_record_data(pcm_more_callback_type more_ready, 39void pcm_record_data(pcm_more_callback_type2 more_ready,
40 unsigned char *start, size_t size); 40 void *start, size_t size);
41 41
42/* Stop tranferring data into supplied buffer */ 42/* Stop tranferring data into supplied buffer */
43void pcm_stop_recording(void); 43void pcm_stop_recording(void);
44 44
45/* Continue transferring data in - call during interrupt handler */
46void pcm_record_more(void *start, size_t size);
47
45void pcm_calculate_rec_peaks(int *left, int *right); 48void pcm_calculate_rec_peaks(int *left, int *right);
46 49
47/** General functions for high level codec recording **/ 50/** General functions for high level codec recording **/
@@ -64,12 +67,12 @@ int pcm_get_num_unprocessed(void);
64/** The following are for internal use between pcm_record.c and target- 67/** The following are for internal use between pcm_record.c and target-
65 specific portion **/ 68 specific portion **/
66/* the registered callback function for when more data is available */ 69/* the registered callback function for when more data is available */
67extern volatile pcm_more_callback_type pcm_callback_more_ready; 70extern volatile pcm_more_callback_type2 pcm_callback_more_ready;
68/* DMA transfer in is currently active */ 71/* DMA transfer in is currently active */
69extern volatile bool pcm_recording; 72extern volatile bool pcm_recording;
70 73
71/* APIs implemented in the target-specific portion */ 74/* APIs implemented in the target-specific portion */
72extern void pcm_rec_dma_start(const void *addr, size_t size); 75extern void pcm_rec_dma_start(void *addr, size_t size);
73extern void pcm_rec_dma_stop(void); 76extern void pcm_rec_dma_stop(void);
74 77
75#endif /* PCM_RECORD_H */ 78#endif /* PCM_RECORD_H */