surface_internal: make _tbm_surface_internal_get_num_planes function 89/177189/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 23 Apr 2018 08:02:51 +0000 (17:02 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 24 Apr 2018 12:27:36 +0000 (21:27 +0900)
Change-Id: Idb474ec39f48f6ce3a0979b5f98fc67f3b050899

src/tbm_surface_internal.c

index ca26e4c..ade66ef 100644 (file)
@@ -404,6 +404,86 @@ _tbm_surface_check_file_is_symbolic_link(const char* path)
 }
 /* LCOV_EXCL_STOP */
 
+static int
+_tbm_surface_internal_get_num_planes(tbm_format format)
+{
+       int num_planes = 0;
+
+       switch (format) {
+       case TBM_FORMAT_C8:
+       case TBM_FORMAT_RGB332:
+       case TBM_FORMAT_BGR233:
+       case TBM_FORMAT_XRGB4444:
+       case TBM_FORMAT_XBGR4444:
+       case TBM_FORMAT_RGBX4444:
+       case TBM_FORMAT_BGRX4444:
+       case TBM_FORMAT_ARGB4444:
+       case TBM_FORMAT_ABGR4444:
+       case TBM_FORMAT_RGBA4444:
+       case TBM_FORMAT_BGRA4444:
+       case TBM_FORMAT_XRGB1555:
+       case TBM_FORMAT_XBGR1555:
+       case TBM_FORMAT_RGBX5551:
+       case TBM_FORMAT_BGRX5551:
+       case TBM_FORMAT_ARGB1555:
+       case TBM_FORMAT_ABGR1555:
+       case TBM_FORMAT_RGBA5551:
+       case TBM_FORMAT_BGRA5551:
+       case TBM_FORMAT_RGB565:
+       case TBM_FORMAT_BGR565:
+       case TBM_FORMAT_RGB888:
+       case TBM_FORMAT_BGR888:
+       case TBM_FORMAT_XRGB8888:
+       case TBM_FORMAT_XBGR8888:
+       case TBM_FORMAT_RGBX8888:
+       case TBM_FORMAT_BGRX8888:
+       case TBM_FORMAT_ARGB8888:
+       case TBM_FORMAT_ABGR8888:
+       case TBM_FORMAT_RGBA8888:
+       case TBM_FORMAT_BGRA8888:
+       case TBM_FORMAT_XRGB2101010:
+       case TBM_FORMAT_XBGR2101010:
+       case TBM_FORMAT_RGBX1010102:
+       case TBM_FORMAT_BGRX1010102:
+       case TBM_FORMAT_ARGB2101010:
+       case TBM_FORMAT_ABGR2101010:
+       case TBM_FORMAT_RGBA1010102:
+       case TBM_FORMAT_BGRA1010102:
+       case TBM_FORMAT_YUYV:
+       case TBM_FORMAT_YVYU:
+       case TBM_FORMAT_UYVY:
+       case TBM_FORMAT_VYUY:
+       case TBM_FORMAT_AYUV:
+               num_planes = 1;
+               break;
+       case TBM_FORMAT_NV12:
+       case TBM_FORMAT_NV12MT:
+       case TBM_FORMAT_NV21:
+       case TBM_FORMAT_NV16:
+       case TBM_FORMAT_NV61:
+               num_planes = 2;
+               break;
+       case TBM_FORMAT_YUV410:
+       case TBM_FORMAT_YVU410:
+       case TBM_FORMAT_YUV411:
+       case TBM_FORMAT_YVU411:
+       case TBM_FORMAT_YUV420:
+       case TBM_FORMAT_YVU420:
+       case TBM_FORMAT_YUV422:
+       case TBM_FORMAT_YVU422:
+       case TBM_FORMAT_YUV444:
+       case TBM_FORMAT_YVU444:
+               num_planes = 3;
+               break;
+
+       default:
+               _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
+               break;
+       }
+
+       return num_planes;
+}
+
 int
 tbm_surface_internal_is_valid(tbm_surface_h surface)
 {
@@ -501,79 +581,20 @@ tbm_surface_internal_get_num_planes(tbm_format format)
 {
        int num_planes = 0;
 
-       switch (format) {
-       case TBM_FORMAT_C8:
-       case TBM_FORMAT_RGB332:
-       case TBM_FORMAT_BGR233:
-       case TBM_FORMAT_XRGB4444:
-       case TBM_FORMAT_XBGR4444:
-       case TBM_FORMAT_RGBX4444:
-       case TBM_FORMAT_BGRX4444:
-       case TBM_FORMAT_ARGB4444:
-       case TBM_FORMAT_ABGR4444:
-       case TBM_FORMAT_RGBA4444:
-       case TBM_FORMAT_BGRA4444:
-       case TBM_FORMAT_XRGB1555:
-       case TBM_FORMAT_XBGR1555:
-       case TBM_FORMAT_RGBX5551:
-       case TBM_FORMAT_BGRX5551:
-       case TBM_FORMAT_ARGB1555:
-       case TBM_FORMAT_ABGR1555:
-       case TBM_FORMAT_RGBA5551:
-       case TBM_FORMAT_BGRA5551:
-       case TBM_FORMAT_RGB565:
-       case TBM_FORMAT_BGR565:
-       case TBM_FORMAT_RGB888:
-       case TBM_FORMAT_BGR888:
-       case TBM_FORMAT_XRGB8888:
-       case TBM_FORMAT_XBGR8888:
-       case TBM_FORMAT_RGBX8888:
-       case TBM_FORMAT_BGRX8888:
-       case TBM_FORMAT_ARGB8888:
-       case TBM_FORMAT_ABGR8888:
-       case TBM_FORMAT_RGBA8888:
-       case TBM_FORMAT_BGRA8888:
-       case TBM_FORMAT_XRGB2101010:
-       case TBM_FORMAT_XBGR2101010:
-       case TBM_FORMAT_RGBX1010102:
-       case TBM_FORMAT_BGRX1010102:
-       case TBM_FORMAT_ARGB2101010:
-       case TBM_FORMAT_ABGR2101010:
-       case TBM_FORMAT_RGBA1010102:
-       case TBM_FORMAT_BGRA1010102:
-       case TBM_FORMAT_YUYV:
-       case TBM_FORMAT_YVYU:
-       case TBM_FORMAT_UYVY:
-       case TBM_FORMAT_VYUY:
-       case TBM_FORMAT_AYUV:
-               num_planes = 1;
-               break;
-       case TBM_FORMAT_NV12:
-       case TBM_FORMAT_NV12MT:
-       case TBM_FORMAT_NV21:
-       case TBM_FORMAT_NV16:
-       case TBM_FORMAT_NV61:
-               num_planes = 2;
-               break;
-       case TBM_FORMAT_YUV410:
-       case TBM_FORMAT_YVU410:
-       case TBM_FORMAT_YUV411:
-       case TBM_FORMAT_YVU411:
-       case TBM_FORMAT_YUV420:
-       case TBM_FORMAT_YVU420:
-       case TBM_FORMAT_YUV422:
-       case TBM_FORMAT_YVU422:
-       case TBM_FORMAT_YUV444:
-       case TBM_FORMAT_YVU444:
-               num_planes = 3;
-               break;
+       _tbm_surface_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
 
-       default:
-               break;
+       num_planes = _tbm_surface_internal_get_num_planes(format);
+       if (!num_planes) {
+               TBM_ERR("error: tbm_error(%s)\n", tbm_error_str(tbm_get_last_error()));
+               _tbm_surface_mutex_unlock();
+               return 0;
        }
 
        TBM_TRACE_SURFACE_INTERNAL("tbm_format(%s) num_planes(%d)\n", _tbm_surface_internal_format_to_str(format), num_planes);
 
+       _tbm_surface_mutex_unlock();
+
        return num_planes;
 }
 
@@ -720,7 +741,11 @@ tbm_surface_internal_create_with_flags(int width, int height,
        surf->info.height = height;
        surf->info.format = format;
        surf->info.bpp = tbm_surface_internal_get_bpp(format);
-       surf->info.num_planes = tbm_surface_internal_get_num_planes(format);
+       surf->info.num_planes = _tbm_surface_internal_get_num_planes(format);
+       if (!surf->info.num_planes) {
+               TBM_ERR("fail to get num_planes. error(%s)\n", tbm_error_str(tbm_get_last_error()));
+               goto num_planes_fail;
+       }
        surf->refcnt = 1;
 
        /* get size, stride and offset bo_idx */
@@ -858,6 +883,7 @@ alloc_bo_fail:
                        tbm_bo_unref(surf->bos[j]);
        }
 query_plane_data_fail:
+num_planes_fail:
        free(surf);
 alloc_surf_fail:
 check_valid_fail: