/* * Copyright 2017 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef ORTC_ORTCRTPRECEIVERADAPTER_H_ #define ORTC_ORTCRTPRECEIVERADAPTER_H_ #include #include "api/ortc/ortcrtpreceiverinterface.h" #include "api/rtcerror.h" #include "api/rtpparameters.h" #include "ortc/rtptransportcontrolleradapter.h" #include "pc/rtpreceiver.h" #include "rtc_base/constructormagic.h" #include "rtc_base/third_party/sigslot/sigslot.h" #include "rtc_base/thread.h" namespace webrtc { // Implementation of OrtcRtpReceiverInterface that works with // RtpTransportAdapter, and wraps a VideoRtpReceiver/AudioRtpReceiver that's // normally used with the PeerConnection. // // TODO(deadbeef): When BaseChannel is split apart into separate // "RtpReceiver"/"RtpTransceiver"/"RtpReceiver"/"RtpReceiver" objects, this // adapter object can be removed. class OrtcRtpReceiverAdapter : public OrtcRtpReceiverInterface { public: // Wraps |wrapped_receiver| in a proxy that will safely call methods on the // correct thread. static std::unique_ptr CreateProxy( std::unique_ptr wrapped_receiver); // Should only be called by RtpTransportControllerAdapter. OrtcRtpReceiverAdapter( cricket::MediaType kind, RtpTransportInterface* transport, RtpTransportControllerAdapter* rtp_transport_controller); ~OrtcRtpReceiverAdapter() override; // OrtcRtpReceiverInterface implementation. rtc::scoped_refptr GetTrack() const override; RTCError SetTransport(RtpTransportInterface* transport) override; RtpTransportInterface* GetTransport() const override; RTCError Receive(const RtpParameters& parameters) override; RtpParameters GetParameters() const override; cricket::MediaType GetKind() const override; // Used so that the RtpTransportControllerAdapter knows when it can // deallocate resources allocated for this object. sigslot::signal0<> SignalDestroyed; private: void MaybeRecreateInternalReceiver(); cricket::MediaType kind_; RtpTransportInterface* transport_; RtpTransportControllerAdapter* rtp_transport_controller_; // Scoped refptr due to ref-counted interface, but we should be the only // reference holder. rtc::scoped_refptr internal_receiver_; RtpParameters last_applied_parameters_; RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(OrtcRtpReceiverAdapter); }; } // namespace webrtc #endif // ORTC_ORTCRTPRECEIVERADAPTER_H_