Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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;
                    }
                }
            }
        }