git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 27 Sep 2018 13:59:50 +0000 (13:59 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 27 Sep 2018 13:59:50 +0000 (13:59 +0000)
21 files changed:
client/DxPlay/Configuration/dxplay.en
client/DxPlay/Configuration/dxplay.json1 [moved from client/DxPlay/Configuration/dxplay.json with 100% similarity]
client/DxPlay/Controls/PlayerControls.Designer.cs
client/DxPlay/Controls/PlayerControls.cs
client/DxPlay/Controls/PlayerControls.resx
client/DxPlay/DxPlay.csproj
client/DxPlay/DxPlayer.cs
client/DxPlay/PlayerForm.Designer.cs
client/DxPlay/PlayerForm.cs
client/DxPlay/PlayerForm.resx
client/DxPlay/PlayerGraph.cs
client/DxPlay/Properties/AssemblyInfo.cs
client/DxPlay/Properties/Resources.Designer.cs
client/DxPlay/Properties/Resources.resx
client/DxPlay/Resources/baseline_fast_forward_black_18dp.png [new file with mode: 0644]
client/DxPlay/Resources/baseline_fast_forward_black_24dp.png [new file with mode: 0644]
client/DxPlay/Resources/baseline_fast_rewind_black_24dp.png [new file with mode: 0644]
client/DxPlay/Resources/baseline_fast_rewind_black_24dp1.png [new file with mode: 0644]
client/DxPlay/Resources/baseline_skip_next_black_24dp.png [new file with mode: 0644]
client/DxPlay/Resources/baseline_skip_previous_black_24dp.png [new file with mode: 0644]
client/MediaCube.sln

index d3068b65aee6fafe25ae9d84d781fb83a8e9f1e0..1c2e824e15f3e1d5ac924ff6c9a27ee5c8949a97 100644 (file)
   "NOINPUT": "NO INPUT",\r
   "OPEN": "Open",\r
   "OPTIONAL": "Optional",\r
-  "PAUSE": "Pause",\r
+  "PAUSE": "Pause (Esc)",\r
+  "FORWARD": "Forward (->)",\r
+  "REWIND": "Rewind (<-)",\r
   "PAUSED": "PAUSED",\r
-  "PLAY": "Play",\r
+  "PLAY": "Play (Esc)",\r
   "PLAYING": "PLAYING",\r
   "POSITIONASTCIN": "Current position as TC in",\r
   "POSITIONASTCOUT": "Current position as TC out",\r
index f0bf4b9c7a0936ed5a88e9f8c50514e7e09e41c7..713a359a17baaf500091b08af19ca3d03c8505d5 100644 (file)
@@ -23,6 +23,7 @@
         /// the contents of this method with the code editor.\r
         /// </summary>\r
         private void InitializeComponent() {\r
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerControls));\r
             this.mainPanel = new System.Windows.Forms.TableLayoutPanel();\r
             this.trackBar = new MaestroShared.Controls.ColorSlider();\r
             this.timecodePanel = new System.Windows.Forms.TableLayoutPanel();\r
@@ -34,8 +35,9 @@
             this.lbEndTC = new System.Windows.Forms.Label();\r
             this.buttonsPanel = new System.Windows.Forms.FlowLayoutPanel();\r
             this.btnPlay = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.btnRewind = new MaestroShared.Controls.NoFocusCueButton();\r
             this.btnStop = new MaestroShared.Controls.NoFocusCueButton();\r
-            this.btnPause = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.btnForward = new MaestroShared.Controls.NoFocusCueButton();\r
             this.mainPanel.SuspendLayout();\r
             this.timecodePanel.SuspendLayout();\r
             this.buttonsPanel.SuspendLayout();\r
             this.buttonsPanel.BackgroundImage = global::DxPlay.Properties.Resources.bs_user_logo;\r
             this.buttonsPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;\r
             this.buttonsPanel.Controls.Add(this.btnPlay);\r
+            this.buttonsPanel.Controls.Add(this.btnRewind);\r
             this.buttonsPanel.Controls.Add(this.btnStop);\r
-            this.buttonsPanel.Controls.Add(this.btnPause);\r
+            this.buttonsPanel.Controls.Add(this.btnForward);\r
             this.buttonsPanel.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.buttonsPanel.Location = new System.Drawing.Point(0, 56);\r
             this.buttonsPanel.Margin = new System.Windows.Forms.Padding(0);\r
             // \r
             this.btnPlay.AutoSize = true;\r
             this.btnPlay.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnPlay.Cursor = System.Windows.Forms.Cursors.Hand;\r
             this.btnPlay.FlatAppearance.BorderSize = 0;\r
             this.btnPlay.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnPlay.Image = global::DxPlay.Properties.Resources.ic_play_arrow_black_24dp_2x;\r
             this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
             this.btnPlay.UseVisualStyleBackColor = false;\r
             // \r
+            // btnRewind\r
+            // \r
+            this.btnRewind.AutoSize = true;\r
+            this.btnRewind.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnRewind.Cursor = System.Windows.Forms.Cursors.Hand;\r
+            this.btnRewind.FlatAppearance.BorderSize = 0;\r
+            this.btnRewind.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnRewind.Image = ((System.Drawing.Image)(resources.GetObject("btnRewind.Image")));\r
+            this.btnRewind.Location = new System.Drawing.Point(63, 3);\r
+            this.btnRewind.Name = "btnRewind";\r
+            this.btnRewind.Size = new System.Drawing.Size(54, 54);\r
+            this.btnRewind.TabIndex = 18;\r
+            this.btnRewind.TabStop = false;\r
+            this.btnRewind.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnRewind.UseVisualStyleBackColor = false;\r
+            // \r
             // btnStop\r
             // \r
             this.btnStop.AutoSize = true;\r
             this.btnStop.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand;\r
             this.btnStop.FlatAppearance.BorderSize = 0;\r
             this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnStop.Image = global::DxPlay.Properties.Resources.ic_stop_black_24dp_2x;\r
-            this.btnStop.Location = new System.Drawing.Point(63, 3);\r
+            this.btnStop.Location = new System.Drawing.Point(123, 3);\r
             this.btnStop.Name = "btnStop";\r
             this.btnStop.Size = new System.Drawing.Size(54, 54);\r
             this.btnStop.TabIndex = 19;\r
             this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
             this.btnStop.UseVisualStyleBackColor = false;\r
             // \r
-            // btnPause\r
+            // btnForward\r
             // \r
-            this.btnPause.AutoSize = true;\r
-            this.btnPause.BackColor = System.Drawing.Color.Transparent;\r
-            this.btnPause.FlatAppearance.BorderSize = 0;\r
-            this.btnPause.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
-            this.btnPause.Image = global::DxPlay.Properties.Resources.ic_pause_black_24dp_2x;\r
-            this.btnPause.Location = new System.Drawing.Point(123, 3);\r
-            this.btnPause.Name = "btnPause";\r
-            this.btnPause.Size = new System.Drawing.Size(54, 54);\r
-            this.btnPause.TabIndex = 18;\r
-            this.btnPause.TabStop = false;\r
-            this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
-            this.btnPause.UseVisualStyleBackColor = false;\r
+            this.btnForward.AutoSize = true;\r
+            this.btnForward.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnForward.Cursor = System.Windows.Forms.Cursors.Hand;\r
+            this.btnForward.FlatAppearance.BorderSize = 0;\r
+            this.btnForward.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnForward.Image = global::DxPlay.Properties.Resources.baseline_fast_forward_black_24dp;\r
+            this.btnForward.Location = new System.Drawing.Point(183, 3);\r
+            this.btnForward.Name = "btnForward";\r
+            this.btnForward.Size = new System.Drawing.Size(54, 54);\r
+            this.btnForward.TabIndex = 20;\r
+            this.btnForward.TabStop = false;\r
+            this.btnForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnForward.UseVisualStyleBackColor = false;\r
             // \r
             // PlayerControls\r
             // \r
         private System.Windows.Forms.FlowLayoutPanel buttonsPanel;\r
         private MaestroShared.Controls.NoFocusCueButton btnPlay;\r
         private MaestroShared.Controls.NoFocusCueButton btnStop;\r
