[matroska] r894 - trunk/DvdMenuXtractor

[email protected]
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  
 {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.