/// <summary> /// Get SVS's camera. /// </summary> /// /// <param name="camera">SVS camera to get.</param> /// /// <returns>Returns <see cref="SRV1Camera"/> object, which is connected to SVS's Blackfin camera. /// Use <see cref="SRV1Camera.Start"/> method to start the camera and start receiving video /// frames from it.</returns> /// /// <remarks><para>The method provides an instance of <see cref="SRV1Camera"/>, which can be used /// for receiving continuous video frames from the SVS board. /// In the case if only one image is required, the <see cref="GetImage"/> method can be used.</para> /// /// <para>Sample usage:</para> /// <code> /// // get SRV-1 camera /// SRV1Camera camera = svs.GetCamera( SVS.Camera.Left ); /// // set NewFrame event handler /// camera.NewFrame += new NewFrameEventHandler( video_NewFrame ); /// // start the video source /// camera.Start( ); /// // ... /// /// private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) /// { /// // get new frame /// Bitmap bitmap = eventArgs.Frame; /// // process the frame /// } /// </code> /// </remarks> /// /// <exception cref="NotConnectedException">Not connected to SVS. Connect to SVS board before using /// this method.</exception> /// public SRV1Camera GetCamera(Camera camera) { if (camera == Camera.Left) { if (leftCamera == null) { leftCamera = SafeGetCommunicator1( ).GetCamera( ); } return(leftCamera); } if (rightCamera == null) { rightCamera = SafeGetCommunicator2( ).GetCamera( ); } return(rightCamera); }
/// <summary> /// Disconnect from SVS device. /// </summary> /// /// <remarks><para>The method disconnects from SVS board making all other methods /// unavailable (except <see cref="Connect"/> method). In the case if user /// obtained instance of left or right camera using <see cref="GetCamera"/> /// method, the video will be stopped automatically (and those <see cref="SRV1Camera"/> /// instances should be discarded). /// </para></remarks> /// public void Disconnect( ) { lock ( sync1 ) { lock ( sync2 ) { hostAddress = null; // signal cameras to stop if (leftCamera != null) { leftCamera.SignalToStop( ); } if (rightCamera != null) { rightCamera.SignalToStop( ); } // wait until cameras stop or abort them if (leftCamera != null) { // wait for aroung 250 ms for (int i = 0; (i < 5) && (leftCamera.IsRunning); i++) { System.Threading.Thread.Sleep(50); } // abort camera if it can not be stopped if (leftCamera.IsRunning) { leftCamera.Stop( ); } leftCamera = null; } if (rightCamera != null) { // wait for aroung 250 ms for (int i = 0; (i < 5) && (rightCamera.IsRunning); i++) { System.Threading.Thread.Sleep(50); } // abort camera if it can not be stopped if (rightCamera.IsRunning) { rightCamera.Stop( ); } rightCamera = null; } if (communicator1 != null) { communicator1.Disconnect( ); communicator1 = null; } if (communicator2 != null) { communicator2.Disconnect( ); communicator2 = null; } } } }