diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2011-12-05 13:58:35 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2011-12-05 13:58:35 +0000 |
| commit | 906905aa43566c16913238a71ccc13d438af1702 (patch) | |
| tree | a80373f2495303db1245564bff5a5c66e9449473 | |
| parent | 6461f74ae450ce0c834b3d4c7da134f0fefed945 (diff) | |
| download | rockbox-906905aa43566c16913238a71ccc13d438af1702.zip rockbox-906905aa43566c16913238a71ccc13d438af1702.tar.gz rockbox-906905aa43566c16913238a71ccc13d438af1702.tar.bz2 rockbox-906905aa43566c16913238a71ccc13d438af1702.tar.xz | |
Use a macro for aligning PCM chunks instead of explictly coding it each time.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31152 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/export/pcm-internal.h | 5 | ||||
| -rw-r--r-- | firmware/pcm.c | 17 | ||||
| -rw-r--r-- | firmware/pcm_mixer.c | 11 |
3 files changed, 13 insertions, 20 deletions
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h index 16e2aea..d881963 100644 --- a/firmware/export/pcm-internal.h +++ b/firmware/export/pcm-internal.h @@ -22,6 +22,11 @@ #ifndef PCM_INTERNAL_H #define PCM_INTERNAL_H +/* Cheapo buffer align macro to align to the 16-16 PCM size */ +#define ALIGN_AUDIOBUF(start, size) \ + ({ (start) = (void *)(((uintptr_t)(start) + 3) & ~3); \ + (size) &= ~3; }) + struct pcm_peaks { long period; diff --git a/firmware/pcm.c b/firmware/pcm.c index b0a91fb..f5efb4f 100644 --- a/firmware/pcm.c +++ b/firmware/pcm.c @@ -260,8 +260,7 @@ bool pcm_is_initialized(void) /* Common code to pcm_play_data and pcm_play_pause */ static void pcm_play_data_start(unsigned char *start, size_t size) { - start = (unsigned char *)(((uintptr_t)start + 3) & ~3); - size &= ~3; + ALIGN_AUDIOBUF(start, size); if (!(start && size)) { @@ -271,9 +270,7 @@ static void pcm_play_data_start(unsigned char *start, size_t size) { logf(" get_more"); get_more(&start, &size); - - start = (unsigned char *)(((uintptr_t)start + 3) & ~3); - size &= ~3; + ALIGN_AUDIOBUF(start, size); } } @@ -319,8 +316,7 @@ void pcm_play_get_more_callback(void **start, size_t *size) /* Call registered callback */ get_more((unsigned char **)start, size); - *start = (void *)(((uintptr_t)*start + 3) & ~3); - *size &= ~3; + ALIGN_AUDIOBUF(*start, *size); if (*start && *size) return; @@ -557,9 +553,7 @@ void pcm_record_data(pcm_rec_callback_type more_ready, { logf("pcm_record_data"); - /* 32-bit aligned and sized data only */ - start = (void *)(((uintptr_t)start + 3) & ~3); - size &= ~3; + ALIGN_AUDIOBUF(start, size); if (!(start && size)) { @@ -611,8 +605,7 @@ void pcm_rec_more_ready_callback(int status, void **start, size_t *size) if (have_more && start) { have_more(status, start, size); - *start = (void *)(((uintptr_t)*start + 3) & ~3); - *size &= ~3; + ALIGN_AUDIOBUF(*start, *size); if (*start && *size) { diff --git a/firmware/pcm_mixer.c b/firmware/pcm_mixer.c index 817b9a6..25c41c2 100644 --- a/firmware/pcm_mixer.c +++ b/firmware/pcm_mixer.c @@ -70,11 +70,6 @@ static struct mixer_channel * active_channels[PCM_MIXER_NUM_CHANNELS+1] IBSS_ATT #define MAX_IDLE_FRAMES (NATIVE_FREQUENCY*3 / MIX_FRAME_SAMPLES) static unsigned int idle_counter = 0; -/* Cheapo buffer align macro to align to the 16-16 PCM size */ -#define ALIGN_CHANNEL(start, size) \ - ({ start = (void *)(((uintptr_t)start + 3) & ~3); \ - size &= ~3; }) - #if (CONFIG_PLATFORM & PLATFORM_NATIVE) /* Include any implemented CPU-optimized mixdown routines */ @@ -244,7 +239,7 @@ fill_frame: if (chan->get_more) { chan->get_more(&chan->start, &chan->size); - ALIGN_CHANNEL(chan->start, chan->size); + ALIGN_AUDIOBUF(chan->start, chan->size); } if (!(chan->start && chan->size)) @@ -368,7 +363,7 @@ static void mixer_channel_play_start(struct mixer_channel *chan, { pcm_play_unlock(); /* Allow playback while doing any callback */ - ALIGN_CHANNEL(start, size); + ALIGN_AUDIOBUF(start, size); if (!(start && size)) { @@ -377,7 +372,7 @@ static void mixer_channel_play_start(struct mixer_channel *chan, if (get_more) { get_more(&start, &size); - ALIGN_CHANNEL(start, size); + ALIGN_AUDIOBUF(start, size); } } |