Index: media/cast/sender/audio_encoder.cc |
diff --git a/media/cast/sender/audio_encoder.cc b/media/cast/sender/audio_encoder.cc |
index 3c5740c74c4ed4bfadf93c81d9c41e7587aa9260..bacb793fddbb6b9fd1cfc23de5fca3fcc36fcb66 100644 |
--- a/media/cast/sender/audio_encoder.cc |
+++ b/media/cast/sender/audio_encoder.cc |
@@ -19,6 +19,8 @@ |
#include "base/time/time.h" |
#include "base/trace_event/trace_event.h" |
#include "build/build_config.h" |
+#include "media/cast/common/rtp_time.h" |
+#include "media/cast/constants.h" |
#if !defined(OS_IOS) |
#include "third_party/opus/src/include/opus.h" |
@@ -63,8 +65,7 @@ class AudioEncoder::ImplBase |
base::Time::kMicrosecondsPerSecond * samples_per_frame_ / |
sampling_rate)), |
buffer_fill_end_(0), |
- frame_id_(0), |
- frame_rtp_timestamp_(0), |
+ frame_id_(kFirstFrameId), |
samples_dropped_from_buffer_(0) { |
// Support for max sampling rate of 48KHz, 2 channels, 100 ms duration. |
const int kMaxSamplesTimesChannelsPerFrame = 48 * 2 * 100; |
@@ -107,7 +108,7 @@ class AudioEncoder::ImplBase |
buffer_fill_end_ = 0; |
buffer_fill_duration = base::TimeDelta(); |
frame_rtp_timestamp_ += |
- static_cast<uint32_t>(num_frames_missed * samples_per_frame_); |
+ RtpTimeDelta::FromTicks(num_frames_missed * samples_per_frame_); |
DVLOG(1) << "Skipping RTP timestamp ahead to account for " |
<< num_frames_missed * samples_per_frame_ |
<< " samples' worth of underrun."; |
@@ -146,9 +147,11 @@ class AudioEncoder::ImplBase |
audio_frame->rtp_timestamp = frame_rtp_timestamp_; |
audio_frame->reference_time = frame_capture_time_; |
- TRACE_EVENT_ASYNC_BEGIN2("cast.stream", "Audio Encode", audio_frame.get(), |
- "frame_id", frame_id_, |
- "rtp_timestamp", frame_rtp_timestamp_); |
+ TRACE_EVENT_ASYNC_BEGIN2( |
+ "cast.stream", |
+ "Audio Encode", audio_frame.get(), |
+ "frame_id", frame_id_, |
+ "rtp_timestamp", frame_rtp_timestamp_.lower_32_bits()); |
if (EncodeFromFilledBuffer(&audio_frame->data)) { |
// Compute deadline utilization as the real-world time elapsed divided |
// by the signal duration. |
@@ -174,7 +177,7 @@ class AudioEncoder::ImplBase |
// Reset the internal buffer, frame ID, and timestamps for the next frame. |
buffer_fill_end_ = 0; |
++frame_id_; |
- frame_rtp_timestamp_ += samples_per_frame_; |
+ frame_rtp_timestamp_ += RtpTimeDelta::FromTicks(samples_per_frame_); |
frame_capture_time_ += frame_duration_; |
} |
} |
@@ -214,9 +217,8 @@ class AudioEncoder::ImplBase |
// The RTP timestamp for the next frame of encoded audio. This is defined as |
// the number of audio samples encoded so far, plus the estimated number of |
// samples that were missed due to data underruns. A receiver uses this value |
- // to detect gaps in the audio signal data being provided. Per the spec, RTP |
- // timestamp values are allowed to overflow and roll around past zero. |
- uint32_t frame_rtp_timestamp_; |
+ // to detect gaps in the audio signal data being provided. |
+ RtpTimeTicks frame_rtp_timestamp_; |
// The local system time associated with the start of the next frame of |
// encoded audio. This value is passed on to a receiver as a reference clock |