Reland "Send absolute capture time through audio coding module." This is a reland of 48655cfdbfd99e0b6331e59201bcb8514f8b2a0a Original change's description: > Send absolute capture time through audio coding module. > > Bug: webrtc:10739 > Change-Id: I44e0305be7c84b253172511c2977b1d700e40c1b > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167067 > Reviewed-by: Oskar Sundbom <ossu@webrtc.org> > Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> > Reviewed-by: Chen Xing <chxg@google.com> > Commit-Queue: Minyue Li <minyue@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#30363} Bug: webrtc:10739 Change-Id: I10086d239ad3f1efb8485098bf3b0ad23110962b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167213 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Chen Xing <chxg@google.com> Reviewed-by: Oskar Sundbom <ossu@webrtc.org> Commit-Queue: Minyue Li <minyue@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30380}
diff --git a/audio/channel_send.cc b/audio/channel_send.cc index 2fa0706..dd866f3 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc
@@ -146,17 +146,19 @@ // From AudioPacketizationCallback in the ACM int32_t SendData(AudioFrameType frameType, uint8_t payloadType, - uint32_t timeStamp, + uint32_t rtp_timestamp, const uint8_t* payloadData, - size_t payloadSize) override; + size_t payloadSize, + int64_t absolute_capture_timestamp_ms) override; void OnUplinkPacketLossRate(float packet_loss_rate); bool InputMute() const; int32_t SendRtpAudio(AudioFrameType frameType, uint8_t payloadType, - uint32_t timeStamp, - rtc::ArrayView<const uint8_t> payload) + uint32_t rtp_timestamp, + rtc::ArrayView<const uint8_t> payload, + int64_t absolute_capture_timestamp_ms) RTC_RUN_ON(encoder_queue_); void OnReceivedRtt(int64_t rtt_ms); @@ -360,18 +362,21 @@ int32_t ChannelSend::SendData(AudioFrameType frameType, uint8_t payloadType, - uint32_t timeStamp, + uint32_t rtp_timestamp, const uint8_t* payloadData, - size_t payloadSize) { + size_t payloadSize, + int64_t absolute_capture_timestamp_ms) { RTC_DCHECK_RUN_ON(&encoder_queue_); rtc::ArrayView<const uint8_t> payload(payloadData, payloadSize); - return SendRtpAudio(frameType, payloadType, timeStamp, payload); + return SendRtpAudio(frameType, payloadType, rtp_timestamp, payload, + absolute_capture_timestamp_ms); } int32_t ChannelSend::SendRtpAudio(AudioFrameType frameType, uint8_t payloadType, - uint32_t timeStamp, - rtc::ArrayView<const uint8_t> payload) { + uint32_t rtp_timestamp, + rtc::ArrayView<const uint8_t> payload, + int64_t absolute_capture_timestamp_ms) { if (_includeAudioLevelIndication) { // Store current audio level in the RTP sender. // The level will be used in combination with voice-activity state @@ -419,7 +424,7 @@ // Push data from ACM to RTP/RTCP-module to deliver audio frame for // packetization. - if (!_rtpRtcpModule->OnSendingRtpFrame(timeStamp, + if (!_rtpRtcpModule->OnSendingRtpFrame(rtp_timestamp, // Leaving the time when this frame was // received from the capture device as // undefined for voice for now. @@ -433,10 +438,12 @@ // call. // TODO(nisse): Delete RTCPSender:timestamp_offset_, and see if we can confine // knowledge of the offset to a single place. - const uint32_t rtp_timestamp = timeStamp + _rtpRtcpModule->StartTimestamp(); + // This call will trigger Transport::SendPacket() from the RTP/RTCP module. - if (!rtp_sender_audio_->SendAudio(frameType, payloadType, rtp_timestamp, - payload.data(), payload.size())) { + if (!rtp_sender_audio_->SendAudio( + frameType, payloadType, + rtp_timestamp + _rtpRtcpModule->StartTimestamp(), payload.data(), + payload.size(), absolute_capture_timestamp_ms)) { RTC_DLOG(LS_ERROR) << "ChannelSend::SendData() failed to send data to RTP/RTCP module"; return -1;