diff options
author | Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | 2021-10-31 16:32:28 +0000 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab+huawei@kernel.org> | 2021-10-31 22:36:01 +0000 |
commit | 365915aa694d9c1a66b59bb718456fdd6fefa67c (patch) | |
tree | 4bdf65956eb8cde2ec8b016f510094bcf385f084 | |
parent | a76053007b95c8942cfd39d437e6ecdcbc902c08 (diff) | |
download | v4l-utils-365915aa694d9c1a66b59bb718456fdd6fefa67c.tar.gz |
v4l2grab: add support for YUV 420 planar and semi-planar formats
Now that planes support is in place, add support for YUV and
YVU 4:2:0 planar and semi-planar formats.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
-rw-r--r-- | contrib/test/v4l2grab.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/contrib/test/v4l2grab.c b/contrib/test/v4l2grab.c index 5dab5bb0..af2a5bc0 100644 --- a/contrib/test/v4l2grab.c +++ b/contrib/test/v4l2grab.c @@ -282,6 +282,34 @@ static void copy_two_pixels(struct v4l2_format *fmt, convert_yuv(enc, plane0[y_off + (i << 1)], u, v, dst); break; + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + if (fourcc == V4L2_PIX_FMT_NV12) { + u = plane1[0]; + v = plane1[1]; + } else { + u = plane1[1]; + v = plane1[0]; + } + + for (i = 0; i < 2; i++) + convert_yuv(enc, plane0[i], u, v, dst); + + break; + case V4L2_PIX_FMT_YUV420: + case V4L2_PIX_FMT_YVU420: + if (fourcc == V4L2_PIX_FMT_YUV420) { + u = plane1[0]; + v = plane2[0]; + } else { + u = plane2[0]; + v = plane1[0]; + } + + for (i = 0; i < 2; i++) + convert_yuv(enc, plane0[i], u, v, dst); + + break; default: case V4L2_PIX_FMT_BGR24: for (i = 0; i < 2; i++) { @@ -325,6 +353,19 @@ static unsigned int convert_to_rgb24(struct v4l2_format *fmt, case V4L2_PIX_FMT_BGR24: depth = 24; break; + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + num_planes = 2; + depth = 8; /* Depth of plane 0 */ + h_dec = 1; + break; + case V4L2_PIX_FMT_YUV420: + case V4L2_PIX_FMT_YVU420: + num_planes = 3; + depth = 8; /* Depth of plane 0 */ + h_dec = 1; + w_dec = 1; + break; case V4L2_PIX_FMT_RGB565: case V4L2_PIX_FMT_RGB565X: case V4L2_PIX_FMT_YUYV: @@ -1010,6 +1051,10 @@ int main(int argc, char **argv) case V4L2_PIX_FMT_UYVY: case V4L2_PIX_FMT_YVYU: case V4L2_PIX_FMT_VYUY: + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_YUV420: + case V4L2_PIX_FMT_YVU420: out_buf = malloc(3 * x_res * y_res); if (!out_buf) { perror("Cannot allocate memory"); |