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:
@@ -195,6 +195,7 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options)
|
|||||||
int64_t keyTime;
|
int64_t keyTime;
|
||||||
|
|
||||||
bool syncFrame;
|
bool syncFrame;
|
||||||
|
int retryLimit = 0;
|
||||||
|
|
||||||
// Pull full access units. Since we aren't sure how big they might be,
|
// 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
|
// 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) {
|
if (bytesRead == 0) {
|
||||||
// Didn't get anything, sleep a bit so we don't hog the CPU then try again
|
if (retryLimit++ >= 500) {
|
||||||
usleep(10000);
|
// If no data received within the retry limit, return ERROR_IO
|
||||||
continue;
|
// 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
|
#define PCR_HZ 90000
|
||||||
|
|||||||
Reference in New Issue
Block a user