diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-08-06 01:27:38 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-08-06 01:27:38 +0200 |
commit | 84ac2f93ca112769f6f0892e5deaed5a48706dcc (patch) | |
tree | 3245b9f40a7ffa938de2abab12845c88bcd425b7 | |
parent | 1b168e3bcf6f025b7be64d9dd29dbcb54cb63042 (diff) | |
download | ffmpeg-84ac2f93ca112769f6f0892e5deaed5a48706dcc.tar.gz |
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@gmx.at>
-rw-r--r-- | libavutil/pixelutils.c | 34 | ||||
-rw-r--r-- | tests/ref/fate/pixelutils | 24 |
2 files changed, 31 insertions, 27 deletions
diff --git a/libavutil/pixelutils.c b/libavutil/pixelutils.c index cfdd35afc2..ca424d89e4 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 f7f507a5c0..fba44a6a17 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 |