mirror of https://github.com/mpv-player/mpv
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.
This commit is contained in:
parent
99e178f1e8
commit
2bd7f980ac
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue