mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00

Setting the rtp header extensions on the packet delivery thread (currently worker, soon to be network), is now possible without taking the hit of deleting and recreating the receive stream (and rtp receiver and related state). Bug: webrtc:11993 Change-Id: I9bbe306844a25d85d79cd216092ead66eaf68960 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/223741 Reviewed-by: Niels Moller <nisse@webrtc.org> Commit-Queue: Tommi <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#34953}
66 lines
2.5 KiB
C++
66 lines
2.5 KiB
C++
/*
|
|
* Copyright (c) 2012 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 MODULES_RTP_RTCP_SOURCE_ULPFEC_RECEIVER_IMPL_H_
|
|
#define MODULES_RTP_RTCP_SOURCE_ULPFEC_RECEIVER_IMPL_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "api/sequence_checker.h"
|
|
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
|
|
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
|
#include "modules/rtp_rtcp/include/ulpfec_receiver.h"
|
|
#include "modules/rtp_rtcp/source/forward_error_correction.h"
|
|
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
|
|
#include "rtc_base/system/no_unique_address.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class UlpfecReceiverImpl : public UlpfecReceiver {
|
|
public:
|
|
explicit UlpfecReceiverImpl(uint32_t ssrc,
|
|
RecoveredPacketReceiver* callback,
|
|
rtc::ArrayView<const RtpExtension> extensions);
|
|
~UlpfecReceiverImpl() override;
|
|
|
|
bool AddReceivedRedPacket(const RtpPacketReceived& rtp_packet,
|
|
uint8_t ulpfec_payload_type) override;
|
|
|
|
int32_t ProcessReceivedFec() override;
|
|
|
|
FecPacketCounter GetPacketCounter() const override;
|
|
|
|
void SetRtpExtensions(rtc::ArrayView<const RtpExtension> extensions) override;
|
|
|
|
private:
|
|
const uint32_t ssrc_;
|
|
RtpHeaderExtensionMap extensions_ RTC_GUARDED_BY(&sequence_checker_);
|
|
|
|
RTC_NO_UNIQUE_ADDRESS SequenceChecker sequence_checker_;
|
|
RecoveredPacketReceiver* const recovered_packet_callback_;
|
|
const std::unique_ptr<ForwardErrorCorrection> fec_;
|
|
// TODO(nisse): The AddReceivedRedPacket method adds one or two packets to
|
|
// this list at a time, after which it is emptied by ProcessReceivedFec. It
|
|
// will make things simpler to merge AddReceivedRedPacket and
|
|
// ProcessReceivedFec into a single method, and we can then delete this list.
|
|
std::vector<std::unique_ptr<ForwardErrorCorrection::ReceivedPacket>>
|
|
received_packets_ RTC_GUARDED_BY(&sequence_checker_);
|
|
ForwardErrorCorrection::RecoveredPacketList recovered_packets_
|
|
RTC_GUARDED_BY(&sequence_checker_);
|
|
FecPacketCounter packet_counter_ RTC_GUARDED_BY(&sequence_checker_);
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_RTP_RTCP_SOURCE_ULPFEC_RECEIVER_IMPL_H_
|