[matroska] r894 - trunk/DvdMenuXtractor
[email protected] Tue, 19 Oct 2004 12:45:06 +0400 (MSD)
Newsgroups
gmane.comp.multimedia.matroska.cvs
Message-ID
<[email protected] >
Author: robux4
Date: 2004-10-19 12:45:05 +0400 (Tue, 19 Oct 2004)
New Revision: 894
Modified:
trunk/DvdMenuXtractor/VobParser.cpp
trunk/DvdMenuXtractor/VobParser.h
Log:
use an IO class for VOB files to prepare libdvdcss use
Modified: trunk/DvdMenuXtractor/VobParser.cpp
===================================================================
--- trunk/DvdMenuXtractor/VobParser.cpp 2004-10-18 20:16:56 UTC (rev 893)
+++ trunk/DvdMenuXtractor/VobParser.cpp 2004-10-19 08:45:05 UTC (rev 894)
@@ -75,6 +75,58 @@
// ----------------------------------------------------------------------------
+VobFile::VobFile(const char *filename)
+:m_file(NULL)
+{
+ m_file = fopen(filename,"rb");
+
+ if (m_file == NULL)
+ throw VobParserFileNotFoundException(filename);
+}
+
+VobFile::~VobFile()
+{
+ if (m_file)
+ fclose(m_file);
+}
+
+size_t VobFile::Read(void *buffer, size_t blocks)
+{
+ assert(m_file != NULL);
+ return fread(buffer, PACKET_SIZE, blocks, m_file);
+}
+
+int VobFile::Seek(long position, int origin)
+{
+ assert(m_file != NULL);
+ return fseek(m_file, position, origin);
+}
+
+long VobFile::Tell()
+{
+ assert(m_file != NULL);
+ return ftell(m_file);
+}
+
+boolean VobFile::Eof()
+{
+ assert(m_file != NULL);
+ return feof(m_file);
+}
+
+unsigned long VobFile::Size()
+{
+ unsigned long _result;
+
+ Seek(0,SEEK_END);
+ _result = Tell();
+ Seek(0,SEEK_SET);
+
+ return _result;
+}
+
+// ----------------------------------------------------------------------------
+
WX_DEFINE_LIST(FileHandleList);
VobParser::VobParser(const char* dirname, int16_t title)
@@ -82,7 +134,7 @@
,m_demuxer(NULL)
,m_vobfile(NULL)
{
- FILE *_file;
+ VobFile *_file;
wxString FileName;
uint64_t fileSize = 0;
@@ -92,13 +144,11 @@
if (title == 0)
{
FileName = wxString::Format("%sVIDEO_TS.VOB",dirname);
- _file = fopen(FileName.c_str(),"rb");
+ _file = new VobFile(FileName.c_str());
if (_file != NULL)
{
m_files.Append(_file);
- fseek(_file,0,SEEK_END);
- fileSize += ftell(_file);
- fseek(_file,0,SEEK_SET);
+ fileSize += _file->Size();
}
}
else
@@ -106,13 +156,11 @@
int i=0;
do {
FileName = wxString::Format("%sVTS_%02d_%d.VOB",dirname,title,i++);
- _file = fopen(FileName.c_str(),"rb");
+ _file = new VobFile(FileName.c_str());
if (_file != NULL)
{
m_files.Append(_file);
- fseek(_file,0,SEEK_END);
- fileSize += ftell(_file);
- fseek(_file,0,SEEK_SET);
+ fileSize += _file->Size();
}
} while (_file != NULL);
}
@@ -136,7 +184,7 @@
VobParser::~VobParser()
{
for (unsigned int i=0; i<m_files.GetCount(); i++)
- fclose(m_files.Item(i)->GetData());
+ delete m_files.Item(i)->GetData();
}
// ----------------------------------------------------------------------------
@@ -259,11 +307,11 @@
{
m_index = 0;
- if (m_vobfile && feof(m_vobfile->GetData()))
+ if (m_vobfile && m_vobfile->GetData()->Eof())
m_vobfile = m_vobfile->GetNext();
if (!m_vobfile)
return false;
- return (fread(m_buff, PACKET_SIZE, 1, m_vobfile->GetData()) == 1);
+ return (m_vobfile->GetData()->Read(m_buff, 1) == 1);
}
// ----------------------------------------------------------------------------
@@ -699,7 +747,7 @@
m_index = 0;
m_pktindex = 0;
for (unsigned int i=0; i<m_files.GetCount(); i++)
- fseek(m_files.Item(i)->GetData(),0,SEEK_SET);
+ m_files.Item(i)->GetData()->Seek(0,SEEK_SET);
if (m_demuxer)
delete m_demuxer;
m_demuxer = NULL;
Modified: trunk/DvdMenuXtractor/VobParser.h
===================================================================
--- trunk/DvdMenuXtractor/VobParser.h 2004-10-18 20:16:56 UTC (rev 893)
+++ trunk/DvdMenuXtractor/VobParser.h 2004-10-19 08:45:05 UTC (rev 894)
@@ -518,11 +518,27 @@
cell_info_node* m_cid;
};
+class VobFile
+{
+ public:
+ VobFile(const char *filename);
+ ~VobFile();
+
+ virtual size_t Read(void *buffer, size_t blocks);
+ virtual int Seek(long position, int origin);
+ virtual long Tell();
+ unsigned long Size();
+ boolean Eof();
+
+ protected:
+ FILE *m_file;
+};
+
// ============================================================================
// Main class
// ============================================================================
-WX_DECLARE_LIST(FILE, FileHandleList);
+WX_DECLARE_LIST(VobFile, FileHandleList);
class VobParser
{