From: Tomasz Figa Date: Thu, 22 Jun 2017 07:52:43 +0000 (+0900) Subject: minigbm: i915: Use NV12 as the main YUV format, including camera output X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fexternal-minigbm.git;a=commitdiff_plain;h=b92e4f87bb2259062cf7edade6e7163486738243 minigbm: i915: Use NV12 as the main YUV format, including camera output On SKL and newer, the display controller supports NV12 natively for overlays. Moreover it's the only output format supported by the camera subsystem. Since it shouldn't matter for other uses cases if we use NV12 or YVU420, let's just switch everything to NV12 for simplicity. BUG=b:32077885 TEST=Play a video in Android YouTube app on Cyan and Reef Change-Id: I5cfcdec2b0e2020a3ae1e8364b60df3585838807 Reviewed-on: https://chromium-review.googlesource.com/544489 Commit-Ready: Owen Lin Tested-by: Owen Lin Reviewed-by: Gurchetan Singh --- diff --git a/i915.c b/i915.c index be315a1..c571c22 100644 --- a/i915.c +++ b/i915.c @@ -26,11 +26,11 @@ static const uint32_t render_target_formats[] = { DRM_FORMAT_ABGR8888, DRM_FO DRM_FORMAT_XRGB1555, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB8888 }; -static const uint32_t tileable_texture_source_formats[] = { DRM_FORMAT_GR88, DRM_FORMAT_NV12, - DRM_FORMAT_R8, DRM_FORMAT_UYVY, - DRM_FORMAT_YUYV }; +static const uint32_t tileable_texture_source_formats[] = { DRM_FORMAT_GR88, DRM_FORMAT_R8, + DRM_FORMAT_UYVY, DRM_FORMAT_YUYV }; -static const uint32_t texture_source_formats[] = { DRM_FORMAT_YVU420, DRM_FORMAT_YVU420_ANDROID }; +static const uint32_t texture_source_formats[] = { DRM_FORMAT_YVU420, DRM_FORMAT_YVU420_ANDROID, + DRM_FORMAT_NV12 }; struct i915_device { uint32_t gen; @@ -526,10 +526,16 @@ static uint32_t i915_resolve_format(uint32_t format, uint64_t use_flags) /*HACK: See b/28671744 */ return DRM_FORMAT_XBGR8888; case DRM_FORMAT_FLEX_YCbCr_420_888: - /* KBL camera subsystem requires NV12. */ - if (use_flags & (BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE)) - return DRM_FORMAT_NV12; - return DRM_FORMAT_YVU420; + /* + * KBL camera subsystem requires NV12. Our other use cases + * don't care: + * - Hardware video supports NV12, + * - USB Camera HALv3 supports NV12, + * - USB Camera HALv1 doesn't use this format. + * Moreover, NV12 is preferred for video, due to overlay + * support on SKL+. + */ + return DRM_FORMAT_NV12; default: return format; }