diff options
author | Hans Verkuil <hverkuil-cisco@xs4all.nl> | 2019-07-26 08:08:19 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab+samsung@kernel.org> | 2019-07-30 12:16:45 -0400 |
commit | cad2991a950198f71520e8bbbe9d1ea9d001e7f0 (patch) | |
tree | ccccefd288b57ec003c0858dd6c7b9835c4936dd | |
parent | 1e42d384aa19e06410be52bd05cfc159722c0b7f (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.c | 107 |
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; |