From a6eabaff960a2a2a4a5ee6bce7cafdd0abf765fc Mon Sep 17 00:00:00 2001 From: shatty Date: Sun, 28 Dec 2003 01:15:58 +0000 Subject: [PATCH] remove tight loop in GetPage, and return B_LAST_BUFFER_ERROR properly from GetNextChunk instead git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5776 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp b/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp index f713890d86..2b8bcbd00c 100644 --- a/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp +++ b/src/add-ons/media/plugins/ogg/OggReaderPlugin.cpp @@ -48,9 +48,13 @@ oggReader::GetPage(ogg_page * page, int read_size, bool short_page) while (result == 0) { char * buffer = ogg_sync_buffer(&fSync,read_size); ssize_t bytes = Source()->Read(buffer,read_size); + if (bytes == 0) { + TRACE("oggReader::GetPage: Read: no data\n"); + return B_LAST_BUFFER_ERROR; + } if (bytes < 0) { TRACE("oggReader::GetPage: Read: error\n"); - return B_ERROR; + return bytes; } if (ogg_sync_wrote(&fSync,bytes) != 0) { TRACE("oggReader::GetPage: ogg_sync_wrote failed?: error\n"); @@ -251,8 +255,9 @@ oggReader::GetNextChunk(void *cookie, while (ogg_stream_packetpeek(stream,NULL) != 1) { ogg_page page; do { - if (GetPage(&page) != B_OK) { - return B_ERROR; + status_t status = GetPage(&page); + if (status != B_OK) { + return status; } } while (ogg_page_serialno(&page) != stream->serialno); }