summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-02-24 22:34:55 -0500
committerpommicket <pommicket@gmail.com>2025-02-25 15:16:08 -0500
commite6d427b9406d565bd3b6dc069f1941533adee34f (patch)
tree8508cd1fc322bb9f2d6d1345616f0b8fab0c7eb6
parent4eddb8e175255c47519a73c1aa6f1b982172a7e3 (diff)
camera_framerate
-rw-r--r--camera.c13
-rw-r--r--camera.h1
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);