Exemplo n.º 1
0
        public RenderFrameContext Clone()
        {
            RenderFrameContext clone = new RenderFrameContext();

            clone.CurrentFrameIndex             = this.CurrentFrameIndex;
            clone.MovementType                  = this.MovementType;
            clone.IsLastFrame                   = this.IsLastFrame;
            clone.MsToWait                      = this.MsToWait;
            clone.FirstFrameInIntegrationPeriod = this.FirstFrameInIntegrationPeriod;
            clone.CurrentFrameFileName          = this.CurrentFrameFileName;

            return(clone);
        }
Exemplo n.º 2
0
        public RenderFrameContext Clone()
        {
            RenderFrameContext clone = new RenderFrameContext();

            clone.CurrentFrameIndex = this.CurrentFrameIndex;
            clone.MovementType = this.MovementType;
            clone.IsLastFrame = this.IsLastFrame;
            clone.MsToWait = this.MsToWait;
            clone.FirstFrameInIntegrationPeriod = this.FirstFrameInIntegrationPeriod;
            clone.CurrentFrameFileName = this.CurrentFrameFileName;

            return clone;
        }
Exemplo n.º 3
0
        private void DoRenderFrame(Pixelmap currentPixelmap, RenderFrameContext frameContext)
        {
            // NOTE: Disposing the images may happen before they have been rendered and this would cause the following error:
            // Parameter is not valid.
            //  at System.Drawing.Image.get_Width()
            //

            if (m_VideoContext.Pixelmap != null)
            {
                m_VideoContext.Pixelmap.Dispose();
                m_VideoContext.Pixelmap = null;
            }

            m_VideoContext.Pixelmap = currentPixelmap;
            m_VideoContext.RenderFrameContext = frameContext;

            if (currentPixelmap == null)
                return;

            scrollBarFrames.Value = frameContext.CurrentFrameIndex;

            if (TangraConfig.Settings.Generic.ShowProcessingSpeed)
            {
                if (m_FPSLastFrameNo != -1)
                {
                    double totalSec = (new TimeSpan(DateTime.Now.Ticks - m_FPSLastSavedTicks)).TotalSeconds;
                    if (totalSec >= 1.0)
                    {
                        int totalFrames = frameContext.CurrentFrameIndex - m_FPSLastFrameNo;
                        ssFPS.Text = string.Format("{0} fps", ((double)totalFrames / (totalSec /* m_FramePlayer.FrameStep*/)).ToString("0.0"));

                        m_FPSLastFrameNo = frameContext.CurrentFrameIndex;
                        m_FPSLastSavedTicks = DateTime.Now.Ticks;
                    }
                }
                else
                {
                    m_FPSLastFrameNo = frameContext.CurrentFrameIndex;
                    m_FPSLastSavedTicks = DateTime.Now.Ticks;
                }
            }

            bool isNewFrame = m_CurrentFrameId != frameContext.CurrentFrameIndex;
            m_CurrentFrameId = frameContext.CurrentFrameIndex;

            m_VideoController.SetImage(currentPixelmap, m_CurrentFrameId, frameContext, !isNewFrame && frameContext.MovementType == MovementType.Refresh);

            ssFrameNo.Text = string.Format("Frame: {0}", frameContext.CurrentFrameIndex);

            m_VideoController.NewFrameDisplayed();

            CompleteRenderFrame();

            Update();

            m_VideoController.UpdateViews();

            if (isNewFrame)
                NotificationManager.Instance.NotifyCurrentFrameChanged(m_CurrentFrameId);
        }
Exemplo n.º 4
0
        internal void RenderFrame(RenderFrameContext frameContext, Pixelmap currentPixelmap)
        {
            bool taken = false;

            if (frameContext.MsToWait > -1)
            {
                m_sw.Reset();
                m_sw.Start();
            }

            if (m_ReentrancyGuard.IsHeldByCurrentThread)
            {
                while ((Interlocked.CompareExchange(ref m_RefreshFrameLockOwner, 2, 0) == 0))
                {
                    Thread.Sleep(1);
                }
                try
                {
                    if (m_ReentrancyGuard.IsHeldByCurrentThread)
                    {
                        m_RefreshAtTheEndOfRenderFrame = true;
                        return;
                    }
                }
                finally
                {
                    this.m_RefreshFrameLockOwner = 0;
                }
            }

            m_ReentrancyGuard.Enter(ref taken);

            try
            {
                m_RefreshAtTheEndOfRenderFrame = false;

                DoRenderFrame(currentPixelmap, frameContext);

                if (frameContext.MsToWait > -1)
                {
                    m_sw.Stop();
                    int msToWaitReal = frameContext.MsToWait - (int)m_sw.ElapsedMilliseconds;
                    if (msToWaitReal > 0)
                        Thread.Sleep(msToWaitReal);
                }

                while ((Interlocked.CompareExchange(ref m_RefreshFrameLockOwner, 1, 0) == 0))
                {
                    Thread.Sleep(1);
                }
                try
                {
                    if (m_RefreshAtTheEndOfRenderFrame)
                        m_VideoController.RefreshCurrentFrame();
                }
                finally
                {
                    m_RefreshFrameLockOwner = 0;
                }

                //m_TangraApplicationImpl.SetCurrentFrame(frameContext.CurrentFrameIndex);
            }
            catch (OutOfMemoryException)
            {
                MessageBox.Show(
                    "There was not enough free memory to complete the operation. Please stop other running applications and try again.",
                    "Tangra",
                    MessageBoxButtons.OK, MessageBoxIcon.Stop);

                Application.Exit();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.ToString());

            #if !DEBUG
                frmUnhandledException.HandleExceptionNoRestart(this, ex);
            #else
                Debugger.Break();
            #endif
            }
            finally
            {
                if (taken)
                    m_ReentrancyGuard.Exit();
            }
        }
Exemplo n.º 5
0
        public void RenderFrame(
			int currentFrameIndex,
			Pixelmap currentPixelmap,
			MovementType movementType,
			bool isLastFrame,
			int msToWait,
            int firstFrameInIntegrationPeriod,
            string currentFrameFileName)
        {
            m_LastFrameContext = new RenderFrameContext()
            {
                CurrentFrameIndex = currentFrameIndex,
                MovementType = movementType,
                IsLastFrame = isLastFrame,
                MsToWait = msToWait,
                FirstFrameInIntegrationPeriod = firstFrameInIntegrationPeriod,
                CurrentFrameFileName = currentFrameFileName
            };

            RenderFrame(m_LastFrameContext, currentPixelmap);
        }