summaryrefslogtreecommitdiff
path: root/camera.c
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-02-19 19:51:34 -0500
committerpommicket <pommicket@gmail.com>2025-02-19 19:51:34 -0500
commit21642ce76342ab990b21f15f9205963c8e505d20 (patch)
treee173ff94bfcb71bcda7a458cba37a22c2ccc8e35 /camera.c
parent0ab2c540d442997360830fb1ab76284c318c28ca (diff)
YUYV support
Diffstat (limited to 'camera.c')
-rw-r--r--camera.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/camera.c b/camera.c
index e82c29a..541920f 100644
--- a/camera.c
+++ b/camera.c
@@ -123,6 +123,7 @@ bool pix_fmt_supported(uint32_t pixfmt) {
switch (pixfmt) {
case V4L2_PIX_FMT_RGB24:
case V4L2_PIX_FMT_BGR24:
+ case V4L2_PIX_FMT_YUYV:
case V4L2_PIX_FMT_GREY:
return true;
}
@@ -393,6 +394,10 @@ void camera_update_gl_textures(Camera *camera, const GLuint textures[3]) {
if (camera->frame_bytes_set >= frame_width * frame_height)
gl.TexImage2D(GL_TEXTURE_2D, 0, GL_RED, frame_width, frame_height, 0, GL_RED, GL_UNSIGNED_BYTE, curr_frame);
break;
+ case V4L2_PIX_FMT_YUYV:
+ if (camera->frame_bytes_set >= frame_width * frame_height * 2)
+ gl.TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, frame_width / 2, frame_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, curr_frame);
+ break;
}
}
gl.PixelStorei(GL_UNPACK_ALIGNMENT, prev_align);
@@ -452,12 +457,9 @@ bool camera_set_format(Camera *camera, PictureFormat picfmt, CameraAccessMethod
format.fmt.pix.field = V4L2_FIELD_ANY;
// v4l2 should be able to output rgb24 for all reasonable cameras
uint32_t pixfmt = V4L2_PIX_FMT_RGB24;
- switch (picfmt.pixfmt) {
- // we can actually handle these pixel formats
- case V4L2_PIX_FMT_BGR24:
- case V4L2_PIX_FMT_GREY:
+ if (pix_fmt_supported(picfmt.pixfmt)) {
+ // we can handle this format actually
pixfmt = picfmt.pixfmt;
- break;
}
format.fmt.pix.pixelformat = pixfmt;
format.fmt.pix.width = picfmt.width;
@@ -466,6 +468,9 @@ bool camera_set_format(Camera *camera, PictureFormat picfmt, CameraAccessMethod
perror("v4l2_ioctl VIDIOC_S_FMT");
return false;
}
+ if (pixfmt == V4L2_PIX_FMT_YUYV) {
+ printf("%u\n",format.fmt.pix.ycbcr_enc);
+ }
camera->curr_format = format;
//printf("image size = %uB\n",format.fmt.pix.sizeimage);
switch (camera->access_method) {