RefPtr<MediaSource::ActiveCompletionPromise> MediaSource::SourceBufferIsActive(SourceBuffer* aSourceBuffer) { MOZ_ASSERT(NS_IsMainThread()); mActiveSourceBuffers->ClearSimple(); bool initMissing = false; bool found = false; for (uint32_t i = 0; i < mSourceBuffers->Length(); i++) { SourceBuffer* sourceBuffer = mSourceBuffers->IndexedGetter(i, found); MOZ_ALWAYS_TRUE(found); if (sourceBuffer == aSourceBuffer) { mActiveSourceBuffers->Append(aSourceBuffer); } else if (sourceBuffer->IsActive()) { mActiveSourceBuffers->AppendSimple(sourceBuffer); } else { // Some source buffers haven't yet received an init segment. // There's nothing more we can do at this stage. initMissing = true; } } if (initMissing || !mDecoder) { return ActiveCompletionPromise::CreateAndResolve(true, __func__); } mDecoder->NotifyInitDataArrived(); // Add our promise to the queue. // It will be resolved once the HTMLMediaElement modifies its readyState. MozPromiseHolder<ActiveCompletionPromise> holder; RefPtr<ActiveCompletionPromise> promise = holder.Ensure(__func__); mCompletionPromises.AppendElement(std::move(holder)); return promise; }
void MediaSource::SourceBufferIsActive(SourceBuffer* aSourceBuffer) { MOZ_ASSERT(NS_IsMainThread()); mActiveSourceBuffers->ClearSimple(); bool found = false; for (uint32_t i = 0; i < mSourceBuffers->Length(); i++) { SourceBuffer* sourceBuffer = mSourceBuffers->IndexedGetter(i, found); MOZ_ALWAYS_TRUE(found); if (sourceBuffer == aSourceBuffer) { mActiveSourceBuffers->Append(aSourceBuffer); } else if (sourceBuffer->IsActive()) { mActiveSourceBuffers->AppendSimple(sourceBuffer); } } }