Bug 1852754: part 9) Add tests for dynamically loading <link rel="prefetch"> elements...
[gecko.git] / dom / media / MediaTrackListener.cpp
blobd34ab17267cfd7205b3211e5c6466cd099daa11f
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "MediaTrackListener.h"
8 #include "AudioSegment.h"
9 #include "VideoSegment.h"
11 namespace mozilla {
13 #ifdef LOG
14 # undef LOG
15 #endif
17 #define LOG(type, msg) MOZ_LOG(gMediaTrackGraphLog, type, msg)
19 void DirectMediaTrackListener::MirrorAndDisableSegment(AudioSegment& aFrom,
20 AudioSegment& aTo) {
21 aTo.AppendNullData(aFrom.GetDuration());
24 void DirectMediaTrackListener::MirrorAndDisableSegment(
25 VideoSegment& aFrom, VideoSegment& aTo, DisabledTrackMode aMode) {
26 if (aMode == DisabledTrackMode::SILENCE_BLACK) {
27 for (VideoSegment::ChunkIterator it(aFrom); !it.IsEnded(); it.Next()) {
28 aTo.AppendFrame(do_AddRef(it->mFrame.GetImage()),
29 it->mFrame.GetIntrinsicSize(), it->GetPrincipalHandle(),
30 true);
31 aTo.ExtendLastFrameBy(it->GetDuration());
33 } else if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
34 aTo.AppendNullData(aFrom.GetDuration());
38 void DirectMediaTrackListener::NotifyRealtimeTrackDataAndApplyTrackDisabling(
39 MediaTrackGraph* aGraph, TrackTime aTrackOffset, MediaSegment& aMedia) {
40 if (mDisabledFreezeCount == 0 && mDisabledBlackCount == 0) {
41 NotifyRealtimeTrackData(aGraph, aTrackOffset, aMedia);
42 return;
45 DisabledTrackMode mode = mDisabledBlackCount > 0
46 ? DisabledTrackMode::SILENCE_BLACK
47 : DisabledTrackMode::SILENCE_FREEZE;
48 UniquePtr<MediaSegment> media(aMedia.CreateEmptyClone());
49 if (aMedia.GetType() == MediaSegment::AUDIO) {
50 MirrorAndDisableSegment(static_cast<AudioSegment&>(aMedia),
51 static_cast<AudioSegment&>(*media));
52 } else if (aMedia.GetType() == MediaSegment::VIDEO) {
53 MirrorAndDisableSegment(static_cast<VideoSegment&>(aMedia),
54 static_cast<VideoSegment&>(*media), mode);
55 } else {
56 MOZ_CRASH("Unsupported media type");
58 NotifyRealtimeTrackData(aGraph, aTrackOffset, *media);
61 void DirectMediaTrackListener::IncreaseDisabled(DisabledTrackMode aMode) {
62 if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
63 ++mDisabledFreezeCount;
64 } else if (aMode == DisabledTrackMode::SILENCE_BLACK) {
65 ++mDisabledBlackCount;
66 } else {
67 MOZ_ASSERT(false, "Unknown disabled mode");
70 LOG(LogLevel::Debug,
71 ("DirectMediaTrackListener %p increased disabled "
72 "mode %s. Current counts are: freeze=%d, black=%d",
73 this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black",
74 int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount)));
77 void DirectMediaTrackListener::DecreaseDisabled(DisabledTrackMode aMode) {
78 if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
79 --mDisabledFreezeCount;
80 MOZ_ASSERT(mDisabledFreezeCount >= 0, "Double decrease");
81 } else if (aMode == DisabledTrackMode::SILENCE_BLACK) {
82 --mDisabledBlackCount;
83 MOZ_ASSERT(mDisabledBlackCount >= 0, "Double decrease");
84 } else {
85 MOZ_ASSERT(false, "Unknown disabled mode");
88 LOG(LogLevel::Debug,
89 ("DirectMediaTrackListener %p decreased disabled "
90 "mode %s. Current counts are: freeze=%d, black=%d",
91 this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black",
92 int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount)));
95 } // namespace mozilla