Ejemplo n.º 1
0
        public override VideoFrame getFrame()
        {
            TeRK.Image image = proxy.getFrame(0);

            VideoFrame frame = new VideoFrame();

            frame.ImageData = image.data;
            frame.Width     = image.width;
            frame.Height    = image.height;

            return(frame);
        }
Ejemplo n.º 2
0
            /// <summary>
            /// Worker thread.
            /// </summary>
            ///
            private void WorkerThread( )
            {
                // download start time and duration
                DateTime start;
                TimeSpan span;

                while (!stopEvent.WaitOne(0, false))
                {
                    try
                    {
                        // start Qwerk's camera
                        videoStreamer.startCamera( );

                        while (!stopEvent.WaitOne(0, false))
                        {
                            // get download start time
                            start = DateTime.Now;

                            TeRKIceLib.Image qwerkImage = videoStreamer.getFrame(0);

                            // increase frames' and bytes' counters
                            framesReceived++;
                            bytesReceived += qwerkImage.data.Length;

                            if (qwerkImage.format == TeRKIceLib.ImageFormat.ImageJPEG)
                            {
                                Bitmap image = (Bitmap)Image.FromStream(new MemoryStream(qwerkImage.data));

                                // notify clients
                                if (NewFrame != null)
                                {
                                    NewFrame(this, new NewFrameEventArgs(image));
                                }

                                image.Dispose( );
                            }
                            else
                            {
                                if (VideoSourceError != null)
                                {
                                    VideoSourceError(this, new VideoSourceErrorEventArgs("Video frame has unsupported format: " + qwerkImage.format));
                                }
                            }

                            // wait for a while ?
                            if (frameInterval > 0)
                            {
                                // get download duration
                                span = DateTime.Now.Subtract(start);
                                // miliseconds to sleep
                                int msec = frameInterval - (int)span.TotalMilliseconds;

                                while ((msec > 0) && (stopEvent.WaitOne(0, false) == false))
                                {
                                    // sleeping ...
                                    Thread.Sleep((msec < 100) ? msec : 100);
                                    msec -= 100;
                                }
                            }
                        }

                        // stop Qwerk's camera
                        videoStreamer.stopCamera( );
                    }
                    catch (Ice.SocketException)
                    {
                        if (VideoSourceError != null)
                        {
                            VideoSourceError(this, new VideoSourceErrorEventArgs("Connection lost to Qwerk's video service."));
                        }
                    }
                    catch
                    {
                        if (VideoSourceError != null)
                        {
                            VideoSourceError(this, new VideoSourceErrorEventArgs("Failed getting video frame from Qwerk."));
                        }
                    }
                }

                if (PlayingFinished != null)
                {
                    PlayingFinished(this, ReasonToFinishPlaying.StoppedByUser);
                }
            }