tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

MediaTrackListener.cpp (3504B)


      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/. */
      5 
      6 #include "MediaTrackListener.h"
      7 
      8 #include "AudioSegment.h"
      9 #include "VideoSegment.h"
     10 
     11 namespace mozilla {
     12 
     13 #ifdef LOG
     14 #  undef LOG
     15 #endif
     16 
     17 #define LOG(type, msg) MOZ_LOG(gMediaTrackGraphLog, type, msg)
     18 
     19 void DirectMediaTrackListener::MirrorAndDisableSegment(AudioSegment& aFrom,
     20                                                       AudioSegment& aTo) {
     21  aTo.AppendNullData(aFrom.GetDuration());
     22 }
     23 
     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(*it, Some(true));
     29      aTo.ExtendLastFrameBy(it->GetDuration());
     30    }
     31  } else if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
     32    aTo.AppendNullData(aFrom.GetDuration());
     33  }
     34 }
     35 
     36 void DirectMediaTrackListener::NotifyRealtimeTrackDataAndApplyTrackDisabling(
     37    MediaTrackGraph* aGraph, TrackTime aTrackOffset, MediaSegment& aMedia) {
     38  if (mDisabledFreezeCount == 0 && mDisabledBlackCount == 0) {
     39    NotifyRealtimeTrackData(aGraph, aTrackOffset, aMedia);
     40    return;
     41  }
     42 
     43  DisabledTrackMode mode = mDisabledBlackCount > 0
     44                               ? DisabledTrackMode::SILENCE_BLACK
     45                               : DisabledTrackMode::SILENCE_FREEZE;
     46  UniquePtr<MediaSegment> media(aMedia.CreateEmptyClone());
     47  if (aMedia.GetType() == MediaSegment::AUDIO) {
     48    MirrorAndDisableSegment(static_cast<AudioSegment&>(aMedia),
     49                            static_cast<AudioSegment&>(*media));
     50  } else if (aMedia.GetType() == MediaSegment::VIDEO) {
     51    MirrorAndDisableSegment(static_cast<VideoSegment&>(aMedia),
     52                            static_cast<VideoSegment&>(*media), mode);
     53  } else {
     54    MOZ_CRASH("Unsupported media type");
     55  }
     56  NotifyRealtimeTrackData(aGraph, aTrackOffset, *media);
     57 }
     58 
     59 void DirectMediaTrackListener::IncreaseDisabled(DisabledTrackMode aMode) {
     60  if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
     61    ++mDisabledFreezeCount;
     62  } else if (aMode == DisabledTrackMode::SILENCE_BLACK) {
     63    ++mDisabledBlackCount;
     64  } else {
     65    MOZ_ASSERT(false, "Unknown disabled mode");
     66  }
     67 
     68  LOG(LogLevel::Debug,
     69      ("DirectMediaTrackListener %p increased disabled "
     70       "mode %s. Current counts are: freeze=%d, black=%d",
     71       this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black",
     72       int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount)));
     73 }
     74 
     75 void DirectMediaTrackListener::DecreaseDisabled(DisabledTrackMode aMode) {
     76  if (aMode == DisabledTrackMode::SILENCE_FREEZE) {
     77    --mDisabledFreezeCount;
     78    MOZ_ASSERT(mDisabledFreezeCount >= 0, "Double decrease");
     79  } else if (aMode == DisabledTrackMode::SILENCE_BLACK) {
     80    --mDisabledBlackCount;
     81    MOZ_ASSERT(mDisabledBlackCount >= 0, "Double decrease");
     82  } else {
     83    MOZ_ASSERT(false, "Unknown disabled mode");
     84  }
     85 
     86  LOG(LogLevel::Debug,
     87      ("DirectMediaTrackListener %p decreased disabled "
     88       "mode %s. Current counts are: freeze=%d, black=%d",
     89       this, aMode == DisabledTrackMode::SILENCE_FREEZE ? "freeze" : "black",
     90       int32_t(mDisabledFreezeCount), int32_t(mDisabledBlackCount)));
     91 }
     92 
     93 }  // namespace mozilla