/* 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 _MEDIAPIPELINEFACTORY_H_ #define _MEDIAPIPELINEFACTORY_H_ #include "MediaConduitInterface.h" #include "PeerConnectionMedia.h" #include "transportflow.h" #include "signaling/src/jsep/JsepTrack.h" #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" namespace mozilla { class MediaPipelineFactory { public: explicit MediaPipelineFactory(PeerConnectionMedia* aPCMedia) : mPCMedia(aPCMedia), mPC(aPCMedia->GetPC()) { } nsresult CreateOrUpdateMediaPipeline(const JsepTrackPair& aTrackPair, const JsepTrack& aTrack); private: nsresult CreateMediaPipelineReceiving( const JsepTrackPair& aTrackPair, const JsepTrack& aTrack, size_t level, RefPtr aRtpFlow, RefPtr aRtcpFlow, nsAutoPtr filter, const RefPtr& aConduit); nsresult CreateMediaPipelineSending( const JsepTrackPair& aTrackPair, const JsepTrack& aTrack, size_t level, RefPtr aRtpFlow, RefPtr aRtcpFlow, nsAutoPtr filter, const RefPtr& aConduit); nsresult GetOrCreateAudioConduit(const JsepTrackPair& aTrackPair, const JsepTrack& aTrack, RefPtr* aConduitp); nsresult GetOrCreateVideoConduit(const JsepTrackPair& aTrackPair, const JsepTrack& aTrack, RefPtr* aConduitp); MediaConduitErrorCode EnsureExternalCodec(VideoSessionConduit& aConduit, VideoCodecConfig* aConfig, bool aIsSend); nsresult CreateOrGetTransportFlow(size_t aLevel, bool aIsRtcp, const JsepTransport& transport, RefPtr* out); nsresult GetTransportParameters(const JsepTrackPair& aTrackPair, const JsepTrack& aTrack, size_t* aLevelOut, RefPtr* aRtpOut, RefPtr* aRtcpOut, nsAutoPtr* aFilterOut); nsresult ConfigureVideoCodecMode(const JsepTrack& aTrack, VideoSessionConduit& aConduit); private: // Not owned, and assumed to exist as long as the factory. // The factory is a transient object, so this is fairly easy. PeerConnectionMedia* mPCMedia; PeerConnectionImpl* mPC; }; } // namespace mozilla #endif