insertable streams: include rtp_timestamp offset for audio

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 <marinaciocea@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Marina Ciocea <marinaciocea@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31067}
This commit is contained in:
Philipp Hancke
2020-04-14 15:26:05 +02:00
committed by Commit Bot
parent fea8b94591
commit b9d468573a
3 changed files with 20 additions and 9 deletions

View File

@ -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,

View File

@ -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<const uint8_t> 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<TransformableAudioFrame>(
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,9 +114,11 @@ void ChannelSendFrameTransformerDelegate::SendFrame(
if (!send_frame_callback_)
return;
auto* transformed_frame = static_cast<TransformableAudioFrame*>(frame.get());
send_frame_callback_(
transformed_frame->GetFrameType(), transformed_frame->GetPayloadType(),
transformed_frame->GetTimestamp(), transformed_frame->GetData(),
send_frame_callback_(transformed_frame->GetFrameType(),
transformed_frame->GetPayloadType(),
transformed_frame->GetTimestamp() -
transformed_frame->GetStartTimestamp(),
transformed_frame->GetData(),
transformed_frame->GetAbsoluteCaptureTimestampMs());
}

View File

@ -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,