private void SetStream(SelectableMediaStream stream) { IEnumFilters enumFilters; var hr = m_graph.EnumFilters(out enumFilters); DsError.ThrowExceptionForHR(hr); var filters = new DirectShowLib.IBaseFilter[1]; while (enumFilters.Next(filters.Length, filters, IntPtr.Zero) == 0) { FilterInfo filterInfo; hr = filters[0].QueryFilterInfo(out filterInfo); DsError.ThrowExceptionForHR(hr); Guid cl; filters[0].GetClassID(out cl); if (stream.Type == MediaStreamType.Audio) { if (cl != _audioSelector) { continue; } } else if (stream.Type == MediaStreamType.Subtitle) { if (cl != _grp2Selector && cl != _vobsubSelector) { continue; } } if (filterInfo.pGraph != null) { Marshal.ReleaseComObject(filterInfo.pGraph); } var iss = filters[0] as IAMStreamSelect; iss.Enable(stream.Index, AMStreamSelectEnableFlags.Enable); Marshal.ReleaseComObject(filters[0]); } Marshal.ReleaseComObject(enumFilters); foreach (var i in GetSelectableStreams().Where(s => s.Type == stream.Type)) { i.IsActive = i.Index == stream.Index; } }
public void ChangeSubtitleStream(SelectableMediaStream track) { }
public void ChangeAudioStream(SelectableMediaStream track) { }
public void ChangeSubtitleStream(SelectableMediaStream track) { InvokeOnPlayerThread(() => _mediaPlayer.SetSubtitleStream(track)); }
public void ChangeAudioStream(SelectableMediaStream track) { InvokeOnPlayerThread(() => _mediaPlayer.SetAudioTrack(track)); }
private List <SelectableMediaStream> GetStreams() { var streams = new List <SelectableMediaStream>(); IEnumFilters enumFilters; var hr = m_graph.EnumFilters(out enumFilters); DsError.ThrowExceptionForHR(hr); var filters = new DirectShowLib.IBaseFilter[1]; while (enumFilters.Next(filters.Length, filters, IntPtr.Zero) == 0) { FilterInfo filterInfo; hr = filters[0].QueryFilterInfo(out filterInfo); DsError.ThrowExceptionForHR(hr); Guid cl; filters[0].GetClassID(out cl); if (filterInfo.pGraph != null) { Marshal.ReleaseComObject(filterInfo.pGraph); } var iss = filters[0] as IAMStreamSelect; if (iss != null) { int count; hr = iss.Count(out count); DsError.ThrowExceptionForHR(hr); for (int i = 0; i < count; i++) { DirectShowLib.AMMediaType type; AMStreamSelectInfoFlags flags; int plcid, pwdGrp; // language String pzname; object ppobject, ppunk; hr = iss.Info(i, out type, out flags, out plcid, out pwdGrp, out pzname, out ppobject, out ppunk); DsError.ThrowExceptionForHR(hr); if (ppobject != null) { Marshal.ReleaseComObject(ppobject); } if (type != null) { DsUtils.FreeAMMediaType(type); } if (ppunk != null) { Marshal.ReleaseComObject(ppunk); } if (pwdGrp == 2) { if (_grp2Selector == Guid.Empty) { filters[0].GetClassID(out _grp2Selector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Subtitle }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } if (pwdGrp == 1) { if (_audioSelector == Guid.Empty) { filters[0].GetClassID(out _audioSelector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Audio }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } if (pwdGrp == 6590033) { if (_vobsubSelector == Guid.Empty) { filters[0].GetClassID(out _vobsubSelector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Subtitle, Identifier = "Vobsub" }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } } } Marshal.ReleaseComObject(filters[0]); } Marshal.ReleaseComObject(enumFilters); return(streams); }
public void SetSubtitleTrack(SelectableMediaStream stream) { SetStream(stream); }
public void SetAudioTrack(SelectableMediaStream stream) { SetStream(stream); }
public void ChangeSubtitleStream(SelectableMediaStream track) { _currentPlaybackDispatcher.Invoke(() => _mediaPlayer.SetSubtitleTrack(track)); }
public void ChangeAudioStream(SelectableMediaStream track) { _currentPlaybackDispatcher.Invoke(() => _mediaPlayer.SetAudioTrack(track)); }