Commit 52a60526 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #9492 from paroj:ximea_serial

parents ee268892 01acb08c
...@@ -354,7 +354,11 @@ CV_IMPL CvCapture * cvCreateFileCaptureWithPreference (const char * filename, in ...@@ -354,7 +354,11 @@ CV_IMPL CvCapture * cvCreateFileCaptureWithPreference (const char * filename, in
TRY_OPEN(result, cvCreateFileCapture_OpenNI2 (filename)) TRY_OPEN(result, cvCreateFileCapture_OpenNI2 (filename))
if (apiPreference) break; if (apiPreference) break;
#endif #endif
#ifdef HAVE_XIMEA
case CAP_XIAPI:
TRY_OPEN(result, cvCreateCameraCapture_XIMEA(filename))
if (apiPreference) break;
#endif
case CAP_IMAGES: case CAP_IMAGES:
TRY_OPEN(result, cvCreateFileCapture_Images (filename)) TRY_OPEN(result, cvCreateFileCapture_Images (filename))
} }
......
...@@ -18,6 +18,7 @@ public: ...@@ -18,6 +18,7 @@ public:
virtual ~CvCaptureCAM_XIMEA() { close(); } virtual ~CvCaptureCAM_XIMEA() { close(); }
virtual bool open( int index ); virtual bool open( int index );
bool open( const char* deviceName );
virtual void close(); virtual void close();
virtual double getProperty(int) const; virtual double getProperty(int) const;
virtual bool setProperty(int, double); virtual bool setProperty(int, double);
...@@ -26,6 +27,7 @@ public: ...@@ -26,6 +27,7 @@ public:
virtual int getCaptureDomain() { return CV_CAP_XIAPI; } // Return the type of the capture object: CV_CAP_VFW, etc... virtual int getCaptureDomain() { return CV_CAP_XIAPI; } // Return the type of the capture object: CV_CAP_VFW, etc...
private: private:
bool _open();
void init(); void init();
void errMsg(const char* msg, int errNum) const; void errMsg(const char* msg, int errNum) const;
void resetCvImage(); void resetCvImage();
...@@ -51,6 +53,17 @@ CvCapture* cvCreateCameraCapture_XIMEA( int index ) ...@@ -51,6 +53,17 @@ CvCapture* cvCreateCameraCapture_XIMEA( int index )
return 0; return 0;
} }
CvCapture* cvCreateCameraCapture_XIMEA( const char* serialNumber )
{
CvCaptureCAM_XIMEA* capture = new CvCaptureCAM_XIMEA;
if( capture->open( serialNumber ))
return capture;
delete capture;
return 0;
}
/**********************************************************************************/ /**********************************************************************************/
// Enumerate connected devices // Enumerate connected devices
void CvCaptureCAM_XIMEA::init() void CvCaptureCAM_XIMEA::init()
...@@ -75,13 +88,10 @@ void CvCaptureCAM_XIMEA::init() ...@@ -75,13 +88,10 @@ void CvCaptureCAM_XIMEA::init()
// Initialize camera input // Initialize camera input
bool CvCaptureCAM_XIMEA::open( int wIndex ) bool CvCaptureCAM_XIMEA::open( int wIndex )
{ {
#define HandleXiResult(res) if (res!=XI_OK) goto error;
int mvret = XI_OK;
if(numDevices == 0) if(numDevices == 0)
return false; return false;
int mvret = XI_OK;
if((mvret = xiOpenDevice( wIndex, &hmv)) != XI_OK) if((mvret = xiOpenDevice( wIndex, &hmv)) != XI_OK)
{ {
#if defined _WIN32 #if defined _WIN32
...@@ -97,12 +107,33 @@ bool CvCaptureCAM_XIMEA::open( int wIndex ) ...@@ -97,12 +107,33 @@ bool CvCaptureCAM_XIMEA::open( int wIndex )
#endif #endif
} }
return _open();
}
bool CvCaptureCAM_XIMEA::open( const char* serialNumber )
{
if(numDevices == 0)
return false;
int mvret = XI_OK;
if((mvret = xiOpenDeviceBy(XI_OPEN_BY_SN, serialNumber, &hmv)) != XI_OK)
{
errMsg("Open XI_DEVICE failed", mvret);
return false;
}
return _open();
}
bool CvCaptureCAM_XIMEA::_open()
{
#define HandleXiResult(res) if (res!=XI_OK) goto error;
int width = 0; int width = 0;
int height = 0; int height = 0;
int isColor = 0; int isColor = 0;
// always use auto exposure/gain // always use auto exposure/gain
mvret = xiSetParamInt( hmv, XI_PRM_AEAG, 1); int mvret = xiSetParamInt( hmv, XI_PRM_AEAG, 1);
HandleXiResult(mvret); HandleXiResult(mvret);
mvret = xiGetParamInt( hmv, XI_PRM_WIDTH, &width); mvret = xiGetParamInt( hmv, XI_PRM_WIDTH, &width);
......
...@@ -126,6 +126,7 @@ CvCapture* cvCreateFileCapture_OpenNI( const char* filename ); ...@@ -126,6 +126,7 @@ CvCapture* cvCreateFileCapture_OpenNI( const char* filename );
CvCapture* cvCreateFileCapture_OpenNI2( const char* filename ); CvCapture* cvCreateFileCapture_OpenNI2( const char* filename );
CvCapture* cvCreateCameraCapture_Android( int index ); CvCapture* cvCreateCameraCapture_Android( int index );
CvCapture* cvCreateCameraCapture_XIMEA( int index ); CvCapture* cvCreateCameraCapture_XIMEA( int index );
CvCapture* cvCreateCameraCapture_XIMEA( const char* serialNumber );
CvCapture* cvCreateCameraCapture_AVFoundation(int index); CvCapture* cvCreateCameraCapture_AVFoundation(int index);
CvCapture* cvCreateCameraCapture_Aravis( int index ); CvCapture* cvCreateCameraCapture_Aravis( int index );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment