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