Author: titmuss
Date: Fri May 16 09:33:47 2008
New Revision: 2473
URL: http://svn.slimdevices.com?rev=2473&root=Jive&view=rev
Log:
Bug: N/A
Description:
Fix converstion from mad_fixed to pcm.
Modified:
7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c?rev=2473&root=Jive&r1=2472&r2=2473&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
(original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c Fri May
16 09:33:47 2008
@@ -222,6 +222,22 @@
}
+static inline sample_t mad_fixed_to_32bit(mad_fixed_t fixed)
+{
+ fixed += (1L << (MAD_F_FRACBITS - 24));
+
+ /* Clipping */
+ if(fixed >= MAD_F_ONE)
+ fixed = MAD_F_ONE - 1;
+ if(fixed <= -MAD_F_ONE)
+ fixed = -MAD_F_ONE;
+
+ /* Conversion */
+ fixed = fixed >> (MAD_F_FRACBITS - 23);
+ return ((sample_t)fixed) << 8;
+}
+
+
static void decode_mad_output(struct decode_mad *self) {
struct mad_pcm *pcm;
sample_t *buf;
@@ -251,8 +267,8 @@
if (pcm->channels == 2) {
/* stero */
for (i=0; i<pcm->length; i++) {
- *buf++ = *left++ << (32 - MAD_F_FRACBITS - 1);
- *buf++ = *right++ << (32 - MAD_F_FRACBITS - 1);
+ *buf++ = mad_fixed_to_32bit(*left++);
+ *buf++ = mad_fixed_to_32bit(*right++);
}
}
else {
@@ -260,7 +276,7 @@
sample_t s;
for (i=0; i<pcm->length; i++) {
- s = *left++ << (32 - MAD_F_FRACBITS - 1);
+ s = mad_fixed_to_32bit(*left++);
*buf++ = s;
*buf++ = s;
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins