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 /libavutil | |
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>
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/pixelutils.c | 34 |
1 files changed, 19 insertions, 15 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 */ |