mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 943461. Part 13: Keep producing silence in AudioNodeStreams' mLastChunks even after they've finished r=padenot
Without this the last before-finished audio block gets picked up by downstream ObtainInputBlock calls. --HG-- extra : rebase_source : d7f804cea59454bdb0aa5931d19bcc123e0d16cb
This commit is contained in:
parent
6f87a9fa58
commit
b33d4283d0
@ -269,8 +269,7 @@ AudioNodeStream::ObtainInputBlock(AudioChunk& aTmpChunk, uint32_t aPortIndex)
|
||||
MediaStream* s = mInputs[i]->GetSource();
|
||||
AudioNodeStream* a = static_cast<AudioNodeStream*>(s);
|
||||
MOZ_ASSERT(a == s->AsAudioNodeStream());
|
||||
if (a->IsFinishedOnGraphThread() ||
|
||||
a->IsAudioParamStream()) {
|
||||
if (a->IsAudioParamStream()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -408,7 +407,7 @@ AudioNodeStream::ProduceOutput(GraphTime aFrom, GraphTime aTo, uint32_t aFlags)
|
||||
uint16_t outputCount = std::max(uint16_t(1), mEngine->OutputCount());
|
||||
mLastChunks.SetLength(outputCount);
|
||||
|
||||
if (mMuted) {
|
||||
if (mMuted || IsFinishedOnGraphThread()) {
|
||||
for (uint16_t i = 0; i < outputCount; ++i) {
|
||||
mLastChunks[i].SetNull(WEBAUDIO_BLOCK_SIZE);
|
||||
}
|
||||
|
@ -1189,7 +1189,7 @@ MediaStreamGraphImpl::RunThread()
|
||||
// Figure out what each stream wants to do
|
||||
for (uint32_t i = 0; i < mStreams.Length(); ++i) {
|
||||
MediaStream* stream = mStreams[i];
|
||||
if (!doneAllProducing && !stream->IsFinishedOnGraphThread()) {
|
||||
if (!doneAllProducing) {
|
||||
ProcessedMediaStream* ps = stream->AsProcessedStream();
|
||||
if (ps) {
|
||||
AudioNodeStream* n = stream->AsAudioNodeStream();
|
||||
|
@ -959,7 +959,9 @@ public:
|
||||
* Also, we've produced output for all streams up to this one. If this stream
|
||||
* is not in a cycle, then all its source streams have produced data.
|
||||
* Generate output from aFrom to aTo.
|
||||
* This is called only on streams that have not finished.
|
||||
* This will be called on streams that have finished. Most stream types should
|
||||
* just return immediately if IsFinishedOnGraphThread(), but some may wish to
|
||||
* update internal state (see AudioNodeStream).
|
||||
* ProduceOutput is allowed to call FinishOnGraphThread only if ALLOW_FINISH
|
||||
* is in aFlags. (This flag will be set when aTo >= mStateComputedTime, i.e.
|
||||
* when we've producing the last block of data we need to produce.) Otherwise
|
||||
|
@ -41,6 +41,9 @@ public:
|
||||
}
|
||||
virtual void ProduceOutput(GraphTime aFrom, GraphTime aTo, uint32_t aFlags) MOZ_OVERRIDE
|
||||
{
|
||||
if (IsFinishedOnGraphThread()) {
|
||||
return;
|
||||
}
|
||||
nsAutoTArray<bool,8> mappedTracksFinished;
|
||||
nsAutoTArray<bool,8> mappedTracksWithMatchingInputTracks;
|
||||
for (uint32_t i = 0; i < mTrackMap.Length(); ++i) {
|
||||
|
Loading…
Reference in New Issue
Block a user