Example #1
0
        /// <summary>
        /// Gets the title info collection from the given BDReader object.
        /// </summary>
        /// <param name="reader">IBDReader object</param>
        /// <returns>a collection of titles</returns>
        protected virtual List <BluRayAPI.BDTitleInfo> GetTitleInfoCollection(IBDReader reader)
        {
            uint titleCount = 0;

            reader.GetTitleCount(ref titleCount);

            List <BluRayAPI.BDTitleInfo> titles = new List <BluRayAPI.BDTitleInfo>((int)titleCount);

            BluRayPlayerBuilder.LogDebug("Title count - {0}", titleCount);
            for (int i = 0; i < titleCount; i++)
            {
                BluRayAPI.BDTitleInfo titleInfo = GetTitleInfo(reader, i);
                titles.Add(titleInfo);
            }

            return(titles);
        }
Example #2
0
        /// <summary>
        /// Enumerates available chapters. Needs to be executed after title changes.
        /// </summary>
        protected override void EnumerateChapters(bool forceRefresh)
        {
            if (_titleInfos == null || _currentTitle >= _titleInfos.Count || !forceRefresh && _chapterNames != null)
            {
                return;
            }

            _chapterNames = null;
            List <string> chapters = new List <string>();

            BluRayAPI.BDTitleInfo currentTitle = _titleInfos[_currentTitle];

            _bdReader.GetChapter(ref _currentChapter);

            for (int i = 1; i <= currentTitle.Chapters.Length; ++i)
            {
                chapters.Add(GetChapterName(i));
            }

            _chapterNames = chapters.ToArray();
        }
Example #3
0
        /// <summary>
        /// Gets the title info for the specified index
        /// </summary>
        /// <param name="reader">IBDReader object</param>
        /// <param name="index">index of the title</param>
        /// <returns></returns>
        protected virtual BluRayAPI.BDTitleInfo GetTitleInfo(IBDReader reader, int index)
        {
            BluRayAPI.BDTitleInfo titleInfo = new BluRayAPI.BDTitleInfo();
            IntPtr ptr = IntPtr.Zero;

            try
            {
                ptr = reader.GetTitleInfo(index);
                BluRayAPI.UnmanagedBDTitleInfo umTitleInfo = (BluRayAPI.UnmanagedBDTitleInfo)
                                                             Marshal.PtrToStructure(ptr, typeof(BluRayAPI.UnmanagedBDTitleInfo));

                titleInfo = new BluRayAPI.BDTitleInfo
                {
                    AngleCount = umTitleInfo.AngleCount,
                    Duration   = umTitleInfo.Duration,
                    Index      = umTitleInfo.Index,
                    Playlist   = umTitleInfo.Playlist,
                    Clips      = new BluRayAPI.BDClipInfo[umTitleInfo.ClipCount],
                    Chapters   = new BluRayAPI.BDChapter[umTitleInfo.ChapterCount]
                };

                for (int i = 0; i < umTitleInfo.ClipCount; i++)
                {
                    BluRayAPI.UnmanagedBDClipInfo umClipInfo = (BluRayAPI.UnmanagedBDClipInfo)
                                                               Marshal.PtrToStructure(new IntPtr((int)umTitleInfo.Clips + i * Marshal.SizeOf(typeof(BluRayAPI.UnmanagedBDClipInfo))),
                                                                                      typeof(BluRayAPI.UnmanagedBDClipInfo));
                    BluRayAPI.BDClipInfo clipInfo = new BluRayAPI.BDClipInfo
                    {
                        AudioStreams    = new BluRayAPI.BDStreamInfo[umClipInfo.AudioStreamCount],
                        IgStreams       = new BluRayAPI.BDStreamInfo[umClipInfo.IgStreamCount],
                        PgStreams       = new BluRayAPI.BDStreamInfo[umClipInfo.PgStreamCount],
                        RawStreams      = new BluRayAPI.BDStreamInfo[umClipInfo.RawStreamCount],
                        VideoStreams    = new BluRayAPI.BDStreamInfo[umClipInfo.VideoStreamCount],
                        SecAudioStreams = new BluRayAPI.BDStreamInfo[umClipInfo.SecAudioStreamCount],
                        SecVideoStreams = new BluRayAPI.BDStreamInfo[umClipInfo.SecVideoStreamCount],
                        PktCount        = umClipInfo.PktCount,
                        StillMode       = umClipInfo.StillMode,
                        StillTime       = umClipInfo.StillTime
                    };

                    GetStreamInfo(clipInfo.VideoStreams, umClipInfo.VideoStreams);
                    GetStreamInfo(clipInfo.AudioStreams, umClipInfo.AudioStreams);
                    GetStreamInfo(clipInfo.IgStreams, umClipInfo.IgStreams);
                    GetStreamInfo(clipInfo.PgStreams, umClipInfo.PgStreams);
                    GetStreamInfo(clipInfo.RawStreams, umClipInfo.RawStreams);
                    GetStreamInfo(clipInfo.SecAudioStreams, umClipInfo.SecAudioStreams);
                    GetStreamInfo(clipInfo.SecVideoStreams, umClipInfo.SecVideoStreams);
                    titleInfo.Clips[i] = clipInfo;
                }

                for (int i = 0; i < titleInfo.Chapters.Length; i++)
                {
                    BluRayAPI.BDChapter chapter = (BluRayAPI.BDChapter)
                                                  Marshal.PtrToStructure(new IntPtr((int)umTitleInfo.Chapters + i * Marshal.SizeOf(typeof(BluRayAPI.BDChapter))),
                                                                         typeof(BluRayAPI.BDChapter));
                    titleInfo.Chapters[i] = chapter;
                }
            }
            catch
            {
                BluRayPlayerBuilder.LogError("GetTitleInfo({0}) failed.", index);
            }
            finally
            {
                if (ptr != IntPtr.Zero)
                {
                    reader.FreeTitleInfo(ptr);
                }
            }

            return(titleInfo);
        }
