Browse Source

newVideo: slightly more descriptive error when given an invalid file

Alex Szpakowski 3 years ago
parent
commit
b87034404e

+ 8 - 4
src/modules/video/theora/OggDemuxer.cpp

@@ -43,7 +43,7 @@ OggDemuxer::~OggDemuxer()
 	ogg_sync_clear(&sync);
 	ogg_sync_clear(&sync);
 }
 }
 
 
-void OggDemuxer::readPage(bool throweof)
+bool OggDemuxer::readPage(bool erroreof)
 {
 {
 	char *syncBuffer = nullptr;
 	char *syncBuffer = nullptr;
 	while (ogg_sync_pageout(&sync, &page) != 1)
 	while (ogg_sync_pageout(&sync, &page) != 1)
@@ -53,11 +53,13 @@ void OggDemuxer::readPage(bool throweof)
 
 
 		syncBuffer = ogg_sync_buffer(&sync, 8192);
 		syncBuffer = ogg_sync_buffer(&sync, 8192);
 		size_t read = file->read(syncBuffer, 8192);
 		size_t read = file->read(syncBuffer, 8192);
-		if (read == 0 && throweof)
-			throw love::Exception("Invalid stream");
+		if (read == 0 && erroreof)
+			return false;
 
 
 		ogg_sync_wrote(&sync, read);
 		ogg_sync_wrote(&sync, read);
 	}
 	}
+
+	return true;
 }
 }
 
 
 bool OggDemuxer::readPacket(ogg_packet &packet, bool mustSucceed)
 bool OggDemuxer::readPacket(ogg_packet &packet, bool mustSucceed)
@@ -129,8 +131,10 @@ OggDemuxer::StreamType OggDemuxer::findStream()
 
 
 	while (true)
 	while (true)
 	{
 	{
+		if (!readPage(true))
+			return TYPE_UNKNOWN;
+
 		// If this page isn't at the start of a stream, we've seen all streams
 		// If this page isn't at the start of a stream, we've seen all streams
-		readPage(true);
 		if (!ogg_page_bos(&page))
 		if (!ogg_page_bos(&page))
 			break;
 			break;
 
 

+ 1 - 1
src/modules/video/theora/OggDemuxer.h

@@ -67,7 +67,7 @@ private:
 	int videoSerial;
 	int videoSerial;
 	bool eos;
 	bool eos;
 
 
-	void readPage(bool throweof = false);
+	bool readPage(bool erroreof = false);
 	StreamType determineType();
 	StreamType determineType();
 }; // OggDemuxer
 }; // OggDemuxer