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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user