From f50036627c4175ad307552fa40a78042934139f2 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 22 Oct 2013 01:52:44 +0200 Subject: fix camera name & crash bug Signed-off-by: Stanislaw Halik --- FTNoIR_Tracker_PT/camera.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/FTNoIR_Tracker_PT/camera.cpp b/FTNoIR_Tracker_PT/camera.cpp index 14f7a6be..0ef617c3 100644 --- a/FTNoIR_Tracker_PT/camera.cpp +++ b/FTNoIR_Tracker_PT/camera.cpp @@ -6,6 +6,7 @@ */ #include "camera.h" +#include #include using namespace cv; @@ -48,7 +49,9 @@ void get_camera_device_names(std::vector& device_names) { hr = pPropBag->Read(L"FriendlyName", &varName, 0); if (SUCCEEDED(hr)) { - device_names.push_back(std::string(reinterpret_cast(varName.bstrVal))); + auto wstr = std::wstring(varName.bstrVal); + auto str = std::string(wstr.begin(), wstr.end()); + device_names.push_back(str); } VariantClear(&varName); @@ -71,8 +74,6 @@ void get_camera_device_names(std::vector& device_names) { sprintf(buf, "/dev/video%d", i); if (access(buf, R_OK | W_OK) == 0) { device_names.push_back(std::string(buf)); - } else { - continue; } } # endif @@ -162,10 +163,6 @@ void CVCamera::start() cam_info.res_x = cap->get(CV_CAP_PROP_FRAME_WIDTH); cam_info.res_y = cap->get(CV_CAP_PROP_FRAME_HEIGHT); } - else { - delete cap; - cap = NULL; - } } void CVCamera::stop() @@ -180,7 +177,7 @@ void CVCamera::stop() bool CVCamera::_get_frame(Mat* frame) { - if (cap) + if (cap && cap->isOpened()) { Mat img; /* @@ -188,9 +185,12 @@ bool CVCamera::_get_frame(Mat* frame) * frames and then some every once in a while * -sh */ - while (!cap->read(img))\ + while (!cap->read(img)) ;; + if (img.empty()) + return false; + *frame = img; return true; } -- cgit v1.2.3