blob: 9367b87a57f9cb6c9ec12332e1e7b66ed9b6f009 [file] [log] [blame]
nisse0f15f922017-06-21 08:05:221/*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 04:47:3111#include "call/rtp_stream_receiver_controller.h"
eladalon5daecca2017-08-04 13:34:5412
Harald Alvestrand93c9aa12024-09-02 20:55:5213#include <cstdint>
Mirko Bonadei317a1f02019-09-17 15:06:1814#include <memory>
15
Harald Alvestrand93c9aa12024-09-02 20:55:5216#include "api/sequence_checker.h"
17#include "call/rtp_packet_sink_interface.h"
18#include "call/rtp_stream_receiver_controller_interface.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3119#include "rtc_base/logging.h"
nisse0f15f922017-06-21 08:05:2220
21namespace webrtc {
22
23RtpStreamReceiverController::Receiver::Receiver(
24 RtpStreamReceiverController* controller,
25 uint32_t ssrc,
26 RtpPacketSinkInterface* sink)
27 : controller_(controller), sink_(sink) {
eladalon5daecca2017-08-04 13:34:5428 const bool sink_added = controller_->AddSink(ssrc, sink_);
29 if (!sink_added) {
Mirko Bonadei675513b2017-11-09 10:09:2530 RTC_LOG(LS_ERROR)
31 << "RtpStreamReceiverController::Receiver::Receiver: Sink "
Jonas Olssonb2b20312020-01-14 11:11:3132 "could not be added for SSRC="
33 << ssrc << ".";
eladalon5daecca2017-08-04 13:34:5434 }
nisse0f15f922017-06-21 08:05:2235}
36
37RtpStreamReceiverController::Receiver::~Receiver() {
Niels Möller25e268a2022-07-06 08:02:2338 // This may fail, if corresponding AddSink in the constructor failed.
nisse0f15f922017-06-21 08:05:2239 controller_->RemoveSink(sink_);
40}
41
Tomas Gunnarssone091fd22021-01-17 15:14:5242RtpStreamReceiverController::RtpStreamReceiverController() {}
Steve Antoned09dc62018-03-29 19:59:1743
nisse0f15f922017-06-21 08:05:2244RtpStreamReceiverController::~RtpStreamReceiverController() = default;
45
46std::unique_ptr<RtpStreamReceiverInterface>
Yves Gerey665174f2018-06-19 13:03:0547RtpStreamReceiverController::CreateReceiver(uint32_t ssrc,
48 RtpPacketSinkInterface* sink) {
Mirko Bonadei317a1f02019-09-17 15:06:1849 return std::make_unique<Receiver>(this, ssrc, sink);
nisse0f15f922017-06-21 08:05:2250}
51
52bool RtpStreamReceiverController::OnRtpPacket(const RtpPacketReceived& packet) {
Tomas Gunnarssone091fd22021-01-17 15:14:5253 RTC_DCHECK_RUN_ON(&demuxer_sequence_);
nisse0f15f922017-06-21 08:05:2254 return demuxer_.OnRtpPacket(packet);
55}
56
Per K5e5d0172022-12-22 12:43:4157void RtpStreamReceiverController::OnRecoveredPacket(
58 const RtpPacketReceived& packet) {
59 RTC_DCHECK_RUN_ON(&demuxer_sequence_);
60 demuxer_.OnRtpPacket(packet);
61}
62
eladalon5daecca2017-08-04 13:34:5463bool RtpStreamReceiverController::AddSink(uint32_t ssrc,
nisse0f15f922017-06-21 08:05:2264 RtpPacketSinkInterface* sink) {
Tomas Gunnarssone091fd22021-01-17 15:14:5265 RTC_DCHECK_RUN_ON(&demuxer_sequence_);
nisse0f15f922017-06-21 08:05:2266 return demuxer_.AddSink(ssrc, sink);
67}
68
Niels Möller25e268a2022-07-06 08:02:2369bool RtpStreamReceiverController::RemoveSink(
nisse0f15f922017-06-21 08:05:2270 const RtpPacketSinkInterface* sink) {
Tomas Gunnarssone091fd22021-01-17 15:14:5271 RTC_DCHECK_RUN_ON(&demuxer_sequence_);
nisse0f15f922017-06-21 08:05:2272 return demuxer_.RemoveSink(sink);
73}
74
75} // namespace webrtc