private void AddKeyFramesToList(IResultNode node, KeyFrameList keyFrames) { if (node.IsKeyframe()) { ICodecDetector detector = node.Detectors.Where(d => d is ICodecDetector).SingleOrDefault() as ICodecDetector; keyFrames.Add(new KeyFrame(BuildRangeList(detector.GetVideoHeaders(node)), BuildRangeList(detector.GetVideoData(node)))); } else { foreach (var childNode in node.Children) { AddKeyFramesToList(childNode, keyFrames); } } }
private static IEnumerable <IResultNode> FindKeyFrame(IResultNode node) { if (node.Detectors.Any(d => node.IsKeyframe())) { yield return(node); } foreach (IResultNode childNode in node.Children) { foreach (IResultNode keyFrameNode in FindKeyFrame(childNode)) { yield return(keyFrameNode); } } yield break; }
private static IResultNode FindKeyFrame(IResultNode node) { if (node.Detectors.Any(d => node.IsKeyframe())) { return(node); } foreach (IResultNode childNode in node.Children) { IResultNode keyFrameNode = FindKeyFrame(childNode); if (keyFrameNode != null) { return(keyFrameNode); } } return(null); }
private static IResultNode RecursiveKeyframeLookup(IResultNode node) { if (node.IsKeyframe()) { return(node); } foreach (IResultNode childNode in node.Children) { IResultNode childResult = RecursiveKeyframeLookup(childNode); if (childResult != null) { return(childResult); } } return(null); }
public void AskChangeDefaultCodecHeader(FFmpegResult ffmpegResult, IWin32Window windowOwner) { if (ffmpegResult.Bitmap == null && !IsWindowOpen() && !_backgroundFileScanner.IsBusy) { // Check if it is a key frame. When true we should be able to decode it. IResultNode resultNode = ffmpegResult.SourcePacket; if (resultNode != null && resultNode.IsKeyframe()) { if (DialogResult.Yes == MessageBox.Show( "Defraser couldn't detect the video headers of this frame. Do you want to use a reference header to decode this frame?", "Header Not Found.", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) { EditDefaultCodecHeader editDefaultCodecHeader = CreateEditDefaultCodecHeaderWindow(); editDefaultCodecHeader.SelectCodec(ffmpegResult.SourcePacket.DataFormat); editDefaultCodecHeader.ShowDialog(windowOwner); } } } }