{\r
switch(halFormat)\r
{\r
- case HAL_PIXEL_FORMAT_RGBA_8888:\r
- return GL_RGBA;\r
- case HAL_PIXEL_FORMAT_RGBX_8888:\r
- return GL_RGB;\r
- case HAL_PIXEL_FORMAT_RGB_888:\r
- ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__);\r
- return GL_RGB;\r
- case HAL_PIXEL_FORMAT_BGRA_8888:\r
- return GL_BGRA_EXT;\r
- case HAL_PIXEL_FORMAT_RGB_565:\r
- return GL_RGB565;\r
- case HAL_PIXEL_FORMAT_YV12:\r
- return SW_YV12_BT601;\r
- default:\r
- ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);\r
+ case HAL_PIXEL_FORMAT_RGBA_8888: return GL_RGBA;\r
+ case HAL_PIXEL_FORMAT_RGBX_8888: return GL_RGB;\r
+ case HAL_PIXEL_FORMAT_RGB_888: return GL_NONE; // Unsupported\r
+ case HAL_PIXEL_FORMAT_BGRA_8888: return GL_BGRA_EXT;\r
+ case HAL_PIXEL_FORMAT_RGB_565: return GL_RGB565;\r
+ case HAL_PIXEL_FORMAT_YV12: return SW_YV12_BT601;\r
+ default: return GL_NONE;\r
}\r
-\r
- return GL_RGBA;\r
}\r
\r
inline GLenum GLPixelTypeFromAndroid(int halFormat)\r
{\r
switch(halFormat)\r
{\r
- case HAL_PIXEL_FORMAT_RGBA_8888:\r
- case HAL_PIXEL_FORMAT_RGBX_8888:\r
- case HAL_PIXEL_FORMAT_BGRA_8888:\r
- return GL_UNSIGNED_BYTE;\r
- case HAL_PIXEL_FORMAT_RGB_565:\r
- return GL_UNSIGNED_SHORT_5_6_5;\r
- case HAL_PIXEL_FORMAT_YV12:\r
- return GL_UNSIGNED_BYTE;\r
- case HAL_PIXEL_FORMAT_RGB_888:\r
- ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__);\r
- return GL_UNSIGNED_BYTE;\r
- default:\r
- ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);\r
+ case HAL_PIXEL_FORMAT_RGBA_8888: return GL_UNSIGNED_BYTE;\r
+ case HAL_PIXEL_FORMAT_RGBX_8888: return GL_UNSIGNED_BYTE;\r
+ case HAL_PIXEL_FORMAT_RGB_888: return GL_NONE; // Unsupported\r
+ case HAL_PIXEL_FORMAT_BGRA_8888: return GL_UNSIGNED_BYTE;\r
+ case HAL_PIXEL_FORMAT_RGB_565: return GL_UNSIGNED_SHORT_5_6_5;\r
+ case HAL_PIXEL_FORMAT_YV12: return GL_UNSIGNED_BYTE;\r
+ default: return GL_NONE;\r
}\r
-\r
- return GL_UNSIGNED_BYTE;\r
}\r
\r
class AndroidNativeImage : public egl::Image\r
#if defined(__ANDROID__)\r
if(target == EGL_NATIVE_BUFFER_ANDROID)\r
{\r
- return new AndroidNativeImage(reinterpret_cast<ANativeWindowBuffer*>(buffer));\r
+ ANativeWindowBuffer *nativeBuffer = reinterpret_cast<ANativeWindowBuffer*>(buffer);\r
+\r
+ if(!nativeBuffer || GLPixelFormatFromAndroid(nativeBuffer->format) == GL_NONE)\r
+ {\r
+ ALOGW("%s badness unsupported HAL format=%x", __FUNCTION__, nativeBuffer ? nativeBuffer->format : 0);\r
+ return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);\r
+ }\r
+\r
+ return new AndroidNativeImage(nativeBuffer);\r
}\r
#endif\r
\r