Учебное руководство: перечисление модулей и камер

от автора

Перечисление функциональных модулей и нескольких камер — важный компонент логики приложения для выбора нужного устройства. В этом учебном руководстве описывается метод перечисления модулей и нескольких устройств, чтобы можно было выбрать нужное из них.



Обнаружение камер, подключенных к системе, и определение возможностей этих камер можно упростить с помощью перечисления устройств. В Intel RealSense SDK 2016 R1 предоставляется механизм с помощью PXCSession::ImplDesc и PXCCapture::DeviceInfo, благодаря которому разработчики могут получать информацию, такую как понятное имя устройства, поддерживаемые модули и т. д.

В этом учебном руководстве показаны классы Intel RealSense SDK, необходимые для инициализации и последующего перечисления модулей и устройств.

Инициализация

Пример инициализации основных обработчиков Intel RealSense SDK реализован, чтобы дать возможность создавать PXCSession в любой момент работы приложения.

int main(int argc, char *argv[]) try {     PXCSession *pSession;     PXCSession::ImplDesc *pDesc;     PXCCapture *pCapture;     PXCSenseManager *pSenseManager;       // Initialize     pSession = PXCSession::CreateInstance();     pDesc = new PXCSession::ImplDesc();       pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;     pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE; 

Перечисление

Перечисление модулей и устройств осуществляется путем последовательного перебора модулей PXCSession::ImplDesc и получения понятного измени. Затем выполняется перебор PXCCapture::DeviceInfo и опрос устройства. Таким способом можно опросить модули и возможности устройств для всех камер, подключенных к системе.

        // Enumerate Devices     std::string temp;   // iterating over the present modules     for (int m = 0; ; m++)     {         PXCSession::ImplDesc desc2;         if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)         {             break;         }         //temp = format("Module[%d]:  %d", m, desc2.friendlyName);         wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());         std::cout << "Module[" << m << "]:  " << str.c_str() << std::endl;           PXCCapture *pCap;         pSession->CreateImpl<PXCCapture>(&desc2, &pCap);           // interating over the devices         for (int d = 0; ; d++)         {             PXCCapture::DeviceInfo dinfo;             if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)             {                 break;             };             wstring ws(dinfo.name); string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;               /*wstring ws(dinfo.orientation);    string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;               wstring ws(dinfo.model);    string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;*/           } } 

Обратите внимание на внешний цикл, необходимый для последовательного перебора текущего модуля, и на внутренний цикл, который служит для перебора подключенных устройств.

Заключение

Перечисление камер — важный этап в работе любого приложения, в котором может потребоваться выбрать определенную камеру из нескольких подключенных к системе. В этом учебном руководстве представлена простая схема перечисления камер для разработчиков, желающих встроить в свое приложение необходимую логику выбора после идентификации определенной камеры и ее возможностей. Полный пример использования приведен в приложении 1 к этому учебному руководству.

Ресурсы

Приложение 1. Пример исходного кода

#include <windows.h>   #include <iostream> #include <string> #include <cstdio> // #include "pxcbase.h" #include "pxcsensemanager.h" #include "pxcmetadata.h" #include "service/pxcsessionservice.h"   #include "pxccapture.h" #include "pxccapturemanager.h"   using namespace std;   int main(int argc, char *argv[]) try {     PXCSession *pSession;     PXCSession::ImplDesc *pDesc;     PXCCapture *pCapture;     PXCSenseManager *pSenseManager;       // Initialize     pSession = PXCSession::CreateInstance();     pDesc = new PXCSession::ImplDesc();       pDesc->group = PXCSession::ImplGroup::IMPL_GROUP_SENSOR;     pDesc->subgroup = PXCSession::ImplSubgroup::IMPL_SUBGROUP_VIDEO_CAPTURE;       // Enumerate Devices     std::string temp;       for (int m = 0; ; m++)     {         PXCSession::ImplDesc desc2;         if (pSession->QueryImpl(pDesc, m, &desc2) < pxcStatus::PXC_STATUS_NO_ERROR)         {             break;         }         //temp = format("Module[%d]:  %d", m, desc2.friendlyName);         wstring ws(desc2.friendlyName); string str(ws.begin(), ws.end());         std::cout << "Module[" << m << "]:  " << str.c_str() << std::endl;           PXCCapture *pCap;         pSession->CreateImpl<PXCCapture>(&desc2, &pCap);           // print out all device information         for (int d = 0; ; d++)         {             PXCCapture::DeviceInfo dinfo;             if (pCap->QueryDeviceInfo(d, &dinfo) < pxcStatus::PXC_STATUS_NO_ERROR)             {                 break;             };             wstring ws(dinfo.name); string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;               /*wstring ws(dinfo.orientation);    string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;               wstring ws(dinfo.model);    string str(ws.begin(), ws.end());             std::cout << "Device[" << d << "]:  " << str.c_str() << std::endl;*/           }     }         cin.clear();     cout << endl << "Press any key to continue...";     cin.ignore();       return 0; } catch (const char *c) {     std::cerr << "Program aborted: " << c << "\n";     MessageBox(GetActiveWindow(), (LPCWSTR)c, L"FAIL", 0); } catch (std::exception e) {     std::cerr << "Program aborted: " << e.what() << "\n";     MessageBox(GetActiveWindow(), (LPCWSTR)e.what(), L"FAIL", 0); } 

ссылка на оригинал статьи https://habrahabr.ru/post/313290/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *