In generic encoder ensure capture timestamp is preserved.
Because some hardware encoders may not preserve capture timestamp, use
rtp timestamp as a key to capture time storage and restore corrupted
capture timestamps whenever possible.
Bug: webrtc:8497
Change-Id: Ib3449313c65e864a89cd645a3f5dec99aa9cf8e4
Reviewed-on: https://webrtc-review.googlesource.com/23620
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20732}
diff --git a/modules/video_coding/generic_encoder.h b/modules/video_coding/generic_encoder.h
index f8ffc48..244c614 100644
--- a/modules/video_coding/generic_encoder.h
+++ b/modules/video_coding/generic_encoder.h
@@ -57,7 +57,9 @@
void OnFrameRateChanged(size_t framerate);
- void OnEncodeStarted(int64_t capture_time_ms, size_t simulcast_svc_idx);
+ void OnEncodeStarted(uint32_t rtp_timestamps,
+ int64_t capture_time_ms,
+ size_t simulcast_svc_idx);
void SetTimingFramesThresholds(
const VideoCodec::TimingFrameTriggerThresholds& thresholds) {
@@ -81,9 +83,13 @@
media_optimization::MediaOptimization* const media_opt_;
struct EncodeStartTimeRecord {
- EncodeStartTimeRecord(int64_t capture_time, int64_t encode_start_time)
- : capture_time_ms(capture_time),
+ EncodeStartTimeRecord(uint32_t timestamp,
+ int64_t capture_time,
+ int64_t encode_start_time)
+ : rtp_timestamp(timestamp),
+ capture_time_ms(capture_time),
encode_start_time_ms(encode_start_time) {}
+ uint32_t rtp_timestamp;
int64_t capture_time_ms;
int64_t encode_start_time_ms;
};
@@ -98,6 +104,8 @@
int64_t last_timing_frame_time_ms_ RTC_GUARDED_BY(timing_params_lock_);
VideoCodec::TimingFrameTriggerThresholds timing_frames_thresholds_
RTC_GUARDED_BY(timing_params_lock_);
+ size_t incorrect_capture_time_logged_messages_
+ RTC_GUARDED_BY(timing_params_lock_);
size_t reordered_frames_logged_messages_ RTC_GUARDED_BY(timing_params_lock_);
size_t stalled_encoder_logged_messages_ RTC_GUARDED_BY(timing_params_lock_);