diff options
Diffstat (limited to 'dom/media/webrtc/WebrtcGlobal.h')
-rw-r--r-- | dom/media/webrtc/WebrtcGlobal.h | 497 |
1 files changed, 497 insertions, 0 deletions
diff --git a/dom/media/webrtc/WebrtcGlobal.h b/dom/media/webrtc/WebrtcGlobal.h new file mode 100644 index 000000000..8ab10cb0d --- /dev/null +++ b/dom/media/webrtc/WebrtcGlobal.h @@ -0,0 +1,497 @@ +/* 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 _WEBRTC_GLOBAL_H_ +#define _WEBRTC_GLOBAL_H_ + +#include "ipc/IPCMessageUtils.h" +#include "mozilla/dom/BindingDeclarations.h" +#include "mozilla/dom/RTCStatsReportBinding.h" +#include "nsAutoPtr.h" + +typedef mozilla::dom::RTCStatsReportInternal StatsReport; +typedef nsTArray< nsAutoPtr<StatsReport>> RTCReports; +typedef mozilla::dom::Sequence<nsString> WebrtcGlobalLog; + +namespace IPC { + +template<typename T> +struct ParamTraits<mozilla::dom::Optional<T>> +{ + typedef mozilla::dom::Optional<T> paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + if (aParam.WasPassed()) { + WriteParam(aMsg, true); + WriteParam(aMsg, aParam.Value()); + return; + } + + WriteParam(aMsg, false); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + bool was_passed = false; + + if (!ReadParam(aMsg, aIter, &was_passed)) { + return false; + } + + aResult->Reset(); //XXX Optional_base seems to reach this point with isSome true. + + if (was_passed) { + if (!ReadParam(aMsg, aIter, &(aResult->Construct()))) { + return false; + } + } + + return true; + } +}; + +template<typename T> +struct ParamTraits<mozilla::dom::Sequence<T>> +{ + typedef mozilla::dom::Sequence<T> paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, static_cast<const FallibleTArray<T>&>(aParam)); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + return ReadParam(aMsg, aIter, dynamic_cast<FallibleTArray<T>*>(aResult)); + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCStatsType> : + public ContiguousEnumSerializer< + mozilla::dom::RTCStatsType, + mozilla::dom::RTCStatsType::Inboundrtp, + mozilla::dom::RTCStatsType::EndGuard_> +{}; + +template<> +struct ParamTraits<mozilla::dom::RTCStatsIceCandidatePairState> : + public ContiguousEnumSerializer< + mozilla::dom::RTCStatsIceCandidatePairState, + mozilla::dom::RTCStatsIceCandidatePairState::Frozen, + mozilla::dom::RTCStatsIceCandidatePairState::EndGuard_> +{}; + +template<> +struct ParamTraits<mozilla::dom::RTCStatsIceCandidateType> : + public ContiguousEnumSerializer< + mozilla::dom::RTCStatsIceCandidateType, + mozilla::dom::RTCStatsIceCandidateType::Host, + mozilla::dom::RTCStatsIceCandidateType::EndGuard_> +{}; + +template<> +struct ParamTraits<mozilla::dom::RTCStatsReportInternal> +{ + typedef mozilla::dom::RTCStatsReportInternal paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mClosed); + WriteParam(aMsg, aParam.mCodecStats); + WriteParam(aMsg, aParam.mIceCandidatePairStats); + WriteParam(aMsg, aParam.mIceCandidateStats); + WriteParam(aMsg, aParam.mIceComponentStats); + WriteParam(aMsg, aParam.mInboundRTPStreamStats); + WriteParam(aMsg, aParam.mLocalSdp); + WriteParam(aMsg, aParam.mMediaStreamStats); + WriteParam(aMsg, aParam.mMediaStreamTrackStats); + WriteParam(aMsg, aParam.mOutboundRTPStreamStats); + WriteParam(aMsg, aParam.mPcid); + WriteParam(aMsg, aParam.mRemoteSdp); + WriteParam(aMsg, aParam.mTimestamp); + WriteParam(aMsg, aParam.mTransportStats); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mClosed)) || + !ReadParam(aMsg, aIter, &(aResult->mCodecStats)) || + !ReadParam(aMsg, aIter, &(aResult->mIceCandidatePairStats)) || + !ReadParam(aMsg, aIter, &(aResult->mIceCandidateStats)) || + !ReadParam(aMsg, aIter, &(aResult->mIceComponentStats)) || + !ReadParam(aMsg, aIter, &(aResult->mInboundRTPStreamStats)) || + !ReadParam(aMsg, aIter, &(aResult->mLocalSdp)) || + !ReadParam(aMsg, aIter, &(aResult->mMediaStreamStats)) || + !ReadParam(aMsg, aIter, &(aResult->mMediaStreamTrackStats)) || + !ReadParam(aMsg, aIter, &(aResult->mOutboundRTPStreamStats)) || + !ReadParam(aMsg, aIter, &(aResult->mPcid)) || + !ReadParam(aMsg, aIter, &(aResult->mRemoteSdp)) || + !ReadParam(aMsg, aIter, &(aResult->mTimestamp)) || + !ReadParam(aMsg, aIter, &(aResult->mTransportStats))) { + return false; + } + + return true; + } +}; + +typedef mozilla::dom::RTCStats RTCStats; + +static void WriteRTCStats(Message* aMsg, const RTCStats& aParam) +{ + // RTCStats base class + WriteParam(aMsg, aParam.mId); + WriteParam(aMsg, aParam.mTimestamp); + WriteParam(aMsg, aParam.mType); +} + +static bool ReadRTCStats(const Message* aMsg, PickleIterator* aIter, RTCStats* aResult) +{ + // RTCStats base class + if (!ReadParam(aMsg, aIter, &(aResult->mId)) || + !ReadParam(aMsg, aIter, &(aResult->mTimestamp)) || + !ReadParam(aMsg, aIter, &(aResult->mType))) { + return false; + } + + return true; +} + +template<> +struct ParamTraits<mozilla::dom::RTCCodecStats> +{ + typedef mozilla::dom::RTCCodecStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mChannels); + WriteParam(aMsg, aParam.mClockRate); + WriteParam(aMsg, aParam.mCodec); + WriteParam(aMsg, aParam.mParameters); + WriteParam(aMsg, aParam.mPayloadType); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mChannels)) || + !ReadParam(aMsg, aIter, &(aResult->mClockRate)) || + !ReadParam(aMsg, aIter, &(aResult->mCodec)) || + !ReadParam(aMsg, aIter, &(aResult->mParameters)) || + !ReadParam(aMsg, aIter, &(aResult->mPayloadType)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCIceCandidatePairStats> +{ + typedef mozilla::dom::RTCIceCandidatePairStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mComponentId); + WriteParam(aMsg, aParam.mLocalCandidateId); + WriteParam(aMsg, aParam.mPriority); + WriteParam(aMsg, aParam.mNominated); + WriteParam(aMsg, aParam.mReadable); + WriteParam(aMsg, aParam.mRemoteCandidateId); + WriteParam(aMsg, aParam.mSelected); + WriteParam(aMsg, aParam.mState); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mComponentId)) || + !ReadParam(aMsg, aIter, &(aResult->mLocalCandidateId)) || + !ReadParam(aMsg, aIter, &(aResult->mPriority)) || + !ReadParam(aMsg, aIter, &(aResult->mNominated)) || + !ReadParam(aMsg, aIter, &(aResult->mReadable)) || + !ReadParam(aMsg, aIter, &(aResult->mRemoteCandidateId)) || + !ReadParam(aMsg, aIter, &(aResult->mSelected)) || + !ReadParam(aMsg, aIter, &(aResult->mState)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCIceCandidateStats> +{ + typedef mozilla::dom::RTCIceCandidateStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mCandidateId); + WriteParam(aMsg, aParam.mCandidateType); + WriteParam(aMsg, aParam.mComponentId); + WriteParam(aMsg, aParam.mIpAddress); + WriteParam(aMsg, aParam.mMozLocalTransport); + WriteParam(aMsg, aParam.mPortNumber); + WriteParam(aMsg, aParam.mTransport); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mCandidateId)) || + !ReadParam(aMsg, aIter, &(aResult->mCandidateType)) || + !ReadParam(aMsg, aIter, &(aResult->mComponentId)) || + !ReadParam(aMsg, aIter, &(aResult->mIpAddress)) || + !ReadParam(aMsg, aIter, &(aResult->mMozLocalTransport)) || + !ReadParam(aMsg, aIter, &(aResult->mPortNumber)) || + !ReadParam(aMsg, aIter, &(aResult->mTransport)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCIceComponentStats> +{ + typedef mozilla::dom::RTCIceComponentStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mActiveConnection); + WriteParam(aMsg, aParam.mBytesReceived); + WriteParam(aMsg, aParam.mBytesSent); + WriteParam(aMsg, aParam.mComponent); + WriteParam(aMsg, aParam.mTransportId); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mActiveConnection)) || + !ReadParam(aMsg, aIter, &(aResult->mBytesReceived)) || + !ReadParam(aMsg, aIter, &(aResult->mBytesSent)) || + !ReadParam(aMsg, aIter, &(aResult->mComponent)) || + !ReadParam(aMsg, aIter, &(aResult->mTransportId)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +static void WriteRTCRTPStreamStats( + Message* aMsg, + const mozilla::dom::RTCRTPStreamStats& aParam) +{ + WriteParam(aMsg, aParam.mBitrateMean); + WriteParam(aMsg, aParam.mBitrateStdDev); + WriteParam(aMsg, aParam.mCodecId); + WriteParam(aMsg, aParam.mFramerateMean); + WriteParam(aMsg, aParam.mFramerateStdDev); + WriteParam(aMsg, aParam.mIsRemote); + WriteParam(aMsg, aParam.mMediaTrackId); + WriteParam(aMsg, aParam.mMediaType); + WriteParam(aMsg, aParam.mRemoteId); + WriteParam(aMsg, aParam.mSsrc); + WriteParam(aMsg, aParam.mTransportId); +} + +static bool ReadRTCRTPStreamStats( + const Message* aMsg, PickleIterator* aIter, + mozilla::dom::RTCRTPStreamStats* aResult) +{ + if (!ReadParam(aMsg, aIter, &(aResult->mBitrateMean)) || + !ReadParam(aMsg, aIter, &(aResult->mBitrateStdDev)) || + !ReadParam(aMsg, aIter, &(aResult->mCodecId)) || + !ReadParam(aMsg, aIter, &(aResult->mFramerateMean)) || + !ReadParam(aMsg, aIter, &(aResult->mFramerateStdDev)) || + !ReadParam(aMsg, aIter, &(aResult->mIsRemote)) || + !ReadParam(aMsg, aIter, &(aResult->mMediaTrackId)) || + !ReadParam(aMsg, aIter, &(aResult->mMediaType)) || + !ReadParam(aMsg, aIter, &(aResult->mRemoteId)) || + !ReadParam(aMsg, aIter, &(aResult->mSsrc)) || + !ReadParam(aMsg, aIter, &(aResult->mTransportId))) { + return false; + } + + return true; +} + +template<> +struct ParamTraits<mozilla::dom::RTCInboundRTPStreamStats> +{ + typedef mozilla::dom::RTCInboundRTPStreamStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mBytesReceived); + WriteParam(aMsg, aParam.mDiscardedPackets); + WriteParam(aMsg, aParam.mJitter); + WriteParam(aMsg, aParam.mMozAvSyncDelay); + WriteParam(aMsg, aParam.mMozJitterBufferDelay); + WriteParam(aMsg, aParam.mMozRtt); + WriteParam(aMsg, aParam.mPacketsLost); + WriteParam(aMsg, aParam.mPacketsReceived); + WriteRTCRTPStreamStats(aMsg, aParam); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mBytesReceived)) || + !ReadParam(aMsg, aIter, &(aResult->mDiscardedPackets)) || + !ReadParam(aMsg, aIter, &(aResult->mJitter)) || + !ReadParam(aMsg, aIter, &(aResult->mMozAvSyncDelay)) || + !ReadParam(aMsg, aIter, &(aResult->mMozJitterBufferDelay)) || + !ReadParam(aMsg, aIter, &(aResult->mMozRtt)) || + !ReadParam(aMsg, aIter, &(aResult->mPacketsLost)) || + !ReadParam(aMsg, aIter, &(aResult->mPacketsReceived)) || + !ReadRTCRTPStreamStats(aMsg, aIter, aResult) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCOutboundRTPStreamStats> +{ + typedef mozilla::dom::RTCOutboundRTPStreamStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mBytesSent); + WriteParam(aMsg, aParam.mDroppedFrames); + WriteParam(aMsg, aParam.mPacketsSent); + WriteParam(aMsg, aParam.mTargetBitrate); + WriteRTCRTPStreamStats(aMsg, aParam); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mBytesSent)) || + !ReadParam(aMsg, aIter, &(aResult->mDroppedFrames)) || + !ReadParam(aMsg, aIter, &(aResult->mPacketsSent)) || + !ReadParam(aMsg, aIter, &(aResult->mTargetBitrate)) || + !ReadRTCRTPStreamStats(aMsg, aIter, aResult) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCMediaStreamStats> +{ + typedef mozilla::dom::RTCMediaStreamStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mStreamIdentifier); + WriteParam(aMsg, aParam.mTrackIds); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mStreamIdentifier)) || + !ReadParam(aMsg, aIter, &(aResult->mTrackIds)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCTransportStats> +{ + typedef mozilla::dom::RTCTransportStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mBytesReceived); + WriteParam(aMsg, aParam.mBytesSent); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mBytesReceived)) || + !ReadParam(aMsg, aIter, &(aResult->mBytesSent)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +template<> +struct ParamTraits<mozilla::dom::RTCMediaStreamTrackStats> +{ + typedef mozilla::dom::RTCMediaStreamTrackStats paramType; + + static void Write(Message* aMsg, const paramType& aParam) + { + WriteParam(aMsg, aParam.mAudioLevel); + WriteParam(aMsg, aParam.mEchoReturnLoss); + WriteParam(aMsg, aParam.mEchoReturnLossEnhancement); + WriteParam(aMsg, aParam.mFrameHeight); + WriteParam(aMsg, aParam.mFrameWidth); + WriteParam(aMsg, aParam.mFramesCorrupted); + WriteParam(aMsg, aParam.mFramesDecoded); + WriteParam(aMsg, aParam.mFramesDropped); + WriteParam(aMsg, aParam.mFramesPerSecond); + WriteParam(aMsg, aParam.mFramesReceived); + WriteParam(aMsg, aParam.mFramesSent); + WriteParam(aMsg, aParam.mRemoteSource); + WriteParam(aMsg, aParam.mSsrcIds); + WriteParam(aMsg, aParam.mTrackIdentifier); + WriteRTCStats(aMsg, aParam); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) + { + if (!ReadParam(aMsg, aIter, &(aResult->mAudioLevel)) || + !ReadParam(aMsg, aIter, &(aResult->mEchoReturnLoss)) || + !ReadParam(aMsg, aIter, &(aResult->mEchoReturnLossEnhancement)) || + !ReadParam(aMsg, aIter, &(aResult->mFrameHeight)) || + !ReadParam(aMsg, aIter, &(aResult->mFrameWidth)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesCorrupted)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesDecoded)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesDropped)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesPerSecond)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesReceived)) || + !ReadParam(aMsg, aIter, &(aResult->mFramesSent)) || + !ReadParam(aMsg, aIter, &(aResult->mRemoteSource)) || + !ReadParam(aMsg, aIter, &(aResult->mSsrcIds)) || + !ReadParam(aMsg, aIter, &(aResult->mTrackIdentifier)) || + !ReadRTCStats(aMsg, aIter, aResult)) { + return false; + } + + return true; + } +}; + +} // namespace ipc + +#endif // _WEBRTC_GLOBAL_H_ |