Exemplo n.º 1
0
        /// <summary>Start the video playback</summary>
        public void Start(FramePlaySpeed mode, int?startAtFrame, uint step)
        {
            if (m_VideoStream != null)
            {
                m_Step                = step;
                m_IsRunning           = true;
                m_StopRequestReceived = false;

                int bufferSize = m_VideoStream.RecommendedBufferSize;

                if (mode == FramePlaySpeed.Fastest)
                {
                    m_MillisecondsPerFrame = 0;
                }
                else if (mode == FramePlaySpeed.Slower)
                {
                    m_MillisecondsPerFrame = m_MillisecondsPerFrame * 2;
                }

                if (bufferSize < 2)
                {
                    if (m_FrameIntegration == FrameIntegratingMode.SteppedAverage)
                    {
                        throw new NotSupportedException("Buffer size must be larger than 2 for stepped averaging software integration to work properly");
                    }
                    else
                    {
                        m_PlayerThread = new Thread(new ThreadStart(Run));
                    }
                }
                else
                {
                    m_PlayerThread = new Thread(new ThreadStart(RunBufferred));
                    m_PlayerThread.IsBackground = true;
                    m_PlayerThread.SetApartmentState(ApartmentState.MTA);

                    m_BufferNextFrameThread = new Thread(new ParameterizedThreadStart(BufferNextFrame));
                    m_BufferNextFrameThread.IsBackground = true;
                    m_BufferNextFrameThread.SetApartmentState(ApartmentState.MTA);

                    if (startAtFrame != null)
                    {
                        m_CurrentFrameIndex = startAtFrame.Value;
                    }
                    else
                    {
                        m_CurrentFrameIndex = m_LastDisplayedFrameIndex <= m_VideoStream.FirstFrame ? m_VideoStream.FirstFrame : m_LastDisplayedFrameIndex + 1;
                    }

                    m_BufferNextFrameThread.Start(new FrameBufferContext()
                    {
                        BufferSize   = bufferSize,
                        FirstFrameNo = m_CurrentFrameIndex
                    });
                }

                m_PlayerThread.Start();
            }
        }
Exemplo n.º 2
0
        /// <summary>Start the video playback</summary>
        public void Start(FramePlaySpeed mode, int? startAtFrame, uint step)
        {
            if (m_VideoStream != null)
            {
                m_Step = step;
                m_IsRunning = true;
                m_StopRequestReceived = false;

                int bufferSize = m_VideoStream.RecommendedBufferSize;

                if (mode == FramePlaySpeed.Fastest)
                    m_MillisecondsPerFrame = 0;
                else if (mode == FramePlaySpeed.Slower)
                    m_MillisecondsPerFrame = m_MillisecondsPerFrame * 2;

                if (bufferSize < 2)
                {
                    if (m_FrameIntegration == FrameIntegratingMode.SteppedAverage)
                        throw new NotSupportedException("Buffer size must be larger than 2 for stepped averaging software integration to work properly");
                    else
                        m_PlayerThread = new Thread(new ThreadStart(Run));
                }
                else
                {
                    m_PlayerThread = new Thread(new ThreadStart(RunBufferred));
                    m_PlayerThread.IsBackground = true;
                    m_PlayerThread.SetApartmentState(ApartmentState.MTA);

                    m_BufferNextFrameThread = new Thread(new ParameterizedThreadStart(BufferNextFrame));
                    m_BufferNextFrameThread.IsBackground = true;
                    m_BufferNextFrameThread.SetApartmentState(ApartmentState.MTA);

                    if (startAtFrame != null)
                        m_CurrentFrameIndex = startAtFrame.Value;
                    else
                        m_CurrentFrameIndex = m_LastDisplayedFrameIndex <= m_VideoStream.FirstFrame ? m_VideoStream.FirstFrame : m_LastDisplayedFrameIndex + 1;

                    m_BufferNextFrameThread.Start(new FrameBufferContext()
                    {
                        BufferSize = bufferSize,
                        FirstFrameNo = m_CurrentFrameIndex
                    });
                }

                m_PlayerThread.Start();
            }
        }