diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /dom/media/VideoStreamTrack.cpp | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/VideoStreamTrack.cpp')
-rw-r--r-- | dom/media/VideoStreamTrack.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/dom/media/VideoStreamTrack.cpp b/dom/media/VideoStreamTrack.cpp new file mode 100644 index 0000000000..3ae3426231 --- /dev/null +++ b/dom/media/VideoStreamTrack.cpp @@ -0,0 +1,88 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "VideoStreamTrack.h" + +#include "MediaTrackGraph.h" +#include "MediaTrackListener.h" +#include "nsContentUtils.h" +#include "nsGlobalWindowInner.h" +#include "VideoOutput.h" + +namespace mozilla::dom { + +VideoStreamTrack::VideoStreamTrack(nsPIDOMWindowInner* aWindow, + mozilla::MediaTrack* aInputTrack, + MediaStreamTrackSource* aSource, + MediaStreamTrackState aReadyState, + bool aMuted, + const MediaTrackConstraints& aConstraints) + : MediaStreamTrack(aWindow, aInputTrack, aSource, aReadyState, aMuted, + aConstraints) {} + +void VideoStreamTrack::Destroy() { + mVideoOutputs.Clear(); + MediaStreamTrack::Destroy(); +} + +void VideoStreamTrack::AddVideoOutput(VideoFrameContainer* aSink) { + if (Ended()) { + return; + } + auto output = MakeRefPtr<VideoOutput>( + aSink, nsGlobalWindowInner::Cast(GetParentObject()) + ->AbstractMainThreadFor(TaskCategory::Other)); + AddVideoOutput(output); +} + +void VideoStreamTrack::AddVideoOutput(VideoOutput* aOutput) { + if (Ended()) { + return; + } + for (const auto& output : mVideoOutputs) { + if (output == aOutput) { + MOZ_ASSERT_UNREACHABLE("A VideoOutput was already added"); + return; + } + } + mVideoOutputs.AppendElement(aOutput); + AddDirectListener(aOutput); + AddListener(aOutput); +} + +void VideoStreamTrack::RemoveVideoOutput(VideoFrameContainer* aSink) { + for (const auto& output : mVideoOutputs.Clone()) { + if (output->mVideoFrameContainer == aSink) { + mVideoOutputs.RemoveElement(output); + RemoveDirectListener(output); + RemoveListener(output); + } + } +} + +void VideoStreamTrack::RemoveVideoOutput(VideoOutput* aOutput) { + for (const auto& output : mVideoOutputs.Clone()) { + if (output == aOutput) { + mVideoOutputs.RemoveElement(aOutput); + RemoveDirectListener(aOutput); + RemoveListener(aOutput); + } + } +} + +void VideoStreamTrack::GetLabel(nsAString& aLabel, CallerType aCallerType) { + if (nsContentUtils::ResistFingerprinting(aCallerType)) { + aLabel.AssignLiteral("Internal Camera"); + return; + } + MediaStreamTrack::GetLabel(aLabel, aCallerType); +} + +already_AddRefed<MediaStreamTrack> VideoStreamTrack::CloneInternal() { + return do_AddRef(new VideoStreamTrack(mWindow, mInputTrack, mSource, + ReadyState(), Muted(), mConstraints)); +} + +} // namespace mozilla::dom |