Added get and set for extra PVAPI property: CV_CAP_PROP_FRAMESTARTTRIGGERMODE
authorNick D'Ademo <nickdademo@gmail.com>
Mon, 13 Jan 2014 11:01:09 +0000 (22:01 +1100)
committerNick D'Ademo <nickdademo@gmail.com>
Mon, 13 Jan 2014 11:01:09 +0000 (22:01 +1100)
modules/highgui/include/opencv2/highgui/highgui_c.h
modules/highgui/src/cap_pvapi.cpp

index 1a42e58..249eec2 100644 (file)
@@ -420,8 +420,13 @@ enum
     CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION,
 
     // Properties of cameras available through GStreamer interface
-    CV_CAP_GSTREAMER_QUEUE_LENGTH   = 200, // default is 1
-    CV_CAP_PROP_PVAPI_MULTICASTIP   = 300, // ip for anable multicast master mode. 0 for disable multicast
+    CV_CAP_GSTREAMER_QUEUE_LENGTH     = 200, // default is 1
+    CV_CAP_PROP_PVAPI_MULTICASTIP     = 300, // ip for anable multicast master mode. 0 for disable multicast
+    CV_CAP_PROP_FRAMESTARTTRIGGERMODE = 301, // 0: For Freerun
+                                             // 1: For SyncIn1
+                                             // 2: For SyncIn2
+                                             // 3: For Fixedrate
+                                             // 4: For Software
 
     // Properties of cameras available through XIMEA SDK interface
     CV_CAP_PROP_XI_DOWNSAMPLING  = 400,      // Change image resolution by binning or skipping.
index 6ed3aea..69a4823 100644 (file)
@@ -254,6 +254,11 @@ double CvCaptureCAM_PvAPI::getProperty( int property_id )
     case CV_CAP_PROP_FRAME_HEIGHT:
         PvAttrUint32Get(Camera.Handle, "Height", &nTemp);
         return (double)nTemp;
+    case CV_CAP_PROP_MONOCROME:
+        if (monocrome)
+          return 1;
+        else
+          return 0;
     case CV_CAP_PROP_EXPOSURE:
         PvAttrUint32Get(Camera.Handle,"ExposureValue",&nTemp);
         return (double)nTemp;
@@ -280,6 +285,21 @@ double CvCaptureCAM_PvAPI::getProperty( int property_id )
     case CV_CAP_PROP_GAIN:
         PvAttrUint32Get(Camera.Handle, "GainValue", &nTemp);
         return (double)nTemp;
+    case CV_CAP_PROP_FRAMESTARTTRIGGERMODE:
+        char triggerMode[256];
+        PvAttrEnumGet(Camera.Handle, "FrameStartTriggerMode", triggerMode, 256, NULL);
+        if (strcmp(triggerMode, "Freerun")==0)
+            return 0.0;
+        else if (strcmp(triggerMode, "SyncIn1")==0)
+            return 1.0;
+        else if (strcmp(triggerMode, "SyncIn2")==0)
+            return 2.0;
+        else if (strcmp(triggerMode, "FixedRate")==0)
+            return 3.0;
+        else if (strcmp(triggerMode, "Software")==0)
+            return 4.0;
+        else
+            return -1.0;
     }
     return -1.0;
 }
@@ -368,6 +388,24 @@ bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value )
             return false;
         }
         break;
+    case CV_CAP_PROP_FRAMESTARTTRIGGERMODE:
+        tPvErr error;
+        if (value==0)
+            error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Freerun");
+        else if (value==1)
+            error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "SyncIn1");
+        else if (value==2)
+            error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "SyncIn2");
+        else if (value==3)
+            error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "FixedRate");
+        else if (value==4)
+            error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Software");
+        else
+            error = ePvErrOutOfRange;
+        if(error==ePvErrSuccess)
+            break;
+        else
+            return false;
     default:
         return false;
     }