Line data Source code
1 : /* This Source Code Form is subject to the terms of the Mozilla Public
2 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
4 : #ifndef _MEDIAPIPELINEFACTORY_H_
5 : #define _MEDIAPIPELINEFACTORY_H_
6 :
7 : #include "MediaConduitInterface.h"
8 : #include "PeerConnectionMedia.h"
9 : #include "transportflow.h"
10 :
11 : #include "signaling/src/jsep/JsepTrack.h"
12 : #include "mozilla/RefPtr.h"
13 : #include "mozilla/UniquePtr.h"
14 :
15 : namespace mozilla {
16 :
17 : class MediaPipelineFactory
18 : {
19 : public:
20 0 : explicit MediaPipelineFactory(PeerConnectionMedia* aPCMedia)
21 0 : : mPCMedia(aPCMedia), mPC(aPCMedia->GetPC())
22 : {
23 0 : }
24 :
25 : nsresult CreateOrUpdateMediaPipeline(const JsepTrackPair& aTrackPair,
26 : const JsepTrack& aTrack);
27 :
28 : private:
29 : nsresult CreateMediaPipelineReceiving(
30 : const JsepTrackPair& aTrackPair,
31 : const JsepTrack& aTrack,
32 : size_t level,
33 : RefPtr<TransportFlow> aRtpFlow,
34 : RefPtr<TransportFlow> aRtcpFlow,
35 : nsAutoPtr<MediaPipelineFilter> filter,
36 : const RefPtr<MediaSessionConduit>& aConduit);
37 :
38 : nsresult CreateMediaPipelineSending(
39 : const JsepTrackPair& aTrackPair,
40 : const JsepTrack& aTrack,
41 : size_t level,
42 : RefPtr<TransportFlow> aRtpFlow,
43 : RefPtr<TransportFlow> aRtcpFlow,
44 : nsAutoPtr<MediaPipelineFilter> filter,
45 : const RefPtr<MediaSessionConduit>& aConduit);
46 :
47 : nsresult GetOrCreateAudioConduit(const JsepTrackPair& aTrackPair,
48 : const JsepTrack& aTrack,
49 : RefPtr<MediaSessionConduit>* aConduitp);
50 :
51 : nsresult GetOrCreateVideoConduit(const JsepTrackPair& aTrackPair,
52 : const JsepTrack& aTrack,
53 : RefPtr<MediaSessionConduit>* aConduitp);
54 :
55 : nsresult CreateOrGetTransportFlow(size_t aLevel, bool aIsRtcp,
56 : const JsepTransport& transport,
57 : RefPtr<TransportFlow>* out);
58 :
59 : nsresult GetTransportParameters(const JsepTrackPair& aTrackPair,
60 : const JsepTrack& aTrack,
61 : size_t* aLevelOut,
62 : RefPtr<TransportFlow>* aRtpOut,
63 : RefPtr<TransportFlow>* aRtcpOut,
64 : nsAutoPtr<MediaPipelineFilter>* aFilterOut);
65 :
66 : nsresult ConfigureVideoCodecMode(const JsepTrack& aTrack,
67 : VideoSessionConduit& aConduit);
68 :
69 : private:
70 : // Not owned, and assumed to exist as long as the factory.
71 : // The factory is a transient object, so this is fairly easy.
72 : PeerConnectionMedia* mPCMedia;
73 : PeerConnectionImpl* mPC;
74 : };
75 :
76 : } // namespace mozilla
77 :
78 : #endif
|