From: elgekko Date: Tue, 13 Jun 2023 20:04:29 +0000 (+0200) Subject: Player betoltes hiba javitva X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=967746c3d3fa31b475cbf811d17e29901c638470;p=mediacube.git Player betoltes hiba javitva --- diff --git a/client/DxPlay/Controls/PlayerControls.Designer.cs b/client/DxPlay/Controls/PlayerControls.Designer.cs index e75b17a2..033027f9 100644 --- a/client/DxPlay/Controls/PlayerControls.Designer.cs +++ b/client/DxPlay/Controls/PlayerControls.Designer.cs @@ -53,8 +53,6 @@ namespace DxPlay.Controls this.btnStop = new MaestroShared.Controls.NoFocusCueButton(); this.btnStepForward = new MaestroShared.Controls.NoFocusCueButton(); this.btnForward = new MaestroShared.Controls.NoFocusCueButton(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.audioLabel = new System.Windows.Forms.Label(); this.audioTracks = new System.Windows.Forms.ComboBox(); this.mainPanel.SuspendLayout(); this.timecodePanel.SuspendLayout(); @@ -62,7 +60,6 @@ namespace DxPlay.Controls this.tableLayoutPanel2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.playSpeed)).BeginInit(); this.buttonsPanel.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // mainPanel @@ -80,7 +77,7 @@ namespace DxPlay.Controls this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 65F)); - this.mainPanel.Size = new System.Drawing.Size(835, 165); + this.mainPanel.Size = new System.Drawing.Size(835, 156); this.mainPanel.TabIndex = 0; // // trackBar @@ -214,17 +211,17 @@ namespace DxPlay.Controls this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 400F)); this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 200F)); + this.controlsPanel.Controls.Add(this.audioTracks, 0, 1); this.controlsPanel.Controls.Add(this.tableLayoutPanel2, 0, 0); this.controlsPanel.Controls.Add(this.logoPanel, 2, 0); this.controlsPanel.Controls.Add(this.buttonsPanel, 0, 0); - this.controlsPanel.Controls.Add(this.tableLayoutPanel1, 0, 1); this.controlsPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.controlsPanel.Location = new System.Drawing.Point(3, 59); this.controlsPanel.Name = "controlsPanel"; this.controlsPanel.RowCount = 2; this.controlsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.controlsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.controlsPanel.Size = new System.Drawing.Size(829, 103); + this.controlsPanel.Size = new System.Drawing.Size(829, 94); this.controlsPanel.TabIndex = 21; // // tableLayoutPanel2 @@ -395,34 +392,6 @@ namespace DxPlay.Controls this.btnForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; this.btnForward.UseVisualStyleBackColor = false; // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Controls.Add(this.audioLabel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.audioTracks, 1, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 63); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(394, 44); - this.tableLayoutPanel1.TabIndex = 22; - // - // audioLabel - // - this.audioLabel.AutoSize = true; - this.audioLabel.Location = new System.Drawing.Point(2, 5); - this.audioLabel.Margin = new System.Windows.Forms.Padding(2, 5, 2, 0); - this.audioLabel.Name = "audioLabel"; - this.audioLabel.Size = new System.Drawing.Size(34, 13); - this.audioLabel.TabIndex = 28; - this.audioLabel.Tag = ""; - this.audioLabel.Text = "Audio"; - this.audioLabel.Visible = false; - // // audioTracks // this.audioTracks.AllowDrop = true; @@ -431,11 +400,11 @@ namespace DxPlay.Controls this.audioTracks.FormattingEnabled = true; this.audioTracks.IntegralHeight = false; this.audioTracks.ItemHeight = 13; - this.audioTracks.Location = new System.Drawing.Point(40, 2); + this.audioTracks.Location = new System.Drawing.Point(2, 62); this.audioTracks.Margin = new System.Windows.Forms.Padding(2); this.audioTracks.Name = "audioTracks"; - this.audioTracks.Size = new System.Drawing.Size(352, 21); - this.audioTracks.TabIndex = 29; + this.audioTracks.Size = new System.Drawing.Size(396, 21); + this.audioTracks.TabIndex = 30; this.audioTracks.Visible = false; // // PlayerControls @@ -446,7 +415,7 @@ namespace DxPlay.Controls this.Controls.Add(this.mainPanel); this.Margin = new System.Windows.Forms.Padding(0); this.Name = "PlayerControls"; - this.Size = new System.Drawing.Size(835, 165); + this.Size = new System.Drawing.Size(835, 156); this.mainPanel.ResumeLayout(false); this.mainPanel.PerformLayout(); this.timecodePanel.ResumeLayout(false); @@ -457,8 +426,6 @@ namespace DxPlay.Controls ((System.ComponentModel.ISupportInitialize)(this.playSpeed)).EndInit(); this.buttonsPanel.ResumeLayout(false); this.buttonsPanel.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); this.ResumeLayout(false); } @@ -486,8 +453,6 @@ namespace DxPlay.Controls private VideoSpeedTrackbar playSpeed; private System.Windows.Forms.Label lblPlaySpeed; private TableLayoutPanel tableLayoutPanel2; - private TableLayoutPanel tableLayoutPanel1; - private Label audioLabel; private ComboBox audioTracks; } } \ No newline at end of file diff --git a/client/DxPlay/Controls/PlayerControls.cs b/client/DxPlay/Controls/PlayerControls.cs index 1ff0bcbc..0a095dc3 100644 --- a/client/DxPlay/Controls/PlayerControls.cs +++ b/client/DxPlay/Controls/PlayerControls.cs @@ -30,7 +30,6 @@ namespace DxPlay.Controls public NoFocusCueButton StepForward { get => btnStepForward; } public Label PlaySpeedLabel { get => lblPlaySpeed; } public VideoSpeedTrackbar PlaySpeed { get => playSpeed; } - public Label AudioLabel { get => audioLabel; } public ComboBox AudioTracks { get => audioTracks; } } diff --git a/client/DxPlay/FilterGraphTools.cs b/client/DxPlay/FilterGraphTools.cs index 6c0ab3f6..2d0f61cf 100644 --- a/client/DxPlay/FilterGraphTools.cs +++ b/client/DxPlay/FilterGraphTools.cs @@ -353,8 +353,6 @@ namespace DirectShowLib.Utils { int pcFetched; while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) { - Guid clsid; - IFileSinkFilter fsf = filters[0] as IFileSinkFilter; if (fsf != null) { diff --git a/client/DxPlay/PlayerForm.cs b/client/DxPlay/PlayerForm.cs index 2dfb06da..fdd86b66 100644 --- a/client/DxPlay/PlayerForm.cs +++ b/client/DxPlay/PlayerForm.cs @@ -216,7 +216,6 @@ namespace DxPlay { { m_play.Graph.SearchAudioTracks(m_play.Graph.Splitter); if (m_play.Graph.AudioCount > 1) { - playerControls.AudioLabel.Visible = true; m_play.Graph.AvailableAudioTracks = new List(m_play.Graph.AudioCount); m_play.Graph.SearchAudioTracks(m_play.Graph.Splitter); playerControls.AudioTracks.DataSource = m_play.Graph.AvailableAudioTracks; diff --git a/client/DxPlay/PlayerGraph.cs b/client/DxPlay/PlayerGraph.cs index b6e612b7..eafa4f48 100644 --- a/client/DxPlay/PlayerGraph.cs +++ b/client/DxPlay/PlayerGraph.cs @@ -24,10 +24,8 @@ namespace DxPlay { public List AvailableAudioTracks { get; set; } public IBaseFilter Splitter { get; set; } - public PlayerGraph(string fileName, IntPtr handle, VideoRendererType rendererType) - { - try - { + public PlayerGraph(string fileName, IntPtr handle, VideoRendererType rendererType) { + try { MediaSeeking = this as IMediaSeeking; MediaControl = this as IMediaControl; MediaEvent = this as IMediaEvent; @@ -44,16 +42,14 @@ namespace DxPlay { Splitter = AddSplitter(graphBuilder, sourceFilter); bool audioOnly = true; - if (DsFindPin.ByName(Splitter, "Video") != null) - { + if (DsFindPin.ByName(Splitter, "Video") != null) { audioOnly = false; IBaseFilter videoDecoder = AddVideoDecoder(graphBuilder, Splitter); EnableDeinterlace(videoDecoder); IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, videoDecoder); SampleGrabber = (ISampleGrabber)sampleGrabber; - switch (rendererType) - { + switch (rendererType) { case VideoRendererType.VM7: AddVM7Renderer(graphBuilder, sampleGrabber); break; @@ -71,51 +67,40 @@ namespace DxPlay { break; } FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output"); - ConfigureSimpleRenderer(handle); - } - else - { + ConfigureSimpleRenderer(handle); + } else { logger.Warn("Video pin not available"); } - if (DsFindPin.ByName(Splitter, "Audio") != null) - { + if (DsFindPin.ByName(Splitter, "Audio") != null) { IBaseFilter audioDecoder = AddAudioDecoder(graphBuilder, Splitter); - if (audioOnly) - { + if (audioOnly) { throw new Exception("Audio only file is not supported."); //IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, audioDecoder); //SampleGrabber = (ISampleGrabber)sampleGrabber; //FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output"); - } - else + } else FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output"); - } - else - { + } else { logger.Warn("Audio pin not available"); } SearchAudioTracks(Splitter); SetAudioTrack(0); - } - catch (Exception e) - { + } catch (Exception e) { logger.Error(e.Message); logger.Error(e.StackTrace); throw e; } } - private void EnableDeinterlace(IBaseFilter videoDecoder) - { + private void EnableDeinterlace(IBaseFilter videoDecoder) { logger.Debug("Enable YADIF deinterlace"); ILAVVideoSettings settings = (ILAVVideoSettings)videoDecoder; settings.SetSWDeintMode(LAVSWDeintModes.SWDeintMode_YADIF); settings.SetSWDeintOutput(LAVDeintOutput.DeintOutput_FramePer2Field); } - private IBaseFilter AddAudioDecoder(IGraphBuilder graphBuilder, IBaseFilter splitter) - { + private IBaseFilter AddAudioDecoder(IGraphBuilder graphBuilder, IBaseFilter splitter) { logger.Debug("Add LAVAudio to graph"); IBaseFilter audioDecoder = null; audioDecoder = LoadAudioDecoder(graphBuilder); @@ -127,24 +112,20 @@ namespace DxPlay { return audioDecoder; } - private IBaseFilter AddVM9Renderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) - { + private IBaseFilter AddVM9Renderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) { logger.Debug("Add VideoMixingRenderer9 to graph"); IBaseFilter videoRenderer = (IBaseFilter)new VideoMixingRenderer9(); DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "Video Mixing Renderer 9")); logger.Debug("Connect SampleGrabber -> VideoMixingRenderer9"); - try - { + try { //IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) videoRenderer; //filterConfig.SetRenderingMode(VMR9Mode.Windowless); //WindowlessControl = (IVMRWindowlessControl9) videoRenderer; //WindowlessControl.SetVideoClippingWindow(handle); //WindowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox); FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true); - } - catch (Exception e) - { + } catch (Exception e) { logger.Error(e.StackTrace); graphBuilder.RemoveFilter(videoRenderer); logger.Info("Trying default VideoRenderer instead Video Mixing Renderer 9"); @@ -154,24 +135,20 @@ namespace DxPlay { return videoRenderer; } - private IBaseFilter AddVM7Renderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) - { + private IBaseFilter AddVM7Renderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) { logger.Debug("Add VideoMixingRenderer7 to graph"); IBaseFilter videoRenderer = (IBaseFilter)new VideoMixingRenderer(); DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "Video Mixing Renderer 7")); logger.Debug("Connect SampleGrabber -> VideoMixingRenderer7"); - try - { + try { //IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) videoRenderer; //filterConfig.SetRenderingMode(VMR9Mode.Windowless); //WindowlessControl = (IVMRWindowlessControl9) videoRenderer; //WindowlessControl.SetVideoClippingWindow(handle); //WindowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox); FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true); - } - catch (Exception e) - { + } catch (Exception e) { logger.Error(e.StackTrace); graphBuilder.RemoveFilter(videoRenderer); logger.Info("Trying default VideoRenderer instead Video Mixing Renderer 7"); @@ -181,8 +158,7 @@ namespace DxPlay { return videoRenderer; } - private void ConfigureSimpleRenderer(IntPtr handle) - { + private void ConfigureSimpleRenderer(IntPtr handle) { // Set the output window int hr; @@ -201,16 +177,14 @@ namespace DxPlay { DsError.ThrowExceptionForHR(hr); } - private IBaseFilter AddDefaultRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) - { + private IBaseFilter AddDefaultRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) { 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); return videoRenderer; } - private IBaseFilter AddEVRRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) - { + private IBaseFilter AddEVRRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber) { logger.Debug("Add EVR VideoRenderer to graph"); IBaseFilter videoRenderer = (IBaseFilter)new EnhancedVideoRenderer(); DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "EnhancedVideoRenderer")); @@ -218,8 +192,7 @@ namespace DxPlay { return videoRenderer; } - private IBaseFilter AddSampleGrabber(IGraphBuilder graphBuilder, IBaseFilter videoDecoder) - { + private IBaseFilter AddSampleGrabber(IGraphBuilder graphBuilder, IBaseFilter videoDecoder) { logger.Debug("Add SampleGrabber to graph"); IBaseFilter grabber = (IBaseFilter)new SampleGrabber(); DsError.ThrowExceptionForHR(graphBuilder.AddFilter(grabber, "Sample Grabber")); @@ -228,8 +201,7 @@ namespace DxPlay { return grabber; } - private IBaseFilter AddVideoDecoder(IGraphBuilder graphBuilder, IBaseFilter splitter) - { + private IBaseFilter AddVideoDecoder(IGraphBuilder graphBuilder, IBaseFilter splitter) { logger.Debug("Add LAVVideo to graph"); IBaseFilter videoDecoder = LoadVideoDecoder(graphBuilder); @@ -241,8 +213,7 @@ namespace DxPlay { return videoDecoder; } - private IBaseFilter AddSplitter(IGraphBuilder graphBuilder, IBaseFilter sourceFilter) - { + private IBaseFilter AddSplitter(IGraphBuilder graphBuilder, IBaseFilter sourceFilter) { logger.Debug("Add LAVSplitter to graph"); IBaseFilter splitter = LoadSplitter(graphBuilder); logger.Debug("Connect SourceFilter -> LAVSplitter"); @@ -250,23 +221,19 @@ namespace DxPlay { return splitter; } - public void SearchAudioTracks(IBaseFilter splitter) - { + public void SearchAudioTracks(IBaseFilter splitter) { IAMStreamSelect amStreamSelect = (IAMStreamSelect)splitter; - if (amStreamSelect != null) - { + if (amStreamSelect != null) { amStreamSelect.Count(out int count); AudioCount = 0; - for (int i = 0; i < count; i++) - { - amStreamSelect.Info(i, out AMMediaType ppmt, out AMStreamSelectInfoFlags pdwFlags, out int plcid, out int pdwGroup, + for (int i = 0; i < count; i++) { + amStreamSelect.Info(i, out AMMediaType ppmt, out AMStreamSelectInfoFlags pdwFlags, out int plcid, out int pdwGroup, out string ppszName, out object ppObject, out object ppUnk); - if (ppmt.majorType == MediaType.Audio) - { + if (ppmt.majorType == MediaType.Audio) { logger.Debug("Found audio channel"); AudioCount++; - if (AvailableAudioTracks != null && ppszName != null) { - AvailableAudioTracks.Add(i+". "+ppszName); + if (AvailableAudioTracks != null && ppszName != null) { + AvailableAudioTracks.Add(i + ". " + ppszName); } } DsUtils.FreeAMMediaType(ppmt); @@ -279,55 +246,46 @@ namespace DxPlay { } } - private IBaseFilter LoadVideoDecoder(IGraphBuilder graphBuilder) - { + private IBaseFilter LoadVideoDecoder(IGraphBuilder graphBuilder) { ILAVVideoSettings lavVideoSettings; IBaseFilter videoDecoder = FilterProvider.GetVideoFilter(out lavVideoSettings); - if (videoDecoder == null) + if (videoDecoder == null) { videoDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Video Decoder"); - //if (videoDecoder != null) - // graphBuilder.AddFilter(videoDecoder, "LAV Video Decoder"); + } else { + graphBuilder.AddFilter(videoDecoder, "LAV Video Decoder"); + } return videoDecoder; } - private IBaseFilter LoadAudioDecoder(IGraphBuilder graphBuilder) - { + private IBaseFilter LoadAudioDecoder(IGraphBuilder graphBuilder) { ILAVAudioSettings lavAudioSettings; ILAVAudioStatus lavAudioStatus; IBaseFilter audioDecoder = FilterProvider.GetAudioFilter(out lavAudioSettings, out lavAudioStatus); - if (audioDecoder == null) + if (audioDecoder == null) { audioDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Audio Decoder"); - //if (audioDecoder != null) - // graphBuilder.AddFilter(audioDecoder, "LAV Audio Decoder"); - - IBaseFilter audioSwitcher = FilterGraphTools.AddFilterFromClsid(graphBuilder, new Guid("{18C16B08-6497-420E-AD14-22D21C2CEAB7}"), "Audio Switcher"); + } else { + graphBuilder.AddFilter(audioDecoder, "LAV Audio Decoder"); + } + //IBaseFilter audioSwitcher = FilterGraphTools.AddFilterFromClsid(graphBuilder, new Guid("{18C16B08-6497-420E-AD14-22D21C2CEAB7}"), "Audio Switcher"); //graphBuilder.AddFilter(audioSwitcher, "Audio Switcher"); - return audioDecoder; } - private IBaseFilter LoadSplitter(IGraphBuilder graphBuilder) - { + private IBaseFilter LoadSplitter(IGraphBuilder graphBuilder) { ILAVSplitterSettings lavSplitterSettings; IBaseFilter splitter = FilterProvider.GetSplitter(out lavSplitterSettings); if (splitter == null) { logger.Info("No splitter found in codecs dir, using installed"); splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Splitter"); + } else { + graphBuilder.AddFilter(splitter, "LAV Splitter"); } - - if (splitter == null) { - throw new Exception("A splitter betöltése sikertelen!"); - } - - //graphBuilder.AddFilter(splitter, "LAV Splitter"); return splitter; } // Shut down capture - public void Dispose() - { - lock (this) - { + public void Dispose() { + lock (this) { if (isDisposed) return; logger.Debug("Dispose"); @@ -336,28 +294,24 @@ namespace DxPlay { m_DsRot.Dispose(); #endif IMediaControl mediaCtrl = (IMediaControl)this; - if (mediaCtrl != null) - { + if (mediaCtrl != null) { mediaCtrl.Stop(); IGraphBuilder graphBuilder = (IGraphBuilder)mediaCtrl; FilterGraphTools.DisconnectAllPins(graphBuilder); FilterGraphTools.RemoveAllFilters(graphBuilder); } - if (this != null) - { - Marshal.ReleaseComObject(this); + if (this != null) { + Marshal.ReleaseComObject(this); } isDisposed = true; } } - public void SetAudioTrack(int selectedTrackIndex) - { + public void SetAudioTrack(int selectedTrackIndex) { IAMStreamSelect streamSelect = (IAMStreamSelect)Splitter; - if (streamSelect != null) - { - streamSelect.Enable(selectedTrackIndex+1, AMStreamSelectEnableFlags.Enable); + if (streamSelect != null) { + streamSelect.Enable(selectedTrackIndex + 1, AMStreamSelectEnableFlags.Enable); } } }