From a43df152c2adf737208bbeb294a0a13608d3cc43 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 4 Dec 2011 18:19:39 +0000 Subject: Collect the 16-bit signed range sample clipping routines scattered about, which can be optimized on armv6 and create firmware/export/dsp-util.h (for lack of better place right now). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31142 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs.h | 1 + apps/codecs/libspc/spc_dsp.c | 20 +------------------- apps/dsp.c | 15 ++------------- apps/pcmbuf.c | 9 +-------- apps/plugin.h | 1 + 5 files changed, 6 insertions(+), 40 deletions(-) (limited to 'apps') diff --git a/apps/codecs.h b/apps/codecs.h index 527c59ac9c..f1e2a51eac 100644 --- a/apps/codecs.h +++ b/apps/codecs.h @@ -43,6 +43,7 @@ #include "pcm_record.h" #endif #include "dsp.h" +#include "dsp-util.h" #endif #include "gcc_extensions.h" diff --git a/apps/codecs/libspc/spc_dsp.c b/apps/codecs/libspc/spc_dsp.c index 28e05425fb..6350c4c331 100644 --- a/apps/codecs/libspc/spc_dsp.c +++ b/apps/codecs/libspc/spc_dsp.c @@ -57,25 +57,7 @@ void DSP_write( struct Spc_Dsp* this, int i, int data ) } } -#if ARM_ARCH >= 6 -/* if ( n < -32768 ) out = -32768; */ -/* if ( n > 32767 ) out = 32767; */ -#define CLAMP16( n ) \ - ({ \ - asm ("ssat %0, #16, %1" \ - : "=r" ( n ) : "r"( n ) ); \ - n; \ - }) -#else -/* if ( n < -32768 ) out = -32768; */ -/* if ( n > 32767 ) out = 32767; */ -#define CLAMP16( n ) \ -({ \ - if ( (int16_t) n != n ) \ - n = 0x7FFF ^ (n >> 31); \ - n; \ -}) -#endif +#define CLAMP16( n ) clip_sample_16( n ) #if SPC_BRRCACHE static void decode_brr( struct Spc_Dsp* this, unsigned start_addr, diff --git a/apps/dsp.c b/apps/dsp.c index d9c097af66..00de511dd0 100644 --- a/apps/dsp.c +++ b/apps/dsp.c @@ -19,15 +19,12 @@ * ****************************************************************************/ #include "config.h" - -#include -#include -#include +#include "system.h" #include #include "dsp.h" +#include "dsp-util.h" #include "eq.h" #include "kernel.h" -#include "system.h" #include "settings.h" #include "replaygain.h" #include "tdspeed.h" @@ -261,14 +258,6 @@ static int32_t release_gain IBSS_ATTR; /* S7.24 format */ static void compressor_process(int count, int32_t *buf[]); -/* Clip sample to signed 16 bit range */ -static inline int32_t clip_sample_16(int32_t sample) -{ - if ((int16_t)sample != sample) - sample = 0x7fff ^ (sample >> 31); - return sample; -} - #ifdef HAVE_PITCHSCREEN int32_t sound_get_pitch(void) { diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 8135a30a36..32e1157132 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -27,6 +27,7 @@ #include "pcm.h" #include "pcm_mixer.h" #include "pcmbuf.h" +#include "dsp-util.h" #include "playback.h" #include "codec_thread.h" @@ -828,14 +829,6 @@ static size_t crossfade_find_buftail(size_t buffer_rem, size_t buffer_need) return buffer_rem; } -/* Clip sample to signed 16 bit range */ -static FORCE_INLINE int32_t clip_sample_16(int32_t sample) -{ - if ((int16_t)sample != sample) - sample = 0x7fff ^ (sample >> 31); - return sample; -} - /* Returns the number of bytes _NOT_ mixed/faded */ static int crossfade_mix_fade(int factor, size_t size, void *buf, size_t *out_index, unsigned long elapsed, off_t offset) diff --git a/apps/plugin.h b/apps/plugin.h index 0ee37bb4fe..e2b7fe7e11 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -66,6 +66,7 @@ void* plugin_get_buffer(size_t *buffer_size); #include "filefuncs.h" #if (CONFIG_CODEC == SWCODEC) #include "pcm_mixer.h" +#include "dsp-util.h" #include "dsp.h" #include "codecs.h" #include "playback.h" -- cgit v1.2.3