-        private MaestroShared.Controls.NoFocusCueButton btnPause;\r
+        private MaestroShared.Controls.NoFocusCueButton btnRewind;\r
+        private MaestroShared.Controls.NoFocusCueButton btnForward;\r
     }\r
 }\r
index 6fa4226526158bbaf63c077185a928c56ce703aa..899051f4971dc7b3cfdd21b721aff0ff494dfe73 100644 (file)
@@ -16,7 +16,8 @@ namespace DxPlay.Controls {
         public ColorSlider TrackBar { get => trackBar; }\r
         public NoFocusCueButton Play { get => btnPlay; }\r
         public NoFocusCueButton Stop { get => btnStop; }\r
-        public NoFocusCueButton Pause { get => btnPause; }\r
+        public NoFocusCueButton Rewind { get => btnRewind; }\r
+        public NoFocusCueButton Forward { get => btnForward; }\r
 \r
     }\r
 }\r
index 29dcb1b3a353ba227f65e11fbe3d6f0766e84292..88f6ba0da74c2928943259b1a964e8742207f171 100644 (file)
   <resheader name="writer">\r
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
   </resheader>\r
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
+  <data name="btnRewind.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAEqSURBVGhD7dgtTgNRFMXxCUlFDaZJDboSgWUFaFS3wArYQbsD1oCpZgVYBBJdRWqqmkAInMfk\r
+        JS/Nnem7d46Z5vySf1LMuYaPGRoRERERobpEz+3HQVg7Lrdoi37/v4pj7VSboBX6Qelo9DBrx2WB3lA+\r
+        GD3M2nF5QAd0fNR7mLVTbYZekHUwV4O143KHPpF1rOwU1k61KXpC1hGrLqwdl2v0gawDXVlYO9Uu0CP6\r
+        QtZ4XyXWjssVekXWaE0Za8flHu2RNVhbwtpxWyLGYdZOyKi/hbL8w/eNrPG+SqydsBvE+PXH2gkZ9R+y\r
+        UnoE2CHrWNkprJ2QOWI8hLF2wkb7OF1KLyLvaOhh1k5IehVcI8YrJWMnbLQv9aX075BN+3EQ1o6IiIjI\r
+        mWqaP9Jxlnyjr5KKAAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 491bf692c016ec66358ba656523c6d35db08ec4b..432eff9590065688839f8576cc86c6e6b93a0085 100644 (file)
     </Compile>\r
     <Content Include="DirectShowLib.dll" />\r
     <Content Include="maestro.ico" />\r
+    <Content Include="MediaInfo.dll" />\r
+    <None Include="Resources\baseline_fast_rewind_black_24dp1.png" />\r
+    <None Include="Resources\baseline_skip_previous_black_24dp.png" />\r
+    <None Include="Resources\baseline_fast_forward_black_24dp.png" />\r
+    <None Include="Resources\baseline_skip_next_black_24dp.png" />\r
+    <None Include="Resources\baseline_fast_rewind_black_24dp.png" />\r
+    <None Include="Resources\baseline_fast_forward_black_18dp.png" />\r
     <None Include="Configuration\dxplay - Copy.json">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </None>\r
     <None Include="Configuration\dxplay.en">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </None>\r
-    <None Include="Configuration\dxplay.json">\r
+    <None Include="Configuration\dxplay.json1">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
     </None>\r
     <None Include="packages.config">\r
     <None Include="Properties\app.manifest" />\r
     <None Include="Resources\lgs.jpg" />\r
     <None Include="app.config" />\r
-    <None Include="MediaInfo.dll">\r
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
-    </None>\r
     <EmbeddedResource Include="PlayerForm.resx">\r
       <DependentUpon>PlayerForm.cs</DependentUpon>\r
       <SubType>Designer</SubType>\r
