Partial fix for 4181654 hang in seeking after seeking to the end

Also prevents player from becoming unresponsive as described in 3510047.

Change-Id: I3350990c46641e48c34e9a64598157c8af77dcc5
This commit is contained in:
Jeffrey Tinker
2011-03-29 08:32:29 -07:00
parent 18617b93c6
commit f9eea89828

View File

@@ -195,6 +195,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
int64_t keyTime;
bool syncFrame;
int retryLimit = 0;
// Pull full access units. Since we aren't sure how big they might be,
// start with initial buffer size, then allocate a larger buffer if we
@@ -233,9 +234,16 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
}
if (bytesRead == 0) {
// Didn't get anything, sleep a bit so we don't hog the CPU then try again
usleep(10000);
continue;
if (retryLimit++ >= 500) {
// If no data received within the retry limit, return ERROR_IO
// This prevents the player from becoming unresponsive
mediaBuf->release();
return ERROR_IO;
} else {
// Didn't get anything, sleep a bit so we don't hog the CPU then try again
usleep(10000);
continue;
}
}
#define PCR_HZ 90000