Add RAW10 image format

- Add RAW10 format in ImageFormat
- Add ImageReader support for this format

Bug: 15989722
Change-Id: Ic38ae596d5a472e990389d1fa221a82bea97b715
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index ad7ee7a..35317e1 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -267,7 +267,7 @@
 // graphics.h, need convert to the one defined in graphics.h here.
 static int Image_getPixelFormat(JNIEnv* env, int format)
 {
-    int jpegFormat, rawSensorFormat;
+    int jpegFormat;
     jfieldID fid;
 
     ALOGV("%s: format = 0x%x", __FUNCTION__, format);
@@ -413,6 +413,16 @@
             pData = buffer->data;
             dataSize = buffer->stride * buffer->height * bytesPerPixel;
             break;
+        case HAL_PIXEL_FORMAT_RAW10:
+            // Single plane 10bpp bayer data.
+            ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
+            LOG_ALWAYS_FATAL_IF(buffer->width % 4,
+                                "Width is not multiple of 4 %d", buffer->width);
+            LOG_ALWAYS_FATAL_IF(buffer->height % 2,
+                                "Height is not even %d", buffer->height);
+            pData = buffer->data;
+            dataSize = buffer->width * buffer->height * 10 / 8;
+            break;
         case HAL_PIXEL_FORMAT_RGBA_8888:
         case HAL_PIXEL_FORMAT_RGBX_8888:
             // Single plane, 32bpp.
@@ -470,7 +480,9 @@
             pixelStride = 1;
             break;
         case HAL_PIXEL_FORMAT_BLOB:
-            // Used for JPEG data, single plane, row and pixel strides are 0
+        case HAL_PIXEL_FORMAT_RAW10:
+            // Blob is used for JPEG data, RAW10 is used for 10-bit raw data, they are
+            // single plane, row and pixel strides are 0.
             ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
             pixelStride = 0;
             break;
@@ -523,7 +535,9 @@
             rowStride = (idx == 0) ? buffer->stride : ALIGN(buffer->stride / 2, 16);
             break;
         case HAL_PIXEL_FORMAT_BLOB:
-            // Used for JPEG data, single plane, row and pixel strides are 0
+        case HAL_PIXEL_FORMAT_RAW10:
+            // Blob is used for JPEG data, RAW10 is used for 10-bit raw data, they are
+            // single plane, row and pixel strides are 0.
             ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
             rowStride = 0;
             break;