Ejemplo n.º 1
0
        public void TestAddNode()
        {
            // create some nodes and initialize graph
            BlurNode       blur0  = new BlurNode();
            BlurNode       blur1  = new BlurNode();
            BlurNode       blur2  = new BlurNode();
            BlurNode       blur3  = new BlurNode();
            BlurNode       blur4  = new BlurNode();
            NoiseInputNode noise0 = new NoiseInputNode();
            NoiseInputNode noise1 = new NoiseInputNode();
            PipelineGraph  graph  = new PipelineGraph();

            graph.AddNode(blur0);
            graph.AddNode(blur1);
            graph.AddNode(noise0);
            graph.AddNode(blur2);
            graph.AddNode(noise1);

            Assert.Equal("Blur", blur0.Name);
            Assert.Equal("Blur 2", blur1.Name);
            Assert.Equal("Blur 3", blur2.Name);
            Assert.Equal("Noise", noise0.Name);
            Assert.Equal("Noise 2", noise1.Name);

            graph.RemoveNode(blur1);
            graph.AddNode(blur3);
            graph.AddNode(blur4);

            Assert.Equal("Blur 2", blur3.Name);
            Assert.Equal("Blur 4", blur4.Name);
        }
Ejemplo n.º 2
0
        public static void NoiseInputTest()
        {
            Frame  outputFrame;
            Bitmap outputImage;
            int    tick;

            // Perlin noise
            NoiseInputNode noiseInput = new NoiseInputNode();

            noiseInput.Type = NoiseType.Perlin;
            noiseInput.Size = new YuvKA.VideoModel.Size(352, 240);
            tick            = 7;

            DateTime start = DateTime.Now;             // Start time of Perlin noise test

            outputFrame = noiseInput.OutputFrame(tick);
            DateTime end = DateTime.Now;             // End time

            TimeSpan diff = end.Subtract(start);

            // Time limit for the Perlin noise should be 200 ms
            Assert.True(diff.Seconds * 1000 + diff.Milliseconds < 200);

            outputImage = new Bitmap(noiseInput.Size.Width, noiseInput.Size.Height);
            for (int y = 0; y < outputFrame.Size.Height; ++y)
            {
                for (int x = 0; x < outputFrame.Size.Width; ++x)
                {
                    outputImage.SetPixel(x,
                                         y,
                                         Color.FromArgb(outputFrame[x, y].R,
                                                        outputFrame[x, y].G,
                                                        outputFrame[x, y].B));
                }
            }
            outputImage.Save("..\\..\\..\\..\\output\\noise-" + noiseInput.Type + "-tick-" + tick + "-352x240.png");

            // Change size and noise type to Coherent
            noiseInput.Size = new YuvKA.VideoModel.Size(200, 200);
            noiseInput.Type = NoiseType.Coherent;
            tick            = 7;
            CopyFrameToOutputImage(noiseInput, out outputFrame, out outputImage, tick);
            outputImage.Save("..\\..\\..\\..\\output\\noise-" + noiseInput.Type + "-tick-" + tick + "-200x200.png");

            // Change noise type to colored-Coherent and image size to 352x240
            noiseInput.Type = NoiseType.ColoredCoherent;
            noiseInput.Size = new YuvKA.VideoModel.Size(352, 240);
            CopyFrameToOutputImage(noiseInput, out outputFrame, out outputImage, tick);
            outputImage.Save("..\\..\\..\\..\\output\\noise-" + noiseInput.Type + "-tick-" + tick + "-352x240.png");

            // Change noise type to colored-Perlin
            noiseInput.Type = NoiseType.ColoredPerlin;
            CopyFrameToOutputImage(noiseInput, out outputFrame, out outputImage, tick);
            outputImage.Save("..\\..\\..\\..\\output\\noise-" + noiseInput.Type + "-tick-" + tick + "-352x240.png");
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public void TestOverlayNode()
        {
            OverlayNode node = new OverlayNode();

            Assert.Equal(false, node.InputIsValid);
            NoiseInputNode noise = new NoiseInputNode();

            node.Inputs[0].Source = noise.Outputs[0];
            Assert.Equal(true, node.InputIsValid);
            Frame[] input = { new Frame(new YuvKA.VideoModel.Size(5, 5)) };
            node.Type = new ArtifactsOverlay();
            node.ProcessCore(input, 0);
            node.Type = new BlocksOverlay();
            node.ProcessCore(input, 0);
            node.Type = new MoveVectorsOverlay();
            node.ProcessCore(input, 0);
        }
Ejemplo n.º 5
0
		public void TestOverlayNode()
		{
			OverlayNode node = new OverlayNode();
			Assert.Equal(false, node.InputIsValid);
			NoiseInputNode noise = new NoiseInputNode();
			node.Inputs[0].Source = noise.Outputs[0];
			Assert.Equal(true, node.InputIsValid);
			Frame[] input = { new Frame(new YuvKA.VideoModel.Size(5, 5)) };
			node.Type = new ArtifactsOverlay();
			node.ProcessCore(input, 0);
			node.Type = new BlocksOverlay();
			node.ProcessCore(input, 0);
			node.Type = new MoveVectorsOverlay();
			node.ProcessCore(input, 0);
		}
Ejemplo n.º 6
0
        public void Test50()
        {
            // Some necessary initializations.
            MainViewModel mvm           = MainViewModelTest.GetInstance();
            var           windowManMock = new Mock <IWindowManagerEx>();
            var           vm            = MainViewModelTest.GetInstance(cont => cont.ComposeExportedValue <IWindowManagerEx>(windowManMock.Object));
            var           conductorMock = new Mock <IConductor>();


            // Step 1: Create simple pipeline.
            //
            //	[color]---[overlay]
            //		   \ /
            //			X
            //		   / \
            //  [noise]---[diagram]
            NoiseInputNode noise = new NoiseInputNode();

            mvm.Model.Graph.AddNode(noise);
            ColorInputNode color = new ColorInputNode();

            mvm.Model.Graph.AddNode(color);
            DiagramNode diagram = new DiagramNode();

            diagram.Inputs.Add(new Node.Input());
            diagram.Inputs.Add(new Node.Input());
            mvm.Model.Graph.AddNode(diagram);
            OverlayNode overlay = new OverlayNode();

            mvm.Model.Graph.AddNode(overlay);
            Assert.Contains(noise, mvm.Model.Graph.Nodes);
            Assert.Contains(color, mvm.Model.Graph.Nodes);
            Assert.Contains(diagram, mvm.Model.Graph.Nodes);
            Assert.Contains(overlay, mvm.Model.Graph.Nodes);

            mvm.Model.Graph.AddEdge(noise.Outputs[0], overlay.Inputs[0]);
            mvm.Model.Graph.AddEdge(noise.Outputs[0], diagram.Inputs[0]);
            mvm.Model.Graph.AddEdge(color.Outputs[0], overlay.Inputs[1]);
            mvm.Model.Graph.AddEdge(color.Outputs[0], diagram.Inputs[1]);
            Assert.Equal(noise.Outputs[0], overlay.Inputs[0].Source);
            Assert.Equal(noise.Outputs[0], diagram.Inputs[0].Source);
            Assert.Equal(color.Outputs[0], overlay.Inputs[1].Source);
            Assert.Equal(color.Outputs[0], diagram.Inputs[1].Source);

            // Step 2: Disable diagram node and open overlay node.
            diagram.IsEnabled = false;
            IGraphType pixelDiff = new PixelDiff();
            IGraphType psnr      = new PeakSignalNoiseRatio();

            IoC.GetAllInstances = type => new List <IGraphType> {
                pixelDiff, psnr
            };
            var overlayWindow = new OverlayViewModel(overlay)
            {
                Parent = conductorMock.Object
            };
            var diagramWindow = new DiagramViewModel(diagram)
            {
                Parent = conductorMock.Object
            };

            ((IActivate)overlayWindow).Activate();
            conductorMock.Setup(c => c.DeactivateItem(overlayWindow, true))
            .Callback(() => ((IDeactivate)overlayWindow).Deactivate(close: true))
            .Verifiable();

            mvm.OpenWindow(overlayWindow);
            Assert.Contains(overlayWindow, mvm.OpenWindows);

            // Step 3: Start pipeline and add an overlay in the overlay node.
            mvm.Model.Start(mvm.Model.Graph.Nodes);
            overlay.Type = new ArtifactsOverlay();

            // Step 4: Remove selected overlay.
            overlay.Type = new NoOverlay();

            // Step 5: Stop pipeline and close overlay node.
            mvm.Model.Stop();
            mvm.CloseWindows(overlay);
            Assert.DoesNotContain(overlayWindow, mvm.OpenWindows);

            // Step 6: Re-enable diagram node and open it.
            diagram.IsEnabled = true;
            mvm.OpenWindow(diagramWindow);
            Assert.Contains(diagramWindow, mvm.OpenWindows);

            // Step 7: Choose a reference video and add a diagram graph.
            diagramWindow.Reference   = new Tuple <string, Node.Input>(diagramWindow.GetVideoName(diagram.Inputs[0]), diagram.Inputs[0]);
            diagramWindow.ChosenVideo = new Tuple <string, Node.Input>(diagramWindow.GetVideoName(diagram.Inputs[1]), diagram.Inputs[1]);
            diagramWindow.AddGraph();
            diagramWindow.Graphs.ElementAt(0).CurrentType = new GraphTypeViewModel(pixelDiff);

            // Step 8: Start pipeline again and change diagram graph type.
            mvm.Model.Start(mvm.Model.Graph.Nodes);
            diagramWindow.Graphs.ElementAt(0).CurrentType = new GraphTypeViewModel(psnr);

            // Step 9: Remove the diagram graph.
            DiagramGraphViewModel dgvm = diagramWindow.Graphs.ElementAt(0);

            diagramWindow.DeleteGraph(dgvm);
            Assert.DoesNotContain(dgvm, diagramWindow.Graphs);
        }
Ejemplo n.º 7
0
		public void TestAddNode()
		{
			// create some nodes and initialize graph
			BlurNode blur0 = new BlurNode();
			BlurNode blur1 = new BlurNode();
			BlurNode blur2 = new BlurNode();
			BlurNode blur3 = new BlurNode();
			BlurNode blur4 = new BlurNode();
			NoiseInputNode noise0 = new NoiseInputNode();
			NoiseInputNode noise1 = new NoiseInputNode();
			PipelineGraph graph = new PipelineGraph();

			graph.AddNode(blur0);
			graph.AddNode(blur1);
			graph.AddNode(noise0);
			graph.AddNode(blur2);
			graph.AddNode(noise1);

			Assert.Equal("Blur", blur0.Name);
			Assert.Equal("Blur 2", blur1.Name);
			Assert.Equal("Blur 3", blur2.Name);
			Assert.Equal("Noise", noise0.Name);
			Assert.Equal("Noise 2", noise1.Name);

			graph.RemoveNode(blur1);
			graph.AddNode(blur3);
			graph.AddNode(blur4);

			Assert.Equal("Blur 2", blur3.Name);
			Assert.Equal("Blur 4", blur4.Name);
		}