Example #1
0
    public FFMPEGOutputParser(StreamReader Output, SplitProgress ProgressCB)
    {
        this.ProgressCB = ProgressCB;
        this.Output     = Output;

        ParseMode = Mode.ParseDuration;
    }
Example #2
0
    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;
    }
Example #3
0
 public FFMPEGOutputParser(SplitProgress ProgressCB)
 {
     this.ProgressCB = ProgressCB;
     ParseMode       = Mode.ParseDuration;
 }
Example #4
0
        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);
                }
            }
        }