fix the lockup at end of ogg bug - return an error in GetPacket when GetNextPage or GetPageAt fails

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6270 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shatty
2004-01-25 07:00:45 +00:00
parent 9b57d8a926
commit 4644ba227a
3 changed files with 12 additions and 6 deletions
@@ -284,7 +284,7 @@ OggReader::GetFileFormatInfo(media_file_format *mff)
status_t
OggReader::AllocateCookie(int32 streamNumber, void **cookie)
{
TRACE("OggReader::AllocateCookie\n");
TRACE("OggReader::AllocateCookie %ld\n", streamNumber);
if (streamNumber < 0 || streamNumber > (signed)fCookies.size()) {
TRACE("OggReader::AllocateCookie: invalid streamNumber: bail\n");
return B_ERROR;
@@ -321,7 +321,7 @@ OggReader::Seek(void *cookie,
uint32 seekTo,
int64 *frame, bigtime_t *time)
{
TRACE("OggReader::Seek\n");
TRACE("OggReader::Seek to %lld : %lld\n",*frame,*time);
OggStream * stream = static_cast<OggStream*>(cookie);
return stream->Seek(seekTo,frame,time);
}
+9 -3
View File
@@ -83,7 +83,7 @@ OggStream::GetSerial() const
status_t
OggStream::AddPage(off_t position, ogg_page * page)
{
TRACE("OggStream::AddPage\n");
TRACE("OggStream::AddPage %llu\n",position);
if (position >= 0) {
fPagePositions.push_back(position);
}
@@ -210,7 +210,10 @@ OggStream::GetPacket(ogg_packet * packet)
uint old_page = fCurrentPage;
uint old_packet = fCurrentPacket;
while (ogg_stream_packetpeek(&fStreamState, NULL) != 1) {
fReaderInterface->GetNextPage();
status_t result = fReaderInterface->GetNextPage();
if (result != B_OK) {
return result;
}
fCurrentPage++;
}
if (ogg_stream_packetout(&fStreamState, packet) != 1) {
@@ -228,7 +231,10 @@ OggStream::GetPacket(ogg_packet * packet)
uint pageno = fOggFrameInfos[fCurrentFrame].GetPage();
while (ogg_stream_packetpeek(&fSeekStreamState, NULL) != 1) {
off_t position = fPagePositions[pageno++];
fReaderInterface->GetPageAt(position, &fSeekStreamState);
status_t result = fReaderInterface->GetPageAt(position, &fSeekStreamState);
if (result != B_OK) {
return result;
}
}
if (ogg_stream_packetout(&fSeekStreamState, packet) != 1) {
return B_ERROR;
@@ -67,7 +67,7 @@ OggTobiasStream::IsValidHeader(const ogg_packet & packet)
OggTobiasStream::OggTobiasStream(long serialno)
: OggStream(serialno)
{
TRACE("OggTobiasStream::OggTobiasStream\n");
}
OggTobiasStream::~OggTobiasStream()