diff options
author | Brandon Low <lostlogic@rockbox.org> | 2006-01-21 16:47:36 +0000 |
---|---|---|
committer | Brandon Low <lostlogic@rockbox.org> | 2006-01-21 16:47:36 +0000 |
commit | d8a6c0665da7d9b6bd7d5aa2840f86b4a931d0f5 (patch) | |
tree | 72043a0c3a903092638fd38e1d846508bcdbd56b /apps | |
parent | 33914a7dfc82fd6badaf774619539b92f3b7c255 (diff) | |
download | rockbox-d8a6c0665da7d9b6bd7d5aa2840f86b4a931d0f5.tar.gz rockbox-d8a6c0665da7d9b6bd7d5aa2840f86b4a931d0f5.zip |
Improve performance by putting more of the code and variables that are called by the DMA0 interrupt into IRAM (3% boost improvement on my test track).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8404 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/pcmbuf.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 66dd47eb3d..2d75185f62 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c | |||
@@ -46,8 +46,8 @@ | |||
46 | static long pcmbuf_size = 0; /* Size of the PCM buffer. */ | 46 | static long pcmbuf_size = 0; /* Size of the PCM buffer. */ |
47 | static char *audiobuffer; | 47 | static char *audiobuffer; |
48 | static long audiobuffer_pos; /* Current audio buffer write index. */ | 48 | static long audiobuffer_pos; /* Current audio buffer write index. */ |
49 | long audiobuffer_free; /* Amount of bytes left in the buffer. */ | 49 | long audiobuffer_free IDATA_ATTR; /* Amount of bytes left in the buffer. */ |
50 | static long audiobuffer_fillpos; /* Amount audiobuffer_pos will be increased. */ | 50 | static long audiobuffer_fillpos; /* Amount audiobuffer_pos will be increased.*/ |
51 | static char *guardbuf; | 51 | static char *guardbuf; |
52 | 52 | ||
53 | static void (*pcmbuf_event_handler)(void); | 53 | static void (*pcmbuf_event_handler)(void); |
@@ -81,11 +81,11 @@ struct pcmbufdesc | |||
81 | int size; | 81 | int size; |
82 | /* Call this when the buffer has been played */ | 82 | /* Call this when the buffer has been played */ |
83 | void (*callback)(void); | 83 | void (*callback)(void); |
84 | } pcmbuffers[NUM_PCM_BUFFERS]; | 84 | } pcmbuffers[NUM_PCM_BUFFERS] IDATA_ATTR; |
85 | 85 | ||
86 | volatile int pcmbuf_read_index; | 86 | volatile int pcmbuf_read_index; |
87 | volatile int pcmbuf_write_index; | 87 | volatile int pcmbuf_write_index; |
88 | int pcmbuf_unplayed_bytes; | 88 | int pcmbuf_unplayed_bytes IDATA_ATTR; |
89 | int pcmbuf_mix_used_bytes; | 89 | int pcmbuf_mix_used_bytes; |
90 | int pcmbuf_watermark; | 90 | int pcmbuf_watermark; |
91 | void (*pcmbuf_watermark_event)(int bytes_left); | 91 | void (*pcmbuf_watermark_event)(int bytes_left); |
@@ -121,6 +121,7 @@ int pcmbuf_num_used_buffers(void) | |||
121 | return (pcmbuf_write_index - pcmbuf_read_index) & NUM_PCM_BUFFERS_MASK; | 121 | return (pcmbuf_write_index - pcmbuf_read_index) & NUM_PCM_BUFFERS_MASK; |
122 | } | 122 | } |
123 | 123 | ||
124 | static void pcmbuf_callback(unsigned char** start, long* size) ICODE_ATTR; | ||
124 | static void pcmbuf_callback(unsigned char** start, long* size) | 125 | static void pcmbuf_callback(unsigned char** start, long* size) |
125 | { | 126 | { |
126 | struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index]; | 127 | struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index]; |
@@ -206,14 +207,10 @@ void pcmbuf_add_event(void (*event_handler)(void)) | |||
206 | 207 | ||
207 | unsigned int pcmbuf_get_latency(void) | 208 | unsigned int pcmbuf_get_latency(void) |
208 | { | 209 | { |
209 | int latency; | 210 | int latency = (pcmbuf_unplayed_bytes + pcm_get_bytes_waiting()) |
211 | * 1000 / 4 / 44100; | ||
210 | 212 | ||
211 | latency = (pcmbuf_unplayed_bytes + pcm_get_bytes_waiting()) | 213 | return latency<0?0:latency; |
212 | * 1000 / 4 / 44100; | ||
213 | if (latency < 0) | ||
214 | latency = 0; | ||
215 | |||
216 | return latency; | ||
217 | } | 214 | } |
218 | 215 | ||
219 | bool pcmbuf_is_lowdata(void) | 216 | bool pcmbuf_is_lowdata(void) |