Index: patched-ffmpeg-mt/libavcodec/rectangle.h |
=================================================================== |
--- patched-ffmpeg-mt/libavcodec/rectangle.h (revision 41250) |
+++ patched-ffmpeg-mt/libavcodec/rectangle.h (working copy) |
@@ -37,11 +37,11 @@ |
* fill a rectangle. |
* @param h height of the rectangle, should be a constant |
* @param w width of the rectangle, should be a constant |
- * @param size the size of val (1 or 4), should be a constant |
+ * @param size the size of val (1, 2 or 4), should be a constant |
*/ |
static av_always_inline void fill_rectangle(void *vp, int w, int h, int stride, uint32_t val, int size){ |
uint8_t *p= (uint8_t*)vp; |
- assert(size==1 || size==4); |
+ assert(size==1 || size==2 || size==4); |
assert(w<=4); |
w *= size; |
@@ -58,7 +58,7 @@ |
*(uint16_t*)(p + 2*stride)= v; |
*(uint16_t*)(p + 3*stride)= v; |
}else if(w==4){ |
- const uint32_t v= size==4 ? val : val*0x01010101; |
+ const uint32_t v= size==4 ? val : size==2 ? val*0x00010001 : val*0x01010101; |
*(uint32_t*)(p + 0*stride)= v; |
if(h==1) return; |
*(uint32_t*)(p + 1*stride)= v; |
@@ -68,7 +68,7 @@ |
}else if(w==8){ |
//gcc can't optimize 64bit math on x86_32 |
#if HAVE_FAST_64BIT |
- const uint64_t v= val*0x0100000001ULL; |
+ const uint64_t v= size==2 ? val*0x0001000100010001ULL : val*0x0100000001ULL; |
*(uint64_t*)(p + 0*stride)= v; |
if(h==1) return; |
*(uint64_t*)(p + 1*stride)= v; |
@@ -87,16 +87,17 @@ |
*(uint64_t*)(p + 0+3*stride)= v; |
*(uint64_t*)(p + 8+3*stride)= v; |
#else |
- *(uint32_t*)(p + 0+0*stride)= val; |
- *(uint32_t*)(p + 4+0*stride)= val; |
+ const uint32_t v= size==2 ? val*0x00010001 : val; |
+ *(uint32_t*)(p + 0+0*stride)= v; |
+ *(uint32_t*)(p + 4+0*stride)= v; |
if(h==1) return; |
- *(uint32_t*)(p + 0+1*stride)= val; |
- *(uint32_t*)(p + 4+1*stride)= val; |
+ *(uint32_t*)(p + 0+1*stride)= v; |
+ *(uint32_t*)(p + 4+1*stride)= v; |
if(h==2) return; |
- *(uint32_t*)(p + 0+2*stride)= val; |
- *(uint32_t*)(p + 4+2*stride)= val; |
- *(uint32_t*)(p + 0+3*stride)= val; |
- *(uint32_t*)(p + 4+3*stride)= val; |
+ *(uint32_t*)(p + 0+2*stride)= v; |
+ *(uint32_t*)(p + 4+2*stride)= v; |
+ *(uint32_t*)(p + 0+3*stride)= v; |
+ *(uint32_t*)(p + 4+3*stride)= v; |
}else if(w==16){ |
*(uint32_t*)(p + 0+0*stride)= val; |
*(uint32_t*)(p + 4+0*stride)= val; |