diff options
Diffstat (limited to 'media/webrtc/signaling/gtest/Canonicals.h')
-rw-r--r-- | media/webrtc/signaling/gtest/Canonicals.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/media/webrtc/signaling/gtest/Canonicals.h b/media/webrtc/signaling/gtest/Canonicals.h new file mode 100644 index 0000000000..e7bab2d4fd --- /dev/null +++ b/media/webrtc/signaling/gtest/Canonicals.h @@ -0,0 +1,150 @@ +/* -*- 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<AudioCodecConfig>()), + INIT_CANONICAL(mAudioSendCodec, Nothing()), + INIT_CANONICAL(mVideoRecvCodecs, std::vector<VideoCodecConfig>()), + INIT_CANONICAL(mVideoSendCodec, Nothing()), + INIT_CANONICAL(mVideoRecvRtpRtcpConfig, Nothing()), + INIT_CANONICAL(mVideoSendRtpRtcpConfig, Nothing()), + INIT_CANONICAL(mVideoCodecMode, + webrtc::VideoCodecMode::kRealtimeVideo) {} + + Canonical<bool> mReceiving; + Canonical<bool> mTransmitting; + Canonical<Ssrcs> mLocalSsrcs; + Canonical<Ssrcs> mLocalVideoRtxSsrcs; + Canonical<std::string> mLocalCname; + Canonical<std::string> mMid; + Canonical<std::string> mSyncGroup; + Canonical<RtpExtList> mLocalSendRtpExtensions; + Canonical<RtpExtList> mLocalRecvRtpExtensions; + Canonical<Ssrc> mRemoteSsrc; + Canonical<Ssrc> mRemoteVideoRtxSsrc; + Canonical<RefPtr<FrameTransformerProxy>> mFrameTransformerProxySend; + Canonical<RefPtr<FrameTransformerProxy>> mFrameTransformerProxyRecv; + + Canonical<std::vector<AudioCodecConfig>> mAudioRecvCodecs; + Canonical<Maybe<AudioCodecConfig>> mAudioSendCodec; + MediaEventProducer<DtmfEvent> mDtmfEvent; + + Canonical<std::vector<VideoCodecConfig>> mVideoRecvCodecs; + Canonical<Maybe<VideoCodecConfig>> mVideoSendCodec; + Canonical<Maybe<RtpRtcpConfig>> mVideoRecvRtpRtcpConfig; + Canonical<Maybe<RtpRtcpConfig>> mVideoSendRtpRtcpConfig; + Canonical<webrtc::VideoCodecMode> mVideoCodecMode; +}; +#undef INIT_CANONICAL + +class ConcreteControl : public AudioConduitControlInterface, + public VideoConduitControlInterface, + public MediaPipelineReceiveControlInterface, + public MediaPipelineTransmitControlInterface, + private ConcreteCanonicals { + private: + RefPtr<nsISerialEventTarget> mTarget; + + public: + explicit ConcreteControl(RefPtr<nsISerialEventTarget> aTarget) + : mTarget(std::move(aTarget)) {} + + template <typename Function> + void Update(Function aFunction) { + mTarget->Dispatch(NS_NewRunnableFunction( + __func__, [&] { aFunction(*static_cast<ConcreteCanonicals*>(this)); })); + WaitForMirrors(mTarget); + } + + // MediaConduitControlInterface + // -- MediaPipelineReceiveControlInterface + Canonical<bool>& CanonicalReceiving() override { return mReceiving; } + // -- MediaPipelineTransmitControlInterface + Canonical<bool>& CanonicalTransmitting() override { return mTransmitting; } + Canonical<Ssrcs>& CanonicalLocalSsrcs() override { return mLocalSsrcs; } + Canonical<Ssrcs>& CanonicalLocalVideoRtxSsrcs() override { + return mLocalVideoRtxSsrcs; + } + Canonical<std::string>& CanonicalLocalCname() override { return mLocalCname; } + Canonical<std::string>& CanonicalMid() override { return mMid; } + Canonical<Ssrc>& CanonicalRemoteSsrc() override { return mRemoteSsrc; } + Canonical<Ssrc>& CanonicalRemoteVideoRtxSsrc() override { + return mRemoteVideoRtxSsrc; + } + Canonical<std::string>& CanonicalSyncGroup() override { return mSyncGroup; } + Canonical<RtpExtList>& CanonicalLocalRecvRtpExtensions() override { + return mLocalRecvRtpExtensions; + } + Canonical<RtpExtList>& CanonicalLocalSendRtpExtensions() override { + return mLocalSendRtpExtensions; + } + Canonical<RefPtr<FrameTransformerProxy>>& CanonicalFrameTransformerProxySend() + override { + return mFrameTransformerProxySend; + } + Canonical<RefPtr<FrameTransformerProxy>>& CanonicalFrameTransformerProxyRecv() + override { + return mFrameTransformerProxyRecv; + } + + // AudioConduitControlInterface + Canonical<Maybe<AudioCodecConfig>>& CanonicalAudioSendCodec() override { + return mAudioSendCodec; + } + Canonical<std::vector<AudioCodecConfig>>& CanonicalAudioRecvCodecs() + override { + return mAudioRecvCodecs; + } + MediaEventSource<DtmfEvent>& OnDtmfEvent() override { return mDtmfEvent; } + + // VideoConduitControlInterface + Canonical<Maybe<VideoCodecConfig>>& CanonicalVideoSendCodec() override { + return mVideoSendCodec; + } + Canonical<Maybe<RtpRtcpConfig>>& CanonicalVideoSendRtpRtcpConfig() override { + return mVideoSendRtpRtcpConfig; + } + Canonical<std::vector<VideoCodecConfig>>& CanonicalVideoRecvCodecs() + override { + return mVideoRecvCodecs; + } + Canonical<Maybe<RtpRtcpConfig>>& CanonicalVideoRecvRtpRtcpConfig() override { + return mVideoRecvRtpRtcpConfig; + } + Canonical<webrtc::VideoCodecMode>& CanonicalVideoCodecMode() override { + return mVideoCodecMode; + } +}; + +} // namespace mozilla + +#endif |