X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=rockchip.c;h=125e100f6c6237aa6fccf8fd425bb62154d6ae2b;hb=d3f07bd673cdc8a2c165aa2b921cbc21e3e945f2;hp=25f16abdaa3d478186026afb06654b5a754dae1d;hpb=c87a6d361abc95a6375da32f085c4a43e97bb48f;p=android-x86%2Fexternal-minigbm.git diff --git a/rockchip.c b/rockchip.c index 25f16ab..125e100 100644 --- a/rockchip.c +++ b/rockchip.c @@ -88,24 +88,21 @@ static int rockchip_init(struct driver *drv) drv_add_combinations(drv, texture_only_formats, ARRAY_SIZE(texture_only_formats), &metadata, BO_USE_TEXTURE_MASK); - /* - * Chrome uses DMA-buf mmap to write to YV12 buffers, which are then accessed by the - * Video Encoder Accelerator (VEA). It could also support NV12 potentially in the future. - */ - drv_modify_combination(drv, DRM_FORMAT_YVU420, &metadata, BO_USE_HW_VIDEO_ENCODER); + /* NV12 format for camera, display, decoding and encoding. */ /* Camera ISP supports only NV12 output. */ drv_modify_combination(drv, DRM_FORMAT_NV12, &metadata, - BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_DECODER | - BO_USE_HW_VIDEO_ENCODER | BO_USE_SCANOUT); + BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_SCANOUT | + BO_USE_HW_VIDEO_DECODER | BO_USE_HW_VIDEO_ENCODER); drv_modify_linear_combinations(drv); /* * R8 format is used for Android's HAL_PIXEL_FORMAT_BLOB and is used for JPEG snapshots - * from camera. + * from camera and input/output from hardware decoder/encoder. */ drv_add_combination(drv, DRM_FORMAT_R8, &metadata, BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_SW_MASK | - BO_USE_LINEAR | BO_USE_PROTECTED); + BO_USE_LINEAR | BO_USE_PROTECTED | BO_USE_HW_VIDEO_DECODER | + BO_USE_HW_VIDEO_ENCODER); return 0; } @@ -116,7 +113,7 @@ static int rockchip_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint { int ret; size_t plane; - struct drm_rockchip_gem_create gem_create; + struct drm_rockchip_gem_create gem_create = { 0 }; if (format == DRM_FORMAT_NV12) { uint32_t w_mbs = DIV_ROUND_UP(width, 16); @@ -159,9 +156,7 @@ static int rockchip_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_ROCKCHIP_GEM_CREATE, &gem_create); if (ret) { @@ -187,17 +182,15 @@ static int rockchip_bo_create(struct bo *bo, uint32_t width, uint32_t height, ui static void *rockchip_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; - struct drm_rockchip_gem_map_off gem_map; struct rockchip_private_map_data *priv; + struct drm_rockchip_gem_map_off gem_map = { 0 }; /* We can only map buffers created with SW access flags, which should * have no modifiers (ie, not AFBC). */ if (bo->meta.format_modifiers[0] == DRM_FORMAT_MOD_CHROMEOS_ROCKCHIP_AFBC) return MAP_FAILED; - memset(&gem_map, 0, sizeof(gem_map)); gem_map.handle = bo->handles[0].u32; - ret = drmIoctl(bo->drv->fd, DRM_IOCTL_ROCKCHIP_GEM_MAP_OFFSET, &gem_map); if (ret) { drv_log("DRM_IOCTL_ROCKCHIP_GEM_MAP_OFFSET failed\n");