libtdm-exynos: set correct buf info for pp 29/174229/2
authorJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 29 Mar 2018 07:22:35 +0000 (16:22 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 29 Mar 2018 08:20:34 +0000 (17:20 +0900)
Change-Id: I5fb9ef8683c1d074863a24beab0db5e17a7ef723
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/tdm_exynos_pp.c

index 1f9e4f2dafacbca3feefe620998899606e695ecf..255ab60de83b212998bd1b540681f92ab5657734 100644 (file)
@@ -66,41 +66,58 @@ _tdm_exynos_pp_process(tdm_exynos_pp_data *pp_data, tdm_exynos_pp_buffer *buffer
 {
        tdm_exynos_data *exynos_data = pp_data->exynos_data;
        tdm_info_pp *info = &pp_data->info;
-       int i, bo_num, ret = 0;
+       int i, plane_num, ret = 0;
+       tbm_bo bo;
 
        struct exynos_drm_ipp_std_task task;
        struct drm_exynos_ioctl_ipp_commit arg;
 
        CLEAR(task);
 
+       /* src buf */
        task.buf[0].id = DRM_EXYNOS_IPP_TASK_BUFFER | DRM_EXYNOS_IPP_TASK_TYPE_SOURCE;
        task.buf[0].fourcc = tdm_exynos_format_to_drm_format(tbm_surface_get_format(buffer->src));
        task.buf[0].width = tbm_surface_get_width(buffer->src);
        task.buf[0].height = tbm_surface_get_height(buffer->src);
-
-       bo_num = tbm_surface_internal_get_num_bos(buffer->src);
-       for (i = 0; i < EXYNOS_DRM_PLANAR_MAX && i < bo_num; i++) {
-               tbm_bo bo = tbm_surface_internal_get_bo(buffer->src, i);
+       bo = tbm_surface_internal_get_bo(buffer->src, 0);
+       plane_num = tbm_surface_internal_get_num_planes(tbm_surface_get_format(buffer->src));
+       for (i = 0; i < EXYNOS_DRM_PLANAR_MAX && i < plane_num; i++) {
+               tbm_bo bo2;
                uint32_t size, offset, pitch;
 
+               if (i != 0) {
+                       bo2 = tbm_surface_internal_get_bo(buffer->src, i);
+                       if (!bo2) bo2 = bo;
+               } else {
+                       bo2 = bo;
+               }
+
                tbm_surface_internal_get_plane_data(buffer->src, i, &size, &offset, &pitch);
-               task.buf[0].gem_id[i] = tbm_bo_get_handle(bo, TBM_DEVICE_DEFAULT).u32;
+               task.buf[0].gem_id[i] = tbm_bo_get_handle(bo2, TBM_DEVICE_DEFAULT).u32;
                task.buf[0].pitch[i] = pitch;
                task.buf[0].offset[i] = offset;
        }
 
+       /* dst buf */
        task.buf[1].id = DRM_EXYNOS_IPP_TASK_BUFFER | DRM_EXYNOS_IPP_TASK_TYPE_DESTINATION;
        task.buf[1].fourcc = tdm_exynos_format_to_drm_format(tbm_surface_get_format(buffer->dst));
        task.buf[1].width = tbm_surface_get_width(buffer->dst);
        task.buf[1].height = tbm_surface_get_height(buffer->dst);
-
-       bo_num = tbm_surface_internal_get_num_bos(buffer->dst);
-       for (i = 0; i < EXYNOS_DRM_PLANAR_MAX && i < bo_num; i++) {
-               tbm_bo bo = tbm_surface_internal_get_bo(buffer->dst, i);
+       bo = tbm_surface_internal_get_bo(buffer->dst, 0);
+       plane_num = tbm_surface_internal_get_num_planes(tbm_surface_get_format(buffer->dst));
+       for (i = 0; i < EXYNOS_DRM_PLANAR_MAX && i < plane_num; i++) {
+               tbm_bo bo2;
                uint32_t size, offset, pitch;
 
+               if (i != 0) {
+                       bo2 = tbm_surface_internal_get_bo(buffer->src, i);
+                       if (!bo2) bo2 = bo;
+               } else {
+                       bo2 = bo;
+               }
+
                tbm_surface_internal_get_plane_data(buffer->dst, i, &size, &offset, &pitch);
-               task.buf[1].gem_id[i] = tbm_bo_get_handle(bo, TBM_DEVICE_DEFAULT).u32;
+               task.buf[1].gem_id[i] = tbm_bo_get_handle(bo2, TBM_DEVICE_DEFAULT).u32;
                task.buf[1].pitch[i] = pitch;
                task.buf[1].offset[i] = offset;
        }