Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
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);
        }