summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-25 00:32:47 +0100
committerwm4 <wm4@nowhere>2012-11-25 23:40:07 +0100
commit2bd7f980ac5b692b62b0765c4411129f953b0593 (patch)
tree400ce049da19e0a2afc80f3475460343d5514f53
parent99e178f1e8e2a6b9d7b3dd937f5214827f192c08 (diff)
downloadmpv-2bd7f980ac5b692b62b0765c4411129f953b0593.tar.bz2
mpv-2bd7f980ac5b692b62b0765c4411129f953b0593.tar.xz
memcpy_pic: kill useless/dangerous optimization
The memcpy_pic() function had a rather dangerous optimization: when the limit2width flag was not set, it was allowed to overwrite the data between the last pixel of a line and the first pixel of the next line (i.e. write over the stride padding). That was also the reason why there are so many whacky names for this function (memcpy_pic, my_memcpy_pic, memcpy_pic2). Kill this optimization, and never overwrite the stride padding. The code doing this can still be used if there's no stride padding at all, though. Also use the name memcpy_pic for the proper function. Now it should be rather clear that my_memcpy_pic and memcpy_pic2 are compatibility aliases. They should go away over the time.
-rw-r--r--video/memcpy_pic.h16
1 files changed, 6 insertions, 10 deletions
diff --git a/video/memcpy_pic.h b/video/memcpy_pic.h
index c2cd79314f..2def66f3a4 100644
--- a/video/memcpy_pic.h
+++ b/video/memcpy_pic.h
@@ -24,21 +24,17 @@
#include <string.h>
#include <stddef.h>
-#define memcpy_pic(d, s, b, h, ds, ss) memcpy_pic2(d, s, b, h, ds, ss, 0)
-#define my_memcpy_pic(d, s, b, h, ds, ss) memcpy_pic2(d, s, b, h, ds, ss, 1)
+#define my_memcpy_pic memcpy_pic
+#define memcpy_pic2(d, s, b, h, ds, ss, unused) memcpy_pic(d, s, b, h, ds, ss)
-/**
- * \param limit2width always skip data between end of line and start of next
- * instead of copying the full block when strides are the same
- */
-static inline void * memcpy_pic2(void * dst, const void * src,
- int bytesPerLine, int height,
- int dstStride, int srcStride, int limit2width)
+static inline void * memcpy_pic(void * dst, const void * src,
+ int bytesPerLine, int height,
+ int dstStride, int srcStride)
{
int i;
void *retval=dst;
- if(!limit2width && dstStride == srcStride)
+ if(bytesPerLine == dstStride && dstStride == srcStride)
{
if (srcStride < 0) {
src = (uint8_t*)src + (height-1)*srcStride;