index 1ce72ed2005a792322e9ed5b413f0d1147a82684..89677b5521204daa239bdf535de85d7dbdc95e90 100644 (file)
@@ -65,11 +65,10 @@ namespace DxPlay {
             State = GraphState.Stopped;\r
             try {\r
                 int hr;\r
-                IntPtr hEvent;\r
                 MediaDescription = mediaDesc;\r
                 // Set up the graph\r
                 playerWindow = hWin;\r
-                playerWindow.Invalidate();\r
+                //playerWindow.Invalidate();\r
                 SetupGraph();\r
 \r
                 hWin.Hide();\r
@@ -78,7 +77,7 @@ namespace DxPlay {
                 // Get the event handle the graph will use to signal\r
                 // when events occur\r
                 logger.Debug("GetEventHandle");\r
-                hr = graph.MediaEvent.GetEventHandle(out hEvent);\r
+                hr = graph.MediaEvent.GetEventHandle(out IntPtr hEvent);\r
                 DsError.ThrowExceptionForHR(hr);\r
 \r
                 // Wrap the graph event with a ManualResetEvent\r
@@ -97,15 +96,14 @@ namespace DxPlay {
                 tcWorker.WorkerSupportsCancellation = true;\r
                 tcWorker.RunWorkerAsync(tcLock);\r
 \r
-            }\r
-            catch {\r
+            } catch {\r
                 Dispose();\r
                 throw;\r
             }\r
         }\r
 \r
         private void SetupGraph() {\r
-            graph = new PlayerGraph(MediaDescription.FileName);\r
+            graph = new PlayerGraph(MediaDescription.FileName, playerWindow.Handle);\r
 \r
             AMMediaType media = new AMMediaType();\r
             graph.SampleGrabber.GetConnectedMediaType(media);\r
@@ -118,7 +116,7 @@ namespace DxPlay {
             logger.Debug("SetTimeCodes");\r
             SetTimeCodes();\r
             logger.Debug("ConfigureVideoWindow");\r
-            ConfigureVideoWindow();\r
+            UpdateVideoWindow();\r
             RenderFirstFrame();\r
         }\r
 \r
@@ -135,7 +133,6 @@ namespace DxPlay {
             }\r
         }\r
 \r
-\r
         // start playing\r
         public void Play() {\r
             // If we aren't already playing (or shutting down)\r
@@ -164,7 +161,7 @@ namespace DxPlay {
         // Pause the capture graph.\r
         public void Stop() {\r
             //// Can only Stop when playing or paused\r
-            Rewind();\r
+            Seek(0);\r
             Pause();\r
             if (State == GraphState.Playing || State == GraphState.Paused || State == GraphState.Completed) {\r
                 int hr = graph.MediaControl.StopWhenReady();\r
@@ -173,9 +170,18 @@ namespace DxPlay {
             }\r
         }\r
 \r
-        // Reset the clip back to the beginning\r
-        public void Rewind() {\r
-            Seek(0);\r
+        public void Rewind(int step) {\r
+            if (CurrentTC.ZeroBasedFrames > step - 1) {\r
+                Pause();\r
+                Seek(CurrentTC.ZeroBasedFrames - step);\r
+            }\r
+        }\r
+\r
+        public void Forward(int step) {\r
+            if (CurrentTC.ZeroBasedFrames + step <= MediaDescription.Duration.Frames) {\r
+                Pause();\r
+                Seek(CurrentTC.ZeroBasedFrames + step);\r
+            }\r
         }\r
 \r
         public void Seek(int value) {\r
@@ -199,7 +205,6 @@ namespace DxPlay {
                 DsError.ThrowExceptionForHR(hr);\r
                 corrected = true;\r
             }\r
-\r
             logger.Debug("Seeking requested frame {0} got frame {1}, media position {2}, frame length {3}, corrected {4}", value, reachedFrames, requestedPosition, avgTimePerFrame, corrected);\r
         }\r
 \r
@@ -236,8 +241,7 @@ namespace DxPlay {
                     mxf.Inspect();\r
                     //MediaDescription.firstFrame = new Timecode(mxf.FirstSystemItem?.UserDateFullFrameNb, MediaDescription.FrameRate);\r
                     MediaDescription.firstFrame = new Timecode((int)mxf.TimecodeComponent.StartTimecode, (float)mxf.TimecodeComponent.RoundedTimecodeBase);\r
-                }\r
-                catch (Exception ex) {\r
+                } catch (Exception ex) {\r
                     MediaDescription.firstFrame = new Timecode();\r
                 }\r
             }\r
@@ -246,29 +250,16 @@ namespace DxPlay {
         }\r
 \r
 \r
-        // Configure the video window\r
-        private void ConfigureVideoWindow() {\r
-            int hr;\r
-\r
-            // Set the output window\r
-            hr = graph.VideoWindow.put_Owner(playerWindow.Handle);\r
-            DsError.ThrowExceptionForHR(hr);\r
-\r
-            hr = graph.VideoWindow.put_MessageDrain(playerWindow.Handle);\r
-            DsError.ThrowExceptionForHR(hr);\r
-\r
-            // Set the window style\r
-            hr = graph.VideoWindow.put_WindowStyle((WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings));\r
-            DsError.ThrowExceptionForHR(hr);\r
-\r
-            // Make the window visible\r
-            hr = graph.VideoWindow.put_Visible(OABool.True);\r
-            DsError.ThrowExceptionForHR(hr);\r
-\r
-            UpdateVideoWindow();\r
-        }\r
 \r
         public void UpdateVideoWindow() {\r
+            if (graph.WindowlessControl != null) {\r
+                graph.WindowlessControl.GetNativeVideoSize(out int w, out int h, out int aw, out int ah);\r
+                DsRect src = new DsRect(0, 0, w, h);\r
+                DsRect dst = new DsRect(playerWindow.ClientRectangle);\r
+                graph.WindowlessControl.SetVideoPosition(src, dst);\r
+                return;\r
+            }\r
+\r
             Size resolution = MediaDescription.Resolution;\r
             if (resolution.Width == 0 || resolution.Height == 0)\r
                 return;\r
@@ -301,12 +292,17 @@ namespace DxPlay {
         }\r
 \r
         public bool IsFullscreen() {\r
-            if (graph == null)\r
+\r
+            //if (graph == null)\r
                 return false;\r
-            OABool isFullscreen;\r
-           int hr = graph.VideoWindow.get_FullScreenMode(out isFullscreen);\r
-            DsError.ThrowExceptionForHR(hr);\r
-            return isFullscreen == OABool.True ? true : false;\r
+\r
+            if (graph.VideoWindow != null) {\r
+                int hr = graph.VideoWindow.get_FullScreenMode(out OABool isFullscreen);\r
+                DsError.ThrowExceptionForHR(hr);\r
+                return isFullscreen == OABool.True ? true : false;\r
+            }\r
+\r
+            return false;\r
         }\r
 \r
         // Set the options on the sa_ve grabber\r
index 638a315af04bbba9cd378a887896f7c45a398fc3..79263161e602f35f19f42e5b1e6f7239a04d643b 100644 (file)
@@ -37,6 +37,7 @@ namespace DxPlay {
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\r
             this.tabEditor = new System.Windows.Forms.TabControl();\r
             this.tpMetadata = new System.Windows.Forms.TabPage();\r
+            this.trafficBrowser = new TrafficClient.TrafficIDSelector();\r
             this.tpSegments = new System.Windows.Forms.TabPage();\r
             this.dgSegments = new System.Windows.Forms.DataGridView();\r
             this.bsSegments = new System.Windows.Forms.BindingSource(this.components);\r
@@ -49,14 +50,13 @@ namespace DxPlay {
             this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.tbDeleteSegment = new System.Windows.Forms.ToolStripButton();\r
             this.imagesTabEdit = new System.Windows.Forms.ImageList(this.components);\r
+            this.btnToggleSegmentEditor = new MaestroShared.Controls.NoFocusCueButton();\r
             this.pMetadataDisplay = new System.Windows.Forms.TableLayoutPanel();\r
+            this.btnApprove = new MaestroShared.Controls.NoFocusCueButton();\r
             this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
             this.txtSelectedID = new System.Windows.Forms.TextBox();\r
             this.mainMenu = new System.Windows.Forms.MenuStrip();\r
             this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.trafficBrowser = new TrafficClient.TrafficIDSelector();\r
-            this.btnToggleSegmentEditor = new MaestroShared.Controls.NoFocusCueButton();\r
-            this.btnApprove = new MaestroShared.Controls.NoFocusCueButton();\r
             this.menuOpenFile = new DxPlay.Controls.BindableToolStripMenuItem();\r
             this.menuApprove = new DxPlay.Controls.BindableToolStripMenuItem();\r
             this.playerControls = new DxPlay.Controls.PlayerControls();\r
@@ -78,7 +78,7 @@ namespace DxPlay {
             // \r
             // pVideo\r
             // \r
-            this.pVideo.BackColor = System.Drawing.Color.Black;\r
+            this.pVideo.BackColor = System.Drawing.Color.Transparent;\r
             this.pVideo.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;\r
             this.pVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.pVideo.Location = new System.Drawing.Point(0, 0);\r
@@ -165,6 +165,17 @@ namespace DxPlay {
             this.tpMetadata.TabIndex = 0;\r
             this.tpMetadata.Text = "Metadata";\r
             // \r
+            // trafficBrowser\r
+            // \r
+            this.trafficBrowser.BackColor = System.Drawing.Color.White;\r
+            this.trafficBrowser.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.trafficBrowser.IDChangedEvent = null;\r
+            this.trafficBrowser.Location = new System.Drawing.Point(3, 3);\r
+            this.trafficBrowser.Margin = new System.Windows.Forms.Padding(0);\r
+            this.trafficBrowser.Name = "trafficBrowser";\r
+            this.trafficBrowser.Size = new System.Drawing.Size(278, 371);\r
+            this.trafficBrowser.TabIndex = 0;\r
+            // \r
             // tpSegments\r
             // \r
             this.tpSegments.Controls.Add(this.dgSegments);\r
@@ -174,7 +185,7 @@ namespace DxPlay {
             this.tpSegments.Location = new System.Drawing.Point(4, 4);\r
             this.tpSegments.Name = "tpSegments";\r
             this.tpSegments.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpSegments.Size = new System.Drawing.Size(284, 377);\r
+            this.tpSegments.Size = new System.Drawing.Size(192, 30);\r
             this.tpSegments.TabIndex = 1;\r
             this.tpSegments.Text = "Segments";\r
             this.tpSegments.UseVisualStyleBackColor = true;\r
@@ -204,7 +215,7 @@ namespace DxPlay {
             this.dgSegments.Name = "dgSegments";\r
             this.dgSegments.RowHeadersVisible = false;\r
             this.dgSegments.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
-            this.dgSegments.Size = new System.Drawing.Size(278, 346);\r
+            this.dgSegments.Size = new System.Drawing.Size(186, 0);\r
             this.dgSegments.TabIndex = 1;\r
             this.dgSegments.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgSegments_CellContentClick);\r
             this.dgSegments.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgSegments_CellMouseDoubleClick);\r
@@ -225,7 +236,7 @@ namespace DxPlay {
             this.segmentActions.Location = new System.Drawing.Point(3, 3);\r
             this.segmentActions.Name = "segmentActions";\r
             this.segmentActions.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\r
-            this.segmentActions.Size = new System.Drawing.Size(278, 25);\r
+            this.segmentActions.Size = new System.Drawing.Size(186, 25);\r
             this.segmentActions.TabIndex = 0;\r
             this.segmentActions.Text = "toolStrip1";\r
             // \r
@@ -301,6 +312,22 @@ namespace DxPlay {
             this.imagesTabEdit.Images.SetKeyName(0, "round_publish_black_24dp.png");\r
             this.imagesTabEdit.Images.SetKeyName(1, "ic_playlist_add_check_black_24dp_1x.png");\r
             // \r
+            // btnToggleSegmentEditor\r
+            // \r
+            this.btnToggleSegmentEditor.BackColor = System.Drawing.Color.White;\r
+            this.btnToggleSegmentEditor.FlatAppearance.BorderSize = 0;\r
+            this.btnToggleSegmentEditor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnToggleSegmentEditor.Image = ((System.Drawing.Image)(resources.GetObject("btnToggleSegmentEditor.Image")));\r
+            this.btnToggleSegmentEditor.Location = new System.Drawing.Point(0, 4);\r
+            this.btnToggleSegmentEditor.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
+            this.btnToggleSegmentEditor.Name = "btnToggleSegmentEditor";\r
+            this.btnToggleSegmentEditor.Size = new System.Drawing.Size(23, 63);\r
+            this.btnToggleSegmentEditor.TabIndex = 0;\r
+            this.btnToggleSegmentEditor.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnToggleSegmentEditor.UseVisualStyleBackColor = false;\r
+            this.btnToggleSegmentEditor.Visible = false;\r
+            this.btnToggleSegmentEditor.Click += new System.EventHandler(this.OnToggleSegmentEditor);\r
+            // \r
             // pMetadataDisplay\r
             // \r
             this.pMetadataDisplay.AutoSize = true;\r
@@ -320,6 +347,24 @@ namespace DxPlay {
             this.pMetadataDisplay.Size = new System.Drawing.Size(319, 63);\r
             this.pMetadataDisplay.TabIndex = 5;\r
             // \r
+            // btnApprove\r
+            // \r
+            this.btnApprove.AutoSize = true;\r
+            this.btnApprove.BackColor = System.Drawing.Color.White;\r
+            this.btnApprove.FlatAppearance.BorderSize = 0;\r
+            this.btnApprove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.btnApprove.Image = ((System.Drawing.Image)(resources.GetObject("btnApprove.Image")));\r
+            this.btnApprove.Location = new System.Drawing.Point(217, 29);\r
+            this.btnApprove.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
+            this.btnApprove.Name = "btnApprove";\r
+            this.btnApprove.Size = new System.Drawing.Size(102, 30);\r
+            this.btnApprove.TabIndex = 17;\r
+            this.btnApprove.Text = "Approve";\r
+            this.btnApprove.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnApprove.UseVisualStyleBackColor = false;\r
+            this.btnApprove.Click += new System.EventHandler(this.OnApprove);\r
+            // \r
             // labelSelectedMetadata\r
             // \r
             this.labelSelectedMetadata.AutoSize = true;\r
@@ -364,51 +409,6 @@ namespace DxPlay {
             this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);\r
             this.fileToolStripMenuItem.Text = "File";\r
             // \r
-            // trafficBrowser\r
-            // \r
-            this.trafficBrowser.BackColor = System.Drawing.Color.White;\r
-            this.trafficBrowser.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.trafficBrowser.IDChangedEvent = null;\r
-            this.trafficBrowser.Location = new System.Drawing.Point(3, 3);\r
-            this.trafficBrowser.Margin = new System.Windows.Forms.Padding(0);\r
-            this.trafficBrowser.Name = "trafficBrowser";\r
-            this.trafficBrowser.Size = new System.Drawing.Size(278, 371);\r
-            this.trafficBrowser.TabIndex = 0;\r
-            // \r
-            // btnToggleSegmentEditor\r
-            // \r
-            this.btnToggleSegmentEditor.BackColor = System.Drawing.Color.White;\r
-            this.btnToggleSegmentEditor.FlatAppearance.BorderSize = 0;\r
-            this.btnToggleSegmentEditor.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
-            this.btnToggleSegmentEditor.Image = ((System.Drawing.Image)(resources.GetObject("btnToggleSegmentEditor.Image")));\r
-            this.btnToggleSegmentEditor.Location = new System.Drawing.Point(0, 4);\r
-            this.btnToggleSegmentEditor.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
-            this.btnToggleSegmentEditor.Name = "btnToggleSegmentEditor";\r
-            this.btnToggleSegmentEditor.Size = new System.Drawing.Size(23, 63);\r
-            this.btnToggleSegmentEditor.TabIndex = 0;\r
-            this.btnToggleSegmentEditor.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
-            this.btnToggleSegmentEditor.UseVisualStyleBackColor = false;\r
-            this.btnToggleSegmentEditor.Visible = false;\r
-            this.btnToggleSegmentEditor.Click += new System.EventHandler(this.OnToggleSegmentEditor);\r
-            // \r
-            // btnApprove\r
-            // \r
-            this.btnApprove.AutoSize = true;\r
-            this.btnApprove.BackColor = System.Drawing.Color.White;\r
-            this.btnApprove.FlatAppearance.BorderSize = 0;\r
-            this.btnApprove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
-            this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.btnApprove.Image = ((System.Drawing.Image)(resources.GetObject("btnApprove.Image")));\r
-            this.btnApprove.Location = new System.Drawing.Point(217, 29);\r
-            this.btnApprove.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
-            this.btnApprove.Name = "btnApprove";\r
-            this.btnApprove.Size = new System.Drawing.Size(102, 30);\r
-            this.btnApprove.TabIndex = 17;\r
-            this.btnApprove.Text = "Approve";\r
-            this.btnApprove.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
-            this.btnApprove.UseVisualStyleBackColor = false;\r
-            this.btnApprove.Click += new System.EventHandler(this.OnApprove);\r
-            // \r
             // menuOpenFile\r
             // \r
             this.menuOpenFile.Name = "menuOpenFile";\r
index da571de83ff98d7be75f7bdc11768e0bbb961fcc..3fe967d8e90d264d2217fe12c5c41118f74223af 100644 (file)
@@ -20,6 +20,7 @@ namespace DxPlay {
         private DxPlayer m_play = null;\r
         private MediaDescription m_mediaDescription = null;\r
         private OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "All files (*.*)|*.*" };\r
+        private ToolTip tooltips;\r
 \r
         private DxPlaySettings settings;\r
         public DxPlaySettings Settings {\r
@@ -92,7 +93,10 @@ namespace DxPlay {
 \r
             playerControls.Play.Click += btnPlay_Click;\r
             playerControls.Stop.Click += btnStop_Click;\r
-            playerControls.Pause.Click += btnPause_Click;\r
+            playerControls.Rewind.MouseDown += btnRewind_MouseDown;\r
+            playerControls.Rewind.MouseUp += btnRewind_MouseUp;\r
+            playerControls.Forward.MouseUp += btnForward_MouseUp;\r
+            playerControls.Forward.MouseDown += btnForward_MouseDown;\r
 \r
             playerControls.TrackBar.MouseDown += trackBar1_MouseDown;\r
             playerControls.TrackBar.MouseUp += trackBar1_MouseUp;\r
@@ -110,10 +114,11 @@ namespace DxPlay {
             menuApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE);\r
             btnApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE);\r
 \r
-            ToolTip tt = new ToolTip();\r
-            tt.SetToolTip(playerControls.Pause, Settings.Resource("PAUSE", Resources.PAUSE));\r
-            tt.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
-            tt.SetToolTip(playerControls.Stop, Settings.Resource("STOP", Resources.STOP));\r
+            tooltips = new ToolTip();\r
+            tooltips.SetToolTip(playerControls.Rewind, Settings.Resource("REWIND", Resources.REWIND));\r
+            tooltips.SetToolTip(playerControls.Forward, Settings.Resource("FORWARD", Resources.FORWARD));\r
+            tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
+            tooltips.SetToolTip(playerControls.Stop, Settings.Resource("STOP", Resources.STOP));\r
             playerControls.Status.Text = Settings.Resource("NOINPUT", Resources.NOINPUT);\r
             playerControls.Start.Text = Settings.Resource("START", Resources.START);\r
             playerControls.Duration.Text = Settings.Resource("LENGTH", Resources.LENGTH);\r
@@ -217,9 +222,22 @@ namespace DxPlay {
             }\r
         }\r
 \r
+        private void PlayOrPause() {\r
+            if (m_play == null)\r
+                return;\r
+            if (m_play.State == GraphState.Playing) {\r
+                m_play.Pause();\r
+                playerControls.Play.Image = Resources.ic_play_arrow_black_24dp_2x;\r
+                tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
+                return;\r
+            }\r
+            m_play.Play();\r
+            playerControls.Play.Image = Resources.ic_pause_black_24dp_2x;\r
+            tooltips.SetToolTip(playerControls.Play, Settings.Resource("PAUSE", Resources.PAUSE));\r
+        }\r
+\r
         private void btnPlay_Click(object sender, EventArgs e) {\r
-            if (m_play != null && m_play.State != GraphState.Playing)\r
-                m_play.Play();\r
+            PlayOrPause();\r
         }\r
 \r
         private void btnStop_Click(object sender, EventArgs e) {\r
@@ -228,9 +246,49 @@ namespace DxPlay {
             }\r
         }\r
 \r
-        private void btnPause_Click(object sender, EventArgs e) {\r
-            if (m_play != null && m_play.State != GraphState.Paused)\r
-                m_play.Pause();\r
+\r
+        private bool buttonDown;\r
+\r
+        private void btnRewind_MouseUp(object sender, MouseEventArgs e) {\r
+            buttonDown = false;\r
+        }\r
+\r
+        private void btnRewind_MouseDown(object sender, MouseEventArgs e) {\r
+            buttonDown = true;\r
+            int num = 0;\r
+            do {\r
+                num++;\r
+                Rewind();\r
+                Application.DoEvents();\r
+            } while (buttonDown);\r
+        }\r
+\r
+        private void btnForward_MouseUp(object sender, MouseEventArgs e) {\r
+            buttonDown = false;\r
+        }\r
+\r
+        private void btnForward_MouseDown(object sender, EventArgs e) {\r
+            buttonDown = true;\r
+            int num = 0;\r
+            do {\r
+                num++;\r
+                Forward();\r
+                Application.DoEvents();\r
+            } while (buttonDown);\r
+        }\r
+\r
+        private void Rewind() {\r
+            if (m_play == null)\r
+                return;\r
+            int step = ModifierKeys.HasFlag(Keys.Control) ? 5 : 1;\r
+            m_play.Rewind(step);\r
+        }\r
+\r
+        private void Forward() {\r
+            if (m_play == null)\r
+                return;\r
+            int step = ModifierKeys.HasFlag(Keys.Control) ? 5 : 1;\r
+            m_play.Forward(step);\r
         }\r
 \r
         private void PlayerForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {\r
@@ -280,6 +338,7 @@ namespace DxPlay {
                 e.SuppressKeyPress = true;\r
             }\r
         }\r
+\r
         public static bool ApplicationIsActivated() {\r
             var activatedHandle = GetForegroundWindow();\r
             if (activatedHandle == IntPtr.Zero) {\r
@@ -287,8 +346,7 @@ namespace DxPlay {
             }\r
 \r
             var procId = Process.GetCurrentProcess().Id;\r
-            int activeProcId;\r
-            GetWindowThreadProcessId(activatedHandle, out activeProcId);\r
+            GetWindowThreadProcessId(activatedHandle, out int activeProcId);\r
 \r
             return activeProcId == procId;\r
         }\r
@@ -321,45 +379,15 @@ namespace DxPlay {
                     result = true;\r
                     break;\r
                 case Keys.Left:\r
-                    logger.Debug("Seeking...");\r
-                    if (m_play != null) {\r
-                        if (ModifierKeys.HasFlag(Keys.Control)) {\r
-                            if (m_play.CurrentTC.ZeroBasedFrames > 4) {\r
-                                m_play.Pause();\r
-                                m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 5);\r
-                            }\r
-                        } else {\r
-                            if (m_play.CurrentTC.ZeroBasedFrames > 0) {\r
-                                m_play.Pause();\r
-                                m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 1);\r
-                            }\r
-                        }\r
-                    }\r
+                    Rewind();\r
                     result = true;\r
                     break;\r
                 case Keys.Right:\r
-                    if (m_play != null) {\r
-                        if (ModifierKeys.HasFlag(Keys.Control)) {\r
-                            if (m_play.CurrentTC.ZeroBasedFrames + 5 <= m_mediaDescription.Duration.Frames) {\r
-                                m_play.Pause();\r
-                                m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 5);\r
-                            }\r
-                        } else {\r
-                            if (m_play.CurrentTC.ZeroBasedFrames + 1 <= m_mediaDescription.Duration.Frames) {\r
-                                m_play.Pause();\r
-                                m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 1);\r
-                            }\r
-                        }\r
-                    }\r
+                    Forward();\r
                     result = true;\r
                     break;\r
                 case Keys.Space:\r
-                    if (m_play != null) {\r
-                        if (m_play.State == GraphState.Playing)\r
-                            m_play.Pause();\r
-                        else\r
-                            m_play.Play();\r
-                    }\r
+                    PlayOrPause();\r
                     result = true;\r
                     break;\r
                     //case Keys.I:\r
@@ -376,12 +404,11 @@ namespace DxPlay {
         }\r
 \r
         private void OnPlayEvent() {\r
-            return;\r
-            if (!IsHandleCreated || Disposing || IsDisposed || m_play == null)\r
-                return;\r
-            BeginInvoke((Action)(() => {\r
-                if (Disposing || IsDisposed || m_play == null)\r
-                    return;\r
+            //if (!IsHandleCreated || Disposing || IsDisposed || m_play == null)\r
+            //    return;\r
+            //if (Disposing || IsDisposed || m_play == null)\r
+            //    return;\r
+            playerControls.Invoke((Action)(() => {\r
                 if (!trackBarAtUser)\r
                     playerControls.TrackBar.Value = m_play.CurrentTC.ZeroBasedFrames;\r
                 playerControls.CurrentTC.Text = m_play.CurrentTC.ToString();\r
@@ -389,6 +416,14 @@ namespace DxPlay {
                 m_play.stringValues.TryGetValue(m_play.State, out labelStatusText);\r
                 playerControls.Status.Text = labelStatusText;\r
             }));\r
+\r
+            //if (!trackBarAtUser)\r
+            //    playerControls.TrackBar.Value = m_play.CurrentTC.ZeroBasedFrames;\r
+            //playerControls.CurrentTC.Text = m_play.CurrentTC.ToString();\r
+            //string labelStatusText = playerControls.Status.Text;\r
+            //m_play.stringValues.TryGetValue(m_play.State, out labelStatusText);\r
+            //playerControls.Status.Text = labelStatusText;\r
+\r
         }\r
 \r
         private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) {\r
index 101f0fd0ec9ef0e32213b6eef110a335d31dc10c..a3f828ceee054fd661a74d731d237a421e89c83c 100644 (file)
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo\r
-        CAAAAk1TRnQBSQFMAgEBAgEAAWgBAQFoAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+        CAAAAk1TRnQBSQFMAgEBAgEAAXgBAQF4AQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
         AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
index defadfbbd8721868cfc8dc508871144bd6bdf916..967d6ac30378f3625369dd671a04fd45187d69d8 100644 (file)
@@ -15,14 +15,16 @@ namespace DxPlay {
         public IMediaSeeking MediaSeeking { get; private set; }\r
         public IMediaControl MediaControl { get; private set; }\r
         public IMediaEvent MediaEvent { get; private set; }\r
+        public IVMRWindowlessControl9 WindowlessControl { get; private set; }\r
+\r
         private bool isDisposed;\r
 \r
-        public PlayerGraph(string fileName) {\r
+        public PlayerGraph(string fileName, IntPtr handle) {\r
             try {\r
                 MediaSeeking = this as IMediaSeeking;\r
                 MediaControl = this as IMediaControl;\r
                 MediaEvent = this as IMediaEvent;\r
-                VideoWindow = this as IVideoWindow;\r
+                //VideoWindow = this as IVideoWindow;\r
                 IGraphBuilder graphBuilder = this as IGraphBuilder;\r
 #if DEBUG\r
                 m_DsRot = new DsROTEntry(graphBuilder);\r
@@ -34,7 +36,8 @@ namespace DxPlay {
                 IBaseFilter videoDecoder = AddVideoDecoder(graphBuilder, splitter);\r
                 IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, videoDecoder);\r
                 SampleGrabber = (ISampleGrabber)sampleGrabber;\r
-                IBaseFilter videoRenderer = AddRenderer(graphBuilder, sampleGrabber);\r
+                IBaseFilter videoRenderer = AddRenderer(graphBuilder, sampleGrabber, handle);\r
+                FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output");\r
                 //IBaseFilter videoRenderer = AddSimpleRenderer(graphBuilder, sampleGrabber);\r
                 if (DsFindPin.ByName(splitter, "Audio") != null) {\r
                     IBaseFilter audioDecoder = AddAudioDecoder(graphBuilder, splitter);\r
@@ -42,7 +45,7 @@ namespace DxPlay {
                 } else {\r
                     logger.Warn("Audio pin not available");\r
                 }\r
-\r
+                \r
                 SearchAudioTracks(splitter);\r
                 EnableDeinterlace(videoDecoder);\r
 \r
@@ -70,28 +73,53 @@ namespace DxPlay {
             return audioDecoder;\r
         }\r
 \r
-        private IBaseFilter AddRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) {\r
+        private IBaseFilter AddRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber, IntPtr handle) {\r
             logger.Debug("Add VideoMixingRenderer9 to graph");\r
-            IBaseFilter videoRenderer = (IBaseFilter)new VideoMixingRenderer9();\r
+            IBaseFilter videoRenderer = (IBaseFilter) new VideoMixingRenderer9();\r
             DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "Video Mixing Renderer 9"));\r
             logger.Debug("Connect SampleGrabber -> VideoMixingRenderer9");\r
 \r
             try {\r
-                FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
+                IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) videoRenderer;\r
+                filterConfig.SetRenderingMode(VMR9Mode.Windowless);\r
+                WindowlessControl = (IVMRWindowlessControl9) videoRenderer;\r
+                WindowlessControl.SetVideoClippingWindow(handle);\r
+                //VideoWindow = (IVideoWindow) filterConfig;\r
+                //FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
+\r
             } catch (Exception e) {\r
                 logger.Error(e);\r
                 graphBuilder.RemoveFilter(videoRenderer);\r
                 logger.Info("Trying default VideoRenderer instead Video Mixing Renderer 9");\r
-                AddSimpleRenderer(graphBuilder, sampleGrabber);\r
+                AddSimpleRenderer(graphBuilder, sampleGrabber, handle);\r
             }\r
             return videoRenderer;\r
         }\r
 \r
-        private IBaseFilter AddSimpleRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) {\r
+        private IBaseFilter AddSimpleRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber, IntPtr handle) {\r
             logger.Debug("Add default VideoRenderer to graph");\r
             IBaseFilter videoRenderer = (IBaseFilter)new VideoRendererDefault();\r
             DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "VideoRendererDefault"));\r
             FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
+            VideoWindow = (IVideoWindow)videoRenderer;\r
+\r
+            // Set the output window\r
+            int hr;\r
+\r
+            hr = VideoWindow.put_Owner(handle);\r
+            DsError.ThrowExceptionForHR(hr);\r
+\r
+            hr = VideoWindow.put_MessageDrain(handle);\r
+            DsError.ThrowExceptionForHR(hr);\r
+\r
+            // Set the window style\r
+            hr = VideoWindow.put_WindowStyle((WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings));\r
+            DsError.ThrowExceptionForHR(hr);\r
+\r
+            // Make the window visible\r
+            hr = VideoWindow.put_Visible(OABool.True);\r
+            DsError.ThrowExceptionForHR(hr);\r
+\r
             return videoRenderer;\r
         }\r
 \r
index c5ea5cb9fb9b5321f062097159ebf275e96d13d1..3c7bdc6f9d28cca0ba51508111299f8cbeb0bd22 100644 (file)
@@ -26,7 +26,7 @@ using System.Runtime.CompilerServices;
 // You can specify all the values or you can default the Revision and Build Numbers \r
 // by using the '*' as shown below:\r
 \r
-[assembly: AssemblyVersion("2.0.8.1")]\r
+[assembly: AssemblyVersion("2.0.8.2")]\r
 \r
 //\r
 // In order to sign your assembly you must specify a key to use. Refer to the \r
@@ -56,5 +56,5 @@ using System.Runtime.CompilerServices;
 [assembly: AssemblyDelaySign(false)]\r
 [assembly: AssemblyKeyFile("")]\r
 [assembly: AssemblyKeyName("")]\r
-[assembly: AssemblyFileVersion("2.0.8.1")]\r
+[assembly: AssemblyFileVersion("2.0.8.2")]\r
 \r
index 2d64e198952aad29496818490857ca491939d6d5..abcb81c9b017271ec6a6818e8d1e2dc7148a8450 100644 (file)
@@ -69,6 +69,46 @@ namespace DxPlay.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        internal static System.Drawing.Bitmap baseline_fast_forward_black_24dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("baseline_fast_forward_black_24dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        internal static System.Drawing.Bitmap baseline_fast_rewind_black_24dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("baseline_fast_rewind_black_24dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        internal static System.Drawing.Bitmap baseline_skip_next_black_24dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("baseline_skip_next_black_24dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
+        /// </summary>\r
+        internal static System.Drawing.Bitmap baseline_skip_previous_black_24dp {\r
+            get {\r
+                object obj = ResourceManager.GetObject("baseline_skip_previous_black_24dp", resourceCulture);\r
+                return ((System.Drawing.Bitmap)(obj));\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
         /// </summary>\r
@@ -178,6 +218,15 @@ namespace DxPlay.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Előre csévélés.\r
+        /// </summary>\r
+        internal static string FORWARD {\r
+            get {\r
+                return ResourceManager.GetString("FORWARD", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized resource of type System.Drawing.Bitmap.\r
         /// </summary>\r
@@ -335,6 +384,15 @@ namespace DxPlay.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Hátra csévélés.\r
+        /// </summary>\r
+        internal static string REWIND {\r
+            get {\r
+                return ResourceManager.GetString("REWIND", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized string similar to Szegmensek.\r
         /// </summary>\r
index 6e14911e4923aaa362b50c4c78db739040981c54..ae3908997f1490d3540103ccf120158648e4d810 100644 (file)
   <data name="ERRORINVALIDTCOUT" xml:space="preserve">\r
     <value>A kilépő nem lehet a belépő előtt.</value>\r
   </data>\r
-  <data name="POSITIONASTCIN" xml:space="preserve">\r
-    <value>Aktuális pozíció belépőként</value>\r
+  <data name="STOP" xml:space="preserve">\r
+    <value>Leállítás</value>\r
+  </data>\r
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+  <data name="baseline_fast_forward_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\baseline_fast_forward_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="NOINPUT" xml:space="preserve">\r
     <value>NINCS BEMENET</value>\r
   </data>\r
-  <data name="EXITING" xml:space="preserve">\r
-    <value>Kilépés</value>\r
+  <data name="PLAY" xml:space="preserve">\r
+    <value>Lejátszás</value>\r
   </data>\r
   <data name="METADATA" xml:space="preserve">\r
     <value>Metaadat</value>\r
   </data>\r
+  <data name="EXITING" xml:space="preserve">\r
+    <value>Kilépés</value>\r
+  </data>\r
   <data name="START" xml:space="preserve">\r
     <value>Kezdés</value>\r
   </data>\r
-  <data name="STOP" xml:space="preserve">\r
-    <value>Leállítás</value>\r
-  </data>\r
   <data name="LENGTH" xml:space="preserve">\r
     <value>Hossz</value>\r
   </data>\r
-  <data name="APPROVE" xml:space="preserve">\r
-    <value>Kész</value>\r
+  <data name="bs-user-logo" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\bs-user-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="SEGMENTS" xml:space="preserve">\r
     <value>Szegmensek</value>\r
   <data name="MISSINGTRAFFICCONFIGURATION" xml:space="preserve">\r
     <value>Nem található a PlanAir rendszer kapcsolódási információja a dxplay.json állományban.</value>\r
   </data>\r
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
   <data name="lgs" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\resources\lgs.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="PAUSE" xml:space="preserve">\r
     <value>Szünet</value>\r
   </data>\r
+  <data name="POSITIONASTCIN" xml:space="preserve">\r
+    <value>Aktuális pozíció belépőként</value>\r
+  </data>\r
   <data name="ERRORTRAFFICCONNECT" xml:space="preserve">\r
     <value>Nem tudok kapcsolódni a PlanAir rendszerhez ezen az útvonalon: {0}</value>\r
   </data>\r
-  <data name="DEFINESEGMENT" xml:space="preserve">\r
-    <value>Szegmens definiálása</value>\r
+  <data name="ERRORTARGETEXISTS" xml:space="preserve">\r
+    <value>A célállomány már létezik: {0}</value>\r
   </data>\r
   <data name="COMMENT" xml:space="preserve">\r
     <value>Megjegyzés</value>\r
   <data name="ic_play_arrow_black_24dp_2x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\resources\ic_play_arrow_black_24dp_2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
-  <data name="PLAY" xml:space="preserve">\r
-    <value>Lejátszás</value>\r
+  <data name="baseline_skip_next_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\baseline_skip_next_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  </data>\r
+  <data name="baseline_skip_previous_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\baseline_skip_previous_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="ERRORSEGMENTCOLLISION" xml:space="preserve">\r
     <value>A szegmensek között nem lehet átfedés.</value>\r
   </data>\r
-  <data name="STOPPED" xml:space="preserve">\r
-    <value>Megállítva</value>\r
+  <data name="DEFINESEGMENT" xml:space="preserve">\r
+    <value>Szegmens definiálása</value>\r
   </data>\r
   <data name="COMPLETED" xml:space="preserve">\r
     <value>Vége</value>\r
   </data>\r
+  <data name="APPROVE" xml:space="preserve">\r
+    <value>Kész</value>\r
+  </data>\r
   <data name="PAUSED" xml:space="preserve">\r
     <value>Szüneteltetett</value>\r
   </data>\r
   <data name="ic_stop_black_24dp_2x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\resources\ic_stop_black_24dp_2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
+  <data name="STOPPED" xml:space="preserve">\r
+    <value>Megállítva</value>\r
+  </data>\r
   <data name="MISSINGTRAFFICVARIANT" xml:space="preserve">\r
     <value>Nem található az {0} azonosító a PlanAir rendszerben.</value>\r
   </data>\r
   <data name="ERRORINVALIDTCIN" xml:space="preserve">\r
     <value>A belépő nem lehet a kilépő után.</value>\r
   </data>\r
-  <data name="bs-user-logo" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
-    <value>..\Resources\bs-user-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+  <data name="baseline_fast_rewind_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+    <value>..\Resources\baseline_fast_rewind_black_24dp1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
-  <data name="ERRORTARGETEXISTS" xml:space="preserve">\r
-    <value>A célállomány már létezik: {0}</value>\r
+  <data name="FORWARD" xml:space="preserve">\r
+    <value>Előre csévélés</value>\r
+  </data>\r
+  <data name="REWIND" xml:space="preserve">\r
+    <value>Hátra csévélés</value>\r
   </data>\r
 </root>
\ No newline at end of file
diff --git a/client/DxPlay/Resources/baseline_fast_forward_black_18dp.png b/client/DxPlay/Resources/baseline_fast_forward_black_18dp.png
new file mode 100644 (file)
index 0000000..e020f65
Binary files /dev/null and b/client/DxPlay/Resources/baseline_fast_forward_black_18dp.png differ
diff --git a/client/DxPlay/Resources/baseline_fast_forward_black_24dp.png b/client/DxPlay/Resources/baseline_fast_forward_black_24dp.png
new file mode 100644 (file)
index 0000000..5f8978d
Binary files /dev/null and b/client/DxPlay/Resources/baseline_fast_forward_black_24dp.png differ
diff --git a/client/DxPlay/Resources/baseline_fast_rewind_black_24dp.png b/client/DxPlay/Resources/baseline_fast_rewind_black_24dp.png
new file mode 100644 (file)
index 0000000..2ad0f1f
Binary files /dev/null and b/client/DxPlay/Resources/baseline_fast_rewind_black_24dp.png differ
diff --git a/client/DxPlay/Resources/baseline_fast_rewind_black_24dp1.png b/client/DxPlay/Resources/baseline_fast_rewind_black_24dp1.png
new file mode 100644 (file)
index 0000000..2ad0f1f
Binary files /dev/null and b/client/DxPlay/Resources/baseline_fast_rewind_black_24dp1.png differ
diff --git a/client/DxPlay/Resources/baseline_skip_next_black_24dp.png b/client/DxPlay/Resources/baseline_skip_next_black_24dp.png
new file mode 100644 (file)
index 0000000..eacb084
Binary files /dev/null and b/client/DxPlay/Resources/baseline_skip_next_black_24dp.png differ
diff --git a/client/DxPlay/Resources/baseline_skip_previous_black_24dp.png b/client/DxPlay/Resources/baseline_skip_previous_black_24dp.png
new file mode 100644 (file)
index 0000000..e9e1436
Binary files /dev/null and b/client/DxPlay/Resources/baseline_skip_previous_black_24dp.png differ
index fc2f9f4b39cb5ece53f105ce0550dd4d2297ae2c..b7397f5a9e3e963d0124ef1219b8f2ebb2a5bbf7 100644 (file)
@@ -36,60 +36,114 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeOctopusClient", "Nati
 EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
                Debug|x64 = Debug|x64\r
+               Release|Any CPU = Release|Any CPU\r
                Release|x64 = Release|x64\r
        EndGlobalSection\r
        GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.ActiveCfg = Debug|x64\r
                {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.Build.0 = Debug|x64\r
+               {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.ActiveCfg = Release|x64\r
                {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.Build.0 = Release|x64\r
+               {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.ActiveCfg = Debug|x64\r
                {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.Build.0 = Debug|x64\r
+               {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.ActiveCfg = Release|x64\r
                {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.Build.0 = Release|x64\r
+               {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.ActiveCfg = Debug|x64\r
                {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.Build.0 = Debug|x64\r
+               {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.ActiveCfg = Release|x64\r
                {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.Build.0 = Release|x64\r
+               {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.ActiveCfg = Debug|x64\r
                {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.Build.0 = Debug|x64\r
+               {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.ActiveCfg = Release|x64\r
                {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.Build.0 = Release|x64\r
+               {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.ActiveCfg = Debug|x64\r
                {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.Build.0 = Debug|x64\r
+               {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.ActiveCfg = Release|x64\r
                {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.Build.0 = Release|x64\r
+               {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x64.ActiveCfg = Debug|x64\r
                {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x64.Build.0 = Debug|x64\r
+               {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x64.ActiveCfg = Release|x64\r
                {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x64.Build.0 = Release|x64\r
+               {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.ActiveCfg = Debug|x64\r
                {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.Build.0 = Debug|x64\r
+               {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.ActiveCfg = Release|x64\r
                {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.Build.0 = Release|x64\r
+               {8C51D508-1759-4C10-84A4-80965FD074FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {8C51D508-1759-4C10-84A4-80965FD074FF}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {8C51D508-1759-4C10-84A4-80965FD074FF}.Debug|x64.ActiveCfg = Debug|x64\r
                {8C51D508-1759-4C10-84A4-80965FD074FF}.Debug|x64.Build.0 = Debug|x64\r
+               {8C51D508-1759-4C10-84A4-80965FD074FF}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {8C51D508-1759-4C10-84A4-80965FD074FF}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {8C51D508-1759-4C10-84A4-80965FD074FF}.Release|x64.ActiveCfg = Release|x64\r
                {8C51D508-1759-4C10-84A4-80965FD074FF}.Release|x64.Build.0 = Release|x64\r
+               {BF494EE9-1E70-44E8-8942-DD726510A766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {BF494EE9-1E70-44E8-8942-DD726510A766}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {BF494EE9-1E70-44E8-8942-DD726510A766}.Debug|x64.ActiveCfg = Debug|x64\r
                {BF494EE9-1E70-44E8-8942-DD726510A766}.Debug|x64.Build.0 = Debug|x64\r
+               {BF494EE9-1E70-44E8-8942-DD726510A766}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {BF494EE9-1E70-44E8-8942-DD726510A766}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {BF494EE9-1E70-44E8-8942-DD726510A766}.Release|x64.ActiveCfg = Release|x64\r
                {BF494EE9-1E70-44E8-8942-DD726510A766}.Release|x64.Build.0 = Release|x64\r
+               {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Debug|x64.ActiveCfg = Debug|x64\r
                {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Debug|x64.Build.0 = Debug|x64\r
+               {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Release|x64.ActiveCfg = Release|x64\r
                {D4417174-F21E-4CE2-AE5C-8EB30C9A9625}.Release|x64.Build.0 = Release|x64\r
+               {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Debug|x64.ActiveCfg = Debug|x64\r
                {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Debug|x64.Build.0 = Debug|x64\r
+               {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Release|x64.ActiveCfg = Release|x64\r
                {8CB8266D-2229-47E2-B06D-54FDE82CBDC4}.Release|x64.Build.0 = Release|x64\r
+               {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Debug|x64.ActiveCfg = Debug|x64\r
                {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Debug|x64.Build.0 = Debug|x64\r
+               {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Release|x64.ActiveCfg = Release|x64\r
                {A64ADB88-2CC4-4E46-BC53-643E2C49E179}.Release|x64.Build.0 = Release|x64\r
+               {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
                {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Debug|x64.ActiveCfg = Debug|x64\r
                {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Debug|x64.Build.0 = Debug|x64\r
+               {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Release|Any CPU.Build.0 = Release|Any CPU\r
                {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Release|x64.ActiveCfg = Release|x64\r
                {C1A664BE-7852-4418-BF33-6F59434FC5DC}.Release|x64.Build.0 = Release|x64\r
        EndGlobalSection\r