From 2b94bcffb9e47c8fb09bb193c7ac4688c5738aa2 Mon Sep 17 00:00:00 2001 From: Nick D'Ademo Date: Mon, 11 Aug 2014 13:30:36 +0200 Subject: [PATCH] Added get and set for additional PVAPI properties: DecimationHorizontal, DecimationVertical, BinningX, BinningY --- modules/videoio/include/opencv2/videoio.hpp | 15 ++++++- .../include/opencv2/videoio/videoio_c.h | 4 ++ modules/videoio/src/cap_pvapi.cpp | 45 ++++++++++++++++++- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/modules/videoio/include/opencv2/videoio.hpp b/modules/videoio/include/opencv2/videoio.hpp index 763c5bd435..a601b8eb7e 100644 --- a/modules/videoio/include/opencv2/videoio.hpp +++ b/modules/videoio/include/opencv2/videoio.hpp @@ -191,8 +191,12 @@ enum { CAP_PROP_GSTREAMER_QUEUE_LENGTH = 200 // default is 1 // PVAPI -enum { CAP_PROP_PVAPI_MULTICASTIP = 300, // ip for anable multicast master mode. 0 for disable multicast - CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301 // FrameStartTriggerMode: Determines how a frame is initiated +enum { CAP_PROP_PVAPI_MULTICASTIP = 300, // ip for anable multicast master mode. 0 for disable multicast + CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301, // FrameStartTriggerMode: Determines how a frame is initiated + CAP_PROP_PVAPI_DECIMATIONHORIZONTAL = 302, // Horizontal sub-sampling of the image + CAP_PROP_PVAPI_DECIMATIONVERTICAL = 303, // Vertical sub-sampling of the image + CAP_PROP_PVAPI_BINNINGX = 304, // Horizontal binning factor + CAP_PROP_PVAPI_BINNINGY = 305 // Vertical binning factor }; // PVAPI: FrameStartTriggerMode @@ -203,6 +207,13 @@ enum { CAP_PVAPI_FSTRIGMODE_FREERUN = 0, // Freerun CAP_PVAPI_FSTRIGMODE_SOFTWARE = 4 // Software }; +// PVAPI: DecimationHorizontal, DecimationVertical +enum { CAP_PVAPI_DECIMATION_OFF = 1, // Off + CAP_PVAPI_DECIMATION_2OUTOF4 = 2, // 2 out of 4 decimation + CAP_PVAPI_DECIMATION_2OUTOF8 = 3, // 2 out of 8 decimation + CAP_PVAPI_DECIMATION_2OUTOF16 = 5 // 2 out of 16 decimation + }; + // Properties of cameras available through XIMEA SDK interface enum { CAP_PROP_XI_DOWNSAMPLING = 400, // Change image resolution by binning or skipping. CAP_PROP_XI_DATA_FORMAT = 401, // Output data format. diff --git a/modules/videoio/include/opencv2/videoio/videoio_c.h b/modules/videoio/include/opencv2/videoio/videoio_c.h index 0b08d03d9b..13805c0a4c 100644 --- a/modules/videoio/include/opencv2/videoio/videoio_c.h +++ b/modules/videoio/include/opencv2/videoio/videoio_c.h @@ -218,6 +218,10 @@ enum // PVAPI CV_CAP_PROP_PVAPI_MULTICASTIP = 300, // ip for anable multicast master mode. 0 for disable multicast CV_CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301, // FrameStartTriggerMode: Determines how a frame is initiated + CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL = 302, // Horizontal sub-sampling of the image + CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL = 303, // Vertical sub-sampling of the image + CV_CAP_PROP_PVAPI_BINNINGX = 304, // Horizontal binning factor + CV_CAP_PROP_PVAPI_BINNINGY = 305, // Vertical binning factor // Properties of cameras available through XIMEA SDK interface CV_CAP_PROP_XI_DOWNSAMPLING = 400, // Change image resolution by binning or skipping. diff --git a/modules/videoio/src/cap_pvapi.cpp b/modules/videoio/src/cap_pvapi.cpp index 4b27ab1602..66b9f9f745 100644 --- a/modules/videoio/src/cap_pvapi.cpp +++ b/modules/videoio/src/cap_pvapi.cpp @@ -300,12 +300,26 @@ double CvCaptureCAM_PvAPI::getProperty( int property_id ) return 4.0; else return -1.0; + case CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL: + PvAttrUint32Get(Camera.Handle, "DecimationHorizontal", &nTemp); + return (double)nTemp; + case CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL: + PvAttrUint32Get(Camera.Handle, "DecimationVertical", &nTemp); + return (double)nTemp; + case CV_CAP_PROP_PVAPI_BINNINGX: + PvAttrUint32Get(Camera.Handle,"BinningX",&nTemp); + return (double)nTemp; + case CV_CAP_PROP_PVAPI_BINNINGY: + PvAttrUint32Get(Camera.Handle,"BinningY",&nTemp); + return (double)nTemp; } return -1.0; } bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) { + tPvErr error; + switch ( property_id ) { case CV_CAP_PROP_FRAME_WIDTH: @@ -389,7 +403,6 @@ bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) } break; case CV_CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE: - tPvErr error; if (value==0) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Freerun"); else if (value==1) @@ -406,6 +419,36 @@ bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) break; else return false; + case CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL: + if (value >= 1 && value <= 8) + error = PvAttrUint32Set(Camera.Handle, "DecimationHorizontal", value); + else + error = ePvErrOutOfRange; + if(error==ePvErrSuccess) + break; + else + return false; + case CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL: + if (value >= 1 && value <= 8) + error = PvAttrUint32Set(Camera.Handle, "DecimationVertical", value); + else + error = ePvErrOutOfRange; + if(error==ePvErrSuccess) + break; + else + return false; + case CV_CAP_PROP_PVAPI_BINNINGX: + error = PvAttrUint32Set(Camera.Handle, "BinningX", value); + if(error==ePvErrSuccess) + break; + else + return false; + case CV_CAP_PROP_PVAPI_BINNINGY: + error = PvAttrUint32Set(Camera.Handle, "BinningY", value); + if(error==ePvErrSuccess) + break; + else + return false; default: return false; }