private void fullFileScanner_ResultDetected(object sender, FullFileScanner.FileScanResult scanresult) { IResultNode result = scanresult.Result; if (scanresult.Result == null) { return; } // First make sure the result is valid. List <IResultNode> allKeyframes = ThumbUtil.GetAllKeyFrames(scanresult.Result.Children.ToArray()); if (allKeyframes.Count > 0) { ProjectKeyframeOverviewRow row = CreateAndAddKeyframeRow(_projectFiles[_activeScanFileIndex]); row.KeyframesSourceFragment = scanresult.SourceFragment; if (_fullFileScanner.ScanNumCodecStreams > 0) { int codecCountNotScanned = scanresult.AvailableCodecStreams - _fullFileScanner.ScanNumCodecStreams; if (scanresult.AvailableCodecStreams > 1) { // Warn that only 1 codecstream in the container is scanned for this row row.WarnMoreCodecStreams(codecCountNotScanned); } } List <IResultNode> keyFrames = ThumbUtil.CheckMaxThumbCount(allKeyframes, NumThumbs); foreach (IResultNode frame in keyFrames) { _ffmpegManager.AddToConvertQueue(frame, row); } } else { // Invalidate the result, the scanner will scan the next codecstream (when available). scanresult.IsValid = false; } }
public void DisplayIFramesAsThumbs(IResultNode[] resultNodes) { _currentThumbSource = resultNodes; if (_videoKeyframesWindow == null) { return; } _ffmpegManager.NewQueue(); List <IResultNode> allKeyframes = ThumbUtil.GetAllKeyFrames(resultNodes); int allKeyframesCount = allKeyframes.Count; List <IResultNode> keyFrames = ThumbUtil.CheckMaxThumbCount(allKeyframes, _maxThumbs); if (keyFrames.Count > 0) { _videoKeyframesWindow.NewConvertBatch(keyFrames.Count, allKeyframesCount); foreach (IResultNode frame in keyFrames) { _ffmpegManager.AddToConvertQueue(frame, this); } } }