public FFMPEGOutputParser(StreamReader Output, SplitProgress ProgressCB) { this.ProgressCB = ProgressCB; this.Output = Output; ParseMode = Mode.ParseDuration; }
public static void SplitFrames( string ffmpegBinary, string VideoFile, SplitProgress ProgressCB, AutoResetEvent AbortEvent, out uint NumFrames) { var ImagesDir = GetImagesDir(VideoFile); var frameTemplate = Path.Combine(ImagesDir, "%04d.jpg"); Directory.CreateDirectory(ImagesDir); var runner = new ProcRunner(ffmpegBinary, "-i", VideoFile, frameTemplate); var outputParser = new FFMPEGOutputParser(ProgressCB); runner.StderrLineEvent += outputParser.ParseLine; runner.Start(AbortEvent); NumFrames = outputParser.LastFrame; }
public FFMPEGOutputParser(SplitProgress ProgressCB) { this.ProgressCB = ProgressCB; ParseMode = Mode.ParseDuration; }
public void SplitTemplate(string testSet, ulong partSize) { string srcDir = Path.Combine(TestSetup.SampleDir, testSet); string destDir = TestHelper.GetTempDir(); string wimFile = Path.Combine(destDir, "LZX.wim"); string splitWimFile = Path.Combine(destDir, "Split.swm"); string splitWildcard = Path.Combine(destDir, "Split*.swm"); try { Directory.CreateDirectory(destDir); bool[] _checked = new bool[2]; for (int i = 0; i < _checked.Length; i++) { _checked[i] = false; } CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx) { switch (msg) { case ProgressMsg.SplitBeginPart: { SplitProgress m = (SplitProgress)info; Assert.IsNotNull(m); _checked[0] = true; } break; case ProgressMsg.SplitEndPart: { SplitProgress m = (SplitProgress)info; Assert.IsNotNull(m); _checked[1] = true; } break; } return(CallbackStatus.Continue); } using (Wim wim = Wim.CreateNewWim(CompressionType.LZX)) { wim.AddImage(srcDir, "UnitTest", null, AddFlags.NoAcls); wim.Write(wimFile, Wim.AllImages, WriteFlags.None, Wim.DefaultThreads); } TestHelper.CheckWimPath(SampleSet.Src03, wimFile); using (Wim wim = Wim.OpenWim(wimFile, OpenFlags.None, ProgressCallback)) { wim.Split(splitWimFile, partSize, WriteFlags.None); } Assert.IsTrue(_checked.All(x => x)); List <Tuple <string, bool> > entries = new List <Tuple <string, bool> >(); int IterateCallback(DirEntry dentry, object userData) { string path = dentry.FullPath; bool isDir = (dentry.Attributes & FileAttributes.Directory) != 0; entries.Add(new Tuple <string, bool>(path, isDir)); return(Wim.IterateCallbackSuccess); } using (Wim wim = Wim.OpenWim(splitWimFile, OpenFlags.None)) { wim.ReferenceResourceFile(splitWildcard, RefFlags.GlobEnable | RefFlags.GlobErrOnNoMatch, OpenFlags.None); WimInfo wi = wim.GetWimInfo(); Assert.IsTrue(wi.ImageCount == 1); wim.IterateDirTree(1, Wim.RootPath, IterateDirTreeFlags.Recursive, IterateCallback); } TestHelper.CheckPathList(SampleSet.Src03, entries); } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }