Prechádzať zdrojové kódy

Fixed render ratio.

jcsyshc 2 rokov pred
rodič
commit
1a783698ff
4 zmenil súbory, kde vykonal 38 pridanie a 17 odobranie
  1. 11 7
      src/main.cpp
  2. 9 3
      src/mvs_camera.cpp
  3. 3 1
      src/mvs_camera.h
  4. 15 6
      src/stereo_camera.hpp

+ 11 - 7
src/main.cpp

@@ -226,17 +226,20 @@ int main() {
                     if (camera.is_capturing()) {
                         ImGui::BeginDisabled();
                     }
-
                     ImGui::SliderInt("Frame Rate (fps)", &camera_fps, 1, 60);
-                    ImGui::DragFloat("Exposure Time (ms)", &exposure_time_ms,
-                                     0.1, 1, 1e3f / (float) camera_fps, "%.01f");
-                    ImGui::DragFloat("Analog Gain (dB)", &analog_gain, 0.1, 0, 24, "%.01f");
-
                     if (camera.is_capturing()) {
                         ImGui::EndDisabled();
                     }
 
+                    ImGui::DragFloat("Exposure Time (ms)", &exposure_time_ms,
+                                     0.1, 0.1, 1e3f / (float) camera_fps, "%.01f");
+                    ImGui::DragFloat("Analog Gain (dB)", &analog_gain, 0.1, 0, 23.5, "%.01f");
+
                     if (camera.is_capturing()) {
+                        // capture config
+                        camera.set_capture_config(1000 * exposure_time_ms, analog_gain);
+
+                        // preview config
                         ImGui::SeparatorText("Preview Camera");
                         ImGui::RadioButton("Left", &preview_cam, 0);
                         ImGui::SameLine();
@@ -438,10 +441,11 @@ int main() {
 
         if (camera.is_capturing()) {
             // draw frame in the screen
+            float width_normal = 1.0f * frame_height * image_width / frame_width / image_height;
             if (preview_cam == 0) { // left cam
-                left_ar.render({-1, 1, 2, -2});
+                left_ar.render({-width_normal, 1, 2 * width_normal, -2});
             } else {
-                right_ar.render({-1, 1, 2, -2});
+                right_ar.render({-width_normal, 1, 2 * width_normal, -2});
             }
         }
 

+ 9 - 3
src/mvs_camera.cpp

@@ -137,7 +137,7 @@ void mvs_camera::close() {
     SPDLOG_INFO("Camera {} closed.", pimpl->cam_name);
 }
 
-bool mvs_camera::start_capture(const capture_config *config) {
+bool mvs_camera::start_capture(const capture_config &config) {
     assert(pimpl->handle != nullptr);
 
     // config camera
@@ -147,8 +147,8 @@ bool mvs_camera::start_capture(const capture_config *config) {
     MVS_API_CHECK(MV_CC_SetEnumValue(pimpl->handle, "TriggerMode", MV_TRIGGER_MODE_ON));
     MVS_API_CHECK(MV_CC_SetEnumValue(pimpl->handle, "TriggerSource",
                                      MV_CAM_TRIGGER_SOURCE::MV_TRIGGER_SOURCE_SOFTWARE));
-    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "ExposureTime", config->exposure_time));
-    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "Gain", config->analog_gain));
+    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "ExposureTime", config.exposure_time));
+    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "Gain", config.analog_gain));
 
     MVS_API_CHECK(MV_CC_StartGrabbing(pimpl->handle));
     pimpl->is_capturing = true;
@@ -156,6 +156,12 @@ bool mvs_camera::start_capture(const capture_config *config) {
     return true;
 }
 
+bool mvs_camera::modify_config(const capture_config &config) {
+    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "ExposureTime", config.exposure_time));
+    MVS_API_CHECK(MV_CC_SetFloatValue(pimpl->handle, "Gain", config.analog_gain));
+    return true;
+}
+
 void mvs_camera::stop_capture() {
     if (pimpl->handle == nullptr || !pimpl->is_capturing) return;
     MV_CC_StopGrabbing(pimpl->handle);

+ 3 - 1
src/mvs_camera.h

@@ -25,7 +25,9 @@ public:
         float analog_gain;
     };
 
-    bool start_capture(const capture_config *config);
+    bool start_capture(const capture_config &config);
+
+    bool modify_config(const capture_config &config);
 
     void stop_capture();
 

+ 15 - 6
src/stereo_camera.hpp

@@ -50,6 +50,16 @@ struct stereo_camera {
         return true;
     }
 
+    bool set_capture_config(float exposure_time_us, float analog_gain) {
+        auto config = mvs_camera::capture_config{};
+        config.exposure_time = exposure_time_us;
+        config.analog_gain = analog_gain;
+        if (memcmp(&config, &last_config, sizeof(config)) == 0) return true;
+        CALL_CHECK(left_camera.modify_config(config));
+        CALL_CHECK(right_camera.modify_config(config));
+        return true;
+    }
+
     void stop_capture() {
         // stop trigger thread
         if (trigger_thread != nullptr) {
@@ -118,6 +128,7 @@ private:
 
     std::thread *trigger_thread = nullptr;
     std::atomic_flag should_stop;
+    mvs_camera::capture_config last_config;
 
     bool open_impl() {
         CALL_CHECK(left_camera.open(left_camera_name));
@@ -126,12 +137,10 @@ private:
     }
 
     bool start_capture_impl(float exposure_time, float analog_gain) {
-        auto config = mvs_camera::capture_config{};
-        config.exposure_time = exposure_time;
-        config.analog_gain = analog_gain;
-
-        CALL_CHECK(left_camera.start_capture(&config));
-        CALL_CHECK(right_camera.start_capture(&config));
+        last_config.exposure_time = exposure_time;
+        last_config.analog_gain = analog_gain;
+        CALL_CHECK(left_camera.start_capture(last_config));
+        CALL_CHECK(right_camera.start_capture(last_config));
         return true;
     }