From 4644ba227a6e9a318a63a6fb4db15fd893197698 Mon Sep 17 00:00:00 2001 From: shatty Date: Sun, 25 Jan 2004 07:00:45 +0000 Subject: [PATCH] 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 --- src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp | 4 ++-- src/add-ons/media/plugins/ogg/OggStream.cpp | 12 +++++++++--- src/add-ons/media/plugins/ogg/OggTobiasStream.cpp | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp b/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp index a5732defbb..9042b069c9 100644 --- a/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp +++ b/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp @@ -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(cookie); return stream->Seek(seekTo,frame,time); } diff --git a/src/add-ons/media/plugins/ogg/OggStream.cpp b/src/add-ons/media/plugins/ogg/OggStream.cpp index ada707195e..a5780575c1 100644 --- a/src/add-ons/media/plugins/ogg/OggStream.cpp +++ b/src/add-ons/media/plugins/ogg/OggStream.cpp @@ -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; diff --git a/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp b/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp index b882234f15..8a9a7c039d 100644 --- a/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp +++ b/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp @@ -67,7 +67,7 @@ OggTobiasStream::IsValidHeader(const ogg_packet & packet) OggTobiasStream::OggTobiasStream(long serialno) : OggStream(serialno) { - + TRACE("OggTobiasStream::OggTobiasStream\n"); } OggTobiasStream::~OggTobiasStream()