/* * 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_ORTCRTPSENDERADAPTER_H_ #define ORTC_ORTCRTPSENDERADAPTER_H_ #include #include "api/ortc/ortcrtpsenderinterface.h" #include "api/rtcerror.h" #include "api/rtpparameters.h" #include "ortc/rtptransportcontrolleradapter.h" #include "pc/rtpsender.h" #include "rtc_base/constructormagic.h" #include "rtc_base/third_party/sigslot/sigslot.h" namespace webrtc { // Implementation of OrtcRtpSenderInterface that works with RtpTransportAdapter, // and wraps a VideoRtpSender/AudioRtpSender that's normally used with the // PeerConnection. // // TODO(deadbeef): When BaseChannel is split apart into separate // "RtpSender"/"RtpTransceiver"/"RtpSender"/"RtpReceiver" objects, this adapter // object can be removed. class OrtcRtpSenderAdapter : public OrtcRtpSenderInterface { public: // Wraps |wrapped_sender| in a proxy that will safely call methods on the // correct thread. static std::unique_ptr CreateProxy( std::unique_ptr wrapped_sender); // Should only be called by RtpTransportControllerAdapter. OrtcRtpSenderAdapter(cricket::MediaType kind, RtpTransportInterface* transport, RtpTransportControllerAdapter* rtp_transport_controller); ~OrtcRtpSenderAdapter() override; // OrtcRtpSenderInterface implementation. RTCError SetTrack(MediaStreamTrackInterface* track) override; rtc::scoped_refptr GetTrack() const override; RTCError SetTransport(RtpTransportInterface* transport) override; RtpTransportInterface* GetTransport() const override; RTCError Send(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 CreateInternalSender(); 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_sender_; rtc::scoped_refptr track_; RtpParameters last_applied_parameters_; RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(OrtcRtpSenderAdapter); }; } // namespace webrtc #endif // ORTC_ORTCRTPSENDERADAPTER_H_