示例#1
0
        public TSStreamClip(
            TSStreamFile streamFile,
            TSStreamClipFile streamClipFile)
        {
            if (streamFile != null)
            {
                Name       = streamFile.Name;
                StreamFile = streamFile;

                if (StreamFile.FileInfo != null)
                {
                    FileSize = (ulong)StreamFile.FileInfo.Length;
                }
                else
                {
                    FileSize = (ulong)StreamFile.DFileInfo.Length;
                }

                if (StreamFile.InterleavedFile != null)
                {
                    if (StreamFile.InterleavedFile.FileInfo != null)
                    {
                        InterleavedFileSize = (ulong)StreamFile.InterleavedFile.FileInfo.Length;
                    }
                    else
                    {
                        InterleavedFileSize = (ulong)StreamFile.InterleavedFile.DFileInfo.Length;
                    }
                }
            }
            StreamClipFile = streamClipFile;
        }
示例#2
0
        protected bool BDROM_StreamClipFileScanError(TSStreamClipFile streamClipFile, Exception ex)
        {
            System.Console.WriteLine(string.Format(
                                         "An error occurred while scanning the stream clip file {0}.\n\nThe disc may be copy-protected or damaged.\n\nDo you want to continue scanning the stream clip files?", streamClipFile.Name));

            return(GetYorNdefaultY());
        }
 public TSStreamClip(
     //TSStreamFile streamFile,
     TSStreamClipFile streamClipFile)
 {
     Name = streamClipFile.Name; //streamFile.Name;
     //StreamFile = streamFile;
     StreamClipFile = streamClipFile;
     //FileSize = (ulong)StreamFile.FileInfo.Length;
 }
示例#4
0
 public TSStreamClip(
     //TSStreamFile streamFile,
     TSStreamClipFile streamClipFile)
 {
     Name = streamClipFile.Name; //streamFile.Name;
     //StreamFile = streamFile;
     StreamClipFile = streamClipFile;
     //FileSize = (ulong)StreamFile.FileInfo.Length;
 }
示例#5
0
 public TSStreamClip(
     TSStreamFile streamFile,
     TSStreamClipFile streamClipFile)
 {
     if (streamFile != null)
     {
         Name = streamFile.Name;
         StreamFile = streamFile;
         FileSize = (ulong)StreamFile.FileInfo.Length;
         if (StreamFile.InterleavedFile != null)
         {
             InterleavedFileSize = (ulong)StreamFile.InterleavedFile.FileInfo.Length;
         }
     }
     StreamClipFile = streamClipFile;
 }
示例#6
0
    public TSStreamClip(
        TSStreamFile streamFile,
        TSStreamClipFile streamClipFile)
    {
      if (streamFile != null)
      {
        _settings = ServiceRegistration.Get<ISettingsManager>().Load<BDInfoSettings>() ?? new BDInfoSettings();

        Name = streamFile.Name;
        StreamFile = streamFile;
        FileSize = (ulong)StreamFile.FileInfo.Length;
        if (StreamFile.InterleavedFile != null)
        {
          InterleavedFileSize = (ulong)StreamFile.InterleavedFile.FileInfo.Length;
        }
      }
      StreamClipFile = streamClipFile;
    }
        public TSStreamClip(
            TSStreamFile streamFile,
            TSStreamClipFile streamClipFile)
        {
            if (streamFile != null)
            {
                _settings = ServiceRegistration.Get <ISettingsManager>().Load <BDInfoSettings>() ?? new BDInfoSettings();

                Name       = streamFile.Name;
                StreamFile = streamFile;
                FileSize   = (ulong)StreamFile.FileInfo.Length;
                if (StreamFile.InterleavedFile != null)
                {
                    InterleavedFileSize = (ulong)StreamFile.InterleavedFile.FileInfo.Length;
                }
            }
            StreamClipFile = streamClipFile;
        }
