summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil-cisco@xs4all.nl>2019-07-26 08:08:19 -0400
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>2019-07-30 12:16:45 -0400
commitcad2991a950198f71520e8bbbe9d1ea9d001e7f0 (patch)
treeccccefd288b57ec003c0858dd6c7b9835c4936dd
parent1e42d384aa19e06410be52bd05cfc159722c0b7f (diff)
media: v4l2-tpg: add support for new pixelformats
Several new variations of RGB444, RGB555 and RGB32 were added. Add support for these. This is the list of new pixelformats: V4L2_PIX_FMT_RGBX444 V4L2_PIX_FMT_RGBA444 V4L2_PIX_FMT_XBGR444 V4L2_PIX_FMT_ABGR444 V4L2_PIX_FMT_BGRX444 V4L2_PIX_FMT_BGRA444 V4L2_PIX_FMT_RGBX555 V4L2_PIX_FMT_RGBA555 V4L2_PIX_FMT_XBGR555 V4L2_PIX_FMT_ABGR555 V4L2_PIX_FMT_BGRX555 V4L2_PIX_FMT_BGRA555 V4L2_PIX_FMT_RGBX32 V4L2_PIX_FMT_BGRX32 V4L2_PIX_FMT_RGBA32 V4L2_PIX_FMT_BGRA32 Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
-rw-r--r--drivers/media/common/v4l2-tpg/v4l2-tpg-core.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
index 07e0629af8ed..50f1e0b28b25 100644
--- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
+++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
@@ -217,9 +217,21 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
217 case V4L2_PIX_FMT_RGB444: 217 case V4L2_PIX_FMT_RGB444:
218 case V4L2_PIX_FMT_XRGB444: 218 case V4L2_PIX_FMT_XRGB444:
219 case V4L2_PIX_FMT_ARGB444: 219 case V4L2_PIX_FMT_ARGB444:
220 case V4L2_PIX_FMT_RGBX444:
221 case V4L2_PIX_FMT_RGBA444:
222 case V4L2_PIX_FMT_XBGR444:
223 case V4L2_PIX_FMT_ABGR444:
224 case V4L2_PIX_FMT_BGRX444:
225 case V4L2_PIX_FMT_BGRA444:
220 case V4L2_PIX_FMT_RGB555: 226 case V4L2_PIX_FMT_RGB555:
221 case V4L2_PIX_FMT_XRGB555: 227 case V4L2_PIX_FMT_XRGB555:
222 case V4L2_PIX_FMT_ARGB555: 228 case V4L2_PIX_FMT_ARGB555:
229 case V4L2_PIX_FMT_RGBX555:
230 case V4L2_PIX_FMT_RGBA555:
231 case V4L2_PIX_FMT_XBGR555:
232 case V4L2_PIX_FMT_ABGR555:
233 case V4L2_PIX_FMT_BGRX555:
234 case V4L2_PIX_FMT_BGRA555:
223 case V4L2_PIX_FMT_RGB555X: 235 case V4L2_PIX_FMT_RGB555X:
224 case V4L2_PIX_FMT_XRGB555X: 236 case V4L2_PIX_FMT_XRGB555X:
225 case V4L2_PIX_FMT_ARGB555X: 237 case V4L2_PIX_FMT_ARGB555X:
@@ -232,6 +244,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
232 case V4L2_PIX_FMT_XBGR32: 244 case V4L2_PIX_FMT_XBGR32:
233 case V4L2_PIX_FMT_ARGB32: 245 case V4L2_PIX_FMT_ARGB32:
234 case V4L2_PIX_FMT_ABGR32: 246 case V4L2_PIX_FMT_ABGR32:
247 case V4L2_PIX_FMT_RGBX32:
248 case V4L2_PIX_FMT_BGRX32:
249 case V4L2_PIX_FMT_RGBA32:
250 case V4L2_PIX_FMT_BGRA32:
235 tpg->color_enc = TGP_COLOR_ENC_RGB; 251 tpg->color_enc = TGP_COLOR_ENC_RGB;
236 break; 252 break;
237 case V4L2_PIX_FMT_GREY: 253 case V4L2_PIX_FMT_GREY:
@@ -343,9 +359,21 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
343 case V4L2_PIX_FMT_RGB444: 359 case V4L2_PIX_FMT_RGB444:
344 case V4L2_PIX_FMT_XRGB444: 360 case V4L2_PIX_FMT_XRGB444:
345 case V4L2_PIX_FMT_ARGB444: 361 case V4L2_PIX_FMT_ARGB444:
362 case V4L2_PIX_FMT_RGBX444:
363 case V4L2_PIX_FMT_RGBA444:
364 case V4L2_PIX_FMT_XBGR444:
365 case V4L2_PIX_FMT_ABGR444:
366 case V4L2_PIX_FMT_BGRX444:
367 case V4L2_PIX_FMT_BGRA444:
346 case V4L2_PIX_FMT_RGB555: 368 case V4L2_PIX_FMT_RGB555:
347 case V4L2_PIX_FMT_XRGB555: 369 case V4L2_PIX_FMT_XRGB555:
348 case V4L2_PIX_FMT_ARGB555: 370 case V4L2_PIX_FMT_ARGB555:
371 case V4L2_PIX_FMT_RGBX555:
372 case V4L2_PIX_FMT_RGBA555:
373 case V4L2_PIX_FMT_XBGR555:
374 case V4L2_PIX_FMT_ABGR555:
375 case V4L2_PIX_FMT_BGRX555:
376 case V4L2_PIX_FMT_BGRA555:
349 case V4L2_PIX_FMT_RGB555X: 377 case V4L2_PIX_FMT_RGB555X:
350 case V4L2_PIX_FMT_XRGB555X: 378 case V4L2_PIX_FMT_XRGB555X:
351 case V4L2_PIX_FMT_ARGB555X: 379 case V4L2_PIX_FMT_ARGB555X:
@@ -375,6 +403,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
375 case V4L2_PIX_FMT_XBGR32: 403 case V4L2_PIX_FMT_XBGR32:
376 case V4L2_PIX_FMT_ARGB32: 404 case V4L2_PIX_FMT_ARGB32:
377 case V4L2_PIX_FMT_ABGR32: 405 case V4L2_PIX_FMT_ABGR32:
406 case V4L2_PIX_FMT_RGBX32:
407 case V4L2_PIX_FMT_BGRX32:
408 case V4L2_PIX_FMT_RGBA32:
409 case V4L2_PIX_FMT_BGRA32:
378 case V4L2_PIX_FMT_YUV32: 410 case V4L2_PIX_FMT_YUV32:
379 case V4L2_PIX_FMT_AYUV32: 411 case V4L2_PIX_FMT_AYUV32:
380 case V4L2_PIX_FMT_XYUV32: 412 case V4L2_PIX_FMT_XYUV32:
@@ -1007,6 +1039,12 @@ static void precalculate_color(struct tpg_data *tpg, int k)
1007 case V4L2_PIX_FMT_RGB444: 1039 case V4L2_PIX_FMT_RGB444:
1008 case V4L2_PIX_FMT_XRGB444: 1040 case V4L2_PIX_FMT_XRGB444:
1009 case V4L2_PIX_FMT_ARGB444: 1041 case V4L2_PIX_FMT_ARGB444:
1042 case V4L2_PIX_FMT_RGBX444:
1043 case V4L2_PIX_FMT_RGBA444:
1044 case V4L2_PIX_FMT_XBGR444:
1045 case V4L2_PIX_FMT_ABGR444:
1046 case V4L2_PIX_FMT_BGRX444:
1047 case V4L2_PIX_FMT_BGRA444:
1010 r >>= 8; 1048 r >>= 8;
1011 g >>= 8; 1049 g >>= 8;
1012 b >>= 8; 1050 b >>= 8;
@@ -1014,6 +1052,12 @@ static void precalculate_color(struct tpg_data *tpg, int k)
1014 case V4L2_PIX_FMT_RGB555: 1052 case V4L2_PIX_FMT_RGB555:
1015 case V4L2_PIX_FMT_XRGB555: 1053 case V4L2_PIX_FMT_XRGB555:
1016 case V4L2_PIX_FMT_ARGB555: 1054 case V4L2_PIX_FMT_ARGB555:
1055 case V4L2_PIX_FMT_RGBX555:
1056 case V4L2_PIX_FMT_RGBA555:
1057 case V4L2_PIX_FMT_XBGR555:
1058 case V4L2_PIX_FMT_ABGR555:
1059 case V4L2_PIX_FMT_BGRX555:
1060 case V4L2_PIX_FMT_BGRA555:
1017 case V4L2_PIX_FMT_RGB555X: 1061 case V4L2_PIX_FMT_RGB555X:
1018 case V4L2_PIX_FMT_XRGB555X: 1062 case V4L2_PIX_FMT_XRGB555X:
1019 case V4L2_PIX_FMT_ARGB555X: 1063 case V4L2_PIX_FMT_ARGB555X:
@@ -1237,6 +1281,27 @@ static void gen_twopix(struct tpg_data *tpg,
1237 buf[0][offset] = (g_u_s << 4) | b_v; 1281 buf[0][offset] = (g_u_s << 4) | b_v;
1238 buf[0][offset + 1] = (alpha & 0xf0) | r_y_h; 1282 buf[0][offset + 1] = (alpha & 0xf0) | r_y_h;
1239 break; 1283 break;
1284 case V4L2_PIX_FMT_RGBX444:
1285 alpha = 0;
1286 /* fall through */
1287 case V4L2_PIX_FMT_RGBA444:
1288 buf[0][offset] = (b_v << 4) | (alpha >> 4);
1289 buf[0][offset + 1] = (r_y_h << 4) | g_u_s;
1290 break;
1291 case V4L2_PIX_FMT_XBGR444:
1292 alpha = 0;
1293 /* fall through */
1294 case V4L2_PIX_FMT_ABGR444:
1295 buf[0][offset] = (g_u_s << 4) | r_y_h;
1296 buf[0][offset + 1] = (alpha & 0xf0) | b_v;
1297 break;
1298 case V4L2_PIX_FMT_BGRX444:
1299 alpha = 0;
1300 /* fall through */
1301 case V4L2_PIX_FMT_BGRA444:
1302 buf[0][offset] = (r_y_h << 4) | (alpha >> 4);
1303 buf[0][offset + 1] = (b_v << 4) | g_u_s;
1304 break;
1240 case V4L2_PIX_FMT_RGB555: 1305 case V4L2_PIX_FMT_RGB555:
1241 case V4L2_PIX_FMT_XRGB555: 1306 case V4L2_PIX_FMT_XRGB555:
1242 alpha = 0; 1307 alpha = 0;
@@ -1247,6 +1312,30 @@ static void gen_twopix(struct tpg_data *tpg,
1247 buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2) 1312 buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2)
1248 | (g_u_s >> 3); 1313 | (g_u_s >> 3);
1249 break; 1314 break;
1315 case V4L2_PIX_FMT_RGBX555:
1316 alpha = 0;
1317 /* fall through */
1318 case V4L2_PIX_FMT_RGBA555:
1319 buf[0][offset] = (g_u_s << 6) | (b_v << 1) |
1320 ((alpha & 0x80) >> 7);
1321 buf[0][offset + 1] = (r_y_h << 3) | (g_u_s >> 2);
1322 break;
1323 case V4L2_PIX_FMT_XBGR555:
1324 alpha = 0;
1325 /* fall through */
1326 case V4L2_PIX_FMT_ABGR555:
1327 buf[0][offset] = (g_u_s << 5) | r_y_h;
1328 buf[0][offset + 1] = (alpha & 0x80) | (b_v << 2)
1329 | (g_u_s >> 3);
1330 break;
1331 case V4L2_PIX_FMT_BGRX555:
1332 alpha = 0;
1333 /* fall through */
1334 case V4L2_PIX_FMT_BGRA555:
1335 buf[0][offset] = (g_u_s << 6) | (r_y_h << 1) |
1336 ((alpha & 0x80) >> 7);
1337 buf[0][offset + 1] = (b_v << 3) | (g_u_s >> 2);
1338 break;
1250 case V4L2_PIX_FMT_RGB555X: 1339 case V4L2_PIX_FMT_RGB555X:
1251 case V4L2_PIX_FMT_XRGB555X: 1340 case V4L2_PIX_FMT_XRGB555X:
1252 alpha = 0; 1341 alpha = 0;
@@ -1286,6 +1375,15 @@ static void gen_twopix(struct tpg_data *tpg,
1286 buf[0][offset + 2] = g_u_s; 1375 buf[0][offset + 2] = g_u_s;
1287 buf[0][offset + 3] = b_v; 1376 buf[0][offset + 3] = b_v;
1288 break; 1377 break;
1378 case V4L2_PIX_FMT_RGBX32:
1379 alpha = 0;
1380 /* fall through */
1381 case V4L2_PIX_FMT_RGBA32:
1382 buf[0][offset] = r_y_h;
1383 buf[0][offset + 1] = g_u_s;
1384 buf[0][offset + 2] = b_v;
1385 buf[0][offset + 3] = alpha;
1386 break;
1289 case V4L2_PIX_FMT_BGR32: 1387 case V4L2_PIX_FMT_BGR32:
1290 case V4L2_PIX_FMT_XBGR32: 1388 case V4L2_PIX_FMT_XBGR32:
1291 case V4L2_PIX_FMT_VUYX32: 1389 case V4L2_PIX_FMT_VUYX32:
@@ -1298,6 +1396,15 @@ static void gen_twopix(struct tpg_data *tpg,
1298 buf[0][offset + 2] = r_y_h; 1396 buf[0][offset + 2] = r_y_h;
1299 buf[0][offset + 3] = alpha; 1397 buf[0][offset + 3] = alpha;
1300 break; 1398 break;
1399 case V4L2_PIX_FMT_BGRX32:
1400 alpha = 0;
1401 /* fall through */
1402 case V4L2_PIX_FMT_BGRA32:
1403 buf[0][offset] = alpha;
1404 buf[0][offset + 1] = b_v;
1405 buf[0][offset + 2] = g_u_s;
1406 buf[0][offset + 3] = r_y_h;
1407 break;
1301 case V4L2_PIX_FMT_SBGGR8: 1408 case V4L2_PIX_FMT_SBGGR8:
1302 buf[0][offset] = odd ? g_u_s : b_v; 1409 buf[0][offset] = odd ? g_u_s : b_v;
1303 buf[1][offset] = odd ? r_y_h : g_u_s; 1410 buf[1][offset] = odd ? r_y_h : g_u_s;