5ded56e5554c593b622e4304db43705535c5dbe6
[platform/adaptation/libtdm-drm.git] / src / libtdm-drm / tdm_drm_format.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <drm_fourcc.h>
6 #include <tbm_surface.h>
7
8 #include "tdm_drm.h"
9
10 typedef struct {
11         tbm_format  tbm_format;
12         uint32_t        drm_format;
13 } tbm_drm_format_data;
14
15 static const tbm_drm_format_data formats[] = {
16         {TBM_FORMAT_C8, DRM_FORMAT_C8},
17         {TBM_FORMAT_RGB332, DRM_FORMAT_RGB332},
18         {TBM_FORMAT_BGR233, DRM_FORMAT_BGR233},
19         {TBM_FORMAT_XRGB4444, DRM_FORMAT_XRGB4444},
20         {TBM_FORMAT_XBGR4444, DRM_FORMAT_XBGR4444},
21         {TBM_FORMAT_RGBX4444, DRM_FORMAT_RGBX4444},
22         {TBM_FORMAT_BGRX4444, DRM_FORMAT_BGRX4444},
23         {TBM_FORMAT_ARGB4444, DRM_FORMAT_ARGB4444},
24         {TBM_FORMAT_ABGR4444, DRM_FORMAT_ABGR4444},
25         {TBM_FORMAT_RGBA4444, DRM_FORMAT_RGBA4444},
26         {TBM_FORMAT_BGRA4444, DRM_FORMAT_BGRA4444},
27         {TBM_FORMAT_XRGB1555, DRM_FORMAT_XRGB1555},
28         {TBM_FORMAT_XBGR1555, DRM_FORMAT_XBGR1555},
29         {TBM_FORMAT_RGBX5551, DRM_FORMAT_RGBX5551},
30         {TBM_FORMAT_BGRX5551, DRM_FORMAT_BGRX5551},
31         {TBM_FORMAT_ARGB1555, DRM_FORMAT_ARGB1555},
32         {TBM_FORMAT_ABGR1555, DRM_FORMAT_ABGR1555},
33         {TBM_FORMAT_RGBA5551, DRM_FORMAT_RGBA5551},
34         {TBM_FORMAT_BGRA5551, DRM_FORMAT_BGRA5551},
35         {TBM_FORMAT_RGB565, DRM_FORMAT_RGB565},
36         {TBM_FORMAT_BGR565, DRM_FORMAT_BGR565},
37         {TBM_FORMAT_RGB888, DRM_FORMAT_RGB888},
38         {TBM_FORMAT_BGR888, DRM_FORMAT_BGR888},
39         {TBM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888},
40         {TBM_FORMAT_XBGR8888, DRM_FORMAT_XBGR8888},
41         {TBM_FORMAT_RGBX8888, DRM_FORMAT_RGBX8888},
42         {TBM_FORMAT_BGRX8888, DRM_FORMAT_BGRX8888},
43         {TBM_FORMAT_ARGB8888, DRM_FORMAT_ARGB8888},
44         {TBM_FORMAT_ABGR8888, DRM_FORMAT_ABGR8888},
45         {TBM_FORMAT_RGBA8888, DRM_FORMAT_RGBA8888},
46         {TBM_FORMAT_BGRA8888, DRM_FORMAT_BGRA8888},
47         {TBM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB2101010},
48         {TBM_FORMAT_XBGR2101010, DRM_FORMAT_XBGR2101010},
49         {TBM_FORMAT_RGBX1010102, DRM_FORMAT_RGBX1010102},
50         {TBM_FORMAT_BGRX1010102, DRM_FORMAT_BGRX1010102},
51         {TBM_FORMAT_ARGB2101010, DRM_FORMAT_ARGB2101010},
52         {TBM_FORMAT_ABGR2101010, DRM_FORMAT_ABGR2101010},
53         {TBM_FORMAT_RGBA1010102, DRM_FORMAT_RGBA1010102},
54         {TBM_FORMAT_BGRA1010102, DRM_FORMAT_BGRA1010102},
55         {TBM_FORMAT_YUYV, DRM_FORMAT_YUYV},
56         {TBM_FORMAT_YVYU, DRM_FORMAT_YVYU},
57         {TBM_FORMAT_UYVY, DRM_FORMAT_UYVY},
58         {TBM_FORMAT_VYUY, DRM_FORMAT_VYUY},
59         {TBM_FORMAT_AYUV, DRM_FORMAT_AYUV},
60         {TBM_FORMAT_NV12, DRM_FORMAT_NV12},
61         {TBM_FORMAT_NV21, DRM_FORMAT_NV21},
62         {TBM_FORMAT_NV16, DRM_FORMAT_NV16},
63         {TBM_FORMAT_NV61, DRM_FORMAT_NV61},
64         {TBM_FORMAT_YUV410, DRM_FORMAT_YUV410},
65         {TBM_FORMAT_YVU410, DRM_FORMAT_YVU410},
66         {TBM_FORMAT_YUV411, DRM_FORMAT_YUV411},
67         {TBM_FORMAT_YVU411, DRM_FORMAT_YVU411},
68         {TBM_FORMAT_YUV420, DRM_FORMAT_YUV420},
69         {TBM_FORMAT_YVU420, DRM_FORMAT_YVU420},
70         {TBM_FORMAT_YUV422, DRM_FORMAT_YUV422},
71         {TBM_FORMAT_YVU422, DRM_FORMAT_YVU422},
72         {TBM_FORMAT_YUV444, DRM_FORMAT_YUV444},
73         {TBM_FORMAT_YVU444, DRM_FORMAT_YVU444},
74 };
75
76 #define NUM_FORMATS (sizeof(formats) / sizeof(formats[0]))
77
78 uint32_t
79 tdm_drm_format_to_drm_format(tbm_format format)
80 {
81         int i;
82
83         for (i = 0; i < NUM_FORMATS; i++)
84                 if (formats[i].tbm_format == format)
85                         return formats[i].drm_format;
86
87         TDM_ERR("tbm format '%c%c%c%c' not found", FOURCC_STR(format));
88
89         return 0;
90 }
91
92 tbm_format
93 tdm_drm_format_to_tbm_format(uint32_t format)
94 {
95         int i;
96
97         for (i = 0; i < NUM_FORMATS; i++)
98                 if (formats[i].drm_format == format)
99                         return formats[i].tbm_format;
100
101         TDM_ERR("drm format '%c%c%c%c' not found", FOURCC_STR(format));
102
103         return 0;
104 }