diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc index 925f1a191f..46511cef4d 100644 --- a/modules/video_coding/frame_object.cc +++ b/modules/video_coding/frame_object.cc @@ -99,11 +99,10 @@ RtpFrameObject::RtpFrameObject(PacketBuffer* packet_buffer, timing_.network2_timestamp_ms = ntp_time_ms_ + last_packet->video_header.video_timing.network2_timestamp_delta_ms; - - timing_.receive_start_ms = first_packet->receive_time_ms; - timing_.receive_finish_ms = last_packet->receive_time_ms; } timing_.flags = last_packet->video_header.video_timing.flags; + timing_.receive_start_ms = first_packet->receive_time_ms; + timing_.receive_finish_ms = last_packet->receive_time_ms; is_last_spatial_layer = last_packet->markerBit; } diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc index 5ee8d4eb70..dee28ae891 100644 --- a/modules/video_coding/generic_decoder.cc +++ b/modules/video_coding/generic_decoder.cc @@ -91,6 +91,7 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage, frameInfo->renderTimeMs); // Report timing information. + TimingFrameInfo timing_frame_info; if (frameInfo->timing.flags != VideoSendTiming::kInvalid) { int64_t capture_time_ms = decodedImage.ntp_time_ms() - ntp_offset_; // Convert remote timestamps to local time from ntp timestamps. @@ -115,7 +116,6 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage, 1; } - TimingFrameInfo timing_frame_info; timing_frame_info.capture_time_ms = capture_time_ms - sender_delta_ms; timing_frame_info.encode_start_ms = @@ -130,17 +130,17 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage, frameInfo->timing.network_timestamp_ms - sender_delta_ms; timing_frame_info.network2_timestamp_ms = frameInfo->timing.network2_timestamp_ms - sender_delta_ms; - timing_frame_info.receive_start_ms = frameInfo->timing.receive_start_ms; - timing_frame_info.receive_finish_ms = frameInfo->timing.receive_finish_ms; - timing_frame_info.decode_start_ms = frameInfo->decodeStartTimeMs; - timing_frame_info.decode_finish_ms = now_ms; - timing_frame_info.render_time_ms = frameInfo->renderTimeMs; - timing_frame_info.rtp_timestamp = decodedImage.timestamp(); - timing_frame_info.flags = frameInfo->timing.flags; - - _timing->SetTimingFrameInfo(timing_frame_info); } + timing_frame_info.flags = frameInfo->timing.flags; + timing_frame_info.decode_start_ms = frameInfo->decodeStartTimeMs; + timing_frame_info.decode_finish_ms = now_ms; + timing_frame_info.render_time_ms = frameInfo->renderTimeMs; + timing_frame_info.rtp_timestamp = decodedImage.timestamp(); + timing_frame_info.receive_start_ms = frameInfo->timing.receive_start_ms; + timing_frame_info.receive_finish_ms = frameInfo->timing.receive_finish_ms; + _timing->SetTimingFrameInfo(timing_frame_info); + decodedImage.set_timestamp_us(frameInfo->renderTimeMs * rtc::kNumMicrosecsPerMillisec); decodedImage.set_rotation(frameInfo->rotation); diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc index e20b7d294f..8d398871cc 100644 --- a/video/receive_statistics_proxy.cc +++ b/video/receive_statistics_proxy.cc @@ -638,8 +638,10 @@ void ReceiveStatisticsProxy::OnUniqueFramesCounted(int num_unique_frames) { void ReceiveStatisticsProxy::OnTimingFrameInfoUpdated( const TimingFrameInfo& info) { rtc::CritScope lock(&crit_); - int64_t now_ms = clock_->TimeInMilliseconds(); - timing_frame_info_counter_.Add(info, now_ms); + if (info.flags != VideoSendTiming::kInvalid) { + int64_t now_ms = clock_->TimeInMilliseconds(); + timing_frame_info_counter_.Add(info, now_ms); + } } void ReceiveStatisticsProxy::RtcpPacketTypesCounterUpdated(