VideoEnc Test: extend lockYCbCr() to hal yuv formats

Test: VtsHalMediaOmxV1_0Host
Bug: 37501531
Change-Id: I4661f41a92aac44e8a8d2721dfebbd25045fbe1c
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
index 7a57430..9e3d310 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
@@ -642,7 +642,8 @@
     rect.width = buffer->omxBuffer.attr.anwBuffer.width;
     rect.height = buffer->omxBuffer.attr.anwBuffer.height;
 
-    if (format == PixelFormat::YV12) {
+    if (format == PixelFormat::YV12 || format == PixelFormat::YCRCB_420_SP ||
+        format == PixelFormat::YCBCR_420_888) {
         mapper->lockYCbCr(
             buff, buffer->omxBuffer.attr.anwBuffer.usage, rect, fence,
             [&](android::hardware::graphics::mapper::V2_0::Error _e,
@@ -655,23 +656,32 @@
         if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
             return 1;
 
-        EXPECT_EQ(ycbcrLayout.chromaStep, 1U);
         char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
         for (size_t y = rect.height; y > 0; --y) {
             eleStream.read(ipBuffer, rect.width);
             if (eleStream.gcount() != rect.width) return 1;
             ipBuffer += ycbcrLayout.yStride;
         }
+
+        if (format == PixelFormat::YV12)
+            EXPECT_EQ(ycbcrLayout.chromaStep, 1U);
+        else if (format == PixelFormat::YCRCB_420_SP)
+            EXPECT_EQ(ycbcrLayout.chromaStep, 2U);
+
         ipBuffer = static_cast<char*>(ycbcrLayout.cb);
         for (size_t y = rect.height >> 1; y > 0; --y) {
-            eleStream.read(ipBuffer, rect.width >> 1);
-            if (eleStream.gcount() != rect.width >> 1) return 1;
+            for (int32_t x = 0; x < (rect.width >> 1); ++x) {
+                eleStream.read(&ipBuffer[ycbcrLayout.chromaStep * x], 1);
+                if (eleStream.gcount() != 1) return 1;
+            }
             ipBuffer += ycbcrLayout.cStride;
         }
         ipBuffer = static_cast<char*>(ycbcrLayout.cr);
         for (size_t y = rect.height >> 1; y > 0; --y) {
-            eleStream.read(ipBuffer, rect.width >> 1);
-            if (eleStream.gcount() != rect.width >> 1) return 1;
+            for (int32_t x = 0; x < (rect.width >> 1); ++x) {
+                eleStream.read(&ipBuffer[ycbcrLayout.chromaStep * x], 1);
+                if (eleStream.gcount() != 1) return 1;
+            }
             ipBuffer += ycbcrLayout.cStride;
         }
 
@@ -698,66 +708,7 @@
         if (error != android::hardware::graphics::mapper::V2_0::Error::NONE)
             return 1;
 
-        if (format == PixelFormat::YCBCR_420_888) {
-            ycbcrLayout.chromaStep = 1;
-            ycbcrLayout.yStride = buffer->omxBuffer.attr.anwBuffer.stride;
-            ycbcrLayout.cStride = ycbcrLayout.yStride >> 1;
-            ycbcrLayout.y = data;
-            ycbcrLayout.cb = static_cast<char*>(ycbcrLayout.y) +
-                             (ycbcrLayout.yStride * rect.height);
-            ycbcrLayout.cr = static_cast<char*>(ycbcrLayout.cb) +
-                             ((ycbcrLayout.yStride * rect.height) >> 2);
-
-            char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
-            for (size_t y = rect.height; y > 0; --y) {
-                eleStream.read(ipBuffer, rect.width);
-                if (eleStream.gcount() != rect.width) return 1;
-                ipBuffer += ycbcrLayout.yStride;
-            }
-            ipBuffer = static_cast<char*>(ycbcrLayout.cb);
-            for (size_t y = rect.height >> 1; y > 0; --y) {
-                eleStream.read(ipBuffer, rect.width >> 1);
-                if (eleStream.gcount() != rect.width >> 1) return 1;
-                ipBuffer += ycbcrLayout.cStride;
-            }
-            ipBuffer = static_cast<char*>(ycbcrLayout.cr);
-            for (size_t y = rect.height >> 1; y > 0; --y) {
-                eleStream.read(ipBuffer, rect.width >> 1);
-                if (eleStream.gcount() != rect.width >> 1) return 1;
-                ipBuffer += ycbcrLayout.cStride;
-            }
-        } else if (format == PixelFormat::YCRCB_420_SP) {
-            ycbcrLayout.chromaStep = 2;
-            ycbcrLayout.yStride = buffer->omxBuffer.attr.anwBuffer.stride;
-            ycbcrLayout.cStride = ycbcrLayout.yStride;
-            ycbcrLayout.y = data;
-            ycbcrLayout.cr = static_cast<char*>(ycbcrLayout.y) +
-                             (ycbcrLayout.yStride * rect.height);
-            ycbcrLayout.cb = static_cast<char*>(ycbcrLayout.cr) + 1;
-
-            char* ipBuffer = static_cast<char*>(ycbcrLayout.y);
-            for (size_t y = rect.height; y > 0; --y) {
-                eleStream.read(ipBuffer, rect.width);
-                if (eleStream.gcount() != rect.width) return 1;
-                ipBuffer += ycbcrLayout.yStride;
-            }
-            ipBuffer = static_cast<char*>(ycbcrLayout.cb);
-            for (size_t y = rect.height >> 1; y > 0; --y) {
-                for (int32_t x = 0; x<rect.width>> 1; ++x) {
-                    eleStream.read(&ipBuffer[2 * x], 1);
-                    if (eleStream.gcount() != 1) return 1;
-                }
-                ipBuffer += ycbcrLayout.cStride;
-            }
-            ipBuffer = static_cast<char*>(ycbcrLayout.cr);
-            for (size_t y = rect.height >> 1; y > 0; --y) {
-                for (int32_t x = 0; x<rect.width>> 1; ++x) {
-                    eleStream.read(&ipBuffer[2 * x], 1);
-                    if (eleStream.gcount() != 1) return 1;
-                }
-                ipBuffer += ycbcrLayout.cStride;
-            }
-        } else if (format == PixelFormat::BGRA_8888) {
+        if (format == PixelFormat::BGRA_8888) {
             char* ipBuffer = static_cast<char*>(data);
             for (size_t y = rect.height; y > 0; --y) {
                 eleStream.read(ipBuffer, rect.width * 4);