[media] Use RefPtr<TrackBuffersManager> instead of raw pointers

This commit is contained in:
Moonchild 2023-10-25 03:59:10 +02:00 committed by roytam1
commit eb44f633ee
3 changed files with 28 additions and 25 deletions

View file

@ -62,7 +62,7 @@ MediaSourceDemuxer::AddSizeOfResources(MediaSourceDecoder::ResourceSizes* aSizes
RefPtr<MediaSourceDecoder::ResourceSizes> sizes = aSizes; RefPtr<MediaSourceDecoder::ResourceSizes> sizes = aSizes;
nsCOMPtr<nsIRunnable> task = nsCOMPtr<nsIRunnable> task =
NS_NewRunnableFunction([self, sizes] () { NS_NewRunnableFunction([self, sizes] () {
for (TrackBuffersManager* manager : self->mSourceBuffers) { for (const RefPtr<TrackBuffersManager>& manager : self->mSourceBuffers) {
manager->AddSizeOfResources(sizes); manager->AddSizeOfResources(sizes);
} }
}); });
@ -171,42 +171,45 @@ MediaSourceDemuxer::GetCrypto()
} }
void void
MediaSourceDemuxer::AttachSourceBuffer(TrackBuffersManager* aSourceBuffer) MediaSourceDemuxer::AttachSourceBuffer(
RefPtr<TrackBuffersManager>& aSourceBuffer)
{ {
nsCOMPtr<nsIRunnable> task = nsCOMPtr<nsIRunnable> task = NewRunnableMethod<RefPtr<TrackBuffersManager>&&>(
NewRunnableMethod<TrackBuffersManager*>(
this, &MediaSourceDemuxer::DoAttachSourceBuffer, this, &MediaSourceDemuxer::DoAttachSourceBuffer,
aSourceBuffer); aSourceBuffer);
GetTaskQueue()->Dispatch(task.forget()); GetTaskQueue()->Dispatch(task.forget());
} }
void void
MediaSourceDemuxer::DoAttachSourceBuffer(mozilla::TrackBuffersManager* aSourceBuffer) MediaSourceDemuxer::DoAttachSourceBuffer(
RefPtr<mozilla::TrackBuffersManager>&& aSourceBuffer)
{ {
MOZ_ASSERT(OnTaskQueue()); MOZ_ASSERT(OnTaskQueue());
mSourceBuffers.AppendElement(aSourceBuffer); mSourceBuffers.AppendElement(Move(aSourceBuffer));
ScanSourceBuffersForContent(); ScanSourceBuffersForContent();
} }
void void
MediaSourceDemuxer::DetachSourceBuffer(TrackBuffersManager* aSourceBuffer) MediaSourceDemuxer::DetachSourceBuffer(
RefPtr<TrackBuffersManager>& aSourceBuffer)
{ {
nsCOMPtr<nsIRunnable> task = RefPtr<MediaSourceDemuxer> self = this;
NewRunnableMethod<TrackBuffersManager*>( nsCOMPtr<nsIRunnable> task = NS_NewRunnableFunction(
this, &MediaSourceDemuxer::DoDetachSourceBuffer, [self, aSourceBuffer]() {
aSourceBuffer); self->DoDetachSourceBuffer(aSourceBuffer);
});
GetTaskQueue()->Dispatch(task.forget()); GetTaskQueue()->Dispatch(task.forget());
} }
void void
MediaSourceDemuxer::DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer) MediaSourceDemuxer::DoDetachSourceBuffer(
const RefPtr<TrackBuffersManager>& aSourceBuffer)
{ {
MOZ_ASSERT(OnTaskQueue()); MOZ_ASSERT(OnTaskQueue());
for (uint32_t i = 0; i < mSourceBuffers.Length(); i++) { mSourceBuffers.RemoveElementsBy(
if (mSourceBuffers[i].get() == aSourceBuffer) { [&aSourceBuffer](const RefPtr<TrackBuffersManager> aLinkedSourceBuffer) {
mSourceBuffers.RemoveElementAt(i); return aLinkedSourceBuffer == aSourceBuffer;
} });
}
if (aSourceBuffer == mAudioTrack) { if (aSourceBuffer == mAudioTrack) {
mAudioTrack = nullptr; mAudioTrack = nullptr;
} }
@ -230,7 +233,7 @@ MediaSourceDemuxer::GetTrackInfo(TrackType aTrack)
} }
} }
TrackBuffersManager* RefPtr<TrackBuffersManager>
MediaSourceDemuxer::GetManager(TrackType aTrack) MediaSourceDemuxer::GetManager(TrackType aTrack)
{ {
MonitorAutoLock mon(mMonitor); MonitorAutoLock mon(mMonitor);

View file

@ -45,8 +45,8 @@ public:
void NotifyDataArrived() override; void NotifyDataArrived() override;
/* interface for TrackBuffersManager */ /* interface for TrackBuffersManager */
void AttachSourceBuffer(TrackBuffersManager* aSourceBuffer); void AttachSourceBuffer(RefPtr<TrackBuffersManager>& aSourceBuffer);
void DetachSourceBuffer(TrackBuffersManager* aSourceBuffer); void DetachSourceBuffer(RefPtr<TrackBuffersManager>& aSourceBuffer);
AutoTaskQueue* GetTaskQueue() { return mTaskQueue; } AutoTaskQueue* GetTaskQueue() { return mTaskQueue; }
// Returns a string describing the state of the MediaSource internal // Returns a string describing the state of the MediaSource internal
@ -64,10 +64,10 @@ private:
// Scan source buffers and update information. // Scan source buffers and update information.
bool ScanSourceBuffersForContent(); bool ScanSourceBuffersForContent();
RefPtr<InitPromise> AttemptInit(); RefPtr<InitPromise> AttemptInit();
TrackBuffersManager* GetManager(TrackInfo::TrackType aType); RefPtr<TrackBuffersManager> GetManager(TrackInfo::TrackType aType);
TrackInfo* GetTrackInfo(TrackInfo::TrackType); TrackInfo* GetTrackInfo(TrackInfo::TrackType);
void DoAttachSourceBuffer(TrackBuffersManager* aSourceBuffer); void DoAttachSourceBuffer(RefPtr<TrackBuffersManager>&& aSourceBuffer);
void DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer); void DoDetachSourceBuffer(const RefPtr<TrackBuffersManager>& aSourceBuffer);
bool OnTaskQueue() bool OnTaskQueue()
{ {
return !GetTaskQueue() || GetTaskQueue()->IsCurrentThreadIn(); return !GetTaskQueue() || GetTaskQueue()->IsCurrentThreadIn();

View file

@ -281,7 +281,7 @@ SourceBuffer::Detach()
if (mTrackBuffersManager) { if (mTrackBuffersManager) {
mTrackBuffersManager->Detach(); mTrackBuffersManager->Detach();
mMediaSource->GetDecoder()->GetDemuxer()->DetachSourceBuffer( mMediaSource->GetDecoder()->GetDemuxer()->DetachSourceBuffer(
mTrackBuffersManager.get()); mTrackBuffersManager);
} }
mTrackBuffersManager = nullptr; mTrackBuffersManager = nullptr;
mMediaSource = nullptr; mMediaSource = nullptr;
@ -321,7 +321,7 @@ SourceBuffer::SourceBuffer(MediaSource* aMediaSource, const nsACString& aType)
SetMode(SourceBufferAppendMode::Segments, dummy); SetMode(SourceBufferAppendMode::Segments, dummy);
} }
mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer( mMediaSource->GetDecoder()->GetDemuxer()->AttachSourceBuffer(
mTrackBuffersManager.get()); mTrackBuffersManager);
} }
SourceBuffer::~SourceBuffer() SourceBuffer::~SourceBuffer()