Fix for YUV bugs
Two issues, YUV intrinsic would repeat u&v for the edge padding
During the support for flexible YUV, u&v got swapped in the accessor.
bug 10826418
Change-Id: I1cf6e27c2114807d6aece4f9dd44257d4f4aa477
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index 9f217e8..d2f5f30 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -818,10 +818,12 @@
dst += alloc->mHal.drvState.lod[lod].stride;
}
if (alloc->mHal.state.yuv) {
+ size_t clineSize = lineSize;
int lod = 1;
int maxLod = 2;
if (alloc->mHal.state.yuv == HAL_PIXEL_FORMAT_YV12) {
maxLod = 3;
+ clineSize >>= 1;
} else if (alloc->mHal.state.yuv == HAL_PIXEL_FORMAT_YCrCb_420_SP) {
lod = 2;
maxLod = 3;
@@ -831,7 +833,7 @@
uint8_t *dst = GetOffsetPtr(alloc, xoff, yoff, 0, lod, face);
for (uint32_t line=(yoff >> 1); line < ((yoff+h)>>1); line++) {
- memcpy(dst, src, lineSize);
+ memcpy(dst, src, clineSize);
src += alloc->mHal.drvState.lod[lod].stride;
dst += alloc->mHal.drvState.lod[lod].stride;
}