Esempio n. 1
0
        public void Test30()
        {
            //Step 1: Construct any Pipeline
            MainViewModel  mvm        = MainViewModelTest.GetInstance();
            ColorInputNode colorInput = new ColorInputNode();

            mvm.Model.Graph.AddNode(colorInput);
            InverterNode inverter = new InverterNode();

            mvm.Model.Graph.AddNode(inverter);
            mvm.Model.Graph.AddEdge(colorInput.Outputs[0], inverter.Inputs[0]);
            Assert.Contains(colorInput, mvm.Model.Graph.Nodes);
            Assert.Contains(inverter, mvm.Model.Graph.Nodes);
            Assert.Equal(colorInput.Outputs[0], inverter.Inputs[0].Source);

            //Step 2: Save Pipeline
            using (var stream = File.Create(@"..\..\..\..\output\test30.yuvka"))
                new NetDataContractSerializer().Serialize(stream, mvm.Model);
            Assert.True(File.Exists(@"..\..\..\..\output\test30.yuvka"));

            //Step 3: Clear Pipeline
            mvm.Clear();
            Assert.Empty(mvm.Model.Graph.Nodes);

            //Step 4: Reload Pipeline
            using (var stream = File.OpenRead(@"..\..\..\..\output\test30.yuvka"))
                mvm.Model = (PipelineState) new NetDataContractSerializer().Deserialize(stream);
            Assert.True(mvm.Model.Graph.Nodes[0] is ColorInputNode);
            Assert.True(mvm.Model.Graph.Nodes[1] is InverterNode);
            Assert.Equal(mvm.Model.Graph.Nodes[0].Outputs[0], mvm.Model.Graph.Nodes[1].Inputs[0].Source);
        }
Esempio n. 2
0
		public void Test30()
		{
			//Step 1: Construct any Pipeline
			MainViewModel mvm = MainViewModelTest.GetInstance();
			ColorInputNode colorInput = new ColorInputNode();
			mvm.Model.Graph.AddNode(colorInput);
			InverterNode inverter = new InverterNode();
			mvm.Model.Graph.AddNode(inverter);
			mvm.Model.Graph.AddEdge(colorInput.Outputs[0], inverter.Inputs[0]);
			Assert.Contains(colorInput, mvm.Model.Graph.Nodes);
			Assert.Contains(inverter, mvm.Model.Graph.Nodes);
			Assert.Equal(colorInput.Outputs[0], inverter.Inputs[0].Source);

			//Step 2: Save Pipeline
			using (var stream = File.Create(@"..\..\..\..\output\test30.yuvka"))
				new NetDataContractSerializer().Serialize(stream, mvm.Model);
			Assert.True(File.Exists(@"..\..\..\..\output\test30.yuvka"));

			//Step 3: Clear Pipeline
			mvm.Clear();
			Assert.Empty(mvm.Model.Graph.Nodes);

			//Step 4: Reload Pipeline
			using (var stream = File.OpenRead(@"..\..\..\..\output\test30.yuvka"))
				mvm.Model = (PipelineState)new NetDataContractSerializer().Deserialize(stream);
			Assert.True(mvm.Model.Graph.Nodes[0] is ColorInputNode);
			Assert.True(mvm.Model.Graph.Nodes[1] is InverterNode);
			Assert.Equal(mvm.Model.Graph.Nodes[0].Outputs[0], mvm.Model.Graph.Nodes[1].Inputs[0].Source);
		}
