diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index f0b4639..dd9a029 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -303,7 +303,7 @@
   return Error::NONE;
 }
 
-static void getComponentSizeAndOffset(int32_t format, PlaneLayoutComponent &comp) {
+static Error getComponentSizeAndOffset(int32_t format, PlaneLayoutComponent &comp) {
   switch (format) {
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_8888):
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBX_8888):
@@ -315,8 +315,11 @@
         comp.offsetInBits = 8;
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
         comp.offsetInBits = 16;
-      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value &&
+                 format != HAL_PIXEL_FORMAT_RGB_888) {
         comp.offsetInBits = 24;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGB_565):
@@ -329,6 +332,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
         comp.offsetInBits = 11;
         comp.sizeInBits = 5;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGR_565):
@@ -341,6 +346,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
         comp.offsetInBits = 0;
         comp.sizeInBits = 5;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRA_8888):
@@ -353,8 +360,11 @@
         comp.offsetInBits = 8;
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
         comp.offsetInBits = 0;
-      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value &&
+                 format != HAL_PIXEL_FORMAT_BGR_888) {
         comp.offsetInBits = 24;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_5551):
@@ -370,6 +380,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 1;
         comp.offsetInBits = 15;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_4444):
@@ -385,6 +397,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 4;
         comp.offsetInBits = 12;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_R_8):
@@ -392,8 +406,11 @@
       comp.sizeInBits = 8;
       if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
         comp.offsetInBits = 0;
-      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+      } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value &&
+                 format != HAL_PIXEL_FORMAT_R_8) {
         comp.offsetInBits = 8;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_1010102):
@@ -410,6 +427,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 2;
         comp.offsetInBits = 30;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_ARGB_2101010):
@@ -426,6 +445,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 2;
         comp.offsetInBits = 0;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRA_1010102):
@@ -442,6 +463,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 2;
         comp.offsetInBits = 30;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_ABGR_2101010):
@@ -458,6 +481,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 2;
         comp.offsetInBits = 0;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_FP16):
@@ -473,6 +498,8 @@
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
         comp.sizeInBits = 16;
         comp.offsetInBits = 48;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_SP):
@@ -485,6 +512,8 @@
         comp.offsetInBits = 0;
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
         comp.offsetInBits = 8;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP):
@@ -498,12 +527,16 @@
         comp.offsetInBits = 0;
       } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value) {
         comp.offsetInBits = 8;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_Y16):
       if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value) {
         comp.offsetInBits = 0;
         comp.sizeInBits = 16;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_YV12):
@@ -512,12 +545,16 @@
           comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
         comp.offsetInBits = 0;
         comp.sizeInBits = 8;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_Y8):
       if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value) {
         comp.offsetInBits = 0;
         comp.sizeInBits = 8;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_P010):
@@ -526,11 +563,15 @@
           comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
         comp.offsetInBits = 0;
         comp.sizeInBits = 10;
+      } else {
+        return Error::BAD_VALUE;
       }
       break;
     default:
-      break;
+      ALOGI_IF(DEBUG, "Offset and size in bits unknown for format %d", format);
+      return Error::UNSUPPORTED;
   }
+  return Error::NONE;
 }
 
 static void grallocToStandardPlaneLayoutComponentType(uint32_t in,
@@ -542,44 +583,44 @@
 
   if (in & PLANE_COMPONENT_Y) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_Y;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_Cb) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_CB;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_Cr) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_CR;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_R) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_R;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_G) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_G;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_B) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_B;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_A) {
     comp.type = android::gralloc4::PlaneLayoutComponentType_A;
-    getComponentSizeAndOffset(format, comp);
-    components->push_back(comp);
+    if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+      components->push_back(comp);
   }
 
   if (in & PLANE_COMPONENT_RAW) {
