public void AdjustPacketSize() { if (!camera.HasValue) { throw new PvException(tErr.eErrUnavailable); } tErr err = Pv.CaptureAdjustPacketSize(camera.Value, MAX_PACKET_SIZE); if (err != tErr.eErrSuccess) { throw new PvException(err); } }
// Start streaming frames. static bool DoStream(ref tCamera Camera) { tErr Err; UInt32 FrameCount = 0; GCHandle pFrame = GCHandle.Alloc(Camera.Frame, GCHandleType.Pinned); tFrameCallback FrameCB = new tFrameCallback(FrameDummyCBStream); uint timeout = 1000; // Adjust packet for optimal preformance. Pv.CaptureAdjustPacketSize(Camera.Handle, 8228); Console.WriteLine("Streaming has started..."); // Set the camera in acquisition mode. if (((Err = Pv.CaptureStart(Camera.Handle)) == 0)) { if ((Pv.CommandRun(Camera.Handle, "AcquisitionStart")) != 0) { // If that fails, reset the camera to non capture mode. Pv.CaptureEnd(Camera.Handle); Console.WriteLine("PvCommandRun() failed!"); return(false); } else { // Stream for a total of 30 frames. while (FrameCount < 100) { if (Pv.CaptureQueueFrame(Camera.Handle, pFrame.AddrOfPinnedObject(), FrameCB) == 0) { Pv.CaptureWaitForFrameDone(Camera.Handle, pFrame.AddrOfPinnedObject(), timeout); FrameCount++; } } // After the 30 frames, stop streaming. CameraStop(ref Camera); Console.WriteLine("Streaming stopped."); return(true); } } else { Console.WriteLine("PvCaptureStart() failed with error code {0}.", Err); return(false); } }
// Snap a frame from the camera. static bool CameraSnap(ref tCamera Camera) { bool result; GCHandle pFrame = GCHandle.Alloc(Camera.Frame, GCHandleType.Pinned); tFrameCallback FrameCB = new tFrameCallback(FrameDummyCB); // Adjust packet for optimal preformance. Pv.CaptureAdjustPacketSize(Camera.Handle, 8228); // Queue the frame. if (Pv.CaptureQueueFrame(Camera.Handle, pFrame.AddrOfPinnedObject(), FrameCB) == 0) { // Trigger the capture. if (Pv.CommandRun(Camera.Handle, "FrameStartTriggerSoftware") == 0) { // Then wait for the frame to be returned. if (Pv.CaptureWaitForFrameDone(Camera.Handle, pFrame.AddrOfPinnedObject(), 0) == 0) { // Check the status flag. if (!(result = (Camera.Frame.Status == tErr.eErrSuccess))) { Console.WriteLine("Frame captured un-succesfully {0}.", Camera.Frame.Status); } } else { Pv.CaptureQueueClear(Camera.Handle); result = false; } } else { Pv.CaptureQueueClear(Camera.Handle); result = false; } } else { result = false; } pFrame.Free(); return(result); }
// Adjust the packet size. static void CameraAdjust(ref tCamera Camera) { UInt32 MaxSize = 16456; Console.WriteLine("Adjusting..."); if ((Pv.CaptureAdjustPacketSize(Camera.Handle, MaxSize) == 0)) { UInt32 Size = 0; Pv.AttrUint32Get(Camera.Handle, "PacketSize", ref Size); Console.WriteLine("The best packet size is " + Size + " bytes."); } else { Console.WriteLine("Sorry, there was an error while trying to adjust the packet size."); } }
// Setup the camera for capture. static bool CameraStart(ref tCamera Camera) { UInt32 FrameSize = 0; // Adjust packet for optimal preformance. Pv.CaptureAdjustPacketSize(Camera.Handle, 8228); // Get the bytes size of the buffer. if (Pv.AttrUint32Get(Camera.Handle, "TotalBytesPerFrame", ref FrameSize) == 0) { Camera.Buffer = new byte[FrameSize]; Camera.GC = GCHandle.Alloc(Camera.Buffer, GCHandleType.Pinned); // Address of the pinned buffer. Camera.Frame.ImageBuffer = Camera.GC.AddrOfPinnedObject(); // Buffer size. Camera.Frame.ImageBufferSize = FrameSize; // Start the capture mode. if (Pv.CaptureStart(Camera.Handle) == 0) { // Set the acquisition mode into continuous. if (Pv.CommandRun(Camera.Handle, "AcquisitionStart") != 0) { // If that fails, reset the camera to non capture mode. Pv.CaptureEnd(Camera.Handle); return(false); } else { return(true); } } else { return(false); } } else { return(false); } }
// Setup the camera up for streaming. static bool CameraStart() { UInt32 FrameSize = 0; // Adjust packet size for optimal performance. Pv.CaptureAdjustPacketSize(GCamera.Handle, 8228); // Determines how big the frame buffers should be. if (Pv.AttrUint32Get(GCamera.Handle, "TotalBytesPerFrame", ref FrameSize) == 0) { tFrame Frame = new tFrame(); byte[] Buffer = new byte[FrameSize]; GCHandle pBuffer = GCHandle.Alloc(Buffer, GCHandleType.Pinned); // Set the frame's fields. // Handle to the Camera. Frame.Context.Field0 = new IntPtr(GCamera.Handle); // Address of the pinned object. Frame.ImageBuffer = pBuffer.AddrOfPinnedObject(); // Buffer size. Frame.ImageBufferSize = FrameSize; // Start the capture mode. if (Pv.CaptureStart(GCamera.Handle) == 0) { // Set the camera in continuous acquisition mode,and in "Freerun". if (Pv.AttrEnumSet(GCamera.Handle, "FrameStartTriggerMode", "Freerun") == 0) { // Set the acquisition mode into continuous. if (Pv.CommandRun(GCamera.Handle, "AcquisitionStart") != 0) { // If that fails, reset the camera to non-capture mode. Pv.CaptureEnd(GCamera.Handle); Console.WriteLine("Failed to start."); return(false); } else { // Pin down a copy of the frame structure. GCHandle pFrame = GCHandle.Alloc(Frame, GCHandleType.Pinned); // Enqueue the frame. Pv.CaptureQueueFrame(GCamera.Handle, pFrame.AddrOfPinnedObject(), FrameCB); return(true); } } else { return(false); } } else { return(false); } } else { return(false); } }
// Setup the camera up for streaming. static bool CameraStart() { tFrameCallback lFrameCB = new tFrameCallback(FrameDoneCB); tCameraEventCallback lEventCB = new tCameraEventCallback(EventDone); UInt32 FrameSize = 0; IntPtr Context = IntPtr.Zero; if (Pv.AttrExists(GCamera.Handle, "EventsEnable1") == tErr.eErrNotFound) { Console.WriteLine("This camera does not support event notifications."); return(false); } // Adjust packet size for optimal performance. Pv.CaptureAdjustPacketSize(GCamera.Handle, 8228); // Determines how big the frame buffers should be. if (Pv.AttrUint32Get(GCamera.Handle, "TotalBytesPerFrame", ref FrameSize) == 0) { tFrame Frame = new tFrame(); byte[] Buffer = new byte[FrameSize]; GCHandle pBuffer = GCHandle.Alloc(Buffer, GCHandleType.Pinned); // Set the frame's fields. // Handle to the Camera. Frame.Context.Field0 = new IntPtr(GCamera.Handle); // Address of the pinned object. Frame.ImageBuffer = pBuffer.AddrOfPinnedObject(); // Buffer size. Frame.ImageBufferSize = FrameSize; // Setup the event channel. Pv.AttrUint32Set(GCamera.Handle, "EventsEnable1", 0); Pv.AttrEnumSet(GCamera.Handle, "EventSelector", "AcquisitionStart"); Pv.AttrEnumSet(GCamera.Handle, "EventNotification", "On"); Pv.AttrEnumSet(GCamera.Handle, "EventSelector", "AcquisitionEnd"); Pv.AttrEnumSet(GCamera.Handle, "EventNotification", "On"); Pv.AttrEnumSet(GCamera.Handle, "EventSelector", "FrameTrigger"); Pv.AttrEnumSet(GCamera.Handle, "EventNotification", "On"); if (Pv.CameraEventCallbackRegister(GCamera.Handle, lEventCB, Context) != tErr.eErrSuccess) { Console.WriteLine("There was an error accessing the driver."); return(false); } // Start the capture mode. if (Pv.CaptureStart(GCamera.Handle) == 0) { if (Pv.AttrFloat32Set(GCamera.Handle, "FrameRate", 5) == 0) { // Set the camera in continuous acquisition mode,and in "Freerun". if (Pv.AttrEnumSet(GCamera.Handle, "FrameStartTriggerMode", "FixedRate") == 0) { // Set the acquisition mode into continuous. if (Pv.CommandRun(GCamera.Handle, "AcquisitionStart") != 0) { // If that fails, reset the camera to non-capture mode. Pv.CaptureEnd(GCamera.Handle); Console.WriteLine("Failed to start."); return(false); } else { // Pin down a copy of the frame structure. GCHandle pFrame = GCHandle.Alloc(Frame, GCHandleType.Pinned); // Enqueue the frame. Pv.CaptureQueueFrame(GCamera.Handle, pFrame.AddrOfPinnedObject(), lFrameCB); return(true); } } else { return(false); } } else { return(false); } } else { return(false); } } else { return(false); } }