From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/MediaTrackListener.cpp | 95 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 dom/media/MediaTrackListener.cpp (limited to 'dom/media/MediaTrackListener.cpp') diff --git a/dom/media/MediaTrackListener.cpp b/dom/media/MediaTrackListener.cpp new file mode 100644 index 0000000000..d34ab17267 --- /dev/null +++ b/dom/media/MediaTrackListener.cpp @@ -0,0 +1,95 @@ +/* -*- 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 "MediaTrackListener.h" + +#include "AudioSegment.h" +#include "VideoSegment.h" + +namespace mozilla { + +#ifdef LOG +# undef LOG +#endif + +#define LOG(type, msg) MOZ_LOG(gMediaTrackGraphLog, type, msg) + +void DirectMediaTrackListener::MirrorAndDisableSegment(AudioSegment& aFrom, + AudioSegment& aTo) { + aTo.AppendNullData(aFrom.GetDuration()); +} + +void DirectMediaTrackListener::MirrorAndDisableSegment( + VideoSegment& aFrom, VideoSegment& aTo, DisabledTrackMode aMode) { + if (aMode == DisabledTrackMode::SILENCE_BLACK) { + for (VideoSegment::ChunkIterator it(aFrom); !it.IsEnded(); it.Next()) { + aTo.AppendFrame(do_AddRef(it->mFrame.GetImage()), + it->mFrame.GetIntrinsicSize(), it->GetPrincipalHandle(), + true); + aTo.ExtendLastFrameBy(it->GetDuration()); + } + } else if (aMode == DisabledTrackMode::SILENCE_FREEZE) { + aTo.AppendNullData(aFrom.GetDuration()); + } +} + +void DirectMediaTrackListener::NotifyRealtimeTrackDataAndApplyTrackDisabling( + MediaTrackGraph* aGraph, TrackTime aTrackOffset, MediaSegment& aMedia) { + if (mDisabledFreezeCount == 0 && mDisabledBlackCount == 0) { + NotifyRealtimeTrackData(aGraph, aTrackOffset, aMedia); + return; + } + + DisabledTrackMode mode = mDisabledBlackCount > 0 + ? DisabledTrackMode::SILENCE_BLACK + : DisabledTrackMode::SILENCE_FREEZE; + UniquePtr media(aMedia.CreateEmptyClone()); + if (aMedia.GetType() == MediaSegment::AUDIO) { + MirrorAndDisableSegment(static_cast(aMedia), + static_cast(*media)); + } else if (aMedia.GetType() == MediaSegment::VIDEO) { + MirrorAndDisableSegment(static_cast(aMedia), + static_cast(*media), mode); + } else { + MOZ_CRASH("Unsupported media type"); + } + NotifyRealtimeTrackData(aGraph, aTrackOffset, *media); +} + +void DirectMediaTrackListener::IncreaseDisabled(DisabledTrackMode aMode) { + if (aMode == DisabledTrackMode::SILENCE_FREEZE) { + ++mDisabledFreezeCount; + } else if (aMode == DisabledTrackMode::SILENCE_BLACK) { + ++mDisabledBlackCount; + } else { + MOZ_ASSERT(false, "Unknown disabled mode"); + } + + LOG(LogLevel::Debug, + ("DirectMediaTrackListener %p increased disabled " + "mode %s. Current counts are: freeze=%d, black=%d", + this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black", + int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount))); +} + +void DirectMediaTrackListener::DecreaseDisabled(DisabledTrackMode aMode) { + if (aMode == DisabledTrackMode::SILENCE_FREEZE) { + --mDisabledFreezeCount; + MOZ_ASSERT(mDisabledFreezeCount >= 0, "Double decrease"); + } else if (aMode == DisabledTrackMode::SILENCE_BLACK) { + --mDisabledBlackCount; + MOZ_ASSERT(mDisabledBlackCount >= 0, "Double decrease"); + } else { + MOZ_ASSERT(false, "Unknown disabled mode"); + } + + LOG(LogLevel::Debug, + ("DirectMediaTrackListener %p decreased disabled " + "mode %s. Current counts are: freeze=%d, black=%d", + this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black", + int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount))); +} + +} // namespace mozilla -- cgit v1.2.3