Confirmed users
770
edits
| Line 154: | Line 154: | ||
</source> | </source> | ||
==MediaStreamGraphImpl::ExtractPendingInput== | |||
<source lang="cpp"> | |||
void | |||
MediaStreamGraphImpl::ExtractPendingInput(SourceMediaStream* aStream, | |||
GraphTime aDesiredUpToTime, | |||
bool* aEnsureNextIteration) | |||
{ | |||
bool finished; | |||
{ | |||
MutexAutoLock lock(aStream->mMutex); | |||
if (aStream->mPullEnabled && !aStream->mFinished && | |||
!aStream->mListeners.IsEmpty()) { | |||
// Compute how much stream time we'll need assuming we don't block | |||
// the stream at all between mBlockingDecisionsMadeUntilTime and | |||
// aDesiredUpToTime. | |||
StreamTime t = | |||
GraphTimeToStreamTime(aStream, mStateComputedTime) + | |||
(aDesiredUpToTime - mStateComputedTime); | |||
STREAM_LOG(PR_LOG_DEBUG+1, ("Calling NotifyPull aStream=%p t=%f current end=%f", aStream, | |||
MediaTimeToSeconds(t), | |||
MediaTimeToSeconds(aStream->mBuffer.GetEnd()))); | |||
if (t > aStream->mBuffer.GetEnd()) { | |||
*aEnsureNextIteration = true; | |||
for (uint32_t j = 0; j < aStream->mListeners.Length(); ++j) { | |||
MediaStreamListener* l = aStream->mListeners[j]; | |||
{ | |||
MutexAutoUnlock unlock(aStream->mMutex); | |||
l->NotifyPull(this, t); | |||
} | |||
} | |||
} | |||
} | |||
finished = aStream->mUpdateFinished; | |||
for (int32_t i = aStream->mUpdateTracks.Length() - 1; i >= 0; --i) { | |||
SourceMediaStream::TrackData* data = &aStream->mUpdateTracks[i]; | |||
aStream->ApplyTrackDisabling(data->mID, data->mData); | |||
for (uint32_t j = 0; j < aStream->mListeners.Length(); ++j) { | |||
MediaStreamListener* l = aStream->mListeners[j]; | |||
TrackTicks offset = (data->mCommands & SourceMediaStream::TRACK_CREATE) | |||
? data->mStart : aStream->mBuffer.FindTrack(data->mID)->GetSegment()->GetDuration(); | |||
l->NotifyQueuedTrackChanges(this, data->mID, data->mOutputRate, | |||
offset, data->mCommands, *data->mData); | |||
} | |||
if (data->mCommands & SourceMediaStream::TRACK_CREATE) { | |||
... | |||
} else if (data->mData->GetDuration() > 0) { | |||
MediaSegment* dest = aStream->mBuffer.FindTrack(data->mID)->GetSegment(); | |||
dest->AppendFrom(data->mData); | |||
} | |||
if (data->mCommands & SourceMediaStream::TRACK_END) { | |||
aStream->mBuffer.FindTrack(data->mID)->SetEnded(); | |||
aStream->mUpdateTracks.RemoveElementAt(i); | |||
} | |||
} | |||
if (!aStream->mFinished) { | |||
aStream->mBuffer.AdvanceKnownTracksTime(aStream->mUpdateKnownTracksTime); | |||
} | |||
} | |||
if (aStream->mBuffer.GetEnd() > 0) { | |||
aStream->mHasCurrentData = true; | |||
} | |||
if (finished) { | |||
FinishStream(aStream); | |||
} | |||
} | |||
</source> | |||
==MediaStreamGraphImpl::RunThread== | ==MediaStreamGraphImpl::RunThread== | ||
<source lang="cpp"> | <source lang="cpp"> | ||
| Line 264: | Line 334: | ||
</source> | </source> | ||
==AudioContext::CreateXXX == | ==AudioContext::CreateXXX == | ||
<source lang="cpp"> | <source lang="cpp"> | ||