Example #4
0
    /// <summary>
    /// Gets the title info for the specified index
    /// </summary>
    /// <param name="reader">IBDReader object</param>
    /// <param name="index">index of the title</param>
    /// <returns></returns>
    protected virtual BluRayAPI.BDTitleInfo GetTitleInfo(IBDReader reader, int index)
    {
      BluRayAPI.BDTitleInfo titleInfo = new BluRayAPI.BDTitleInfo();
      IntPtr ptr = IntPtr.Zero;
      try
      {
        ptr = reader.GetTitleInfo(index);
        BluRayAPI.UnmanagedBDTitleInfo umTitleInfo = (BluRayAPI.UnmanagedBDTitleInfo)
          Marshal.PtrToStructure(ptr, typeof(BluRayAPI.UnmanagedBDTitleInfo));

        titleInfo = new BluRayAPI.BDTitleInfo
                      {
                        AngleCount = umTitleInfo.AngleCount,
                        Duration = umTitleInfo.Duration,
                        Index = umTitleInfo.Index,
                        Playlist = umTitleInfo.Playlist,
                        Clips = new BluRayAPI.BDClipInfo[umTitleInfo.ClipCount],
                        Chapters = new BluRayAPI.BDChapter[umTitleInfo.ChapterCount]
                      };

        for (int i = 0; i < umTitleInfo.ClipCount; i++)
        {
          BluRayAPI.UnmanagedBDClipInfo umClipInfo = (BluRayAPI.UnmanagedBDClipInfo)
            Marshal.PtrToStructure(new IntPtr((int)umTitleInfo.Clips + i * Marshal.SizeOf(typeof(BluRayAPI.UnmanagedBDClipInfo))),
            typeof(BluRayAPI.UnmanagedBDClipInfo));
          BluRayAPI.BDClipInfo clipInfo = new BluRayAPI.BDClipInfo
                                                        {
                                                          AudioStreams = new BluRayAPI.BDStreamInfo[umClipInfo.AudioStreamCount],
                                                          IgStreams = new BluRayAPI.BDStreamInfo[umClipInfo.IgStreamCount],
                                                          PgStreams = new BluRayAPI.BDStreamInfo[umClipInfo.PgStreamCount],
                                                          RawStreams = new BluRayAPI.BDStreamInfo[umClipInfo.RawStreamCount],
                                                          VideoStreams = new BluRayAPI.BDStreamInfo[umClipInfo.VideoStreamCount],
                                                          SecAudioStreams = new BluRayAPI.BDStreamInfo[umClipInfo.SecAudioStreamCount],
                                                          SecVideoStreams = new BluRayAPI.BDStreamInfo[umClipInfo.SecVideoStreamCount],
                                                          PktCount = umClipInfo.PktCount,
                                                          StillMode = umClipInfo.StillMode,
                                                          StillTime = umClipInfo.StillTime
                                                        };

          GetStreamInfo(clipInfo.VideoStreams, umClipInfo.VideoStreams);
          GetStreamInfo(clipInfo.AudioStreams, umClipInfo.AudioStreams);
          GetStreamInfo(clipInfo.IgStreams, umClipInfo.IgStreams);
          GetStreamInfo(clipInfo.PgStreams, umClipInfo.PgStreams);
          GetStreamInfo(clipInfo.RawStreams, umClipInfo.RawStreams);
          GetStreamInfo(clipInfo.SecAudioStreams, umClipInfo.SecAudioStreams);
          GetStreamInfo(clipInfo.SecVideoStreams, umClipInfo.SecVideoStreams);
          titleInfo.Clips[i] = clipInfo;
        }

        for (int i = 0; i < titleInfo.Chapters.Length; i++)
        {
          BluRayAPI.BDChapter chapter = (BluRayAPI.BDChapter)
            Marshal.PtrToStructure(new IntPtr((int)umTitleInfo.Chapters + i * Marshal.SizeOf(typeof(BluRayAPI.BDChapter))),
            typeof(BluRayAPI.BDChapter));
          titleInfo.Chapters[i] = chapter;
        }
      }
      catch
      {
        BluRayPlayerBuilder.LogError("GetTitleInfo({0}) failed.", index);
      }
      finally
      {
        if (ptr != IntPtr.Zero)
          reader.FreeTitleInfo(ptr);
      }

      return titleInfo;
    }