2 * This library is free software; you can redistribute it and/or modify it
3 * under the terms of the GNU Lesser General Public License as published
4 * by the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This library is distributed in the hope that it will be useful, but
8 * WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * Lesser General Public License for more details.
12 * You should have received a copy of the GNU Lesser General Public
13 * License along with this library; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 #include "bccmodels.h"
25 int BC_CModels::is_planar(int colormodel)
35 case BC_RGBA_FLOATP: return 1;
40 int BC_CModels::components(int colormodel)
44 case BC_A16: return 1;
45 case BC_A_FLOAT: return 1;
46 case BC_RGB888: return 3;
47 case BC_RGBA8888: return 4;
48 case BC_RGB161616: return 3;
49 case BC_RGBA16161616: return 4;
50 case BC_YUV888: return 3;
51 case BC_YUVA8888: return 4;
52 case BC_YUV161616: return 3;
53 case BC_YUVA16161616: return 4;
54 case BC_AYUV16161616: return 4;
55 case BC_YUV101010: return 3;
56 case BC_RGB_FLOAT: return 3;
57 case BC_RGBA_FLOAT: return 4;
58 case BC_RGB_FLOATP: return 3;
59 case BC_RGBA_FLOATP: return 4;
60 case BC_GREY8: return 1;
61 case BC_GREY16: return 1;
66 int BC_CModels::calculate_pixelsize(int colormodel)
70 case BC_A16: return 2;
71 case BC_A_FLOAT: return 4;
72 case BC_TRANSPARENCY: return 1;
73 case BC_COMPRESSED: return 1;
74 case BC_RGB8: return 1;
75 case BC_RGB565: return 2;
76 case BC_BGR565: return 2;
77 case BC_BGR888: return 3;
78 case BC_BGR8888: return 4;
79 // Working bitmaps are packed to simplify processing
80 case BC_RGB888: return 3;
81 case BC_ARGB8888: return 4;
82 case BC_ABGR8888: return 4;
83 case BC_RGBA8888: return 4;
84 case BC_RGB161616: return 6;
85 case BC_RGBA16161616: return 8;
86 case BC_YUV888: return 3;
87 case BC_YUVA8888: return 4;
88 case BC_YUV161616: return 6;
89 case BC_YUVA16161616: return 8;
90 case BC_AYUV16161616: return 8;
91 case BC_YUV101010: return 4;
92 case BC_VYU888: return 3;
93 case BC_UYVA8888: return 4;
94 case BC_RGB_FLOAT: return 12;
95 case BC_RGBA_FLOAT: return 16;
96 case BC_GREY8: return 1;
97 case BC_GREY16: return 2;
99 case BC_YUV420P: return 1;
100 case BC_YUV420PI: return 1;
101 case BC_YUV422P: return 1;
102 case BC_YUV444P: return 1;
103 case BC_YUV422: return 2;
104 case BC_UVY422: return 2;
105 case BC_YUV411P: return 1;
106 case BC_YUV410P: return 1;
107 case BC_RGB_FLOATP: return 4;
108 case BC_RGBA_FLOATP: return 4;
113 int BC_CModels::calculate_max(int colormodel)
116 // Working bitmaps are packed to simplify processing
117 case BC_A8: return 0xff;
118 case BC_A16: return 0xffff;
119 case BC_A_FLOAT: return 1;
120 case BC_RGB888: return 0xff;
121 case BC_RGBA8888: return 0xff;
122 case BC_RGB161616: return 0xffff;
123 case BC_RGBA16161616: return 0xffff;
124 case BC_YUV888: return 0xff;
125 case BC_YUVA8888: return 0xff;
126 case BC_YUV161616: return 0xffff;
127 case BC_YUVA16161616: return 0xffff;
128 case BC_AYUV16161616: return 0xffff;
129 case BC_RGB_FLOAT: return 1;
130 case BC_RGBA_FLOAT: return 1;
131 case BC_RGB_FLOATP: return 1;
132 case BC_RGBA_FLOATP: return 1;
133 case BC_GREY8: return 0xff;
134 case BC_GREY16: return 0xffff;
139 int BC_CModels::calculate_datasize(int w, int h, int bytes_per_line, int color_model)
141 switch(color_model) {
142 case BC_YUV410P: return w * h + w * h / 8 + 4;
145 case BC_YUV411P: return w * h + w * h / 2 + 4;
146 case BC_YUV422P: return w * h * 2 + 4;
147 case BC_YUV444P: return w * h * 3 + 4;
148 case BC_RGB_FLOATP: return w * h * 3 * sizeof(float) + 4;
149 case BC_RGBA_FLOATP: return w * h * 4 * sizeof(float) + 4;
151 if( bytes_per_line < 0 )
152 bytes_per_line = w * calculate_pixelsize(color_model);
153 return h * bytes_per_line + 4;
156 int BC_CModels::bc_to_x(int color_model)
158 switch(color_model) {
159 case BC_YUV420P: return FOURCC_YV12;
160 case BC_YUV422: return FOURCC_YUV2;
161 case BC_UVY422: return FOURCC_UYVY;
166 void BC_CModels::to_text(char *string, int cmodel)
169 case BC_RGB888: strcpy(string, "RGB-8 Bit"); break;
170 case BC_RGBA8888: strcpy(string, "RGBA-8 Bit"); break;
171 case BC_RGB161616: strcpy(string, "RGB-16 Bit"); break;
172 case BC_RGBA16161616: strcpy(string, "RGBA-16 Bit"); break;
173 case BC_YUV888: strcpy(string, "YUV-8 Bit"); break;
174 case BC_YUVA8888: strcpy(string, "YUVA-8 Bit"); break;
175 case BC_YUV161616: strcpy(string, "YUV-16 Bit"); break;
176 case BC_YUVA16161616: strcpy(string, "YUVA-16 Bit"); break;
177 case BC_AYUV16161616: strcpy(string, "AYUV-16 Bit"); break;
178 case BC_RGB_FLOAT: strcpy(string, "RGB-FLOAT"); break;
179 case BC_RGBA_FLOAT: strcpy(string, "RGBA-FLOAT"); break;
180 case BC_RGB_FLOATP: strcpy(string, "RGB-FLOATP"); break;
181 case BC_RGBA_FLOATP: strcpy(string, "RGBA-FLOATP"); break;
182 default: strcpy(string, "RGB-8 Bit"); break;
186 int BC_CModels::from_text(const char *text)
188 if(!strcasecmp(text, "RGB-8 Bit")) return BC_RGB888;
189 if(!strcasecmp(text, "RGBA-8 Bit")) return BC_RGBA8888;
190 if(!strcasecmp(text, "RGB-16 Bit")) return BC_RGB161616;
191 if(!strcasecmp(text, "RGBA-16 Bit")) return BC_RGBA16161616;
192 if(!strcasecmp(text, "RGB-FLOAT")) return BC_RGB_FLOAT;
193 if(!strcasecmp(text, "RGBA-FLOAT")) return BC_RGBA_FLOAT;
194 if(!strcasecmp(text, "RGB-FLOATP")) return BC_RGB_FLOATP;
195 if(!strcasecmp(text, "RGBA-FLOATP")) return BC_RGBA_FLOATP;
196 if(!strcasecmp(text, "YUV-8 Bit")) return BC_YUV888;
197 if(!strcasecmp(text, "YUVA-8 Bit")) return BC_YUVA8888;
198 if(!strcasecmp(text, "YUV-16 Bit")) return BC_YUV161616;
199 if(!strcasecmp(text, "YUVA-16 Bit")) return BC_YUVA16161616;
200 if(!strcasecmp(text, "AYUV-16 Bit")) return BC_AYUV16161616;
204 int BC_CModels::has_alpha(int colormodel)
211 case BC_RGBA16161616:
213 case BC_YUVA16161616:
222 int BC_CModels::is_float(int colormodel)
234 int BC_CModels::is_yuv(int colormodel)
241 case BC_YUVA16161616:
242 case BC_AYUV16161616: