mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Injecting Clock in video receive.
Bug: webrtc:10365 Change-Id: Id20fca5b8ad13c133e05efa8972d8f5679507064 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125192 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26958}
This commit is contained in:
parent
ef50b25690
commit
8026d60ea9
12 changed files with 61 additions and 30 deletions
|
@ -890,7 +890,7 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
|
||||||
VideoReceiveStream* receive_stream = new VideoReceiveStream(
|
VideoReceiveStream* receive_stream = new VideoReceiveStream(
|
||||||
task_queue_factory_, &video_receiver_controller_, num_cpu_cores_,
|
task_queue_factory_, &video_receiver_controller_, num_cpu_cores_,
|
||||||
transport_send_ptr_->packet_router(), std::move(configuration),
|
transport_send_ptr_->packet_router(), std::move(configuration),
|
||||||
module_process_thread_.get(), call_stats_.get());
|
module_process_thread_.get(), call_stats_.get(), clock_);
|
||||||
|
|
||||||
const webrtc::VideoReceiveStream::Config& config = receive_stream->config();
|
const webrtc::VideoReceiveStream::Config& config = receive_stream->config();
|
||||||
{
|
{
|
||||||
|
@ -962,7 +962,7 @@ FlexfecReceiveStream* Call::CreateFlexfecReceiveStream(
|
||||||
// TODO(nisse): Fix constructor so that it can be moved outside of
|
// TODO(nisse): Fix constructor so that it can be moved outside of
|
||||||
// this locked scope.
|
// this locked scope.
|
||||||
receive_stream = new FlexfecReceiveStreamImpl(
|
receive_stream = new FlexfecReceiveStreamImpl(
|
||||||
&video_receiver_controller_, config, recovered_packet_receiver,
|
clock_, &video_receiver_controller_, config, recovered_packet_receiver,
|
||||||
call_stats_.get(), module_process_thread_.get());
|
call_stats_.get(), module_process_thread_.get());
|
||||||
|
|
||||||
RTC_DCHECK(receive_rtp_config_.find(config.remote_ssrc) ==
|
RTC_DCHECK(receive_rtp_config_.find(config.remote_ssrc) ==
|
||||||
|
|
|
@ -80,6 +80,7 @@ namespace {
|
||||||
|
|
||||||
// TODO(brandtr): Update this function when we support multistream protection.
|
// TODO(brandtr): Update this function when we support multistream protection.
|
||||||
std::unique_ptr<FlexfecReceiver> MaybeCreateFlexfecReceiver(
|
std::unique_ptr<FlexfecReceiver> MaybeCreateFlexfecReceiver(
|
||||||
|
Clock* clock,
|
||||||
const FlexfecReceiveStream::Config& config,
|
const FlexfecReceiveStream::Config& config,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver) {
|
RecoveredPacketReceiver* recovered_packet_receiver) {
|
||||||
if (config.payload_type < 0) {
|
if (config.payload_type < 0) {
|
||||||
|
@ -112,19 +113,20 @@ std::unique_ptr<FlexfecReceiver> MaybeCreateFlexfecReceiver(
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
RTC_DCHECK_EQ(1U, config.protected_media_ssrcs.size());
|
RTC_DCHECK_EQ(1U, config.protected_media_ssrcs.size());
|
||||||
return std::unique_ptr<FlexfecReceiver>(
|
return std::unique_ptr<FlexfecReceiver>(new FlexfecReceiver(
|
||||||
new FlexfecReceiver(config.remote_ssrc, config.protected_media_ssrcs[0],
|
clock, config.remote_ssrc, config.protected_media_ssrcs[0],
|
||||||
recovered_packet_receiver));
|
recovered_packet_receiver));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
||||||
|
Clock* clock,
|
||||||
ReceiveStatistics* receive_statistics,
|
ReceiveStatistics* receive_statistics,
|
||||||
Transport* rtcp_send_transport,
|
Transport* rtcp_send_transport,
|
||||||
RtcpRttStats* rtt_stats) {
|
RtcpRttStats* rtt_stats) {
|
||||||
RtpRtcp::Configuration configuration;
|
RtpRtcp::Configuration configuration;
|
||||||
configuration.audio = false;
|
configuration.audio = false;
|
||||||
configuration.receiver_only = true;
|
configuration.receiver_only = true;
|
||||||
configuration.clock = Clock::GetRealTimeClock();
|
configuration.clock = clock;
|
||||||
configuration.receive_statistics = receive_statistics;
|
configuration.receive_statistics = receive_statistics;
|
||||||
configuration.outgoing_transport = rtcp_send_transport;
|
configuration.outgoing_transport = rtcp_send_transport;
|
||||||
configuration.rtt_stats = rtt_stats;
|
configuration.rtt_stats = rtt_stats;
|
||||||
|
@ -135,16 +137,19 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
FlexfecReceiveStreamImpl::FlexfecReceiveStreamImpl(
|
FlexfecReceiveStreamImpl::FlexfecReceiveStreamImpl(
|
||||||
|
Clock* clock,
|
||||||
RtpStreamReceiverControllerInterface* receiver_controller,
|
RtpStreamReceiverControllerInterface* receiver_controller,
|
||||||
const Config& config,
|
const Config& config,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver,
|
RecoveredPacketReceiver* recovered_packet_receiver,
|
||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
ProcessThread* process_thread)
|
ProcessThread* process_thread)
|
||||||
: config_(config),
|
: config_(config),
|
||||||
receiver_(MaybeCreateFlexfecReceiver(config_, recovered_packet_receiver)),
|
receiver_(MaybeCreateFlexfecReceiver(clock,
|
||||||
rtp_receive_statistics_(
|
config_,
|
||||||
ReceiveStatistics::Create(Clock::GetRealTimeClock())),
|
recovered_packet_receiver)),
|
||||||
rtp_rtcp_(CreateRtpRtcpModule(rtp_receive_statistics_.get(),
|
rtp_receive_statistics_(ReceiveStatistics::Create(clock)),
|
||||||
|
rtp_rtcp_(CreateRtpRtcpModule(clock,
|
||||||
|
rtp_receive_statistics_.get(),
|
||||||
config_.rtcp_send_transport,
|
config_.rtcp_send_transport,
|
||||||
rtt_stats)),
|
rtt_stats)),
|
||||||
process_thread_(process_thread) {
|
process_thread_(process_thread) {
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include "call/flexfec_receive_stream.h"
|
#include "call/flexfec_receive_stream.h"
|
||||||
#include "call/rtp_packet_sink_interface.h"
|
#include "call/rtp_packet_sink_interface.h"
|
||||||
|
#include "system_wrappers/include/clock.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ class RtpStreamReceiverInterface;
|
||||||
class FlexfecReceiveStreamImpl : public FlexfecReceiveStream {
|
class FlexfecReceiveStreamImpl : public FlexfecReceiveStream {
|
||||||
public:
|
public:
|
||||||
FlexfecReceiveStreamImpl(
|
FlexfecReceiveStreamImpl(
|
||||||
|
Clock* clock,
|
||||||
RtpStreamReceiverControllerInterface* receiver_controller,
|
RtpStreamReceiverControllerInterface* receiver_controller,
|
||||||
const Config& config,
|
const Config& config,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver,
|
RecoveredPacketReceiver* recovered_packet_receiver,
|
||||||
|
|
|
@ -89,8 +89,8 @@ class FlexfecReceiveStreamTest : public ::testing::Test {
|
||||||
: config_(CreateDefaultConfig(&rtcp_send_transport_)) {
|
: config_(CreateDefaultConfig(&rtcp_send_transport_)) {
|
||||||
EXPECT_CALL(process_thread_, RegisterModule(_, _)).Times(1);
|
EXPECT_CALL(process_thread_, RegisterModule(_, _)).Times(1);
|
||||||
receive_stream_ = absl::make_unique<FlexfecReceiveStreamImpl>(
|
receive_stream_ = absl::make_unique<FlexfecReceiveStreamImpl>(
|
||||||
&rtp_stream_receiver_controller_, config_, &recovered_packet_receiver_,
|
Clock::GetRealTimeClock(), &rtp_stream_receiver_controller_, config_,
|
||||||
&rtt_stats_, &process_thread_);
|
&recovered_packet_receiver_, &rtt_stats_, &process_thread_);
|
||||||
}
|
}
|
||||||
|
|
||||||
~FlexfecReceiveStreamTest() {
|
~FlexfecReceiveStreamTest() {
|
||||||
|
@ -145,9 +145,9 @@ TEST_F(FlexfecReceiveStreamTest, RecoversPacket) {
|
||||||
|
|
||||||
testing::StrictMock<MockRecoveredPacketReceiver> recovered_packet_receiver;
|
testing::StrictMock<MockRecoveredPacketReceiver> recovered_packet_receiver;
|
||||||
EXPECT_CALL(process_thread_, RegisterModule(_, _)).Times(1);
|
EXPECT_CALL(process_thread_, RegisterModule(_, _)).Times(1);
|
||||||
FlexfecReceiveStreamImpl receive_stream(&rtp_stream_receiver_controller_,
|
FlexfecReceiveStreamImpl receive_stream(
|
||||||
config_, &recovered_packet_receiver,
|
Clock::GetRealTimeClock(), &rtp_stream_receiver_controller_, config_,
|
||||||
&rtt_stats_, &process_thread_);
|
&recovered_packet_receiver, &rtt_stats_, &process_thread_);
|
||||||
|
|
||||||
EXPECT_CALL(recovered_packet_receiver,
|
EXPECT_CALL(recovered_packet_receiver,
|
||||||
OnRecoveredPacket(_, kRtpHeaderSize + kPayloadLength[1]));
|
OnRecoveredPacket(_, kRtpHeaderSize + kPayloadLength[1]));
|
||||||
|
|
|
@ -30,6 +30,10 @@ class FlexfecReceiver {
|
||||||
FlexfecReceiver(uint32_t ssrc,
|
FlexfecReceiver(uint32_t ssrc,
|
||||||
uint32_t protected_media_ssrc,
|
uint32_t protected_media_ssrc,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver);
|
RecoveredPacketReceiver* recovered_packet_receiver);
|
||||||
|
FlexfecReceiver(Clock* clock,
|
||||||
|
uint32_t ssrc,
|
||||||
|
uint32_t protected_media_ssrc,
|
||||||
|
RecoveredPacketReceiver* recovered_packet_receiver);
|
||||||
~FlexfecReceiver();
|
~FlexfecReceiver();
|
||||||
|
|
||||||
// Inserts a received packet (can be either media or FlexFEC) into the
|
// Inserts a received packet (can be either media or FlexFEC) into the
|
||||||
|
|
|
@ -33,6 +33,16 @@ constexpr int kPacketLogIntervalMs = 10000;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
FlexfecReceiver::FlexfecReceiver(
|
FlexfecReceiver::FlexfecReceiver(
|
||||||
|
uint32_t ssrc,
|
||||||
|
uint32_t protected_media_ssrc,
|
||||||
|
RecoveredPacketReceiver* recovered_packet_receiver)
|
||||||
|
: FlexfecReceiver(Clock::GetRealTimeClock(),
|
||||||
|
ssrc,
|
||||||
|
protected_media_ssrc,
|
||||||
|
recovered_packet_receiver) {}
|
||||||
|
|
||||||
|
FlexfecReceiver::FlexfecReceiver(
|
||||||
|
Clock* clock,
|
||||||
uint32_t ssrc,
|
uint32_t ssrc,
|
||||||
uint32_t protected_media_ssrc,
|
uint32_t protected_media_ssrc,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver)
|
RecoveredPacketReceiver* recovered_packet_receiver)
|
||||||
|
@ -41,7 +51,7 @@ FlexfecReceiver::FlexfecReceiver(
|
||||||
erasure_code_(
|
erasure_code_(
|
||||||
ForwardErrorCorrection::CreateFlexfec(ssrc, protected_media_ssrc)),
|
ForwardErrorCorrection::CreateFlexfec(ssrc, protected_media_ssrc)),
|
||||||
recovered_packet_receiver_(recovered_packet_receiver),
|
recovered_packet_receiver_(recovered_packet_receiver),
|
||||||
clock_(Clock::GetRealTimeClock()),
|
clock_(clock),
|
||||||
last_recovered_packet_ms_(-1) {
|
last_recovered_packet_ms_(-1) {
|
||||||
// It's OK to create this object on a different thread/task queue than
|
// It's OK to create this object on a different thread/task queue than
|
||||||
// the one used during main operation.
|
// the one used during main operation.
|
||||||
|
|
|
@ -49,8 +49,10 @@ class FlexfecReceiverForTest : public FlexfecReceiver {
|
||||||
FlexfecReceiverForTest(uint32_t ssrc,
|
FlexfecReceiverForTest(uint32_t ssrc,
|
||||||
uint32_t protected_media_ssrc,
|
uint32_t protected_media_ssrc,
|
||||||
RecoveredPacketReceiver* recovered_packet_receiver)
|
RecoveredPacketReceiver* recovered_packet_receiver)
|
||||||
: FlexfecReceiver(ssrc, protected_media_ssrc, recovered_packet_receiver) {
|
: FlexfecReceiver(Clock::GetRealTimeClock(),
|
||||||
}
|
ssrc,
|
||||||
|
protected_media_ssrc,
|
||||||
|
recovered_packet_receiver) {}
|
||||||
// Expose methods for tests.
|
// Expose methods for tests.
|
||||||
using FlexfecReceiver::AddReceivedPacket;
|
using FlexfecReceiver::AddReceivedPacket;
|
||||||
using FlexfecReceiver::ProcessReceivedPacket;
|
using FlexfecReceiver::ProcessReceivedPacket;
|
||||||
|
@ -466,7 +468,7 @@ TEST_F(FlexfecReceiverTest, SurvivesOldRecoveredPacketBeingReinserted) {
|
||||||
} loopback_recovered_packet_receiver;
|
} loopback_recovered_packet_receiver;
|
||||||
|
|
||||||
// Feed recovered packets back into |receiver|.
|
// Feed recovered packets back into |receiver|.
|
||||||
FlexfecReceiver receiver(kFlexfecSsrc, kMediaSsrc,
|
FlexfecReceiver receiver(Clock::GetRealTimeClock(), kFlexfecSsrc, kMediaSsrc,
|
||||||
&loopback_recovered_packet_receiver);
|
&loopback_recovered_packet_receiver);
|
||||||
loopback_recovered_packet_receiver.SetReceiver(&receiver);
|
loopback_recovered_packet_receiver.SetReceiver(&receiver);
|
||||||
|
|
||||||
|
@ -590,7 +592,7 @@ TEST_F(FlexfecReceiverTest, RecoveryCallbackDoesNotLoopInfinitely) {
|
||||||
} loopback_recovered_packet_receiver;
|
} loopback_recovered_packet_receiver;
|
||||||
|
|
||||||
// Feed recovered packets back into |receiver|.
|
// Feed recovered packets back into |receiver|.
|
||||||
FlexfecReceiver receiver(kFlexfecSsrc, kMediaSsrc,
|
FlexfecReceiver receiver(Clock::GetRealTimeClock(), kFlexfecSsrc, kMediaSsrc,
|
||||||
&loopback_recovered_packet_receiver);
|
&loopback_recovered_packet_receiver);
|
||||||
loopback_recovered_packet_receiver.SetReceiver(&receiver);
|
loopback_recovered_packet_receiver.SetReceiver(&receiver);
|
||||||
|
|
||||||
|
|
|
@ -52,12 +52,14 @@ constexpr int kPacketBufferMaxSize = 2048;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
||||||
|
Clock* clock,
|
||||||
ReceiveStatistics* receive_statistics,
|
ReceiveStatistics* receive_statistics,
|
||||||
Transport* outgoing_transport,
|
Transport* outgoing_transport,
|
||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
||||||
TransportSequenceNumberAllocator* transport_sequence_number_allocator) {
|
TransportSequenceNumberAllocator* transport_sequence_number_allocator) {
|
||||||
RtpRtcp::Configuration configuration;
|
RtpRtcp::Configuration configuration;
|
||||||
|
configuration.clock = clock;
|
||||||
configuration.audio = false;
|
configuration.audio = false;
|
||||||
configuration.receiver_only = true;
|
configuration.receiver_only = true;
|
||||||
configuration.receive_statistics = receive_statistics;
|
configuration.receive_statistics = receive_statistics;
|
||||||
|
@ -83,6 +85,7 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule(
|
||||||
static const int kPacketLogIntervalMs = 10000;
|
static const int kPacketLogIntervalMs = 10000;
|
||||||
|
|
||||||
RtpVideoStreamReceiver::RtpVideoStreamReceiver(
|
RtpVideoStreamReceiver::RtpVideoStreamReceiver(
|
||||||
|
Clock* clock,
|
||||||
Transport* transport,
|
Transport* transport,
|
||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
PacketRouter* packet_router,
|
PacketRouter* packet_router,
|
||||||
|
@ -94,17 +97,18 @@ RtpVideoStreamReceiver::RtpVideoStreamReceiver(
|
||||||
KeyFrameRequestSender* keyframe_request_sender,
|
KeyFrameRequestSender* keyframe_request_sender,
|
||||||
video_coding::OnCompleteFrameCallback* complete_frame_callback,
|
video_coding::OnCompleteFrameCallback* complete_frame_callback,
|
||||||
rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor)
|
rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor)
|
||||||
: clock_(Clock::GetRealTimeClock()),
|
: clock_(clock),
|
||||||
config_(*config),
|
config_(*config),
|
||||||
packet_router_(packet_router),
|
packet_router_(packet_router),
|
||||||
process_thread_(process_thread),
|
process_thread_(process_thread),
|
||||||
ntp_estimator_(clock_),
|
ntp_estimator_(clock),
|
||||||
rtp_header_extensions_(config_.rtp.extensions),
|
rtp_header_extensions_(config_.rtp.extensions),
|
||||||
rtp_receive_statistics_(rtp_receive_statistics),
|
rtp_receive_statistics_(rtp_receive_statistics),
|
||||||
ulpfec_receiver_(UlpfecReceiver::Create(config->rtp.remote_ssrc, this)),
|
ulpfec_receiver_(UlpfecReceiver::Create(config->rtp.remote_ssrc, this)),
|
||||||
receiving_(false),
|
receiving_(false),
|
||||||
last_packet_log_ms_(-1),
|
last_packet_log_ms_(-1),
|
||||||
rtp_rtcp_(CreateRtpRtcpModule(rtp_receive_statistics_,
|
rtp_rtcp_(CreateRtpRtcpModule(clock,
|
||||||
|
rtp_receive_statistics_,
|
||||||
transport,
|
transport,
|
||||||
rtt_stats,
|
rtt_stats,
|
||||||
receive_stats_proxy,
|
receive_stats_proxy,
|
||||||
|
|
|
@ -67,6 +67,7 @@ class RtpVideoStreamReceiver : public LossNotificationSender,
|
||||||
public OnDecryptionStatusChangeCallback {
|
public OnDecryptionStatusChangeCallback {
|
||||||
public:
|
public:
|
||||||
RtpVideoStreamReceiver(
|
RtpVideoStreamReceiver(
|
||||||
|
Clock* clock,
|
||||||
Transport* transport,
|
Transport* transport,
|
||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
PacketRouter* packet_router,
|
PacketRouter* packet_router,
|
||||||
|
|
|
@ -130,8 +130,8 @@ class RtpVideoStreamReceiverTest : public testing::Test {
|
||||||
rtp_receive_statistics_ =
|
rtp_receive_statistics_ =
|
||||||
absl::WrapUnique(ReceiveStatistics::Create(Clock::GetRealTimeClock()));
|
absl::WrapUnique(ReceiveStatistics::Create(Clock::GetRealTimeClock()));
|
||||||
rtp_video_stream_receiver_ = absl::make_unique<RtpVideoStreamReceiver>(
|
rtp_video_stream_receiver_ = absl::make_unique<RtpVideoStreamReceiver>(
|
||||||
&mock_transport_, nullptr, &packet_router_, &config_,
|
Clock::GetRealTimeClock(), &mock_transport_, nullptr, &packet_router_,
|
||||||
rtp_receive_statistics_.get(), nullptr, process_thread_.get(),
|
&config_, rtp_receive_statistics_.get(), nullptr, process_thread_.get(),
|
||||||
&mock_nack_sender_, &mock_key_frame_request_sender_,
|
&mock_nack_sender_, &mock_key_frame_request_sender_,
|
||||||
&mock_on_complete_frame_callback_, nullptr);
|
&mock_on_complete_frame_callback_, nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,7 +192,8 @@ VideoReceiveStream::VideoReceiveStream(
|
||||||
timing_.get(),
|
timing_.get(),
|
||||||
this, // NackSender
|
this, // NackSender
|
||||||
this), // KeyFrameRequestSender
|
this), // KeyFrameRequestSender
|
||||||
rtp_video_stream_receiver_(&transport_adapter_,
|
rtp_video_stream_receiver_(clock_,
|
||||||
|
&transport_adapter_,
|
||||||
call_stats,
|
call_stats,
|
||||||
packet_router,
|
packet_router,
|
||||||
&config_,
|
&config_,
|
||||||
|
@ -259,7 +260,8 @@ VideoReceiveStream::VideoReceiveStream(
|
||||||
PacketRouter* packet_router,
|
PacketRouter* packet_router,
|
||||||
VideoReceiveStream::Config config,
|
VideoReceiveStream::Config config,
|
||||||
ProcessThread* process_thread,
|
ProcessThread* process_thread,
|
||||||
CallStats* call_stats)
|
CallStats* call_stats,
|
||||||
|
Clock* clock)
|
||||||
: VideoReceiveStream(task_queue_factory,
|
: VideoReceiveStream(task_queue_factory,
|
||||||
receiver_controller,
|
receiver_controller,
|
||||||
num_cpu_cores,
|
num_cpu_cores,
|
||||||
|
@ -267,8 +269,8 @@ VideoReceiveStream::VideoReceiveStream(
|
||||||
std::move(config),
|
std::move(config),
|
||||||
process_thread,
|
process_thread,
|
||||||
call_stats,
|
call_stats,
|
||||||
Clock::GetRealTimeClock(),
|
clock,
|
||||||
new VCMTiming(Clock::GetRealTimeClock())) {}
|
new VCMTiming(clock)) {}
|
||||||
|
|
||||||
VideoReceiveStream::~VideoReceiveStream() {
|
VideoReceiveStream::~VideoReceiveStream() {
|
||||||
RTC_DCHECK_CALLED_SEQUENTIALLY(&worker_sequence_checker_);
|
RTC_DCHECK_CALLED_SEQUENTIALLY(&worker_sequence_checker_);
|
||||||
|
|
|
@ -68,7 +68,8 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream,
|
||||||
PacketRouter* packet_router,
|
PacketRouter* packet_router,
|
||||||
VideoReceiveStream::Config config,
|
VideoReceiveStream::Config config,
|
||||||
ProcessThread* process_thread,
|
ProcessThread* process_thread,
|
||||||
CallStats* call_stats);
|
CallStats* call_stats,
|
||||||
|
Clock* clock);
|
||||||
~VideoReceiveStream() override;
|
~VideoReceiveStream() override;
|
||||||
|
|
||||||
const Config& config() const { return config_; }
|
const Config& config() const { return config_; }
|
||||||
|
|
Loading…
Reference in a new issue