diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/libwebrtc/call/flexfec_receive_stream_impl.h | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/call/flexfec_receive_stream_impl.h')
-rw-r--r-- | third_party/libwebrtc/call/flexfec_receive_stream_impl.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/third_party/libwebrtc/call/flexfec_receive_stream_impl.h b/third_party/libwebrtc/call/flexfec_receive_stream_impl.h new file mode 100644 index 0000000000..60cc9fe34d --- /dev/null +++ b/third_party/libwebrtc/call/flexfec_receive_stream_impl.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2016 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 CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_ +#define CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_ + +#include <memory> +#include <vector> + +#include "call/flexfec_receive_stream.h" +#include "call/rtp_packet_sink_interface.h" +#include "modules/rtp_rtcp/source/rtp_rtcp_impl2.h" +#include "rtc_base/system/no_unique_address.h" +#include "system_wrappers/include/clock.h" + +namespace webrtc { + +class FlexfecReceiver; +class ReceiveStatistics; +class RecoveredPacketReceiver; +class RtcpRttStats; +class RtpPacketReceived; +class RtpRtcp; +class RtpStreamReceiverControllerInterface; +class RtpStreamReceiverInterface; + +class FlexfecReceiveStreamImpl : public FlexfecReceiveStream { + public: + FlexfecReceiveStreamImpl(Clock* clock, + Config config, + RecoveredPacketReceiver* recovered_packet_receiver, + RtcpRttStats* rtt_stats); + // Destruction happens on the worker thread. Prior to destruction the caller + // must ensure that a registration with the transport has been cleared. See + // `RegisterWithTransport` for details. + // TODO(tommi): As a further improvement to this, performing the full + // destruction on the network thread could be made the default. + ~FlexfecReceiveStreamImpl() override; + + // Called on the network thread to register/unregister with the network + // transport. + void RegisterWithTransport( + RtpStreamReceiverControllerInterface* receiver_controller); + // If registration has previously been done (via `RegisterWithTransport`) then + // `UnregisterFromTransport` must be called prior to destruction, on the + // network thread. + void UnregisterFromTransport(); + + // RtpPacketSinkInterface. + void OnRtpPacket(const RtpPacketReceived& packet) override; + + void SetPayloadType(int payload_type) override; + int payload_type() const override; + + // ReceiveStreamInterface impl. + void SetRtpExtensions(std::vector<RtpExtension> extensions) override; + RtpHeaderExtensionMap GetRtpExtensionMap() const override; + + // Updates the `rtp_video_stream_receiver_`'s `local_ssrc` when the default + // sender has been created, changed or removed. + void SetLocalSsrc(uint32_t local_ssrc); + + uint32_t remote_ssrc() const { return remote_ssrc_; } + + void SetRtcpMode(RtcpMode mode) override { + RTC_DCHECK_RUN_ON(&packet_sequence_checker_); + rtp_rtcp_->SetRTCPStatus(mode); + } + + private: + RTC_NO_UNIQUE_ADDRESS SequenceChecker packet_sequence_checker_; + + RtpHeaderExtensionMap extension_map_; + + const uint32_t remote_ssrc_; + + // `payload_type_` is initially set to -1, indicating that FlexFec is + // disabled. + int payload_type_ RTC_GUARDED_BY(packet_sequence_checker_) = -1; + + // Erasure code interfacing. + const std::unique_ptr<FlexfecReceiver> receiver_; + + // RTCP reporting. + const std::unique_ptr<ReceiveStatistics> rtp_receive_statistics_; + const std::unique_ptr<ModuleRtpRtcpImpl2> rtp_rtcp_; + + std::unique_ptr<RtpStreamReceiverInterface> rtp_stream_receiver_ + RTC_GUARDED_BY(packet_sequence_checker_); +}; + +} // namespace webrtc + +#endif // CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_ |