/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim:set ts=2 sw=2 sts=2 et cindent: */ /* 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/. */ #ifndef MEDIA_WEBRTC_SIGNALING_GTEST_CANONICALS_H_ #define MEDIA_WEBRTC_SIGNALING_GTEST_CANONICALS_H_ #include "MediaConduitControl.h" #include "MediaPipeline.h" #include "WaitFor.h" namespace mozilla { #define INIT_CANONICAL(name, val) \ name(AbstractThread::MainThread(), val, "ConcreteCanonicals::" #name) class ConcreteCanonicals { public: ConcreteCanonicals() : INIT_CANONICAL(mReceiving, false), INIT_CANONICAL(mTransmitting, false), INIT_CANONICAL(mLocalSsrcs, Ssrcs()), INIT_CANONICAL(mLocalVideoRtxSsrcs, Ssrcs()), INIT_CANONICAL(mLocalCname, std::string()), INIT_CANONICAL(mMid, std::string()), INIT_CANONICAL(mSyncGroup, std::string()), INIT_CANONICAL(mLocalSendRtpExtensions, RtpExtList()), INIT_CANONICAL(mLocalRecvRtpExtensions, RtpExtList()), INIT_CANONICAL(mRemoteSsrc, 0), INIT_CANONICAL(mRemoteVideoRtxSsrc, 0), INIT_CANONICAL(mAudioRecvCodecs, std::vector()), INIT_CANONICAL(mAudioSendCodec, Nothing()), INIT_CANONICAL(mVideoRecvCodecs, std::vector()), INIT_CANONICAL(mVideoSendCodec, Nothing()), INIT_CANONICAL(mVideoRecvRtpRtcpConfig, Nothing()), INIT_CANONICAL(mVideoSendRtpRtcpConfig, Nothing()), INIT_CANONICAL(mVideoCodecMode, webrtc::VideoCodecMode::kRealtimeVideo) {} Canonical mReceiving; Canonical mTransmitting; Canonical mLocalSsrcs; Canonical mLocalVideoRtxSsrcs; Canonical mLocalCname; Canonical mMid; Canonical mSyncGroup; Canonical mLocalSendRtpExtensions; Canonical mLocalRecvRtpExtensions; Canonical mRemoteSsrc; Canonical mRemoteVideoRtxSsrc; Canonical> mAudioRecvCodecs; Canonical> mAudioSendCodec; MediaEventProducer mDtmfEvent; Canonical> mVideoRecvCodecs; Canonical> mVideoSendCodec; Canonical> mVideoRecvRtpRtcpConfig; Canonical> mVideoSendRtpRtcpConfig; Canonical mVideoCodecMode; }; #undef INIT_CANONICAL class ConcreteControl : public AudioConduitControlInterface, public VideoConduitControlInterface, public MediaPipelineReceiveControlInterface, public MediaPipelineTransmitControlInterface, private ConcreteCanonicals { private: RefPtr mTarget; public: explicit ConcreteControl(RefPtr aTarget) : mTarget(std::move(aTarget)) {} template void Update(Function aFunction) { mTarget->Dispatch(NS_NewRunnableFunction( __func__, [&] { aFunction(*static_cast(this)); })); WaitForMirrors(mTarget); } // MediaConduitControlInterface // -- MediaPipelineReceiveControlInterface AbstractCanonical* CanonicalReceiving() override { return &mReceiving; } // -- MediaPipelineTransmitControlInterface AbstractCanonical* CanonicalTransmitting() override { return &mTransmitting; } AbstractCanonical* CanonicalLocalSsrcs() override { return &mLocalSsrcs; } AbstractCanonical* CanonicalLocalVideoRtxSsrcs() override { return &mLocalVideoRtxSsrcs; } AbstractCanonical* CanonicalLocalCname() override { return &mLocalCname; } AbstractCanonical* CanonicalMid() override { return &mMid; } AbstractCanonical* CanonicalRemoteSsrc() override { return &mRemoteSsrc; } AbstractCanonical* CanonicalRemoteVideoRtxSsrc() override { return &mRemoteVideoRtxSsrc; } AbstractCanonical* CanonicalSyncGroup() override { return &mSyncGroup; } AbstractCanonical* CanonicalLocalRecvRtpExtensions() override { return &mLocalRecvRtpExtensions; } AbstractCanonical* CanonicalLocalSendRtpExtensions() override { return &mLocalSendRtpExtensions; } // AudioConduitControlInterface AbstractCanonical>* CanonicalAudioSendCodec() override { return &mAudioSendCodec; } AbstractCanonical>* CanonicalAudioRecvCodecs() override { return &mAudioRecvCodecs; } MediaEventSource& OnDtmfEvent() override { return mDtmfEvent; } // VideoConduitControlInterface AbstractCanonical>* CanonicalVideoSendCodec() override { return &mVideoSendCodec; } AbstractCanonical>* CanonicalVideoSendRtpRtcpConfig() override { return &mVideoSendRtpRtcpConfig; } AbstractCanonical>* CanonicalVideoRecvCodecs() override { return &mVideoRecvCodecs; } AbstractCanonical>* CanonicalVideoRecvRtpRtcpConfig() override { return &mVideoRecvRtpRtcpConfig; } AbstractCanonical* CanonicalVideoCodecMode() override { return &mVideoCodecMode; } }; } // namespace mozilla #endif