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

Reply via email to