tor-browser

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

Canonicals.h (6236B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef MEDIA_WEBRTC_SIGNALING_GTEST_CANONICALS_H_
      8 #define MEDIA_WEBRTC_SIGNALING_GTEST_CANONICALS_H_
      9 
     10 #include "mozilla/gtest/WaitFor.h"
     11 #include "MediaConduitControl.h"
     12 #include "MediaPipeline.h"
     13 
     14 namespace mozilla {
     15 
     16 #define INIT_CANONICAL(name, val) \
     17  name(AbstractThread::MainThread(), val, "ConcreteCanonicals::" #name)
     18 class ConcreteCanonicals {
     19 public:
     20  ConcreteCanonicals()
     21      : INIT_CANONICAL(mReceiving, false),
     22        INIT_CANONICAL(mTransmitting, false),
     23        INIT_CANONICAL(mLocalSsrcs, Ssrcs()),
     24        INIT_CANONICAL(mLocalVideoRtxSsrcs, Ssrcs()),
     25        INIT_CANONICAL(mLocalCname, std::string()),
     26        INIT_CANONICAL(mMid, std::string()),
     27        INIT_CANONICAL(mSyncGroup, std::string()),
     28        INIT_CANONICAL(mLocalSendRtpExtensions, RtpExtList()),
     29        INIT_CANONICAL(mLocalRecvRtpExtensions, RtpExtList()),
     30        INIT_CANONICAL(mRemoteSsrc, 0),
     31        INIT_CANONICAL(mRemoteVideoRtxSsrc, 0),
     32        INIT_CANONICAL(mFrameTransformerProxySend, nullptr),
     33        INIT_CANONICAL(mFrameTransformerProxyRecv, nullptr),
     34        INIT_CANONICAL(mAudioRecvCodecs, std::vector<AudioCodecConfig>()),
     35        INIT_CANONICAL(mAudioSendCodec, Nothing()),
     36        INIT_CANONICAL(mVideoRecvCodecs, std::vector<VideoCodecConfig>()),
     37        INIT_CANONICAL(mVideoSendCodec, Nothing()),
     38        INIT_CANONICAL(mVideoRecvRtpRtcpConfig, Nothing()),
     39        INIT_CANONICAL(mVideoSendRtpRtcpConfig, Nothing()),
     40        INIT_CANONICAL(mVideoCodecMode, webrtc::VideoCodecMode::kRealtimeVideo),
     41        INIT_CANONICAL(mVideoDegradationPreference,
     42                       webrtc::DegradationPreference::DISABLED) {}
     43 
     44  Canonical<bool> mReceiving;
     45  Canonical<bool> mTransmitting;
     46  Canonical<Ssrcs> mLocalSsrcs;
     47  Canonical<Ssrcs> mLocalVideoRtxSsrcs;
     48  Canonical<std::string> mLocalCname;
     49  Canonical<std::string> mMid;
     50  Canonical<std::string> mSyncGroup;
     51  Canonical<RtpExtList> mLocalSendRtpExtensions;
     52  Canonical<RtpExtList> mLocalRecvRtpExtensions;
     53  Canonical<Ssrc> mRemoteSsrc;
     54  Canonical<Ssrc> mRemoteVideoRtxSsrc;
     55  Canonical<RefPtr<FrameTransformerProxy>> mFrameTransformerProxySend;
     56  Canonical<RefPtr<FrameTransformerProxy>> mFrameTransformerProxyRecv;
     57 
     58  Canonical<std::vector<AudioCodecConfig>> mAudioRecvCodecs;
     59  Canonical<Maybe<AudioCodecConfig>> mAudioSendCodec;
     60  MediaEventProducer<DtmfEvent> mDtmfEvent;
     61 
     62  Canonical<std::vector<VideoCodecConfig>> mVideoRecvCodecs;
     63  Canonical<Maybe<VideoCodecConfig>> mVideoSendCodec;
     64  Canonical<Maybe<RtpRtcpConfig>> mVideoRecvRtpRtcpConfig;
     65  Canonical<Maybe<RtpRtcpConfig>> mVideoSendRtpRtcpConfig;
     66  Canonical<webrtc::VideoCodecMode> mVideoCodecMode;
     67  Canonical<webrtc::DegradationPreference> mVideoDegradationPreference;
     68 };
     69 #undef INIT_CANONICAL
     70 
     71 class ConcreteControl : public AudioConduitControlInterface,
     72                        public VideoConduitControlInterface,
     73                        public MediaPipelineReceiveControlInterface,
     74                        public MediaPipelineTransmitControlInterface,
     75                        private ConcreteCanonicals {
     76 private:
     77  RefPtr<nsISerialEventTarget> mTarget;
     78 
     79 public:
     80  explicit ConcreteControl(RefPtr<nsISerialEventTarget> aTarget)
     81      : mTarget(std::move(aTarget)) {}
     82 
     83  template <typename Function>
     84  void Update(Function aFunction) {
     85    mTarget->Dispatch(NS_NewRunnableFunction(
     86        __func__, [&] { aFunction(*static_cast<ConcreteCanonicals*>(this)); }));
     87    WaitForMirrors(mTarget);
     88  }
     89 
     90  // MediaConduitControlInterface
     91  // -- MediaPipelineReceiveControlInterface
     92  Canonical<bool>& CanonicalReceiving() override { return mReceiving; }
     93  // -- MediaPipelineTransmitControlInterface
     94  Canonical<bool>& CanonicalTransmitting() override { return mTransmitting; }
     95  Canonical<Ssrcs>& CanonicalLocalSsrcs() override { return mLocalSsrcs; }
     96  Canonical<Ssrcs>& CanonicalLocalVideoRtxSsrcs() override {
     97    return mLocalVideoRtxSsrcs;
     98  }
     99  Canonical<std::string>& CanonicalLocalCname() override { return mLocalCname; }
    100  Canonical<std::string>& CanonicalMid() override { return mMid; }
    101  Canonical<Ssrc>& CanonicalRemoteSsrc() override { return mRemoteSsrc; }
    102  Canonical<Ssrc>& CanonicalRemoteVideoRtxSsrc() override {
    103    return mRemoteVideoRtxSsrc;
    104  }
    105  Canonical<std::string>& CanonicalSyncGroup() override { return mSyncGroup; }
    106  Canonical<RtpExtList>& CanonicalLocalRecvRtpExtensions() override {
    107    return mLocalRecvRtpExtensions;
    108  }
    109  Canonical<RtpExtList>& CanonicalLocalSendRtpExtensions() override {
    110    return mLocalSendRtpExtensions;
    111  }
    112  Canonical<RefPtr<FrameTransformerProxy>>& CanonicalFrameTransformerProxySend()
    113      override {
    114    return mFrameTransformerProxySend;
    115  }
    116  Canonical<RefPtr<FrameTransformerProxy>>& CanonicalFrameTransformerProxyRecv()
    117      override {
    118    return mFrameTransformerProxyRecv;
    119  }
    120 
    121  // AudioConduitControlInterface
    122  Canonical<Maybe<AudioCodecConfig>>& CanonicalAudioSendCodec() override {
    123    return mAudioSendCodec;
    124  }
    125  Canonical<std::vector<AudioCodecConfig>>& CanonicalAudioRecvCodecs()
    126      override {
    127    return mAudioRecvCodecs;
    128  }
    129  MediaEventSource<DtmfEvent>& OnDtmfEvent() override { return mDtmfEvent; }
    130 
    131  // VideoConduitControlInterface
    132  Canonical<Maybe<VideoCodecConfig>>& CanonicalVideoSendCodec() override {
    133    return mVideoSendCodec;
    134  }
    135  Canonical<Maybe<RtpRtcpConfig>>& CanonicalVideoSendRtpRtcpConfig() override {
    136    return mVideoSendRtpRtcpConfig;
    137  }
    138  Canonical<std::vector<VideoCodecConfig>>& CanonicalVideoRecvCodecs()
    139      override {
    140    return mVideoRecvCodecs;
    141  }
    142  Canonical<Maybe<RtpRtcpConfig>>& CanonicalVideoRecvRtpRtcpConfig() override {
    143    return mVideoRecvRtpRtcpConfig;
    144  }
    145  Canonical<webrtc::VideoCodecMode>& CanonicalVideoCodecMode() override {
    146    return mVideoCodecMode;
    147  }
    148  Canonical<webrtc::DegradationPreference>&
    149  CanonicalVideoDegradationPreference() override {
    150    return mVideoDegradationPreference;
    151  }
    152 };
    153 
    154 }  // namespace mozilla
    155 
    156 #endif