OSDN Git Service

minigbm: Add dri_generic driver to Android.bp
[android-x86/external-minigbm.git] / mediatek.c
index 1f69d14..a0b77e6 100644 (file)
@@ -54,8 +54,7 @@ static int mediatek_init(struct driver *drv)
        drv_add_combinations(drv, texture_source_formats, ARRAY_SIZE(texture_source_formats),
                             &LINEAR_METADATA, BO_USE_TEXTURE_MASK);
 
-       drv_add_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA,
-                           BO_USE_SW_MASK | BO_USE_LINEAR | BO_USE_PROTECTED);
+       drv_add_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA, BO_USE_SW_MASK | BO_USE_LINEAR);
 
        /* Android CTS tests require this. */
        drv_add_combination(drv, DRM_FORMAT_BGR888, &LINEAR_METADATA, BO_USE_SW_MASK);
@@ -66,7 +65,10 @@ static int mediatek_init(struct driver *drv)
        metadata.modifier = DRM_FORMAT_MOD_LINEAR;
        drv_modify_combination(drv, DRM_FORMAT_YVU420, &metadata, BO_USE_HW_VIDEO_DECODER);
        drv_modify_combination(drv, DRM_FORMAT_YVU420_ANDROID, &metadata, BO_USE_HW_VIDEO_DECODER);
+#if defined(MTK_MT8183) || defined(MTK_MT8192)
+       // TODO(hiroh): Switch to use NV12 for video decoder on MT8173 as well.
        drv_modify_combination(drv, DRM_FORMAT_NV12, &metadata, BO_USE_HW_VIDEO_DECODER);
+#endif
 
        /*
         * R8 format is used for Android's HAL_PIXEL_FORMAT_BLOB for input/output from
@@ -104,7 +106,7 @@ static int mediatek_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint
        int ret;
        size_t plane;
        uint32_t stride;
-       struct drm_mtk_gem_create gem_create;
+       struct drm_mtk_gem_create gem_create = { 0 };
 
        if (!drv_has_modifier(modifiers, count, DRM_FORMAT_MOD_LINEAR)) {
                errno = EINVAL;
@@ -143,7 +145,6 @@ static int mediatek_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint
                drv_bo_from_format(bo, stride, height, format);
        }
 
-       memset(&gem_create, 0, sizeof(gem_create));
        gem_create.size = bo->meta.total_size;
 
        ret = drmIoctl(bo->drv->fd, DRM_IOCTL_MTK_GEM_CREATE, &gem_create);
@@ -169,10 +170,9 @@ static int mediatek_bo_create(struct bo *bo, uint32_t width, uint32_t height, ui
 static void *mediatek_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags)
 {
        int ret, prime_fd;
-       struct drm_mtk_gem_map_off gem_map;
+       struct drm_mtk_gem_map_off gem_map = { 0 };
        struct mediatek_private_map_data *priv;
 
-       memset(&gem_map, 0, sizeof(gem_map));
        gem_map.handle = bo->handles[0].u32;
 
        ret = drmIoctl(bo->drv->fd, DRM_IOCTL_MTK_GEM_MAP_OFFSET, &gem_map);
@@ -275,8 +275,14 @@ static uint32_t mediatek_resolve_format(struct driver *drv, uint32_t format, uin
                /*HACK: See b/28671744 */
                return DRM_FORMAT_XBGR8888;
        case DRM_FORMAT_FLEX_YCbCr_420_888:
-               if (use_flags & (BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE |
-                                BO_USE_HW_VIDEO_DECODER | BO_USE_HW_VIDEO_ENCODER)) {
+#ifdef MTK_MT8183
+               // TODO(hiroh): Switch to use NV12 for video decoder on MT8173 as well.
+               if (use_flags & (BO_USE_HW_VIDEO_DECODER)) {
+                       return DRM_FORMAT_NV12;
+               }
+#endif
+               if (use_flags &
+                   (BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_ENCODER)) {
                        return DRM_FORMAT_NV12;
                }
                return DRM_FORMAT_YVU420;