Factorize READ_FLIP_SIGN() optimization out
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 11 May 2010 21:20:33 +0000 (21:20 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 11 May 2010 21:20:33 +0000 (21:20 +0000)
Originally committed as revision 23098 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mpegaudiodec.c

index a219cdb..2279b8d 100644 (file)
@@ -1407,6 +1407,22 @@ static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_
     }
 }
 
+/* Following is a optimized code for
+            INTFLOAT v = *src
+            if(get_bits1(&s->gb))
+                v = -v;
+            *dst = v;
+*/
+#if CONFIG_FLOAT
+#define READ_FLIP_SIGN(dst,src)\
+            v = AV_RN32A(src) ^ (get_bits1(&s->gb)<<31);\
+            AV_WN32A(dst, v);
+#else
+#define READ_FLIP_SIGN(dst,src)\
+            v= -get_bits1(&s->gb);\
+            *(dst) = (*(src) ^ v) - v;
+#endif
+
 static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
                           int16_t *exponents, int end_pos2)
 {
@@ -1538,19 +1554,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
             int v;
             int pos= s_index+idxtab[code];
             code ^= 8>>idxtab[code];
-/* Following is a optimized code for
-            INTFLOAT v = RENAME(exp_table)[ exponents[pos] ];
-            if(get_bits1(&s->gb))
-                v = -v;
-            g->sb_hybrid[pos] = v;
-*/
-#if CONFIG_FLOAT
-            v = AV_RN32A(RENAME(exp_table)+exponents[pos]) ^ (get_bits1(&s->gb)<<31);
-            AV_WN32A(g->sb_hybrid+pos, v);
-#else
-            v= -get_bits1(&s->gb);
-            g->sb_hybrid[pos] = (RENAME(exp_table)[ exponents[pos] ] ^ v) - v;
-#endif
+            READ_FLIP_SIGN(g->sb_hybrid+pos, RENAME(exp_table)+exponents[pos])
         }
         s_index+=4;
     }