dct: bypass table allocation for DCT_II of size 32
authorMans Rullgard <mans@mansr.com>
Mon, 16 May 2011 14:57:04 +0000 (15:57 +0100)
committerMans Rullgard <mans@mansr.com>
Mon, 16 May 2011 15:20:18 +0000 (16:20 +0100)
The size-32 DCT_II has a special implementation which doesn't use
the normal tables.  Skipping allocation of these in this case saves
some memory.

Signed-off-by: Mans Rullgard <mans@mansr.com>
libavcodec/dct.c

index 83ea00f9cbdc4f77ab2d60fafb442be49ea36cf5..e7a8f227b7ee2c4b9c344ab0032f6dd7b1f1faf2 100644 (file)
@@ -180,9 +180,14 @@ av_cold int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType inverse)
     int n = 1 << nbits;
     int i;
 
+    memset(s, 0, sizeof(*s));
+
     s->nbits    = nbits;
     s->inverse  = inverse;
 
+    if (inverse == DCT_II && nbits == 5) {
+        s->dct_calc = dct32_func;
+    } else {
     ff_init_ff_cos_tabs(nbits+2);
 
     s->costab = ff_cos_tabs[nbits+2];
@@ -203,9 +208,7 @@ av_cold int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType inverse)
     case DCT_III: s->dct_calc = ff_dct_calc_III_c; break;
     case DST_I  : s->dct_calc = ff_dst_calc_I_c; break;
     }
-
-    if (inverse == DCT_II && nbits == 5)
-        s->dct_calc = dct32_func;
+    }
 
     s->dct32 = dct32;
     if (HAVE_MMX)     ff_dct_init_mmx(s);