surface_internal: make _tbm_surface_internal_get_bpp function 90/177190/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 23 Apr 2018 08:18:21 +0000 (17:18 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 24 Apr 2018 12:27:36 +0000 (21:27 +0900)
Change-Id: I544d4e2320cce6dd2667d1a5515276f4e3cede5f

src/tbm_surface_internal.c

index ade66ef..bb70ff4 100644 (file)
@@ -484,6 +484,100 @@ _tbm_surface_internal_get_num_planes(tbm_format format)
        return num_planes;
 }
 
+static int
+_tbm_surface_internal_get_bpp(tbm_format format)
+{
+
+       int bpp = 0;
+
+       switch (format) {
+       case TBM_FORMAT_C8:
+       case TBM_FORMAT_RGB332:
+       case TBM_FORMAT_BGR233:
+               bpp = 8;
+               break;
+       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:
+               bpp = 16;
+               break;
+       case TBM_FORMAT_RGB888:
+       case TBM_FORMAT_BGR888:
+               bpp = 24;
+               break;
+       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:
+               bpp = 32;
+               break;
+       case TBM_FORMAT_NV12:
+       case TBM_FORMAT_NV12MT:
+       case TBM_FORMAT_NV21:
+               bpp = 12;
+               break;
+       case TBM_FORMAT_NV16:
+       case TBM_FORMAT_NV61:
+               bpp = 16;
+               break;
+       case TBM_FORMAT_YUV410:
+       case TBM_FORMAT_YVU410:
+               bpp = 9;
+               break;
+       case TBM_FORMAT_YUV411:
+       case TBM_FORMAT_YVU411:
+       case TBM_FORMAT_YUV420:
+       case TBM_FORMAT_YVU420:
+               bpp = 12;
+               break;
+       case TBM_FORMAT_YUV422:
+       case TBM_FORMAT_YVU422:
+               bpp = 16;
+               break;
+       case TBM_FORMAT_YUV444:
+       case TBM_FORMAT_YVU444:
+               bpp = 24;
+               break;
+       default:
+               _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
+               break;
+       }
+
+       return bpp;
+}
+
 int
 tbm_surface_internal_is_valid(tbm_surface_h surface)
 {
@@ -601,93 +695,20 @@ tbm_surface_internal_get_num_planes(tbm_format format)
 int
 tbm_surface_internal_get_bpp(tbm_format format)
 {
-
        int bpp = 0;
 
-       switch (format) {
-       case TBM_FORMAT_C8:
-       case TBM_FORMAT_RGB332:
-       case TBM_FORMAT_BGR233:
-               bpp = 8;
-               break;
-       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:
-               bpp = 16;
-               break;
-       case TBM_FORMAT_RGB888:
-       case TBM_FORMAT_BGR888:
-               bpp = 24;
-               break;
-       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:
-               bpp = 32;
-               break;
-       case TBM_FORMAT_NV12:
-       case TBM_FORMAT_NV12MT:
-       case TBM_FORMAT_NV21:
-               bpp = 12;
-               break;
-       case TBM_FORMAT_NV16:
-       case TBM_FORMAT_NV61:
-               bpp = 16;
-               break;
-       case TBM_FORMAT_YUV410:
-       case TBM_FORMAT_YVU410:
-               bpp = 9;
-               break;
-       case TBM_FORMAT_YUV411:
-       case TBM_FORMAT_YVU411:
-       case TBM_FORMAT_YUV420:
-       case TBM_FORMAT_YVU420:
-               bpp = 12;
-               break;
-       case TBM_FORMAT_YUV422:
-       case TBM_FORMAT_YVU422:
-               bpp = 16;
-               break;
-       case TBM_FORMAT_YUV444:
-       case TBM_FORMAT_YVU444:
-               bpp = 24;
-               break;
-       default:
-               break;
+       _tbm_surface_mutex_lock();
+       _tbm_set_last_result(TBM_ERROR_NONE);
+
+       bpp = _tbm_surface_internal_get_bpp(format);
+       if (!bpp) {
+               TBM_ERR("error: tbm_error(%s)\n", tbm_error_str(tbm_get_last_error()));
+               _tbm_surface_mutex_unlock();
+               return 0;
        }
 
+       _tbm_surface_mutex_unlock();
+
        TBM_TRACE_SURFACE_INTERNAL("tbm_format(%s) bpp(%d)\n", _tbm_surface_internal_format_to_str(format), bpp);
 
        return bpp;
@@ -740,7 +761,11 @@ tbm_surface_internal_create_with_flags(int width, int height,
        surf->info.width = width;
        surf->info.height = height;
        surf->info.format = format;
-       surf->info.bpp = tbm_surface_internal_get_bpp(format);
+       surf->info.bpp = _tbm_surface_internal_get_bpp(format);
+       if (!surf->info.bpp) {
+               TBM_ERR("fail to get bpp. error(%s)\n", tbm_error_str(tbm_get_last_error()));
+               goto bpp_fail;
+       }
        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()));
@@ -883,6 +908,7 @@ alloc_bo_fail:
                        tbm_bo_unref(surf->bos[j]);
        }
 query_plane_data_fail:
+bpp_fail:
 num_planes_fail:
        free(surf);
 alloc_surf_fail:
@@ -944,8 +970,13 @@ tbm_surface_internal_create_with_bos(tbm_surface_info_s *info,
        surf->info.format = info->format;
        if (info->bpp > 0)
                surf->info.bpp = info->bpp;
-       else
-               surf->info.bpp = tbm_surface_internal_get_bpp(info->format);
+       else {
+               surf->info.bpp = _tbm_surface_internal_get_bpp(info->format);
+               if (!surf->info.bpp) {
+                       TBM_ERR("fail to get bpp. error(%s)\n", tbm_error_str(tbm_get_last_error()));
+                       goto bpp_fail;
+               }
+       }
        surf->info.num_planes = info->num_planes;
        surf->refcnt = 1;
 
@@ -1006,6 +1037,7 @@ tbm_surface_internal_create_with_bos(tbm_surface_info_s *info,
 
 /* LCOV_EXCL_START */
 check_bo_fail:
+bpp_fail:
        for (i = 0; i < num; i++) {
                if (surf->bos[i])
                        tbm_bo_unref(surf->bos[i]);
@@ -2136,7 +2168,12 @@ tbm_surface_internal_dump_buffer(tbm_surface_h surface, const char *type)
                buf_info->info.width = info.width * scale_factor;
                buf_info->info.height = info.height * scale_factor;
                buf_info->info.format = info.format;
-               buf_info->info.bpp = tbm_surface_internal_get_bpp(buf_info->info.format);
+               buf_info->info.bpp = _tbm_surface_internal_get_bpp(buf_info->info.format);
+               if (!buf_info->info.bpp) {
+                       TBM_ERR("fail to get bpp. error(%s)\n", tbm_error_str(tbm_get_last_error()));
+                       tbm_surface_unmap(surface);
+                       return;
+               }
                buf_info->info.num_planes = 1;
                buf_info->info.planes[0].stride = buf_info->info.width * bpp;
                buf_info->info.size = buf_info->info.width * buf_info->info.height * bpp;