]> granicus.if.org Git - libx264/commitdiff
workaround: on some systems, alloca() isn't aligned
authorLoren Merritt <pengvado@videolan.org>
Sun, 24 Sep 2006 21:35:56 +0000 (21:35 +0000)
committerLoren Merritt <pengvado@videolan.org>
Sun, 24 Sep 2006 21:35:56 +0000 (21:35 +0000)
git-svn-id: svn://svn.videolan.org/x264/trunk@566 df754926-b1dd-0310-bc7b-ec298dee348c

common/common.h
common/pixel.c
encoder/me.c

index 93dfa8aeacad63ddda52da860f6ebfaf07a8f3ce..8ee5b975c7cd885ce1e0a2be1cce63dc3332909d 100644 (file)
 #define X264_VERSION "" // no configure script for msvc
 #endif
 
-/* alloca */
+/* alloca: force 16byte alignment */
 #ifdef _MSC_VER
-#define        alloca  _alloca
+#define x264_alloca(x) (void*)(((intptr_t)_alloca((x)+15)+15)&~15)
+#else
+#define x264_alloca(x) (void*)(((intptr_t) alloca((x)+15)+15)&~15)
 #endif
 
 /* threads */
index 5ab6f726656b9d707d184a6cf67f622d8c26680b..6477e974670226da94f39585d7c6b6d2e6d1fe90 100644 (file)
@@ -379,8 +379,8 @@ float x264_pixel_ssim_wxh( x264_pixel_function_t *pf,
 {
     int x, y, z;
     float ssim = 0.0;
-    int (*sum0)[4] = alloca(4 * (width/4+3) * sizeof(int));
-    int (*sum1)[4] = alloca(4 * (width/4+3) * sizeof(int));
+    int (*sum0)[4] = x264_alloca(4 * (width/4+3) * sizeof(int));
+    int (*sum1)[4] = x264_alloca(4 * (width/4+3) * sizeof(int));
     width >>= 2;
     height >>= 2;
     z = 0;
index 035a58bb67202e3ae49be9934ccb157e05ffaa59..b31b32b816b6fed0a1d6d6f1ac8e178bce632271 100644 (file)
@@ -467,7 +467,7 @@ me_hex2:
             int enc_dc[4];
             int sad_size = i_pixel <= PIXEL_8x8 ? PIXEL_8x8 : PIXEL_4x4;
             int delta = x264_pixel_size[sad_size].w;
-            uint16_t *ads = alloca((max_x-min_x+8) * sizeof(uint16_t));
+            uint16_t *ads = x264_alloca((max_x-min_x+8) * sizeof(uint16_t));
 
             h->pixf.sad_x4[sad_size]( zero, m->p_fenc[0], m->p_fenc[0]+delta,
                 m->p_fenc[0]+delta*FENC_STRIDE, m->p_fenc[0]+delta+delta*FENC_STRIDE,