{
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;
}