From e6d427b9406d565bd3b6dc069f1941533adee34f Mon Sep 17 00:00:00 2001 From: pommicket Date: Mon, 24 Feb 2025 22:34:55 -0500 Subject: camera_framerate --- camera.c | 13 +++++++++++-- camera.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/camera.c b/camera.c index 368e9ec..871a06a 100644 --- a/camera.c +++ b/camera.c @@ -30,6 +30,7 @@ struct Camera { bool streaming; int curr_frame_idx; int buffer_count; + int framerate; struct v4l2_buffer frame_buffer; CameraAccessMethod access_method; PictureFormat best_format; @@ -50,6 +51,10 @@ void camera_init(const GlProcs *procs) { gl = *procs; } +int camera_framerate(Camera *camera) { + return camera->framerate; +} + static int uint32_cmp_qsort(const void *av, const void *bv) { uint32_t a = *(const uint32_t *)av, b = *(const uint32_t *)bv; if (a < b) return -1; @@ -859,9 +864,13 @@ bool camera_set_format(Camera *camera, PictureFormat picfmt, int desired_framera }; if (v4l2_ioctl(camera->fd, VIDIOC_S_PARM, &stream_params) != 0) { perror("v4l2_ioctl VIDIOC_S_PARM"); - // even if we don't get the framerate we want, don't fail. + // NOTE: even if we don't get the framerate we want, don't fail, but do ensure our reported framerate is correct + v4l2_ioctl(camera->fd, VIDIOC_G_PARM, &stream_params); } - + // fuck you, fractional framerates + camera->framerate = stream_params.parm.capture.timeperframe.denominator / + stream_params.parm.capture.timeperframe.numerator; + //printf("image size = %uB\n",format.fmt.pix.sizeimage); switch (camera->access_method) { case CAMERA_ACCESS_READ: diff --git a/camera.h b/camera.h index 6e076d6..163bfbf 100644 --- a/camera.h +++ b/camera.h @@ -109,6 +109,7 @@ PictureFormat *camera_get_resolutions_with_pixfmt(Camera *camera, uint32_t pixfm uint32_t *camera_get_pixfmts(Camera *camera); PictureFormat camera_closest_picfmt(Camera *camera, PictureFormat picfmt); uint64_t camera_framerates_supported(Camera *camera); +int camera_framerate(Camera *camera); int32_t camera_frame_width(Camera *camera); int32_t camera_frame_height(Camera *camera); PictureFormat camera_picture_format(Camera *camera); -- cgit v1.2.3