diff --git a/api/frame_transformer_interface.h b/api/frame_transformer_interface.h index 5bbcffe28e..102ac33334 100644 --- a/api/frame_transformer_interface.h +++ b/api/frame_transformer_interface.h @@ -73,11 +73,7 @@ class TransformableAudioFrameInterface : public TransformableFrameInterface { virtual rtc::ArrayView GetContributingSources() const = 0; - // TODO(crbug.com/1453226): Change this to pure virtual after it - // is implemented everywhere. - virtual const absl::optional SequenceNumber() const { - return absl::nullopt; - } + virtual const absl::optional SequenceNumber() const = 0; virtual absl::optional AbsoluteCaptureTimestamp() const = 0; diff --git a/audio/channel_send_frame_transformer_delegate.cc b/audio/channel_send_frame_transformer_delegate.cc index ac32410aed..6d3c011862 100644 --- a/audio/channel_send_frame_transformer_delegate.cc +++ b/audio/channel_send_frame_transformer_delegate.cc @@ -58,7 +58,8 @@ class TransformableOutgoingAudioFrame absl::optional absolute_capture_timestamp_ms, uint32_t ssrc, std::vector csrcs, - const std::string& codec_mime_type) + const std::string& codec_mime_type, + absl::optional sequence_number) : frame_type_(frame_type), payload_type_(payload_type), rtp_timestamp_with_offset_(rtp_timestamp_with_offset), @@ -66,7 +67,8 @@ class TransformableOutgoingAudioFrame absolute_capture_timestamp_ms_(absolute_capture_timestamp_ms), ssrc_(ssrc), csrcs_(std::move(csrcs)), - codec_mime_type_(codec_mime_type) {} + codec_mime_type_(codec_mime_type), + sequence_number_(sequence_number) {} ~TransformableOutgoingAudioFrame() override = default; rtc::ArrayView GetData() const override { return payload_; } void SetData(rtc::ArrayView data) override { @@ -88,7 +90,7 @@ class TransformableOutgoingAudioFrame } const absl::optional SequenceNumber() const override { - return absl::nullopt; + return sequence_number_; } void SetRTPTimestamp(uint32_t rtp_timestamp_with_offset) override { @@ -108,6 +110,7 @@ class TransformableOutgoingAudioFrame uint32_t ssrc_; std::vector csrcs_; std::string codec_mime_type_; + absl::optional sequence_number_; }; } // namespace @@ -155,7 +158,8 @@ void ChannelSendFrameTransformerDelegate::Transform( std::make_unique( frame_type, payload_type, rtp_timestamp, payload_data, payload_size, absolute_capture_timestamp_ms, ssrc, - /*csrcs=*/std::vector(), codec_mimetype)); + /*csrcs=*/std::vector(), codec_mimetype, + /*sequence_number=*/absl::nullopt)); } void ChannelSendFrameTransformerDelegate::OnTransformedFrame( @@ -203,7 +207,7 @@ std::unique_ptr CloneSenderAudioFrame( original->GetPayloadType(), original->GetTimestamp(), original->GetData().data(), original->GetData().size(), original->AbsoluteCaptureTimestamp(), original->GetSsrc(), - std::move(csrcs), original->GetMimeType()); + std::move(csrcs), original->GetMimeType(), original->SequenceNumber()); } } // namespace webrtc diff --git a/audio/channel_send_frame_transformer_delegate_unittest.cc b/audio/channel_send_frame_transformer_delegate_unittest.cc index 5295e2657f..428235efc9 100644 --- a/audio/channel_send_frame_transformer_delegate_unittest.cc +++ b/audio/channel_send_frame_transformer_delegate_unittest.cc @@ -68,6 +68,7 @@ std::unique_ptr CreateMockReceiverFrame( ON_CALL(*mock_frame, GetDirection) .WillByDefault(Return(TransformableFrameInterface::Direction::kReceiver)); ON_CALL(*mock_frame, GetContributingSources).WillByDefault(Return(csrcs)); + ON_CALL(*mock_frame, SequenceNumber).WillByDefault(Return(987654321)); return mock_frame; } @@ -252,6 +253,7 @@ TEST(ChannelSendFrameTransformerDelegateTest, CloningReceiverFrameWithCsrcs) { ASSERT_NE(frame->GetContributingSources().size(), 0u); EXPECT_THAT(cloned_frame->GetContributingSources(), ElementsAreArray(frame->GetContributingSources())); + EXPECT_EQ(cloned_frame->SequenceNumber(), frame->SequenceNumber()); } } // namespace