Skip to content

Commit

Permalink
video/opencv: store camera index
Browse files Browse the repository at this point in the history
  • Loading branch information
sthalik committed Jan 27, 2020
1 parent 63a2c2b commit 631c85c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
23 changes: 14 additions & 9 deletions compat/camera-names.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,22 @@
int camera_name_to_index(const QString &name)
{
auto list = get_camera_names();
auto it = std::find(list.cbegin(), list.cend(), name);
auto it = std::find_if(list.cbegin(), list.cend(), [&name](const auto& tuple) {
const auto& [str, idx] = tuple;
return str == name;
});
if (it != list.cend())
return std::distance(list.cbegin(), it);
{
const auto& [ str, idx ] = *it;
return idx;
}

return -1;
}

std::vector<QString> get_camera_names()
std::vector<std::tuple<QString, int>> get_camera_names()
{
std::vector<QString> ret;
std::vector<std::tuple<QString, int>> ret;
#ifdef _WIN32
// Create the System Device Enumerator.
HRESULT hr;
Expand Down Expand Up @@ -70,7 +76,7 @@ std::vector<QString> get_camera_names()
{
// Display the name in your UI somehow.
QString str((QChar*)var.bstrVal, int(std::wcslen(var.bstrVal)));
ret.push_back(str);
ret.push_back({ str, ret.size() });
}
VariantClear(&var);
pPropBag->Release();
Expand Down Expand Up @@ -101,16 +107,15 @@ std::vector<QString> get_camera_names()
close(fd);
continue;
}
ret.push_back(QString((const char*)video_cap.card));
ret.push_back({ QString((const char*)video_cap.card), i});
close(fd);
}
}
#endif
#ifdef __APPLE__
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
foreach (const QCameraInfo &cameraInfo, cameras) {
ret.push_back(cameraInfo.description());
}
for (const QCameraInfo &cameraInfo : cameras)
ret.push_back({ cameraInfo.description(), ret.size() });
#endif

return ret;
Expand Down
3 changes: 2 additions & 1 deletion compat/camera-names.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@

#include <vector>
#include <QString>
# include <tuple>

#include "export.hpp"

OTR_COMPAT_EXPORT std::vector<QString> get_camera_names();
OTR_COMPAT_EXPORT std::vector<std::tuple<QString, int>> get_camera_names();
OTR_COMPAT_EXPORT int camera_name_to_index(const QString &name);

9 changes: 8 additions & 1 deletion video-opencv/impl-metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,14 @@ std::unique_ptr<camera> metadata::make_camera(const QString& name)

std::vector<QString> metadata::camera_names() const
{
return get_camera_names();
std::vector<std::tuple<QString, int>> names = get_camera_names();
std::vector<QString> ret;
for (const auto& t : names)
{
const auto& [str, idx] = t;
ret.push_back(str);
}
return ret;
}

bool metadata::can_show_dialog(const QString& camera_name)
Expand Down

0 comments on commit 631c85c

Please sign in to comment.