Esempio n. 3
0
        public void CanOpenCloseOutputWindow()
        {
            var windowManMock = new Mock <IWindowManagerEx>();
            var vm            = GetInstance(cont => cont.ComposeExportedValue <IWindowManagerEx>(windowManMock.Object));

            var conductorMock = new Mock <IConductor>();
            var node          = new ColorInputNode();
            var window        = new VideoOutputViewModel(node.Outputs[0])
            {
                Parent = conductorMock.Object
            };

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

            vm.OpenWindow(window);
            windowManMock.Verify(w => w.ShowWindow(window, vm));
            Assert.Equal(window, vm.OpenWindows.Single());

            vm.CloseWindows(node);
            conductorMock.Verify();
            Assert.Empty(vm.OpenWindows);

            vm.OpenWindow(window);
            vm.OpenWindow(window);
            Assert.Equal(window, vm.OpenWindows.Single());

            window.TryClose();
            conductorMock.Verify(c => c.DeactivateItem(window, true), Times.Exactly(2));
            Assert.Empty(vm.OpenWindows);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public void SizePropertyViewModelTest()
        {
            // Since this property viewmodel commits its change as soon as the change is made, the commitChange method
            // is executed, which requires a working IoC
            IoC.GetInstance = IoCAggregator;

            SizePropertyViewModel en  = new SizePropertyViewModel();
            ColorInputNode        clr = new ColorInputNode();
            PropertyDescriptor    pd  = TypeDescriptor.GetProperties(clr).Find("Size", true);

            en.Initialize(clr, pd);

            en.Height = 37;
            en.Width  = 13;
            Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Height, clr.Size.Height);
            Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Width, clr.Size.Width);
        }
Esempio n. 6
0
        public void RgbPropertyViewModelTest()
        {
            // Since this property viewmodel commits its change as soon as the change is made, the commitChange method
            // is executed, which requires a working IoC
            IoC.GetInstance = IoCAggregator;

            ColorPropertyViewModel en  = new ColorPropertyViewModel();
            ColorInputNode         clr = new ColorInputNode();
            PropertyDescriptor     pd  = TypeDescriptor.GetProperties(clr).Find("color", true);

            en.Initialize(clr, pd);

            clr.Color = System.Windows.Media.Color.FromRgb(1, 33, 7);
            Assert.Equal(new YuvKA.VideoModel.Rgb(1, 33, 7), new YuvKA.VideoModel.Rgb(en.ChosenColor.R, en.ChosenColor.G, en.ChosenColor.B));
            en.ChosenColor = System.Windows.Media.Color.FromRgb(42, 24, 22);
            Assert.Equal(System.Windows.Media.Color.FromRgb(42, 24, 22), clr.Color);
        }
Esempio n. 7
0
        public void TestGeneralFunctions()
        {
            IOverlayType noOverlay    = new NoOverlay();
            IOverlayType blockOverlay = new BlocksOverlay();

            IoC.GetAllInstances = nope => new List <object> {
                noOverlay, blockOverlay
            };
            IoC.GetInstance = IoCAggregator;
            OverlayNode      node = new OverlayNode();
            OverlayViewModel vm   = new OverlayViewModel(node);

            var inputNodeMock = new Mock <InputNode>(1);

            inputNodeMock.SetupGet(i => i.OutputHasLogfile).Returns(true);
            inputNodeMock.SetupGet(i => i.InputIsValid).Returns(true);

            //Test the available Types
            node.Inputs[0].Source = inputNodeMock.Object.Outputs[0];
            Assert.Equal("No Overlay", vm.TypeTuples.First().Item1);

            //Test altering the chosen Type
            node.Type = blockOverlay;
            Assert.Equal("Macroblock-Overlay", vm.ChosenType.Item1);
            ColorInputNode color = new ColorInputNode();

            color.Size            = new Size(512, 512);
            node.Inputs[0].Source = color.Outputs[0];
            vm.ChosenType         = new System.Tuple <string, IOverlayType>("No Overlay", noOverlay);
            Assert.Equal("No Overlay", vm.ChosenType.Item1);
            //Test "Handling" a message(The result has be inspected manually)
            node.Type = noOverlay;
            Frame[] input = { new Frame(new Size(512, 512)) };
            node.ProcessCore(input, 0);
            vm.Handle(null);

            using (var fileStream = new FileStream(@"..\..\..\..\output\thisIsBlack.png", FileMode.Create)) {
                BitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(vm.RenderedImage));
                encoder.Save(fileStream);
            }
        }
