Merge "Some more fixes regarding HTTP live in NuPlayer."
This commit is contained in:
committed by
Android (Google) Code Review
commit
b7df8ec4db
@@ -79,7 +79,7 @@ bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
|
||||
sp<LiveDataSource> source =
|
||||
static_cast<LiveDataSource *>(mLiveSession->getDataSource().get());
|
||||
|
||||
for (int32_t i = 0; i < 10; ++i) {
|
||||
for (int32_t i = 0; i < 50; ++i) {
|
||||
char buffer[188];
|
||||
ssize_t n = source->readAtNonBlocking(mOffset, buffer, sizeof(buffer));
|
||||
|
||||
|
||||
@@ -394,7 +394,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
|
||||
int64_t seekTimeUs;
|
||||
CHECK(msg->findInt64("seekTimeUs", &seekTimeUs));
|
||||
|
||||
LOGI("kWhatSeek seekTimeUs=%lld us (%.2f secs)",
|
||||
LOGV("kWhatSeek seekTimeUs=%lld us (%.2f secs)",
|
||||
seekTimeUs, seekTimeUs / 1E6);
|
||||
|
||||
mSource->seekTo(seekTimeUs);
|
||||
@@ -428,17 +428,11 @@ void NuPlayer::finishFlushIfPossible() {
|
||||
|
||||
mRenderer->signalTimeDiscontinuity();
|
||||
|
||||
bool scanSourcesAgain = false;
|
||||
|
||||
if (mFlushingAudio == SHUT_DOWN) {
|
||||
scanSourcesAgain = true;
|
||||
} else if (mAudioDecoder != NULL) {
|
||||
if (mAudioDecoder != NULL) {
|
||||
mAudioDecoder->signalResume();
|
||||
}
|
||||
|
||||
if (mFlushingVideo == SHUT_DOWN) {
|
||||
scanSourcesAgain = true;
|
||||
} else if (mVideoDecoder != NULL) {
|
||||
if (mVideoDecoder != NULL) {
|
||||
mVideoDecoder->signalResume();
|
||||
}
|
||||
|
||||
@@ -453,7 +447,7 @@ void NuPlayer::finishFlushIfPossible() {
|
||||
} else if (mResetPostponed) {
|
||||
(new AMessage(kWhatReset, id()))->post();
|
||||
mResetPostponed = false;
|
||||
} else if (scanSourcesAgain) {
|
||||
} else if (mAudioDecoder == NULL || mVideoDecoder == NULL) {
|
||||
postScanSources();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,6 +385,7 @@ void LiveSession::onDownloadNext() {
|
||||
}
|
||||
|
||||
bool explicitDiscontinuity = false;
|
||||
bool bandwidthChanged = false;
|
||||
|
||||
if (mSeekTimeUs >= 0) {
|
||||
int32_t targetDuration;
|
||||
@@ -404,7 +405,14 @@ void LiveSession::onDownloadNext() {
|
||||
|
||||
mDataSource->reset();
|
||||
|
||||
// reseting the data source will have had the
|
||||
// side effect of discarding any previously queued
|
||||
// bandwidth change discontinuity.
|
||||
// Therefore we'll need to treat these explicit
|
||||
// discontinuities as involving a bandwidth change
|
||||
// even if they aren't directly.
|
||||
explicitDiscontinuity = true;
|
||||
bandwidthChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -484,9 +492,15 @@ void LiveSession::onDownloadNext() {
|
||||
return;
|
||||
}
|
||||
|
||||
bool bandwidthChanged =
|
||||
mPrevBandwidthIndex >= 0
|
||||
&& (size_t)mPrevBandwidthIndex != bandwidthIndex;
|
||||
if ((size_t)mPrevBandwidthIndex != bandwidthIndex) {
|
||||
bandwidthChanged = true;
|
||||
}
|
||||
|
||||
if (mPrevBandwidthIndex < 0) {
|
||||
// Don't signal a bandwidth change at the very beginning of
|
||||
// playback.
|
||||
bandwidthChanged = false;
|
||||
}
|
||||
|
||||
if (explicitDiscontinuity || bandwidthChanged) {
|
||||
// Signal discontinuity.
|
||||
|
||||
@@ -351,7 +351,6 @@ void ATSParser::Stream::signalDiscontinuity(DiscontinuityType type) {
|
||||
mQueue.clear(!isASeek);
|
||||
|
||||
if (mSource != NULL) {
|
||||
mSource->clear();
|
||||
mSource->queueDiscontinuity(type);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -142,16 +142,23 @@ void AnotherPacketSource::queueDiscontinuity(
|
||||
|
||||
Mutex::Autolock autoLock(mLock);
|
||||
|
||||
#if 0
|
||||
if (type == ATSParser::DISCONTINUITY_SEEK
|
||||
|| type == ATSParser::DISCONTINUITY_FORMATCHANGE) {
|
||||
// XXX Fix this: This will also clear any pending discontinuities,
|
||||
// If there's a pending DISCONTINUITY_FORMATCHANGE and the new
|
||||
// discontinuity is "just" a DISCONTINUITY_SEEK, this will effectively
|
||||
// downgrade the type of discontinuity received by the client.
|
||||
|
||||
mBuffers.clear();
|
||||
mEOSResult = OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
mBuffers.push_back(buffer);
|
||||
mCondition.signal();
|
||||
}
|
||||
|
||||
void AnotherPacketSource::clear() {
|
||||
Mutex::Autolock autoLock(mLock);
|
||||
mBuffers.clear();
|
||||
mEOSResult = OK;
|
||||
}
|
||||
|
||||
void AnotherPacketSource::signalEOS(status_t result) {
|
||||
CHECK(result != OK);
|
||||
|
||||
|
||||
@@ -49,8 +49,6 @@ struct AnotherPacketSource : public MediaSource {
|
||||
void queueDiscontinuity(ATSParser::DiscontinuityType type);
|
||||
void signalEOS(status_t result);
|
||||
|
||||
void clear();
|
||||
|
||||
status_t dequeueAccessUnit(sp<ABuffer> *buffer);
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user