[FFmpeg-cvslog] avutil/pixelutils: avoid on stack arrays

Michael Niedermayer git at videolan.org
Wed Aug 6 01:39:52 CEST 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Wed Aug  6 01:27:38 2014 +0200| [84ac2f93ca112769f6f0892e5deaed5a48706dcc] | committer: Michael Niedermayer

avutil/pixelutils: avoid on stack arrays

The arrays are fairly large and could cause problems on some embedded systems
also they are not endian safe as they mix 32 and 8bit

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=84ac2f93ca112769f6f0892e5deaed5a48706dcc
---

 libavutil/pixelutils.c    |   34 +++++++++++++++++++---------------
 tests/ref/fate/pixelutils |   24 ++++++++++++------------
 2 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/libavutil/pixelutils.c b/libavutil/pixelutils.c
index cfdd35a..ca424d8 100644
--- a/libavutil/pixelutils.c
+++ b/libavutil/pixelutils.c
@@ -92,13 +92,13 @@ av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, int aligne
 #define H2 480
 
 static int run_test(const char *test,
-                    const uint32_t *b1, const uint32_t *b2)
+                    const uint8_t *b1, const uint8_t *b2)
 {
     int i, a, ret = 0;
 
     for (a = 0; a < 3; a++) {
-        const uint8_t *block1 = (const uint8_t *)b1;
-        const uint8_t *block2 = (const uint8_t *)b2;
+        const uint8_t *block1 = b1;
+        const uint8_t *block2 = b2;
 
         switch (a) {
         case 0: block1++; block2++; break;
@@ -124,30 +124,34 @@ static int run_test(const char *test,
 int main(void)
 {
     int i, ret;
-    DECLARE_ALIGNED(32, uint32_t, buf1)[W1*H1];
-    DECLARE_ALIGNED(32, uint32_t, buf2)[W2*H2];
+    uint8_t *buf1 = av_malloc(W1*H1);
+    uint8_t *buf2 = av_malloc(W2*H2);
     uint32_t state = 0;
 
     for (i = 0; i < W1*H1; i++) {
         state = state * 1664525 + 1013904223;
-        buf1[i] = state;
+        buf1[i] = state>>24;
     }
     for (i = 0; i < W2*H2; i++) {
         state = state * 1664525 + 1013904223;
-        buf2[i] = state;
+        buf2[i] = state>>24;
     }
     ret = run_test("random", buf1, buf2);
     if (ret < 0)
-        return ret;
+        goto end;
 
-    memset(buf1, 0xff, sizeof(buf1));
-    memset(buf2, 0x00, sizeof(buf2));
+    memset(buf1, 0xff, W1*H1);
+    memset(buf2, 0x00, W2*H2);
     ret = run_test("max", buf1, buf2);
     if (ret < 0)
-        return ret;
-
-    memset(buf1, 0x90, sizeof(buf1));
-    memset(buf2, 0x90, sizeof(buf2));
-    return run_test("min", buf1, buf2);
+        goto end;
+
+    memset(buf1, 0x90, W1*H1);
+    memset(buf2, 0x90, W2*H2);
+    ret = run_test("min", buf1, buf2);
+end:
+    av_free(buf1);
+    av_free(buf2);
+    return ret;
 }
 #endif /* TEST */
diff --git a/tests/ref/fate/pixelutils b/tests/ref/fate/pixelutils
index f7f507a..fba44a6 100644
--- a/tests/ref/fate/pixelutils
+++ b/tests/ref/fate/pixelutils
@@ -1,15 +1,15 @@
-[OK] [UU] SAD [random] 2x2=314 ref=314
-[OK] [UU] SAD [random] 4x4=1129 ref=1129
-[OK] [UU] SAD [random] 8x8=4936 ref=4936
-[OK] [UU] SAD [random] 16x16=20704 ref=20704
-[OK] [AU] SAD [random] 2x2=440 ref=440
-[OK] [AU] SAD [random] 4x4=1317 ref=1317
-[OK] [AU] SAD [random] 8x8=5262 ref=5262
-[OK] [AU] SAD [random] 16x16=21040 ref=21040
-[OK] [AA] SAD [random] 2x2=196 ref=196
-[OK] [AA] SAD [random] 4x4=1225 ref=1225
-[OK] [AA] SAD [random] 8x8=4712 ref=4712
-[OK] [AA] SAD [random] 16x16=21184 ref=21184
+[OK] [UU] SAD [random] 2x2=409 ref=409
+[OK] [UU] SAD [random] 4x4=1370 ref=1370
+[OK] [UU] SAD [random] 8x8=5178 ref=5178
+[OK] [UU] SAD [random] 16x16=20946 ref=20946
+[OK] [AU] SAD [random] 2x2=320 ref=320
+[OK] [AU] SAD [random] 4x4=1522 ref=1522
+[OK] [AU] SAD [random] 8x8=5821 ref=5821
+[OK] [AU] SAD [random] 16x16=21951 ref=21951
+[OK] [AA] SAD [random] 2x2=276 ref=276
+[OK] [AA] SAD [random] 4x4=1521 ref=1521
+[OK] [AA] SAD [random] 8x8=5130 ref=5130
+[OK] [AA] SAD [random] 16x16=20775 ref=20775
 [OK] [UU] SAD [max] 2x2=1020 ref=1020
 [OK] [UU] SAD [max] 4x4=4080 ref=4080
 [OK] [UU] SAD [max] 8x8=16320 ref=16320



More information about the ffmpeg-cvslog mailing list