public void Generate() { Check.Require(Layers, "Layers", Check.NotNull); Check.Require(Layers.Count, "Layers.Count", Check.GreaterThan <int>(0)); Check.Require(Tick, "Tick", Check.GreaterThanOrEqual <int>(0)); ILog _log = LogManager.GetLogger(typeof(IOHelper)); Layers.Sort(new SortComparer <Layer>("Level", false)); var DynamicTextDS = Layers.FindAll(item => item.LayerType == LayerType.DynamicText); if (Layers.Count == 0) { //TODO: var img = new Bitmap(Layers.VideoSize.Width, Layers.VideoSize.Height); using (var g = Graphics.FromImage(img)) { g.Clear(Layers.BackColor); } NailImage = img; return; } var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, Layers.VideoSize.Width, Layers.VideoSize.Height, Layers); { int MaxCount = Tick <= 0 ? DESConsts.BitCount : (int)Tick * DESConsts.BitCount; ManualResetEvent mre = new ManualResetEvent(false); bool hasSign = false; try { Control.CheckForIllegalCrossThreadCalls = false; Panel pnl = new Panel(); var callback = new DESVideoCallBack(); EventHandler onCompleted = delegate { if (des != null) { des.Dispose(); } Control.CheckForIllegalCrossThreadCalls = true; if (!hasSign) { hasSign = true; mre.Set(); } }; callback.OnCallBack = () => { try { if (callback.m_FrameCount == 5) { des.Pause(); hasSign = true; mre.Set(); } } catch (Exception e) { _log.Error("Generale ThumNail Exception on callBack.", e); _log.Error(e); } }; des.Completed += onCompleted; pnl.Width = Layers.VideoSize.Width; pnl.Height = Layers.VideoSize.Height; des.RenderToFrame(pnl, callback, null, DynamicTextDS, DsRect.FromRectangle(ClientRectangle), 0, Layers.PlayLength); des.StartRendering(); des.put_CurrentPosition(Tick); mre.WaitOne(); mre.Close(); if (des != null && !des.IsDisposed) { NailImage = des.GetImage(); des.Cancel(); } } catch (Exception e) { _log.Error("Generale ThumNail Exception on general.", e); _log.Error(e); des.Cancel(); } } }
/// <summary> /// Start PlayList /// </summary> private void StartPlay() { EventArgs ca = new EventArgs(); int RunTime = 0; curNum = 0; PlayState = PlayState.Next; while (curNum >= 0 && curNum < dsArr.Length) { if (PlayState == PlayState.Stop) { if (des != null) { des.Cancel(); } break; } if (PlayState == PlayState.Next) { dsArr[curNum].Sort(new SortComparer <Layer>("Level", false)); des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, hWin.Width, hWin.Height, dsArr[curNum]); DynamicTextDS = dsArr[curNum].FindAll(DynamicTextLayer); des.Completed += new EventHandler(Completed); pVideo = new DESVideoCallBack(RunTime, m_PlayBar, m_MediaTime); des.RenderToFrame(hWin, pVideo, null, DynamicTextDS, DsRect.FromRectangle(hWin.ClientRectangle), 0, dsArr[curNum].PlayLength); des.StartRendering(); PlayState = PlayState.Run; PlayLength = DESHelper.FormatTime(dsArr[curNum].PlayLength); } else { if (PlayState == PlayState.Run) { curLength += 1000000; } if (curLength >= PlayLength) { RunTime += (int)dsArr[curNum].PlayLength; curNum++; curLength = 0; PlayState = PlayState.Next; if (curNum == dsArr.Length) { PlayState = PlayState.Stop; } if (des != null) { des.Stop(); } } Thread.Sleep(100); } } if (des != null) { des.Cancel(); } hWin.Refresh(); if (PlayListCompleted != null) { PlayListCompleted(this, ca); } }
private void button1_Click(object sender, System.EventArgs e) { try { if (ds == null) { MyCallback pVideo = new MyCallback(tbVideo, tbTime, tbElapsed, progressBar1); MyCallback pAudio = new MyCallback(tbAudio); // FPS, BPP, Width, Height ds = new DESCombine(30, 24, 320, 240); foreach (Chunk c in listBox1.Items) { if (c.sVideoFile == c.sAudioFile) { ds.AddAVFile(c.sVideoFile, c.lStart, c.lEnd); } else { if (c.sVideoFile != null) { ds.AddVideoFile(c.sVideoFile, c.lStart, c.lEnd); } if (c.sAudioFile != null) { ds.AddAudioFile(c.sAudioFile, c.lStart, c.lEnd); } } } if (rbToScreen.Checked) { ds.RenderToWindow(IntPtr.Zero, pVideo, pAudio); } else if (rbToAVI.Checked) { IBaseFilter ibfVideoCompressor = GetVideoCompressor(tbCompressor.Text); ds.RenderToAVI(tbOutput.Text, ibfVideoCompressor, null, pVideo, pAudio); } else { MessageBox.Show("Programming error"); } if (cbShowXML.Checked) { MessageBox.Show(ds.GetXML(), "XML representation of the DES graph"); } ds.Completed += new EventHandler(Completed); ds.FileCompleted += new EventHandler(FileCompleted); ds.StartRendering(); groupBox2.Enabled = false; progressBar1.Maximum = (int)(ds.MediaLength / (DESCombine.UNITS / 10)); progressBar1.Step = progressBar1.Maximum / 20; progressBar1.Value = 0; tbStatus.Text = "Running"; button1.Text = "Cancel"; } else { ds.Cancel(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); ds.Dispose(); ds = null; } }
public void Generate() { Check.Require(Layers, "Layers", Check.NotNull); Check.Require(Layers.Length, "Layers.Length", Check.GreaterThan <int>(0)); Check.Require(HWnd, "HWnd", Check.NotNull); Check.Require(Tick, "Tick", Check.GreaterThanOrEqual <int>(0)); var layers = helper.PopulateDataBatchLoad(Layers); layers.BackColor = HWnd.BackColor; //layers.VideoSize = new Size(ControlService.SignCombo.Current.Width, ControlService.SignCombo.Current.Height); layers.VideoSize = HWnd.Size; layers.Sort(new SortComparer <Layer>("Level", false)); var DynamicTextDS = layers.FindAll(item => { return(item.LayerType == LayerType.DynamicText); }); if (layers.Count == 0) { //TODO: var img = new Bitmap(HWnd.Width, HWnd.Height); using (var g = Graphics.FromImage(img)) { g.Clear(HWnd.BackColor); } NailImage = img; return; } //using (var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, HWnd.Width, HWnd.Height, layers)) var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, layers.VideoSize.Width, layers.VideoSize.Height, layers); { int MaxCount = Tick <= 0 ? DESConsts.BitCount : (int)Tick * DESConsts.BitCount; ManualResetEvent mre = new ManualResetEvent(false); bool hasSign = false; try { Control.CheckForIllegalCrossThreadCalls = false; Panel pnl = new Panel(); var callback = new DESVideoCallBack(); EventHandler onCompleted = delegate { if (des != null) { des.Dispose(); } Control.CheckForIllegalCrossThreadCalls = true; if (!hasSign) { hasSign = true; mre.Set(); } }; callback.OnCallBack = () => { try { if (callback.m_FrameCount == 5) { des.Pause(); hasSign = true; mre.Set(); } } catch { } }; des.Completed += onCompleted; pnl.Width = layers.VideoSize.Width; pnl.Height = layers.VideoSize.Height; des.RenderToFrame(pnl, callback, null, DynamicTextDS, DsRect.FromRectangle(HWnd.ClientRectangle), 0, layers.PlayLength); des.StartRendering(); des.put_CurrentPosition(Tick); mre.WaitOne(); mre.Close(); if (des != null && !des.IsDisposed) { NailImage = des.GetImage(); des.Cancel(); } } catch { des.Cancel(); } } }