media/webrtc/signaling/src/peerconnection/MediaPipelineFactory.h
author Nathan Froyd <froydnj@mozilla.com>
Wed, 07 Oct 2015 15:05:02 -0400
changeset 301510 1f51d1614b9a58e41dd3a1bf2dc6aad34dbb2170
parent 263701 b1360555587289604d5c12ac2e1e417bf6417cf1
child 301514 91d4539e00cecb658604e021675a923c60ef3235
permissions -rw-r--r--
Bug 1207245 - part 3 - switch all uses of mozilla::RefPtr<T> to nsRefPtr<T>; r=ehsan This commit was generated using the following script, executed at the top level of a typical source code checkout. # Don't modify select files in mfbt/ because it's not worth trying to # tease out the dependencies currently. # # Don't modify anything in media/gmp-clearkey/0.1/ because those files # use their own RefPtr, defined in their own RefCounted.h. find . -name '*.cpp' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \ grep -v 'mfbt/RefPtr.h' | \ grep -v 'mfbt/nsRefPtr.h' | \ grep -v 'mfbt/RefCounted.h' | \ grep -v 'media/gmp-clearkey/0.1/' | \ xargs perl -p -i -e ' s/mozilla::RefPtr/nsRefPtr/g; # handle declarations in headers s/\bRefPtr</nsRefPtr</g; # handle local variables in functions s#mozilla/RefPtr.h#mozilla/nsRefPtr.h#; # handle #includes s#mfbt/RefPtr.h#mfbt/nsRefPtr.h#; # handle strange #includes ' # |using mozilla::RefPtr;| is OK; |using nsRefPtr;| is invalid syntax. find . -name '*.cpp' -o -name '*.mm' | xargs sed -i -e '/using nsRefPtr/d' # RefPtr.h used |byRef| for dealing with COM-style outparams. # nsRefPtr.h uses |getter_AddRefs|. # Fixup that mismatch. find . -name '*.cpp' | \ xargs perl -p -i -e 's/byRef/getter_AddRefs/g'

/* 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/nsRefPtr.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,
      nsRefPtr<TransportFlow> aRtpFlow,
      nsRefPtr<TransportFlow> aRtcpFlow,
      nsAutoPtr<MediaPipelineFilter> filter,
      const nsRefPtr<MediaSessionConduit>& aConduit);

  nsresult CreateMediaPipelineSending(
      const JsepTrackPair& aTrackPair,
      const JsepTrack& aTrack,
      size_t level,
      nsRefPtr<TransportFlow> aRtpFlow,
      nsRefPtr<TransportFlow> aRtcpFlow,
      nsAutoPtr<MediaPipelineFilter> filter,
      const nsRefPtr<MediaSessionConduit>& aConduit);

  nsresult GetOrCreateAudioConduit(const JsepTrackPair& aTrackPair,
                                   const JsepTrack& aTrack,
                                   nsRefPtr<MediaSessionConduit>* aConduitp);

  nsresult GetOrCreateVideoConduit(const JsepTrackPair& aTrackPair,
                                   const JsepTrack& aTrack,
                                   nsRefPtr<MediaSessionConduit>* aConduitp);

  MediaConduitErrorCode EnsureExternalCodec(VideoSessionConduit& aConduit,
                                            VideoCodecConfig* aConfig,
                                            bool aIsSend);

  nsresult CreateOrGetTransportFlow(size_t aLevel, bool aIsRtcp,
                                    const JsepTransport& transport,
                                    nsRefPtr<TransportFlow>* out);

  nsresult GetTransportParameters(const JsepTrackPair& aTrackPair,
                                  const JsepTrack& aTrack,
                                  size_t* aLevelOut,
                                  nsRefPtr<TransportFlow>* aRtpOut,
                                  nsRefPtr<TransportFlow>* aRtcpOut,
                                  nsAutoPtr<MediaPipelineFilter>* 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