Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
cad2991a 1e42d384

+107
+107
drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
··· 217 217 case V4L2_PIX_FMT_RGB444: 218 218 case V4L2_PIX_FMT_XRGB444: 219 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 226 case V4L2_PIX_FMT_RGB555: 221 227 case V4L2_PIX_FMT_XRGB555: 222 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 235 case V4L2_PIX_FMT_RGB555X: 224 236 case V4L2_PIX_FMT_XRGB555X: 225 237 case V4L2_PIX_FMT_ARGB555X: ··· 244 232 case V4L2_PIX_FMT_XBGR32: 245 233 case V4L2_PIX_FMT_ARGB32: 246 234 case V4L2_PIX_FMT_ABGR32: 235 + case V4L2_PIX_FMT_RGBX32: 236 + case V4L2_PIX_FMT_BGRX32: 237 + case V4L2_PIX_FMT_RGBA32: 238 + case V4L2_PIX_FMT_BGRA32: 247 239 tpg->color_enc = TGP_COLOR_ENC_RGB; 248 240 break; 249 241 case V4L2_PIX_FMT_GREY: ··· 359 343 case V4L2_PIX_FMT_RGB444: 360 344 case V4L2_PIX_FMT_XRGB444: 361 345 case V4L2_PIX_FMT_ARGB444: 346 + case V4L2_PIX_FMT_RGBX444: 347 + case V4L2_PIX_FMT_RGBA444: 348 + case V4L2_PIX_FMT_XBGR444: 349 + case V4L2_PIX_FMT_ABGR444: 350 + case V4L2_PIX_FMT_BGRX444: 351 + case V4L2_PIX_FMT_BGRA444: 362 352 case V4L2_PIX_FMT_RGB555: 363 353 case V4L2_PIX_FMT_XRGB555: 364 354 case V4L2_PIX_FMT_ARGB555: 355 + case V4L2_PIX_FMT_RGBX555: 356 + case V4L2_PIX_FMT_RGBA555: 357 + case V4L2_PIX_FMT_XBGR555: 358 + case V4L2_PIX_FMT_ABGR555: 359 + case V4L2_PIX_FMT_BGRX555: 360 + case V4L2_PIX_FMT_BGRA555: 365 361 case V4L2_PIX_FMT_RGB555X: 366 362 case V4L2_PIX_FMT_XRGB555X: 367 363 case V4L2_PIX_FMT_ARGB555X: ··· 403 375 case V4L2_PIX_FMT_XBGR32: 404 376 case V4L2_PIX_FMT_ARGB32: 405 377 case V4L2_PIX_FMT_ABGR32: 378 + case V4L2_PIX_FMT_RGBX32: 379 + case V4L2_PIX_FMT_BGRX32: 380 + case V4L2_PIX_FMT_RGBA32: 381 + case V4L2_PIX_FMT_BGRA32: 406 382 case V4L2_PIX_FMT_YUV32: 407 383 case V4L2_PIX_FMT_AYUV32: 408 384 case V4L2_PIX_FMT_XYUV32: ··· 1039 1007 case V4L2_PIX_FMT_RGB444: 1040 1008 case V4L2_PIX_FMT_XRGB444: 1041 1009 case V4L2_PIX_FMT_ARGB444: 1010 + case V4L2_PIX_FMT_RGBX444: 1011 + case V4L2_PIX_FMT_RGBA444: 1012 + case V4L2_PIX_FMT_XBGR444: 1013 + case V4L2_PIX_FMT_ABGR444: 1014 + case V4L2_PIX_FMT_BGRX444: 1015 + case V4L2_PIX_FMT_BGRA444: 1042 1016 r >>= 8; 1043 1017 g >>= 8; 1044 1018 b >>= 8; ··· 1052 1014 case V4L2_PIX_FMT_RGB555: 1053 1015 case V4L2_PIX_FMT_XRGB555: 1054 1016 case V4L2_PIX_FMT_ARGB555: 1017 + case V4L2_PIX_FMT_RGBX555: 1018 + case V4L2_PIX_FMT_RGBA555: 1019 + case V4L2_PIX_FMT_XBGR555: 1020 + case V4L2_PIX_FMT_ABGR555: 1021 + case V4L2_PIX_FMT_BGRX555: 1022 + case V4L2_PIX_FMT_BGRA555: 1055 1023 case V4L2_PIX_FMT_RGB555X: 1056 1024 case V4L2_PIX_FMT_XRGB555X: 1057 1025 case V4L2_PIX_FMT_ARGB555X: ··· 1281 1237 buf[0][offset] = (g_u_s << 4) | b_v; 1282 1238 buf[0][offset + 1] = (alpha & 0xf0) | r_y_h; 1283 1239 break; 1240 + case V4L2_PIX_FMT_RGBX444: 1241 + alpha = 0; 1242 + /* fall through */ 1243 + case V4L2_PIX_FMT_RGBA444: 1244 + buf[0][offset] = (b_v << 4) | (alpha >> 4); 1245 + buf[0][offset + 1] = (r_y_h << 4) | g_u_s; 1246 + break; 1247 + case V4L2_PIX_FMT_XBGR444: 1248 + alpha = 0; 1249 + /* fall through */ 1250 + case V4L2_PIX_FMT_ABGR444: 1251 + buf[0][offset] = (g_u_s << 4) | r_y_h; 1252 + buf[0][offset + 1] = (alpha & 0xf0) | b_v; 1253 + break; 1254 + case V4L2_PIX_FMT_BGRX444: 1255 + alpha = 0; 1256 + /* fall through */ 1257 + case V4L2_PIX_FMT_BGRA444: 1258 + buf[0][offset] = (r_y_h << 4) | (alpha >> 4); 1259 + buf[0][offset + 1] = (b_v << 4) | g_u_s; 1260 + break; 1284 1261 case V4L2_PIX_FMT_RGB555: 1285 1262 case V4L2_PIX_FMT_XRGB555: 1286 1263 alpha = 0; ··· 1311 1246 buf[0][offset] = (g_u_s << 5) | b_v; 1312 1247 buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2) 1313 1248 | (g_u_s >> 3); 1249 + break; 1250 + case V4L2_PIX_FMT_RGBX555: 1251 + alpha = 0; 1252 + /* fall through */ 1253 + case V4L2_PIX_FMT_RGBA555: 1254 + buf[0][offset] = (g_u_s << 6) | (b_v << 1) | 1255 + ((alpha & 0x80) >> 7); 1256 + buf[0][offset + 1] = (r_y_h << 3) | (g_u_s >> 2); 1257 + break; 1258 + case V4L2_PIX_FMT_XBGR555: 1259 + alpha = 0; 1260 + /* fall through */ 1261 + case V4L2_PIX_FMT_ABGR555: 1262 + buf[0][offset] = (g_u_s << 5) | r_y_h; 1263 + buf[0][offset + 1] = (alpha & 0x80) | (b_v << 2) 1264 + | (g_u_s >> 3); 1265 + break; 1266 + case V4L2_PIX_FMT_BGRX555: 1267 + alpha = 0; 1268 + /* fall through */ 1269 + case V4L2_PIX_FMT_BGRA555: 1270 + buf[0][offset] = (g_u_s << 6) | (r_y_h << 1) | 1271 + ((alpha & 0x80) >> 7); 1272 + buf[0][offset + 1] = (b_v << 3) | (g_u_s >> 2); 1314 1273 break; 1315 1274 case V4L2_PIX_FMT_RGB555X: 1316 1275 case V4L2_PIX_FMT_XRGB555X: ··· 1375 1286 buf[0][offset + 2] = g_u_s; 1376 1287 buf[0][offset + 3] = b_v; 1377 1288 break; 1289 + case V4L2_PIX_FMT_RGBX32: 1290 + alpha = 0; 1291 + /* fall through */ 1292 + case V4L2_PIX_FMT_RGBA32: 1293 + buf[0][offset] = r_y_h; 1294 + buf[0][offset + 1] = g_u_s; 1295 + buf[0][offset + 2] = b_v; 1296 + buf[0][offset + 3] = alpha; 1297 + break; 1378 1298 case V4L2_PIX_FMT_BGR32: 1379 1299 case V4L2_PIX_FMT_XBGR32: 1380 1300 case V4L2_PIX_FMT_VUYX32: ··· 1395 1297 buf[0][offset + 1] = g_u_s; 1396 1298 buf[0][offset + 2] = r_y_h; 1397 1299 buf[0][offset + 3] = alpha; 1300 + break; 1301 + case V4L2_PIX_FMT_BGRX32: 1302 + alpha = 0; 1303 + /* fall through */ 1304 + case V4L2_PIX_FMT_BGRA32: 1305 + buf[0][offset] = alpha; 1306 + buf[0][offset + 1] = b_v; 1307 + buf[0][offset + 2] = g_u_s; 1308 + buf[0][offset + 3] = r_y_h; 1398 1309 break; 1399 1310 case V4L2_PIX_FMT_SBGGR8: 1400 1311 buf[0][offset] = odd ? g_u_s : b_v;