示例#8
0
        public void Scan()
        //Dictionary<string, TSStreamFile> streamFiles,
        //Dictionary<string, TSStreamClipFile> streamClipFiles)
        {
            FileStream   fileStream = null;
            BinaryReader fileReader = null;

            int streamFileCount = 0;
            Dictionary <string, TSStreamClipFile> streamClipFiles = new Dictionary <string, TSStreamClipFile>();

            try
            {
#if DEBUG
                Debug.WriteLine(string.Format(
                                    "Scanning {0}...", Name));
#endif
                Streams.Clear();
                StreamClips.Clear();

                fileStream = File.OpenRead(FileInfo.FullName);
                fileReader = new BinaryReader(fileStream);

                byte[] data       = new byte[fileStream.Length];
                int    dataLength = fileReader.Read(data, 0, data.Length);

                byte[] fileType = new byte[8];
                Array.Copy(data, 0, fileType, 0, fileType.Length);

                FileType = ASCIIEncoding.ASCII.GetString(fileType);
                if ((FileType != "MPLS0100" && FileType != "MPLS0200" && FileType != "MPLS0300")
                    /*|| data[45] != 1*/)
                {
                    throw new Exception(string.Format(
                                            "Playlist {0} has an unknown file type {1}.",
                                            FileInfo.Name, FileType));
                }
#if DEBUG
                Debug.WriteLine(string.Format(
                                    "\tFileType: {0}", FileType));
#endif
                int playlistIndex =
                    ((int)data[8] << 24) +
                    ((int)data[9] << 16) +
                    ((int)data[10] << 8) +
                    ((int)data[11]);

                // TODO: Hack for bad TSRemux output.
                int playlistLength        = data.Length - playlistIndex - 4;
                int playlistLengthCorrect =
                    ((int)data[playlistIndex] << 24) +
                    ((int)data[playlistIndex + 1] << 16) +
                    ((int)data[playlistIndex + 2] << 8) +
                    ((int)data[playlistIndex + 3]);

                byte[] playlistData = new byte[playlistLength];
                Array.Copy(data, playlistIndex + 4,
                           playlistData, 0, playlistData.Length);

                streamFileCount =
                    (((int)playlistData[2] << 8) + (int)playlistData[3]);
#if DEBUG
                Debug.WriteLine(string.Format(
                                    "\tStreamFileCount: {0}", streamFileCount));
#endif
                List <TSStreamClip> chapterClips = new List <TSStreamClip>();
                int streamFileOffset             = 6;
                for (int streamFileIndex = 0;
                     streamFileIndex < streamFileCount;
                     streamFileIndex++)
                {
                    byte[] streamFileNameData = new byte[5];
                    Array.Copy(playlistData, streamFileOffset + 2,
                               streamFileNameData, 0, streamFileNameData.Length);

                    //TSStreamFile streamFile = null;
                    //string streamFileName = string.Format(
                    //    "{0}.M2TS",
                    //    ASCIIEncoding.ASCII.GetString(streamFileNameData));
                    //if (streamFiles.ContainsKey(streamFileName))
                    //{
                    //    streamFile = streamFiles[streamFileName];
                    //}
                    //if (streamFile == null)
                    //{
                    //    throw new Exception(string.Format(
                    //        "Playlist {0} referenced missing file {1}.",
                    //        FileInfo.Name, streamFileName));
                    //}

                    TSStreamClipFile streamClipFile     = null;
                    string           streamClipFileName = string.Format(
                        "{0}.CLPI",
                        ASCIIEncoding.ASCII.GetString(streamFileNameData));
                    string streamClipFilePath = Path.Combine(Path.Combine(FileInfo.Directory.Parent.FullName, "CLIPINF"),
                                                             streamClipFileName);
                    if (File.Exists(streamClipFilePath) && !streamClipFiles.ContainsKey(streamClipFileName))
                    {
                        streamClipFiles.Add(streamClipFileName, new TSStreamClipFile(new FileInfo(streamClipFilePath)));
                    }

                    if (streamClipFiles.ContainsKey(streamClipFileName))
                    {
                        streamClipFile = streamClipFiles[streamClipFileName];
                    }
                    if (streamClipFile == null)
                    {
                        continue;
                        //throw new Exception(string.Format(
                        //    "Playlist {0} referenced missing file {1}.",
                        //    FileInfo.Name, streamClipFileName));
                    }

                    byte condition = (byte)
                                     (playlistData[streamFileOffset + 12] & 0xF);

                    ulong timeIn =
                        ((ulong)playlistData[streamFileOffset + 14] << 24) +
                        ((ulong)playlistData[streamFileOffset + 15] << 16) +
                        ((ulong)playlistData[streamFileOffset + 16] << 8) +
                        ((ulong)playlistData[streamFileOffset + 17]);

                    ulong timeOut =
                        ((ulong)playlistData[streamFileOffset + 18] << 24) +
                        ((ulong)playlistData[streamFileOffset + 19] << 16) +
                        ((ulong)playlistData[streamFileOffset + 20] << 8) +
                        ((ulong)playlistData[streamFileOffset + 21]);

                    TSStreamClip streamClip = new TSStreamClip(
                        //streamFile,
                        streamClipFile);

                    streamClip.TimeIn          = (double)timeIn / 45000;
                    streamClip.TimeOut         = (double)timeOut / 45000;
                    streamClip.Length          = streamClip.TimeOut - streamClip.TimeIn;
                    streamClip.RelativeTimeIn  = TotalLength;
                    streamClip.RelativeTimeOut = streamClip.RelativeTimeIn + streamClip.Length;
                    StreamClips.Add(streamClip);
                    chapterClips.Add(streamClip);
#if DEBUG
                    Debug.WriteLine(string.Format(
                                        "\t{0} {1} {2} {3}",
                                        streamClip.Name,
                                        streamClip.TimeIn.TotalSeconds,
                                        streamClip.TimeOut.TotalSeconds,
                                        streamClip.Length.TotalSeconds));
#endif
                    if ((playlistData[streamFileOffset + 12] & 0x10) > 0)
                    {
                        int angleCount = playlistData[streamFileOffset + 34];
                        if (angleCount - 1 > AngleCount)
                        {
                            AngleCount = angleCount - 1;
                        }
                        for (int angle = 0; angle < (angleCount - 1); angle++)
                        {
                            byte[] angleFileNameData = new byte[5];
                            int    angleOffset       =
                                streamFileOffset + 26 + ((angle + 1) * 10);
                            Array.Copy(playlistData, angleOffset,
                                       angleFileNameData, 0, angleFileNameData.Length);

                            //TSStreamFile angleFile = null;
                            //string angleFileName = string.Format(
                            //    "{0}.M2TS",
                            //    ASCIIEncoding.ASCII.GetString(angleFileNameData));
                            //if (streamFiles.ContainsKey(angleFileName))
                            //{
                            //    angleFile = streamFiles[angleFileName];
                            //}
                            //if (angleFile == null)
                            //{
                            //    throw new Exception(string.Format(
                            //        "Playlist {0} referenced missing angle file {1}.",
                            //        FileInfo.Name, angleFileName));
                            //}

                            TSStreamClipFile angleClipFile     = null;
                            string           angleClipFileName = string.Format(
                                "{0}.CLPI",
                                ASCIIEncoding.ASCII.GetString(angleFileNameData));
                            if (streamClipFiles.ContainsKey(angleClipFileName))
                            {
                                angleClipFile = streamClipFiles[angleClipFileName];
                            }
                            if (angleClipFile == null)
                            {
                                continue;
                                //throw new Exception(string.Format(
                                //    "Playlist {0} referenced missing angle file {1}.",
                                //    FileInfo.Name, angleClipFileName));
                            }

                            TSStreamClip angleClip =
                                new TSStreamClip(//angleFile,
                                    angleClipFile);
                            angleClip.AngleIndex      = angle + 1;
                            angleClip.TimeIn          = streamClip.TimeIn;
                            angleClip.TimeOut         = streamClip.TimeOut;
                            angleClip.RelativeTimeIn  = streamClip.RelativeTimeIn;
                            angleClip.RelativeTimeOut = streamClip.RelativeTimeOut;
                            angleClip.Length          = streamClip.Length;
                            StreamClips.Add(angleClip);
#if DEBUG
                            Debug.WriteLine(string.Format(
                                                "\t\t{0}", angleFileName));
#endif
                        }
                    }
                    streamFileOffset += 2 +
                                        ((int)playlistData[streamFileOffset] << 8) +
                                        ((int)playlistData[streamFileOffset + 1]);
                }

                int chaptersIndex =
                    ((int)data[12] << 24) +
                    ((int)data[13] << 16) +
                    ((int)data[14] << 8) +
                    ((int)data[15]);

                int chaptersLength =
                    ((int)data[chaptersIndex] << 24) +
                    ((int)data[chaptersIndex + 1] << 16) +
                    ((int)data[chaptersIndex + 2] << 8) +
                    ((int)data[chaptersIndex + 3]);

                byte[] chapterData =
                    new byte[chaptersLength];
                Array.Copy(data, chaptersIndex + 4,
                           chapterData, 0, chaptersLength);

                int chapterCount =
                    ((int)chapterData[0] << 8) + chapterData[1];
                int chapterOffset = 2;
                for (int chapterIndex = 0;
                     chapterIndex < chapterCount;
                     chapterIndex++)
                {
                    if (chapterData[chapterOffset + 1] == 1)
                    {
                        int streamFileIndex =
                            ((int)chapterData[chapterOffset + 2] << 8) +
                            chapterData[chapterOffset + 3];

                        TSStreamClip streamClip = chapterClips[streamFileIndex];

                        long chapterTime =
                            ((long)chapterData[chapterOffset + 4] << 24) +
                            ((long)chapterData[chapterOffset + 5] << 16) +
                            ((long)chapterData[chapterOffset + 6] << 8) +
                            ((long)chapterData[chapterOffset + 7]);

                        double chapterSeconds  = (double)chapterTime / 45000;
                        double relativeSeconds =
                            chapterSeconds -
                            streamClip.TimeIn +
                            streamClip.RelativeTimeIn;

                        // TODO: Ignore short last chapter?
                        if (TotalLength - relativeSeconds > 1.0)
                        {
                            streamClip.Chapters.Add(chapterSeconds);
                            this.Chapters.Add(relativeSeconds);
                        }
#if DEBUG
                        Debug.WriteLine(string.Format(
                                            "\t{0} {1} {2}",
                                            chapterIndex,
                                            streamClip.Name,
                                            chapter.TotalSeconds));
#endif
                    }
                    chapterOffset += 14;
                }
#if DEBUG
                Debug.WriteLine(string.Format(
                                    "\tLength: {0}", Length.TotalSeconds));
                Debug.WriteLine(string.Format(
                                    "\tAngleLength: {0}", AngleLength.TotalSeconds));
#endif
                //LoadStreamClips();
                IsInitialized = true;
            }
            finally
            {
                if (fileReader != null)
                {
                    fileReader.Close();
                }
                if (fileStream != null)
                {
                    fileStream.Close();
                }
            }
        }
