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); }
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; }
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); }
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(); } }
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); }