зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1402728 - Use RefPtr<TrackBuffersManager> instead of raw pointers - r=jya
All in MediaSourceDemuxer: - GetManager returns a RefPtr<TBM>. Probably unneeded as the only call stores the pointer in a RefPtr, but I'm adding it for peace of mind, and it's very low cost. - AttachSourceBuffer takes a RefPtr& and explicitly stores the given TBM in a RefPtr in the dispatched task, then DoAttachSourceBuffer takes a RefPtr<TBM>&&. This should not be needed, as it should already be done implicitly. But now it's more obvious, and a bit more optimized thanks to move semantics. - DetachSourceBuffer takes a RefPtr& and explicitly stores the given TBM in a RefPtr in the dispatched task, then DoDetachSourceBuffer takes a RefPtr<TBM>&&; And changed the loop to use RemoveElementsBy. Same as above, probably not needed, but it's now obvious that we keep a RefPtr. MozReview-Commit-ID: 9aOZtV7uS1P --HG-- extra : rebase_source : 1e33cffd5686e2d73f02976794d6b27861eb0391
This commit is contained in:
Родитель
b9a549d819
Коммит
f54bfaa676
|
@ -58,7 +58,7 @@ MediaSourceDemuxer::AddSizeOfResources(
|
|||
RefPtr<MediaSourceDecoder::ResourceSizes> sizes = aSizes;
|
||||
nsCOMPtr<nsIRunnable> task = NS_NewRunnableFunction(
|
||||
"MediaSourceDemuxer::AddSizeOfResources", [self, sizes]() {
|
||||
for (TrackBuffersManager* manager : self->mSourceBuffers) {
|
||||
for (const RefPtr<TrackBuffersManager>& manager : self->mSourceBuffers) {
|
||||
manager->AddSizeOfResources(sizes);
|
||||
}
|
||||
});
|
||||
|
@ -167,9 +167,10 @@ MediaSourceDemuxer::GetCrypto()
|
|||
}
|
||||
|
||||
void
|
||||
MediaSourceDemuxer::AttachSourceBuffer(TrackBuffersManager* aSourceBuffer)
|
||||
MediaSourceDemuxer::AttachSourceBuffer(
|
||||
RefPtr<TrackBuffersManager>& aSourceBuffer)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> task = NewRunnableMethod<TrackBuffersManager*>(
|
||||
nsCOMPtr<nsIRunnable> task = NewRunnableMethod<RefPtr<TrackBuffersManager>&&>(
|
||||
"MediaSourceDemuxer::DoAttachSourceBuffer",
|
||||
this,
|
||||
&MediaSourceDemuxer::DoAttachSourceBuffer,
|
||||
|
@ -178,17 +179,19 @@ MediaSourceDemuxer::AttachSourceBuffer(TrackBuffersManager* aSourceBuffer)
|
|||
}
|
||||
|
||||
void
|
||||
MediaSourceDemuxer::DoAttachSourceBuffer(mozilla::TrackBuffersManager* aSourceBuffer)
|
||||
MediaSourceDemuxer::DoAttachSourceBuffer(
|
||||
RefPtr<mozilla::TrackBuffersManager>&& aSourceBuffer)
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
mSourceBuffers.AppendElement(aSourceBuffer);
|
||||
mSourceBuffers.AppendElement(Move(aSourceBuffer));
|
||||
ScanSourceBuffersForContent();
|
||||
}
|
||||
|
||||
void
|
||||
MediaSourceDemuxer::DetachSourceBuffer(TrackBuffersManager* aSourceBuffer)
|
||||
MediaSourceDemuxer::DetachSourceBuffer(
|
||||
RefPtr<TrackBuffersManager>& aSourceBuffer)
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> task = NewRunnableMethod<TrackBuffersManager*>(
|
||||
nsCOMPtr<nsIRunnable> task = NewRunnableMethod<RefPtr<TrackBuffersManager>&&>(
|
||||
"MediaSourceDemuxer::DoDetachSourceBuffer",
|
||||
this,
|
||||
&MediaSourceDemuxer::DoDetachSourceBuffer,
|
||||
|
@ -197,14 +200,14 @@ MediaSourceDemuxer::DetachSourceBuffer(TrackBuffersManager* aSourceBuffer)
|
|||
}
|
||||
|
||||
void
|
||||
MediaSourceDemuxer::DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer)
|
||||
MediaSourceDemuxer::DoDetachSourceBuffer(
|
||||
RefPtr<TrackBuffersManager>&& aSourceBuffer)
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
for (uint32_t i = 0; i < mSourceBuffers.Length(); i++) {
|
||||
if (mSourceBuffers[i].get() == aSourceBuffer) {
|
||||
mSourceBuffers.RemoveElementAt(i);
|
||||
}
|
||||
}
|
||||
mSourceBuffers.RemoveElementsBy(
|
||||
[&aSourceBuffer](const RefPtr<TrackBuffersManager> aLinkedSourceBuffer) {
|
||||
return aLinkedSourceBuffer == aSourceBuffer;
|
||||
});
|
||||
{
|
||||
MonitorAutoLock mon(mMonitor);
|
||||
if (aSourceBuffer == mAudioTrack) {
|
||||
|
@ -231,7 +234,7 @@ MediaSourceDemuxer::GetTrackInfo(TrackType aTrack)
|
|||
}
|
||||
}
|
||||
|
||||
TrackBuffersManager*
|
||||
RefPtr<TrackBuffersManager>
|
||||
MediaSourceDemuxer::GetManager(TrackType aTrack)
|
||||
{
|
||||
MonitorAutoLock mon(mMonitor);
|
||||
|
|
|
@ -44,8 +44,8 @@ public:
|
|||
bool ShouldComputeStartTime() const override { return false; }
|
||||
|
||||
/* interface for TrackBuffersManager */
|
||||
void AttachSourceBuffer(TrackBuffersManager* aSourceBuffer);
|
||||
void DetachSourceBuffer(TrackBuffersManager* aSourceBuffer);
|
||||
void AttachSourceBuffer(RefPtr<TrackBuffersManager>& aSourceBuffer);
|
||||
void DetachSourceBuffer(RefPtr<TrackBuffersManager>& aSourceBuffer);
|
||||
AutoTaskQueue* GetTaskQueue() { return mTaskQueue; }
|
||||
void NotifyInitDataArrived();
|
||||
|
||||
|
@ -66,10 +66,10 @@ private:
|
|||
friend class MediaSourceTrackDemuxer;
|
||||
// Scan source buffers and update information.
|
||||
bool ScanSourceBuffersForContent();
|
||||
TrackBuffersManager* GetManager(TrackInfo::TrackType aType);
|
||||
RefPtr<TrackBuffersManager> GetManager(TrackInfo::TrackType aType);
|
||||
TrackInfo* GetTrackInfo(TrackInfo::TrackType);
|
||||
void DoAttachSourceBuffer(TrackBuffersManager* aSourceBuffer);
|
||||
void DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer);
|
||||
void DoAttachSourceBuffer(RefPtr<TrackBuffersManager>&& aSourceBuffer);
|
||||
void DoDetachSourceBuffer(RefPtr<TrackBuffersManager>&& aSourceBuffer);
|
||||
bool OnTaskQueue()
|
||||
{
|
||||
return !GetTaskQueue() || GetTaskQueue()->IsCurrentThreadIn();
|
||||
|
|
|
@ -282,7 +282,7 @@ SourceBuffer::Detach()
|
|||
if (mTrackBuffersManager) {
|
||||
mTrackBuffersManager->Detach();
|
||||
mMediaSource->GetDecoder()->GetDemuxer()->DetachSourceBuffer(
|
||||
mTrackBuffersManager.get());
|
||||
mTrackBuffersManager);
|
||||
}
|
||||
mTrackBuffersManager = nullptr;
|
||||
mMediaSource = nullptr;
|
||||
|
@ -324,7 +324,7 @@ SourceBuffer::SourceBuffer(MediaSource* aMediaSource,
|
|||
SetMode(SourceBufferAppendMode::Segments, dummy);
|
||||
}
|
||||
mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer(
|
||||
mTrackBuffersManager.get());
|
||||
mTrackBuffersManager);
|
||||
}
|
||||
|
||||
SourceBuffer::~SourceBuffer()
|
||||
|
|
Загрузка…
Ссылка в новой задаче