diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index faf3253436..f99aecde66 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc @@ -175,8 +175,22 @@ bool RtpVideoStreamReceiver::AddReceiveCodec( return rtp_payload_registry_.RegisterReceivePayload(video_codec) == 0; } -RtpReceiver* RtpVideoStreamReceiver::GetRtpReceiver() const { - return rtp_receiver_.get(); +absl::optional RtpVideoStreamReceiver::GetSyncInfo() const { + Syncable::Info info; + + if (!rtp_receiver_->GetLatestTimestamps( + &info.latest_received_capture_timestamp, + &info.latest_receive_time_ms)) { + return absl::nullopt; + } + if (rtp_rtcp_->RemoteNTP(&info.capture_time_ntp_secs, + &info.capture_time_ntp_frac, nullptr, nullptr, + &info.capture_time_source_clock) != 0) { + return absl::nullopt; + } + + // Leaves info.current_delay_ms uninitialized. + return info; } int32_t RtpVideoStreamReceiver::OnReceivedPayloadData( diff --git a/video/rtp_video_stream_receiver.h b/video/rtp_video_stream_receiver.h index edd34782d0..91b993a4b8 100644 --- a/video/rtp_video_stream_receiver.h +++ b/video/rtp_video_stream_receiver.h @@ -18,6 +18,7 @@ #include #include "call/rtp_packet_sink_interface.h" +#include "call/syncable.h" #include "call/video_receive_stream.h" #include "modules/include/module_common_types.h" #include "modules/rtp_rtcp/include/receive_statistics.h" @@ -75,12 +76,13 @@ class RtpVideoStreamReceiver : public RtpData, bool AddReceiveCodec(const VideoCodec& video_codec, const std::map& codec_params); - RtpReceiver* GetRtpReceiver() const; - RtpRtcp* rtp_rtcp() const { return rtp_rtcp_.get(); } void StartReceive(); void StopReceive(); + // Produces the transport-related timestamps; current_delay_ms is left unset. + absl::optional GetSyncInfo() const; + bool DeliverRtcp(const uint8_t* rtcp_packet, size_t rtcp_packet_length); void FrameContinuous(int64_t seq_num); diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index bca6d94fe6..6580baebfc 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -371,24 +371,13 @@ int VideoReceiveStream::id() const { absl::optional VideoReceiveStream::GetInfo() const { RTC_DCHECK_CALLED_SEQUENTIALLY(&module_process_sequence_checker_); - Syncable::Info info; + absl::optional info = + rtp_video_stream_receiver_.GetSyncInfo(); - RtpReceiver* rtp_receiver = rtp_video_stream_receiver_.GetRtpReceiver(); - RTC_DCHECK(rtp_receiver); - if (!rtp_receiver->GetLatestTimestamps( - &info.latest_received_capture_timestamp, - &info.latest_receive_time_ms)) + if (!info) return absl::nullopt; - RtpRtcp* rtp_rtcp = rtp_video_stream_receiver_.rtp_rtcp(); - RTC_DCHECK(rtp_rtcp); - if (rtp_rtcp->RemoteNTP(&info.capture_time_ntp_secs, - &info.capture_time_ntp_frac, nullptr, nullptr, - &info.capture_time_source_clock) != 0) { - return absl::nullopt; - } - - info.current_delay_ms = video_receiver_.Delay(); + info->current_delay_ms = video_receiver_.Delay(); return info; }