Added get and set for additional PVAPI properties: DecimationHorizontal, DecimationVe...
authorNick D'Ademo <nickdademo@gmail.com>
Mon, 11 Aug 2014 11:30:36 +0000 (13:30 +0200)
committerNick D'Ademo <nickdademo@gmail.com>
Mon, 11 Aug 2014 11:30:36 +0000 (13:30 +0200)
modules/videoio/include/opencv2/videoio.hpp
modules/videoio/include/opencv2/videoio/videoio_c.h
modules/videoio/src/cap_pvapi.cpp

index 763c5bd..a601b8e 100644 (file)
@@ -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.
index 0b08d03..13805c0 100644 (file)
@@ -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.
index 4b27ab1..66b9f9f 100644 (file)
@@ -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;
     }