void TestSelectAudioStream() { int hr; IDvdCmd ppCmd; AllowPlay(); hr = m_idc2.PlayChapterInTitle(2, 1, DvdCmdFlags.Flush | DvdCmdFlags.SendEvents, out ppCmd); DsError.ThrowExceptionForHR(hr); int maxstreams, curstream; hr = m_idi2.GetCurrentAudio(out maxstreams, out curstream); DsError.ThrowExceptionForHR(hr); Debug.Assert(curstream == 0, "TestSelectAudioStream"); hr = m_idc2.SelectAudioStream(maxstreams - 1, DvdCmdFlags.None, out ppCmd); DsError.ThrowExceptionForHR(hr); hr = m_idi2.GetCurrentAudio(out maxstreams, out curstream); DsError.ThrowExceptionForHR(hr); hr = m_idc2.Stop(); DsError.ThrowExceptionForHR(hr); Debug.Assert(curstream == maxstreams - 1, "TestSelectAudioStream2"); }
void TestGetCurrent() { int hr; IDvdCmd ppCmd = null; int pulAnglesAvailable; int pulCurrentAngle; int pulStreamsAvailable; int pulCurrentStream; int pulSubAvailable; int pulCurrentSub; bool pbIsDisabled; ValidUOPFlag pulUOPs; AllowPlay(); hr = m_idc2.PlayTitle(2, DvdCmdFlags.Flush, out ppCmd); DsError.ThrowExceptionForHR(hr); hr = m_idi2.GetCurrentAngle(out pulAnglesAvailable, out pulCurrentAngle); DsError.ThrowExceptionForHR(hr); hr = m_idi2.GetCurrentAudio(out pulStreamsAvailable, out pulCurrentStream); DsError.ThrowExceptionForHR(hr); hr = m_idi2.GetCurrentSubpicture(out pulSubAvailable, out pulCurrentSub, out pbIsDisabled); DsError.ThrowExceptionForHR(hr); hr = m_idi2.GetCurrentUOPS(out pulUOPs); DsError.ThrowExceptionForHR(hr); hr = m_idc2.Stop(); DsError.ThrowExceptionForHR(hr); Debug.Assert(pulAnglesAvailable == 1, "GetCurrentAngle"); Debug.Assert(pulCurrentAngle == 1, "GetCurrentAngle2"); Debug.Assert(pulStreamsAvailable == 1, "GetCurrentAudio"); Debug.Assert(pulCurrentStream == 0, "GetCurrentAudio2"); Debug.Assert(pulSubAvailable == 0, "GetCurrentSubpicture"); //Debug.Assert(pulCurrentSub == 1, "GetCurrentSubpicture2"); Debug.Assert(pbIsDisabled, "GetCurrentSubpicture3"); Debug.Assert(pulUOPs == 0); }
protected override bool EnumerateStreams(bool forceRefresh) { if (_dvdInfo == null || !_initialized) { return(false); } StreamInfoHandler audioStreams; StreamInfoHandler subtitleStreams; lock (SyncObj) { audioStreams = _streamInfoAudio; subtitleStreams = _streamInfoSubtitles; } if (forceRefresh || audioStreams == null || subtitleStreams == null) { audioStreams = new StreamInfoHandler(); subtitleStreams = new StreamInfoHandler(); int streamsAvailable, currentStream; _dvdInfo.GetCurrentAudio(out streamsAvailable, out currentStream); for (int i = 0; i < streamsAvailable; ++i) { int audioLanguage; DvdAudioAttributes attr; _dvdInfo.GetAudioLanguage(i, out audioLanguage); _dvdInfo.GetAudioAttributes(i, out attr); int currentLCID = (audioLanguage & 0x3ff); string languageName = GetLanguageName(currentLCID); StringBuilder currentAudio = new StringBuilder(); currentAudio.AppendFormat("{0} ({1}/{2} ch/{3} KHz)", languageName, attr.AudioFormat, attr.bNumberOfChannels, (attr.dwFrequency / 1000)); switch (attr.LanguageExtension) { case DvdAudioLangExt.NotSpecified: case DvdAudioLangExt.Captions: break; case DvdAudioLangExt.VisuallyImpaired: case DvdAudioLangExt.DirectorComments1: case DvdAudioLangExt.DirectorComments2: currentAudio.AppendFormat(" ({0})", ServiceRegistration.Get <ILocalization>().ToString("[Playback." + attr.LanguageExtension + "]")); break; } audioStreams.AddUnique(new StreamInfo(null, i, currentAudio.ToString(), currentLCID)); } bool isDisabled; _dvdInfo.GetCurrentSubpicture(out streamsAvailable, out currentStream, out isDisabled); for (int i = 0; i < streamsAvailable; ++i) { DvdSubpictureAttributes attr; int iLanguage; _dvdInfo.GetSubpictureLanguage(i, out iLanguage); _dvdInfo.GetSubpictureAttributes(i, out attr); int currentLCID = (iLanguage & 0x3ff); string languageName = GetLanguageName(currentLCID); String localizationTag = attr.LanguageExtension.ToString(); String currentSubtitle = String.Format("{0} {1}", languageName, ServiceRegistration.Get <ILocalization>().ToString("[Playback." + localizationTag + "]") ?? localizationTag); subtitleStreams.AddUnique(new StreamInfo(null, i, currentSubtitle, currentLCID)); } lock (SyncObj) { _streamInfoAudio = audioStreams; _streamInfoSubtitles = subtitleStreams; } return(true); // refreshed } return(false); }