public void GlobalTest10() { MainViewModel mvm = MainViewModelTest.GetInstance(); PipelineViewModel pvm = mvm.PipelineViewModel; // Step 1: The user clicks "New" to create a new pipeline mvm.Clear(); Assert.Empty(mvm.Model.Graph.Nodes); var mock = new Mock <IDragEventInfo>(); // Step 2: Create each type of node once by drag-and-drop VideoInputNode vin = (VideoInputNode)AddNode <VideoInputNode>(pvm, mock, new Point(10, 30)); AdditiveMergeNode amn = (AdditiveMergeNode)AddNode <AdditiveMergeNode>(pvm, mock, new Point(30, 30)); BlurNode bn = (BlurNode)AddNode <BlurNode>(pvm, mock, new Point(50, 30)); BrightnessContrastSaturationNode bcsn = (BrightnessContrastSaturationNode)AddNode <BrightnessContrastSaturationNode>(pvm, mock, new Point(70, 30)); ColorInputNode cin = (ColorInputNode)AddNode <ColorInputNode>(pvm, mock, new Point(10, 50)); DelayNode dln = (DelayNode)AddNode <DelayNode>(pvm, mock, new Point(90, 30)); DiagramNode dgn = (DiagramNode)AddNode <DiagramNode>(pvm, mock, new Point(110, 30)); DifferenceNode dfn = (DifferenceNode)AddNode <DifferenceNode>(pvm, mock, new Point(30, 50)); HistogramNode hn = (HistogramNode)AddNode <HistogramNode>(pvm, mock, new Point(50, 50)); ImageInputNode imin = (ImageInputNode)AddNode <ImageInputNode>(pvm, mock, new Point(70, 50)); InverterNode invn = (InverterNode)AddNode <InverterNode>(pvm, mock, new Point(90, 50)); NoiseInputNode nin = (NoiseInputNode)AddNode <NoiseInputNode>(pvm, mock, new Point(110, 50)); OverlayNode on = (OverlayNode)AddNode <OverlayNode>(pvm, mock, new Point(10, 70)); RgbSplitNode rgbsn = (RgbSplitNode)AddNode <RgbSplitNode>(pvm, mock, new Point(30, 70)); WeightedAveragedMergeNode wamn = (WeightedAveragedMergeNode)AddNode <WeightedAveragedMergeNode>(pvm, mock, new Point(50, 70)); // Step 3: Create the edges mvm.Model.Graph.AddEdge(vin.Outputs[0], bn.Inputs[0]); Assert.Equal(vin.Outputs[0], bn.Inputs[0].Source); amn.Inputs.Add(new Node.Input()); mvm.Model.Graph.AddEdge(vin.Outputs[0], amn.Inputs[0]); Assert.Equal(vin.Outputs[0], amn.Inputs[0].Source); mvm.Model.Graph.AddEdge(bn.Outputs[0], dln.Inputs[0]); Assert.Equal(bn.Outputs[0], dln.Inputs[0].Source); mvm.Model.Graph.AddEdge(dln.Outputs[0], dfn.Inputs[0]); Assert.Equal(dln.Outputs[0], dfn.Inputs[0].Source); mvm.Model.Graph.AddEdge(imin.Outputs[0], dfn.Inputs[1]); Assert.Equal(imin.Outputs[0], dfn.Inputs[1].Source); mvm.Model.Graph.AddEdge(dfn.Outputs[0], invn.Inputs[0]); Assert.Equal(dfn.Outputs[0], invn.Inputs[0].Source); mvm.Model.Graph.AddEdge(invn.Outputs[0], on.Inputs[0]); Assert.Equal(invn.Outputs[0], on.Inputs[0].Source); mvm.Model.Graph.AddEdge(vin.Outputs[0], on.Inputs[1]); Assert.Equal(vin.Outputs[0], on.Inputs[1].Source); mvm.Model.Graph.AddEdge(vin.Outputs[0], rgbsn.Inputs[0]); Assert.Equal(vin.Outputs[0], rgbsn.Inputs[0].Source); mvm.Model.Graph.AddEdge(rgbsn.Outputs[2], hn.Inputs[0]); Assert.Equal(rgbsn.Outputs[2], hn.Inputs[0].Source); }
public void ViewlessPipeline() { var input = new VideoInputNode { FileName = new FilePath(@"..\..\..\..\resources\americanFootball_352x240_125.yuv") }; Node graph = new BrightnessContrastSaturationNode { Contrast = 10 }; //new BlurNode { Radius = 3 }; graph.Inputs[0].Source = input.Outputs[0]; IObservable <Frame> frames = new PipelineDriver().RenderTicks(new[] { graph }, tickCount: input.TickCount) .Select(dic => dic[graph.Outputs[0]]); YuvEncoder.Encode( @"..\..\..\..\output\ViewlessPipeline_sif.yuv", frames.ToEnumerable() ); }
public void ViewfulPipeline() { var input = new VideoInputNode { FileName = new FilePath(@"..\..\..\..\resources\americanFootball_352x240_125.yuv") }; Func <Node, Node> makeNode = n => { Node n2 = new InverterNode(); n2.Inputs[0].Source = n.Outputs[0]; return(n2); }; Node graph = makeNode(makeNode(makeNode(input))); IoC.GetInstance = delegate { return(new EventAggregator()); }; var output = new VideoOutputViewModel(graph.Outputs[0]); var sw = Stopwatch.StartNew(); new PipelineDriver().RenderTicks(new[] { graph }, tickCount: input.TickCount) .ForEach(dic => output.Handle(new TickRenderedMessage(dic))); Console.WriteLine(sw.ElapsedMilliseconds + " ms"); }
public void Test40() { // Step 1: create an arbitrary acyclical pipeline with an input and a manipulation node MainViewModel mvm = MainViewModelTest.GetInstance(); VideoInputNode video = new VideoInputNode(); BlurNode blur = new BlurNode() { Type = BlurType.Gaussian, Radius = 3 }; DisplayNode display = new DisplayNode(); // We'll have to dump this node's output later, so we need a ViewModel NodeViewModel blurVM = new NodeViewModel(blur, mvm.PipelineViewModel); mvm.Model.Graph.AddNode(video); mvm.Model.Graph.AddNode(blur); mvm.Model.Graph.AddNode(display); mvm.Model.Graph.AddEdge(video.Outputs[0], blur.Inputs[0]); mvm.Model.Graph.AddEdge(blur.Outputs[0], display.Inputs[0]); // Assert that the graph is well-formed Assert.Contains(video, mvm.Model.Graph.Nodes); Assert.Contains(blur, mvm.Model.Graph.Nodes); Assert.Contains(display, mvm.Model.Graph.Nodes); Assert.Equal(blur.Inputs[0].Source, video.Outputs[0]); Assert.Equal(display.Inputs[0].Source, blur.Outputs[0]); // Step 2: change the video input data Assert.False(display.InputIsValid); video.FileName = new FilePath(@"..\..\..\..\resources\americanFootball_352x240_125.yuv"); Assert.True(display.InputIsValid); // Step 3: open the DisplayNode's output and play the video DisplayViewModel output = display.Window; Assert.Equal(display, output.NodeModel); Assert.False(mvm.Model.IsPlaying); mvm.ReplayStateViewModel.PlayPause(); Assert.True(mvm.Model.IsPlaying); // Step 4: Change a node's options while the video is playing blur.Radius = 0; Assert.True(mvm.Model.IsPlaying); Assert.True(display.InputIsValid); // Step 5: change replay speed while video is playing int oldSpeed = mvm.Model.Speed; mvm.ReplayStateViewModel.Slower(); Assert.True(oldSpeed > mvm.Model.Speed); // Step 6: pause the video mvm.ReplayStateViewModel.PlayPause(); Assert.False(mvm.Model.IsPlaying); // Step 7: resumes the video mvm.ReplayStateViewModel.PlayPause(); Assert.True(mvm.Model.IsPlaying); // Step 8: resets the video playing state mvm.ReplayStateViewModel.Stop(); Assert.Equal(0, mvm.Model.CurrentTick); Assert.False(mvm.Model.IsPlaying); // Step 9: save the video as yuv file blurVM.SaveNodeOutput(blur.Outputs[0]); // Since we can't create a FileChooser here, we'll have to invoke the SaveNodeOutputViewModel directly System.IO.MemoryStream stream = new System.IO.MemoryStream(); SaveNodeOutputViewModel saveVM = new SaveNodeOutputViewModel(blur.Outputs[0], stream, mvm.Model); Assert.Equal(mvm.Model.Graph.TickCount, saveVM.TickCount); // I'm sorry for this. I really am. I found no better way of testing this. System.Threading.Thread.Sleep(1000); try { Assert.NotEqual(0, stream.Capacity); } catch (ObjectDisposedException) { // This means the SaveNodeOutputViewModel is already done and has disposed of its stream // That's just another possibility that's just as valid, and signifies proper execution } }