/* -*- 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 "mozilla/gtest/WaitFor.h" #include "MediaConduitControl.h" #include "MediaPipeline.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(mFrameTransformerProxySend, nullptr), INIT_CANONICAL(mFrameTransformerProxyRecv, nullptr), 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> mFrameTransformerProxySend; Canonical> mFrameTransformerProxyRecv; 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 Canonical& CanonicalReceiving() override { return mReceiving; } // -- MediaPipelineTransmitControlInterface Canonical& CanonicalTransmitting() override { return mTransmitting; } Canonical& CanonicalLocalSsrcs() override { return mLocalSsrcs; } Canonical& CanonicalLocalVideoRtxSsrcs() override { return mLocalVideoRtxSsrcs; } Canonical& CanonicalLocalCname() override { return mLocalCname; } Canonical& CanonicalMid() override { return mMid; } Canonical& CanonicalRemoteSsrc() override { return mRemoteSsrc; } Canonical& CanonicalRemoteVideoRtxSsrc() override { return mRemoteVideoRtxSsrc; } Canonical& CanonicalSyncGroup() override { return mSyncGroup; } Canonical& CanonicalLocalRecvRtpExtensions() override { return mLocalRecvRtpExtensions; } Canonical& CanonicalLocalSendRtpExtensions() override { return mLocalSendRtpExtensions; } Canonical>& CanonicalFrameTransformerProxySend() override { return mFrameTransformerProxySend; } Canonical>& CanonicalFrameTransformerProxyRecv() override { return mFrameTransformerProxyRecv; } // AudioConduitControlInterface Canonical>& CanonicalAudioSendCodec() override { return mAudioSendCodec; } Canonical>& CanonicalAudioRecvCodecs() override { return mAudioRecvCodecs; } MediaEventSource& OnDtmfEvent() override { return mDtmfEvent; } // VideoConduitControlInterface Canonical>& CanonicalVideoSendCodec() override { return mVideoSendCodec; } Canonical>& CanonicalVideoSendRtpRtcpConfig() override { return mVideoSendRtpRtcpConfig; } Canonical>& CanonicalVideoRecvCodecs() override { return mVideoRecvCodecs; } Canonical>& CanonicalVideoRecvRtpRtcpConfig() override { return mVideoRecvRtpRtcpConfig; } Canonical& CanonicalVideoCodecMode() override { return mVideoCodecMode; } }; } // namespace mozilla #endif