/// <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); }
/// <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; }