Break OggDemuxer::readPage loop on EOF.

This commit is contained in:
Miku AuahDark
2021-09-21 22:52:50 +08:00
parent a066e18aa6
commit de368ade4a
2 changed files with 15 additions and 6 deletions
+14 -5
View File
@@ -43,7 +43,7 @@ OggDemuxer::~OggDemuxer()
ogg_sync_clear(&sync);
}
void OggDemuxer::readPage()
void OggDemuxer::readPage(bool throweof)
{
char *syncBuffer = nullptr;
while (ogg_sync_pageout(&sync, &page) != 1)
@@ -53,6 +53,9 @@ void OggDemuxer::readPage()
syncBuffer = ogg_sync_buffer(&sync, 8192);
size_t read = file->read(syncBuffer, 8192);
if (read == 0 && throweof)
throw love::Exception("Invalid stream");
ogg_sync_wrote(&sync, read);
}
}
@@ -118,22 +121,23 @@ OggDemuxer::StreamType OggDemuxer::findStream()
if (streamInited)
{
eos = false;
streamInited = false;
file->seek(0);
ogg_stream_clear(&stream);
ogg_sync_reset(&sync);
}
streamInited = true;
while (true)
{
// If this page isn't at the start of a stream, we've seen all streams
readPage();
readPage(true);
if (!ogg_page_bos(&page))
break;
videoSerial = ogg_page_serialno(&page);
ogg_stream_init(&stream, videoSerial);
ogg_stream_pagein(&stream, &page);
streamInited = true;
StreamType type = determineType();
switch(type)
@@ -145,10 +149,15 @@ OggDemuxer::StreamType OggDemuxer::findStream()
}
ogg_stream_clear(&stream);
streamInited = false;
}
if (streamInited)
{
streamInited = false;
ogg_stream_clear(&stream);
}
streamInited = false;
ogg_stream_clear(&stream);
ogg_sync_reset(&sync);
return TYPE_UNKNOWN;
+1 -1
View File
@@ -67,7 +67,7 @@ private:
int videoSerial;
bool eos;
void readPage();
void readPage(bool throweof = false);
StreamType determineType();
}; // OggDemuxer