示例#9
0
文件: FormMain.cs 项目: Rupan/BDInfo
        protected bool BDROM_StreamClipFileScanError(TSStreamClipFile streamClipFile, Exception ex)
        {
            DialogResult result = MessageBox.Show(string.Format(
                "An error occurred while scanning the stream clip file {0}.\n\nThe disc may be copy-protected or damaged.\n\nDo you want to continue scanning the stream clip files?", streamClipFile.Name),
                "BDInfo Scan Error", MessageBoxButtons.YesNo);

            if (result == DialogResult.Yes) return true;
            else return false;
        }
示例#10
0
        public void Scan(
            Dictionary <string, TSStreamFile> streamFiles,
            Dictionary <string, TSStreamClipFile> streamClipFiles)
        {
            Stream       fileStream = null;
            BinaryReader fileReader = null;

            try
            {
                Streams.Clear();
                StreamClips.Clear();

                fileStream = File.OpenRead(FileInfo.FullName);
                fileReader = new BinaryReader(fileStream);

                byte[] data       = new byte[fileStream.Length];
                int    dataLength = fileReader.Read(data, 0, data.Length);

                int pos = 0;

                FileType = ReadString(data, 8, ref pos);
                if (FileType != "MPLS0100" && FileType != "MPLS0200")
                {
                    throw new Exception(string.Format(
                                            "Playlist {0} has an unknown file type {1}.",
                                            FileInfo.Name, FileType));
                }

                int playlistOffset   = ReadInt32(data, ref pos);
                int chaptersOffset   = ReadInt32(data, ref pos);
                int extensionsOffset = ReadInt32(data, ref pos);

                pos = playlistOffset;

                int playlistLength   = ReadInt32(data, ref pos);
                int playlistReserved = ReadInt16(data, ref pos);
                int itemCount        = ReadInt16(data, ref pos);
                int subitemCount     = ReadInt16(data, ref pos);

                var chapterClips = new List <TSStreamClip>();
                for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
                {
                    int    itemStart  = pos;
                    int    itemLength = ReadInt16(data, ref pos);
                    string itemName   = ReadString(data, 5, ref pos);
                    string itemType   = ReadString(data, 4, ref pos);

                    TSStreamFile streamFile     = null;
                    string       streamFileName = string.Format(
                        "{0}.M2TS", itemName);
                    if (streamFiles.ContainsKey(streamFileName))
                    {
                        streamFile = streamFiles[streamFileName];
                    }
                    if (streamFile == null)
                    {
                        // Error condition
                    }

                    TSStreamClipFile streamClipFile     = null;
                    string           streamClipFileName = string.Format(
                        "{0}.CLPI", itemName);
                    if (streamClipFiles.ContainsKey(streamClipFileName))
                    {
                        streamClipFile = streamClipFiles[streamClipFileName];
                    }
                    if (streamClipFile == null)
                    {
                        throw new Exception(string.Format(
                                                "Playlist {0} referenced missing file {1}.",
                                                FileInfo.Name, streamFileName));
                    }

                    pos += 1;
                    int multiangle = (data[pos] >> 4) & 0x01;
                    int condition  = data[pos] & 0x0F;
                    pos += 2;

                    int inTime = ReadInt32(data, ref pos);
                    if (inTime < 0)
                    {
                        inTime &= 0x7FFFFFFF;
                    }
                    double timeIn = (double)inTime / 45000;

                    int outTime = ReadInt32(data, ref pos);
                    if (outTime < 0)
                    {
                        outTime &= 0x7FFFFFFF;
                    }
                    double timeOut = (double)outTime / 45000;

                    var streamClip = new TSStreamClip(
                        streamFile, streamClipFile);

                    streamClip.Name            = streamFileName; //TODO
                    streamClip.TimeIn          = timeIn;
                    streamClip.TimeOut         = timeOut;
                    streamClip.Length          = streamClip.TimeOut - streamClip.TimeIn;
                    streamClip.RelativeTimeIn  = TotalLength;
                    streamClip.RelativeTimeOut = streamClip.RelativeTimeIn + streamClip.Length;
                    StreamClips.Add(streamClip);
                    chapterClips.Add(streamClip);

                    pos += 12;
                    if (multiangle > 0)
                    {
                        int angles = data[pos];
                        pos += 2;
                        for (int angle = 0; angle < angles - 1; angle++)
                        {
                            string angleName = ReadString(data, 5, ref pos);
                            string angleType = ReadString(data, 4, ref pos);
                            pos += 1;

                            TSStreamFile angleFile     = null;
                            string       angleFileName = string.Format(
                                "{0}.M2TS", angleName);
                            if (streamFiles.ContainsKey(angleFileName))
                            {
                                angleFile = streamFiles[angleFileName];
                            }
                            if (angleFile == null)
                            {
                                throw new Exception(string.Format(
                                                        "Playlist {0} referenced missing angle file {1}.",
                                                        FileInfo.Name, angleFileName));
                            }

                            TSStreamClipFile angleClipFile     = null;
                            string           angleClipFileName = string.Format(
                                "{0}.CLPI", angleName);
                            if (streamClipFiles.ContainsKey(angleClipFileName))
                            {
                                angleClipFile = streamClipFiles[angleClipFileName];
                            }
                            if (angleClipFile == null)
                            {
                                throw new Exception(string.Format(
                                                        "Playlist {0} referenced missing angle file {1}.",
                                                        FileInfo.Name, angleClipFileName));
                            }

                            var angleClip =
                                new TSStreamClip(angleFile, angleClipFile);
                            angleClip.AngleIndex      = angle + 1;
                            angleClip.TimeIn          = streamClip.TimeIn;
                            angleClip.TimeOut         = streamClip.TimeOut;
                            angleClip.RelativeTimeIn  = streamClip.RelativeTimeIn;
                            angleClip.RelativeTimeOut = streamClip.RelativeTimeOut;
                            angleClip.Length          = streamClip.Length;
                            StreamClips.Add(angleClip);
                        }
                        if (angles - 1 > AngleCount)
                        {
                            AngleCount = angles - 1;
                        }
                    }

                    int streamInfoLength = ReadInt16(data, ref pos);
                    pos += 2;
                    int streamCountVideo          = data[pos++];
                    int streamCountAudio          = data[pos++];
                    int streamCountPG             = data[pos++];
                    int streamCountIG             = data[pos++];
                    int streamCountSecondaryAudio = data[pos++];
                    int streamCountSecondaryVideo = data[pos++];
                    int streamCountPIP            = data[pos++];
                    pos += 5;

#if DEBUG
                    Debug.WriteLine(string.Format(
                                        "{0} : {1} -> V:{2} A:{3} PG:{4} IG:{5} 2A:{6} 2V:{7} PIP:{8}",
                                        Name, streamFileName, streamCountVideo, streamCountAudio, streamCountPG, streamCountIG,
                                        streamCountSecondaryAudio, streamCountSecondaryVideo, streamCountPIP));
#endif

                    for (int i = 0; i < streamCountVideo; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                    }
                    for (int i = 0; i < streamCountAudio; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                    }
                    for (int i = 0; i < streamCountPG; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                    }
                    for (int i = 0; i < streamCountIG; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                    }
                    for (int i = 0; i < streamCountSecondaryAudio; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                        pos += 2;
                    }
                    for (int i = 0; i < streamCountSecondaryVideo; i++)
                    {
                        var stream = CreatePlaylistStream(data, ref pos);
                        if (stream != null)
                        {
                            PlaylistStreams[stream.PID] = stream;
                        }
                        pos += 6;
                    }

                    /*
                     * TODO
                     *
                     * for (int i = 0; i < streamCountPIP; i++)
                     * {
                     *  TSStream stream = CreatePlaylistStream(data, ref pos);
                     *  if (stream != null) PlaylistStreams[stream.PID] = stream;
                     * }
                     */

                    pos += itemLength - (pos - itemStart) + 2;
                }

                pos = chaptersOffset + 4;

                int chapterCount = ReadInt16(data, ref pos);

                for (int chapterIndex = 0;
                     chapterIndex < chapterCount;
                     chapterIndex++)
                {
                    int chapterType = data[pos + 1];

                    if (chapterType == 1)
                    {
                        int streamFileIndex =
                            ((int)data[pos + 2] << 8) + data[pos + 3];

                        long chapterTime =
                            ((long)data[pos + 4] << 24) +
                            ((long)data[pos + 5] << 16) +
                            ((long)data[pos + 6] << 8) +
                            ((long)data[pos + 7]);

                        var streamClip = chapterClips[streamFileIndex];

                        double chapterSeconds = (double)chapterTime / 45000;

                        double relativeSeconds =
                            chapterSeconds -
                            streamClip.TimeIn +
                            streamClip.RelativeTimeIn;

                        // TODO: Ignore short last chapter?
                        if (TotalLength - relativeSeconds > 1.0)
                        {
                            streamClip.Chapters.Add(chapterSeconds);
                            this.Chapters.Add(relativeSeconds);
                        }
                    }
                    else
                    {
                        // TODO: Handle other chapter types?
                    }
                    pos += 14;
                }
            }
            finally
            {
                if (fileReader != null)
                {
                    fileReader.Dispose();
                }
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }
        }
