From b9d468573a051bceb3d8fb2fbbb6c7d7cab77bbe Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Tue, 14 Apr 2020 15:26:05 +0200 Subject: [PATCH] insertable streams: include rtp_timestamp offset for audio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit includes the (random) rtp start offset in the timestamp passed to the frame transformer callback Bug: chromium:1069278 Change-Id: I7d10130404d93df7cee3b8f87a0b780801a51415 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173329 Commit-Queue: Marina Ciocea Reviewed-by: Per Ã…hgren Reviewed-by: Marina Ciocea Cr-Commit-Position: refs/heads/master@{#31067} --- audio/channel_send.cc | 5 ++-- ...channel_send_frame_transformer_delegate.cc | 23 +++++++++++++------ .../channel_send_frame_transformer_delegate.h | 1 + 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/audio/channel_send.cc b/audio/channel_send.cc index 21f36aaa17..d2d4d2be6d 100644 --- a/audio/channel_send.cc +++ b/audio/channel_send.cc @@ -389,8 +389,9 @@ int32_t ChannelSend::SendData(AudioFrameType frameType, // Asynchronously transform the payload before sending it. After the payload // is transformed, the delegate will call SendRtpAudio to send it. frame_transformer_delegate_->Transform( - frameType, payloadType, rtp_timestamp, payloadData, payloadSize, - absolute_capture_timestamp_ms, _rtpRtcpModule->SSRC()); + frameType, payloadType, rtp_timestamp, _rtpRtcpModule->StartTimestamp(), + payloadData, payloadSize, absolute_capture_timestamp_ms, + _rtpRtcpModule->SSRC()); return 0; } return SendRtpAudio(frameType, payloadType, rtp_timestamp, payload, diff --git a/audio/channel_send_frame_transformer_delegate.cc b/audio/channel_send_frame_transformer_delegate.cc index 53df6b0ff0..53b573eb8b 100644 --- a/audio/channel_send_frame_transformer_delegate.cc +++ b/audio/channel_send_frame_transformer_delegate.cc @@ -20,6 +20,7 @@ class TransformableAudioFrame : public TransformableFrameInterface { TransformableAudioFrame(AudioFrameType frame_type, uint8_t payload_type, uint32_t rtp_timestamp, + uint32_t rtp_start_timestamp, const uint8_t* payload_data, size_t payload_size, int64_t absolute_capture_timestamp_ms, @@ -27,6 +28,7 @@ class TransformableAudioFrame : public TransformableFrameInterface { : frame_type_(frame_type), payload_type_(payload_type), rtp_timestamp_(rtp_timestamp), + rtp_start_timestamp_(rtp_start_timestamp), payload_(payload_data, payload_size), absolute_capture_timestamp_ms_(absolute_capture_timestamp_ms), ssrc_(ssrc) {} @@ -35,7 +37,10 @@ class TransformableAudioFrame : public TransformableFrameInterface { void SetData(rtc::ArrayView data) override { payload_.SetData(data.data(), data.size()); } - uint32_t GetTimestamp() const override { return rtp_timestamp_; } + uint32_t GetTimestamp() const override { + return rtp_timestamp_ + rtp_start_timestamp_; + } + uint32_t GetStartTimestamp() const { return rtp_start_timestamp_; } uint32_t GetSsrc() const override { return ssrc_; } AudioFrameType GetFrameType() const { return frame_type_; } @@ -48,6 +53,7 @@ class TransformableAudioFrame : public TransformableFrameInterface { AudioFrameType frame_type_; uint8_t payload_type_; uint32_t rtp_timestamp_; + uint32_t rtp_start_timestamp_; rtc::Buffer payload_; int64_t absolute_capture_timestamp_ms_; uint32_t ssrc_; @@ -79,13 +85,14 @@ void ChannelSendFrameTransformerDelegate::Transform( AudioFrameType frame_type, uint8_t payload_type, uint32_t rtp_timestamp, + uint32_t rtp_start_timestamp, const uint8_t* payload_data, size_t payload_size, int64_t absolute_capture_timestamp_ms, uint32_t ssrc) { frame_transformer_->Transform(std::make_unique( - frame_type, payload_type, rtp_timestamp, payload_data, payload_size, - absolute_capture_timestamp_ms, ssrc)); + frame_type, payload_type, rtp_timestamp, rtp_start_timestamp, + payload_data, payload_size, absolute_capture_timestamp_ms, ssrc)); } void ChannelSendFrameTransformerDelegate::OnTransformedFrame( @@ -107,10 +114,12 @@ void ChannelSendFrameTransformerDelegate::SendFrame( if (!send_frame_callback_) return; auto* transformed_frame = static_cast(frame.get()); - send_frame_callback_( - transformed_frame->GetFrameType(), transformed_frame->GetPayloadType(), - transformed_frame->GetTimestamp(), transformed_frame->GetData(), - transformed_frame->GetAbsoluteCaptureTimestampMs()); + send_frame_callback_(transformed_frame->GetFrameType(), + transformed_frame->GetPayloadType(), + transformed_frame->GetTimestamp() - + transformed_frame->GetStartTimestamp(), + transformed_frame->GetData(), + transformed_frame->GetAbsoluteCaptureTimestampMs()); } } // namespace webrtc diff --git a/audio/channel_send_frame_transformer_delegate.h b/audio/channel_send_frame_transformer_delegate.h index f2655e7c51..5added7b31 100644 --- a/audio/channel_send_frame_transformer_delegate.h +++ b/audio/channel_send_frame_transformer_delegate.h @@ -54,6 +54,7 @@ class ChannelSendFrameTransformerDelegate : public TransformedFrameCallback { void Transform(AudioFrameType frame_type, uint8_t payload_type, uint32_t rtp_timestamp, + uint32_t rtp_start_timestamp, const uint8_t* payload_data, size_t payload_size, int64_t absolute_capture_timestamp_ms,