Esempio n. 8
0
		public void TestGeneralFunctions()
		{
			IOverlayType noOverlay = new NoOverlay();
			IOverlayType blockOverlay = new BlocksOverlay();
			IoC.GetAllInstances = nope => new List<object> { noOverlay, blockOverlay };
			IoC.GetInstance = IoCAggregator;
			OverlayNode node = new OverlayNode();
			OverlayViewModel vm = new OverlayViewModel(node);

			var inputNodeMock = new Mock<InputNode>(1);
			inputNodeMock.SetupGet(i => i.OutputHasLogfile).Returns(true);
			inputNodeMock.SetupGet(i => i.InputIsValid).Returns(true);

			//Test the available Types
			node.Inputs[0].Source = inputNodeMock.Object.Outputs[0];
			Assert.Equal("No Overlay", vm.TypeTuples.First().Item1);

			//Test altering the chosen Type
			node.Type = blockOverlay;
			Assert.Equal("Macroblock-Overlay", vm.ChosenType.Item1);
			ColorInputNode color = new ColorInputNode();
			color.Size = new Size(512, 512);
			node.Inputs[0].Source = color.Outputs[0];
			vm.ChosenType = new System.Tuple<string, IOverlayType>("No Overlay", noOverlay);
			Assert.Equal("No Overlay", vm.ChosenType.Item1);
			//Test "Handling" a message(The result has be inspected manually)
			node.Type = noOverlay;
			Frame[] input = { new Frame(new Size(512, 512)) };
			node.ProcessCore(input, 0);
			vm.Handle(null);

			using (var fileStream = new FileStream(@"..\..\..\..\output\thisIsBlack.png", FileMode.Create)) {
				BitmapEncoder encoder = new PngBitmapEncoder();
				encoder.Frames.Add(BitmapFrame.Create(vm.RenderedImage));
				encoder.Save(fileStream);
			}
		}
Esempio n. 9
0
        public void ColorInputTest()
        {
            Frame          outputFrame;
            Bitmap         outputImage;
            ColorInputNode colorInput = new ColorInputNode();

            colorInput.Size  = new YuvKA.VideoModel.Size(200, 200);
            colorInput.Color = System.Windows.Media.Color.FromRgb(50, 92, 177);
            CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0);
            outputImage.Save("..\\..\\..\\..\\output\\color-50-92-177-200x200.png");

            // Change the size
            colorInput.Size = new YuvKA.VideoModel.Size(100, 50);
            CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0);
            outputImage.Save("..\\..\\..\\..\\output\\color-50-92-177-100x50.png");

            // Change the color
            Color c = Color.Crimson;
            byte  r = c.R, g = c.G, b = c.B;

            colorInput.Color = System.Windows.Media.Color.FromRgb(r, g, b);
            CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0);
            outputImage.Save("..\\..\\..\\..\\output\\color-" + r + "-" + g + "-" + b + "177-100x50.png");
        }
Esempio n. 10
0
		public void RgbPropertyViewModelTest()
		{
		    // Since this property viewmodel commits its change as soon as the change is made, the commitChange method
		    // is executed, which requires a working IoC
		    IoC.GetInstance = IoCAggregator;

		    ColorPropertyViewModel en = new ColorPropertyViewModel();
		    ColorInputNode clr = new ColorInputNode();
		    PropertyDescriptor pd = TypeDescriptor.GetProperties(clr).Find("color", true);
		    en.Initialize(clr, pd);

			clr.Color = System.Windows.Media.Color.FromRgb(1, 33, 7);
		    Assert.Equal(new YuvKA.VideoModel.Rgb(1, 33, 7), new YuvKA.VideoModel.Rgb(en.ChosenColor.R, en.ChosenColor.G, en.ChosenColor.B));
		    en.ChosenColor = System.Windows.Media.Color.FromRgb(42, 24, 22);
			Assert.Equal(System.Windows.Media.Color.FromRgb(42, 24, 22), clr.Color);
		}
Esempio n. 11
0
		public void SizePropertyViewModelTest()
		{
			// Since this property viewmodel commits its change as soon as the change is made, the commitChange method
			// is executed, which requires a working IoC
			IoC.GetInstance = IoCAggregator;

			SizePropertyViewModel en = new SizePropertyViewModel();
			ColorInputNode clr = new ColorInputNode();
			PropertyDescriptor pd = TypeDescriptor.GetProperties(clr).Find("Size", true);
			en.Initialize(clr, pd);

			en.Height = 37;
			en.Width = 13;
			Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Height, clr.Size.Height);
			Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Width, clr.Size.Width);
		}
Esempio n. 12
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);
        }