示例#1
0
 private bool IsSpDvdSupFile(string subFileName)
 {
     byte[] buffer = new byte[SpHeader.SpHeaderLength];
     var fs = new FileStream(subFileName, FileMode.Open, FileAccess.Read, FileShare.Read) { Position = 0 };
     int bytesRead = fs.Read(buffer, 0, buffer.Length);
     if (bytesRead == buffer.Length)
     {
         var header = new SpHeader(buffer);
         if (header.Identifier == "SP" && header.NextBlockPosition > 4)
         {
             buffer = new byte[header.NextBlockPosition];
             bytesRead = fs.Read(buffer, 0, buffer.Length);
             if (bytesRead == buffer.Length)
             {
                 buffer = new byte[SpHeader.SpHeaderLength];
                 bytesRead = fs.Read(buffer, 0, buffer.Length);
                 if (bytesRead == buffer.Length)
                 {
                     header = new SpHeader(buffer);
                     fs.Close();
                     return header.Identifier == "SP";
                 }
             }
         }
     }
     fs.Close();
     return false;
 }
示例#2
0
        private void ImportAndOcrSpDvdSup(string fileName, bool showInTaskbar)
        {
            var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read) { Position = 0 };

            byte[] buffer = new byte[SpHeader.SpHeaderLength];
            int bytesRead = fs.Read(buffer, 0, buffer.Length);
            var header = new SpHeader(buffer);
            var spList = new List<SpHeader>();

            while (header.Identifier == "SP" && bytesRead > 0 && header.NextBlockPosition > 4)
            {
                buffer = new byte[header.NextBlockPosition];
                bytesRead = fs.Read(buffer, 0, buffer.Length);
                if (bytesRead == buffer.Length)
                {
                    header.AddPicture(buffer);
                    spList.Add(header);
                }

                buffer = new byte[SpHeader.SpHeaderLength];
                bytesRead = fs.Read(buffer, 0, buffer.Length);
                header = new SpHeader(buffer);
            }
            fs.Close();

            var vobSubOcr = new VobSubOcr();
            if (showInTaskbar)
            {
                vobSubOcr.Icon = (Icon)this.Icon.Clone();
                vobSubOcr.ShowInTaskbar = true;
                vobSubOcr.ShowIcon = true;
            }
            _formPositionsAndSizes.SetPositionAndSize(vobSubOcr);
            vobSubOcr.Initialize(fileName, null, Configuration.Settings.VobSubOcr, spList);
            if (vobSubOcr.ShowDialog(this) == DialogResult.OK)
            {
                MakeHistoryForUndo(_language.BeforeImportingVobSubFile);
                FileNew();
                _subtitle.Paragraphs.Clear();
                SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat);
                _subtitle.WasLoadedWithFrameNumbers = false;
                _subtitle.CalculateFrameNumbersFromTimeCodes(CurrentFrameRate);
                foreach (Paragraph p in vobSubOcr.SubtitleFromOcr.Paragraphs)
                {
                    _subtitle.Paragraphs.Add(p);
                }

                ShowSource();
                SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
                _subtitleListViewIndex = -1;
                SubtitleListview1.FirstVisibleIndex = -1;
                SubtitleListview1.SelectIndexAndEnsureVisible(0);

                _fileName = Path.ChangeExtension(vobSubOcr.FileName, ".srt");
                SetTitle();
                _converted = true;

                Configuration.Settings.Save();
            }
            _formPositionsAndSizes.SavePositionAndSize(vobSubOcr);
        }
示例#3
0
        public static bool IsSpDvdSup(string fileName)
        {
            using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                var buffer = new byte[SpHeader.SpHeaderLength];
                if (fs.Read(buffer, 0, buffer.Length) != buffer.Length)
                {
                    return false;
                }

                var header = new SpHeader(buffer);
                if (header.Identifier != "SP" || header.NextBlockPosition < 5)
                {
                    return false;
                }

                buffer = new byte[header.NextBlockPosition];
                if (fs.Read(buffer, 0, buffer.Length) != buffer.Length)
                {
                    return false;
                }

                buffer = new byte[SpHeader.SpHeaderLength];
                if (fs.Read(buffer, 0, buffer.Length) != buffer.Length)
                {
                    return false;
                }

                header = new SpHeader(buffer);
                return header.Identifier == "SP";
            }
        }