pixel_format: Add more format
[platform/core/uifw/libds-tizen.git] / src / shared / pixel_format.c
1 #include <inttypes.h>
2 #include <drm_fourcc.h>
3 #include <tbm_type.h>
4
5 #include <wayland-util.h>
6 #include <libds/log.h>
7 #include "pixel_format.h"
8
9 #ifdef ARRAY_LENGTH
10 #undef ARRAY_LENGTH
11 #endif
12
13 #define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
14
15 struct ds_tbm_format
16 {
17     uint32_t drm_format;
18     uint32_t tbm_format;
19 };
20
21 static const struct ds_tbm_format formats[] =
22 {
23     {DRM_FORMAT_C8, TBM_FORMAT_C8},
24     {DRM_FORMAT_RGB332, TBM_FORMAT_RGB332},
25     {DRM_FORMAT_BGR233, TBM_FORMAT_BGR233},
26     {DRM_FORMAT_XRGB4444, TBM_FORMAT_XRGB4444},
27     {DRM_FORMAT_XBGR4444, TBM_FORMAT_XBGR4444},
28     {DRM_FORMAT_RGBX4444, TBM_FORMAT_RGBX4444},
29     {DRM_FORMAT_BGRX4444, TBM_FORMAT_BGRX4444},
30     {DRM_FORMAT_ARGB4444, TBM_FORMAT_ARGB4444},
31     {DRM_FORMAT_ABGR4444, TBM_FORMAT_ABGR4444},
32     {DRM_FORMAT_RGBA4444, TBM_FORMAT_RGBA4444},
33     {DRM_FORMAT_BGRA4444, TBM_FORMAT_BGRA4444},
34     {DRM_FORMAT_XRGB1555, TBM_FORMAT_XRGB1555},
35     {DRM_FORMAT_XBGR1555, TBM_FORMAT_XBGR1555},
36     {DRM_FORMAT_RGBX5551, TBM_FORMAT_RGBX5551},
37     {DRM_FORMAT_BGRX5551, TBM_FORMAT_BGRX5551},
38     {DRM_FORMAT_ARGB1555, TBM_FORMAT_ARGB1555},
39     {DRM_FORMAT_ABGR1555, TBM_FORMAT_ABGR1555},
40     {DRM_FORMAT_RGBA5551, TBM_FORMAT_RGBA5551},
41     {DRM_FORMAT_BGRA5551, TBM_FORMAT_BGRA5551},
42     {DRM_FORMAT_RGB565, TBM_FORMAT_RGB565},
43     {DRM_FORMAT_BGR565, TBM_FORMAT_BGR565},
44     {DRM_FORMAT_RGB888, TBM_FORMAT_RGB888},
45     {DRM_FORMAT_BGR888, TBM_FORMAT_BGR888},
46     {DRM_FORMAT_XRGB8888, TBM_FORMAT_XRGB8888},
47     {DRM_FORMAT_XBGR8888, TBM_FORMAT_XBGR8888},
48     {DRM_FORMAT_RGBX8888, TBM_FORMAT_RGBX8888},
49     {DRM_FORMAT_BGRX8888, TBM_FORMAT_BGRX8888},
50     {DRM_FORMAT_ARGB8888, TBM_FORMAT_ARGB8888},
51     {DRM_FORMAT_ABGR8888, TBM_FORMAT_ABGR8888},
52     {DRM_FORMAT_RGBA8888, TBM_FORMAT_RGBA8888},
53     {DRM_FORMAT_BGRA8888, TBM_FORMAT_BGRA8888},
54     {DRM_FORMAT_XRGB2101010, TBM_FORMAT_XRGB2101010},
55     {DRM_FORMAT_XBGR2101010, TBM_FORMAT_XBGR2101010},
56     {DRM_FORMAT_RGBX1010102, TBM_FORMAT_RGBX1010102},
57     {DRM_FORMAT_BGRX1010102, TBM_FORMAT_BGRX1010102},
58     {DRM_FORMAT_ARGB2101010, TBM_FORMAT_ARGB2101010},
59     {DRM_FORMAT_ABGR2101010, TBM_FORMAT_ABGR2101010},
60     {DRM_FORMAT_RGBA1010102, TBM_FORMAT_RGBA1010102},
61     {DRM_FORMAT_BGRA1010102, TBM_FORMAT_BGRA1010102},
62     {DRM_FORMAT_YUYV, TBM_FORMAT_YUYV},
63     {DRM_FORMAT_YVYU, TBM_FORMAT_YVYU},
64     {DRM_FORMAT_UYVY, TBM_FORMAT_UYVY},
65     {DRM_FORMAT_VYUY, TBM_FORMAT_VYUY},
66     {DRM_FORMAT_AYUV, TBM_FORMAT_AYUV},
67     {DRM_FORMAT_NV12, TBM_FORMAT_NV12},
68     {DRM_FORMAT_NV21, TBM_FORMAT_NV21},
69     {DRM_FORMAT_NV16, TBM_FORMAT_NV16},
70     {DRM_FORMAT_NV61, TBM_FORMAT_NV61},
71     {DRM_FORMAT_YUV410, TBM_FORMAT_YUV410},
72     {DRM_FORMAT_YVU410, TBM_FORMAT_YVU410},
73     {DRM_FORMAT_YUV411, TBM_FORMAT_YUV411},
74     {DRM_FORMAT_YVU411, TBM_FORMAT_YVU411},
75     {DRM_FORMAT_YUV420, TBM_FORMAT_YUV420},
76     {DRM_FORMAT_YVU420, TBM_FORMAT_YVU420},
77     {DRM_FORMAT_YUV422, TBM_FORMAT_YUV422},
78     {DRM_FORMAT_YVU422, TBM_FORMAT_YVU422},
79     {DRM_FORMAT_YUV444, TBM_FORMAT_YUV444},
80     {DRM_FORMAT_YVU444, TBM_FORMAT_YVU444},
81 };
82
83 uint32_t
84 convert_drm_format_to_tbm(uint32_t fmt)
85 {
86     size_t i;
87
88     for (i = 0; i < ARRAY_LENGTH(formats); i++) {
89         if (formats[i].drm_format == fmt)
90             return formats[i].tbm_format;
91     }
92
93     ds_err("DRM format 0x%"PRIX32" has no TBM equivalent", fmt);
94
95     return 0;
96 }
97
98 uint32_t
99 convert_tbm_format_to_drm(uint32_t fmt)
100 {
101     size_t i;
102
103     for (i = 0; i < ARRAY_LENGTH(formats); i++) {
104         if (formats[i].tbm_format == fmt)
105             return formats[i].drm_format;
106     }
107
108     ds_err("TBM format 0x%"PRIX32" has no DRM equivalent", fmt);
109
110     return 0;
111 }
112
113 WL_EXPORT uint32_t
114 ds_tizen_pixel_format_convert_tbm_to_drm(uint32_t tbm_format)
115 {
116     return convert_tbm_format_to_drm(tbm_format);
117 }