mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 00:08:39 +09:00
[media] Use RefPtr<TrackBuffersManager> instead of raw pointers
This commit is contained in:
parent
83ecbdfacb
commit
eb44f633ee
3 changed files with 28 additions and 25 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue