소스 검색

Change burst length depending on gain

The burst_length is now calculated before taking the first picture
by increasing the number of frames when the sensor gain is raised.
Martijn Braam 3 년 전
부모
커밋
899748df46
2개의 변경된 파일12개의 추가작업 그리고 3개의 파일을 삭제
  1. 11 2
      src/io_pipeline.c
  2. 1 1
      src/main.c

+ 11 - 2
src/io_pipeline.c

@@ -9,6 +9,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <glib.h>
+#include <math.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/ioctl.h>
@@ -343,14 +344,22 @@ static void
 capture(MPPipeline *pipeline, const void *data)
 {
         struct camera_info *info = &cameras[camera->index];
-
-        captures_remaining = burst_length;
+        uint32_t gain;
+        float gain_norm;
 
         // Disable the autogain/exposure while taking the burst
         mp_camera_control_set_int32(info->camera, V4L2_CID_AUTOGAIN, 0);
         mp_camera_control_set_int32(
                 info->camera, V4L2_CID_EXPOSURE_AUTO, V4L2_EXPOSURE_MANUAL);
 
+        // Get current gain to calculate a burst length;
+        // with low gain there's 2, with the max automatic gain of the ov5640
+        // the value seems to be 248 which creates a 5 frame burst
+        // for manual gain you can go up to 11 frames
+        gain = mp_camera_control_get_int32(info->camera, V4L2_CID_GAIN);
+        gain_norm = (float)gain / (float)info->gain_max;
+        burst_length = (int)(sqrt(gain_norm) * 10) + 1;
+
         // Change camera mode for capturing
         mp_process_pipeline_sync();
         mp_camera_stop_capture(info->camera);

+ 1 - 1
src/main.c

@@ -65,7 +65,7 @@ static char last_path[260] = "";
 
 static MPZBarScanResult *zbar_result = NULL;
 
-static int burst_length = 3;
+static int burst_length = 0;
 
 // Widgets
 GtkWidget *preview;