示例#11
0
 public TSStreamClip(TSStreamClipFile streamClipFile)
 {
     Name           = streamClipFile.Name;
     StreamClipFile = streamClipFile;
 }
示例#12
0
        // not used anymore, but still there ;)
        private void SetRefreshRateBDold()
        {
            if (!_changeRefreshRate)
            {
            return;
            }

            Log.Info("Blu-Ray Player Launcher: SetRefreshRate for BDs");

            if (_driveLetter == null)
            {
            Log.Error("Blu-Ray Player Launcher: SetRefreshRate - drive letter not assigned!");
            return;
            }

            FileInfo[] files = null;
            double fps = -1;
            try
            {
            DirectoryInfo dir = new DirectoryInfo(_driveLetter + "\\BDMV\\PLAYLIST");
            PlaylistFiles.Clear();
            StreamFiles.Clear();
            StreamClipFiles.Clear();

            files = dir.GetFiles("*.MPLS");
            foreach (FileInfo file in files)
            {
                TSPlaylistFile playlistFile = new TSPlaylistFile(file);
                PlaylistFiles.Add(file.Name.ToUpper(), playlistFile);
                //Log.Info("Blu-Ray Player Launcher: MPLS - {0} {1}", file.Name, playlistFile.TotalSize);
            }

            dir = new DirectoryInfo(_driveLetter + "\\BDMV\\STREAM");
            files = dir.GetFiles("*.M2TS");
            foreach (FileInfo file in files)
            {
                TSStreamFile streamFile = new TSStreamFile(file);
                StreamFiles.Add(file.Name.ToUpper(), streamFile);
            }

            dir = new DirectoryInfo(_driveLetter + "\\BDMV\\CLIPINF");
            files = dir.GetFiles("*.CLPI");
            foreach (FileInfo file in files)
            {
                TSStreamClipFile streamClipFile = new TSStreamClipFile(file);
                StreamClipFiles.Add(file.Name.ToUpper(), streamClipFile);
            }

            foreach (TSStreamClipFile streamClipFile in StreamClipFiles.Values)
            {
                streamClipFile.Scan();
            }
            foreach (TSStreamFile streamFile in StreamFiles.Values)
            {
                streamFile.Scan(null, false);
            }

            double maxLenght = 0;

            foreach (TSPlaylistFile playlistFile in PlaylistFiles.Values)
            {
                playlistFile.Scan(StreamFiles, StreamClipFiles);
                Log.Info("Blu-Ray Player Launcher: total size - {0} - {1}", playlistFile.TotalLength, playlistFile.VideoStreams[0].FrameRate.ToString());

                if (maxLenght < playlistFile.TotalLength)
                {
                    // find the largest movie clip, might not work with seamless branching movies...
                    maxLenght = playlistFile.TotalLength;

                    switch (playlistFile.VideoStreams[0].FrameRate)
                    {
                        case TSFrameRate.FRAMERATE_23_976:
                            fps = 23.976;
                            break;
                        case TSFrameRate.FRAMERATE_24:
                            fps = 24;
                            break;
                        case TSFrameRate.FRAMERATE_25:
                            fps = 25;
                            break;
                        case TSFrameRate.FRAMERATE_29_97:
                            fps = 29.97;
                            break;
                        case TSFrameRate.FRAMERATE_50:
                            fps = 50;
                            break;
                        case TSFrameRate.FRAMERATE_59_94:
                            fps = 59.94;
                            break;
                    }
                }
                playlistFile.ClearBitrates();
            }
            }
            catch (Exception e)
            {
            Log.Error("Blu-Ray Player Launcher: SetRefreshRate - failed to get refresh rate from disk!");
            Log.Error("Blu-Ray Player Launcher: SetRefreshRate - exception {0}", e);
            return;
            }

            try
            {
            Log.Info("Blu-Ray Player Launcher: calling SetRefreshRateBasedOnFPS() - {0}Hz", fps);
            RefreshRateChanger.SetRefreshRateBasedOnFPS(fps, "", RefreshRateChanger.MediaType.Video);
            _refreshRateChangeSuccessful = true;
            }
            catch (Exception e)
            {
            Log.Error("Blu-Ray Player Launcher:SetRefreshRate - exception {0}", e);
            }
        }
示例#13
0
 protected bool BDROM_StreamClipFileScanError(TSStreamClipFile streamClipFile, Exception ex)
 {
     logger.Debug("Stream Clip File Scan Error");
       scanfailed = true;
       return false;
 }
示例#14
0
        protected bool BDROM_StreamClipFileScanError(TSStreamClipFile streamClipFile, Exception ex)
        {
            System.Console.WriteLine(string.Format(
                "An error occurred while scanning the stream clip file {0}.\n\nThe disc may be copy-protected or damaged.\n\nDo you want to continue scanning the stream clip files?", streamClipFile.Name));

            return GetYorNdefaultY();
        }