Skip to content

Commit 68f8329

Browse files
fippoChromium LUCI CQ
authored and
Chromium LUCI CQ
committed
insertable streams: add rtp sequence number to incoming audio metadata
spec change w3c/webrtc-encoded-transform#154 drive-by: - fix idl of payloadType to be octet instead of short BUG=chromium:1411703 Change-Id: Ic8dc8dcebb035a8f79823a8ca70e02ac1d6788cf Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3925401 Reviewed-by: Harald Alvestrand <[email protected]> Commit-Queue: Philipp Hancke <[email protected]> Cr-Commit-Position: refs/heads/main@{#1100372}
1 parent 4d7da5e commit 68f8329

8 files changed

+35
-8
lines changed

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@ RTCEncodedAudioFrame::RTCEncodedAudioFrame(
1818
std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame)
1919
: delegate_(base::MakeRefCounted<RTCEncodedAudioFrameDelegate>(
2020
std::move(webrtc_frame),
21-
Vector<uint32_t>())) {}
21+
Vector<uint32_t>(),
22+
absl::nullopt)) {}
2223

2324
RTCEncodedAudioFrame::RTCEncodedAudioFrame(
2425
std::unique_ptr<webrtc::TransformableAudioFrameInterface>
2526
webrtc_audio_frame) {
2627
Vector<uint32_t> contributing_sources;
28+
absl::optional<uint16_t> sequence_number;
2729
if (webrtc_audio_frame) {
2830
contributing_sources.assign(webrtc_audio_frame->GetContributingSources());
31+
if (webrtc_audio_frame->GetDirection() ==
32+
webrtc::TransformableFrameInterface::Direction::kReceiver) {
33+
sequence_number = webrtc_audio_frame->GetHeader().sequenceNumber;
34+
}
2935
}
3036
delegate_ = base::MakeRefCounted<RTCEncodedAudioFrameDelegate>(
31-
std::move(webrtc_audio_frame), std::move(contributing_sources));
37+
std::move(webrtc_audio_frame), std::move(contributing_sources),
38+
sequence_number);
3239
}
3340

3441
RTCEncodedAudioFrame::RTCEncodedAudioFrame(
@@ -56,6 +63,9 @@ RTCEncodedAudioFrameMetadata* RTCEncodedAudioFrame::getMetadata() const {
5663
if (delegate_->PayloadType()) {
5764
metadata->setPayloadType(*delegate_->PayloadType());
5865
}
66+
if (delegate_->SequenceNumber()) {
67+
metadata->setSequenceNumber(*delegate_->SequenceNumber());
68+
}
5969
return metadata;
6070
}
6171

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <stdint.h>
99

10+
#include "third_party/abseil-cpp/absl/types/optional.h"
1011
#include "third_party/blink/renderer/modules/modules_export.h"
1112
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
1213
#include "third_party/blink/renderer/platform/heap/member.h"
@@ -38,6 +39,7 @@ class MODULES_EXPORT RTCEncodedAudioFrame final : public ScriptWrappable {
3839
// rtc_encoded_audio_frame.idl implementation.
3940
// Returns the RTP Packet Timestamp for this frame.
4041
uint32_t timestamp() const;
42+
absl::optional<uint16_t> sequenceNumber() const;
4143
DOMArrayBuffer* data() const;
4244
RTCEncodedAudioFrameMetadata* getMetadata() const;
4345
void setData(DOMArrayBuffer*);

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ const void* RTCEncodedAudioFramesAttachment::kAttachmentKey;
1414

1515
RTCEncodedAudioFrameDelegate::RTCEncodedAudioFrameDelegate(
1616
std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame,
17-
Vector<uint32_t> contributing_sources)
17+
Vector<uint32_t> contributing_sources,
18+
absl::optional<uint16_t> sequence_number)
1819
: webrtc_frame_(std::move(webrtc_frame)),
19-
contributing_sources_(std::move(contributing_sources)) {}
20+
contributing_sources_(std::move(contributing_sources)),
21+
sequence_number_(sequence_number) {}
2022

2123
uint32_t RTCEncodedAudioFrameDelegate::Timestamp() const {
2224
base::AutoLock lock(lock_);
@@ -61,6 +63,11 @@ absl::optional<uint8_t> RTCEncodedAudioFrameDelegate::PayloadType() const {
6163
: absl::nullopt;
6264
}
6365

66+
absl::optional<uint16_t> RTCEncodedAudioFrameDelegate::SequenceNumber() const {
67+
base::AutoLock lock(lock_);
68+
return sequence_number_;
69+
}
70+
6471
Vector<uint32_t> RTCEncodedAudioFrameDelegate::ContributingSources() const {
6572
base::AutoLock lock(lock_);
6673
return contributing_sources_;

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,24 @@ class RTCEncodedAudioFrameDelegate
2727
public:
2828
explicit RTCEncodedAudioFrameDelegate(
2929
std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame,
30-
Vector<uint32_t> contributing_sources);
30+
Vector<uint32_t> contributing_sources,
31+
absl::optional<uint16_t> sequence_number);
3132

3233
uint32_t Timestamp() const;
3334
DOMArrayBuffer* CreateDataBuffer() const;
3435
void SetData(const DOMArrayBuffer* data);
3536
absl::optional<uint32_t> Ssrc() const;
3637
absl::optional<uint8_t> PayloadType() const;
38+
absl::optional<uint16_t> SequenceNumber() const;
3739
Vector<uint32_t> ContributingSources() const;
3840
std::unique_ptr<webrtc::TransformableFrameInterface> PassWebRtcFrame();
3941

4042
private:
4143
mutable base::Lock lock_;
4244
std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame_
4345
GUARDED_BY(lock_);
44-
Vector<uint32_t> contributing_sources_;
46+
Vector<uint32_t> contributing_sources_ GUARDED_BY(lock_);
47+
absl::optional<uint16_t> sequence_number_ GUARDED_BY(lock_);
4548
};
4649

4750
class MODULES_EXPORT RTCEncodedAudioFramesAttachment

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_metadata.idl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
dictionary RTCEncodedAudioFrameMetadata {
99
unsigned long synchronizationSource;
1010
sequence<unsigned long> contributingSources;
11-
short payloadType;
11+
octet payloadType;
12+
unsigned short? sequenceNumber;
1213
};

third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink_test.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
using testing::_;
3333
using testing::NiceMock;
3434
using testing::Return;
35+
using testing::ReturnRef;
3536

3637
namespace blink {
3738

@@ -95,6 +96,8 @@ class RTCEncodedAudioUnderlyingSinkTest : public testing::Test {
9596
webrtc::TransformableFrameInterface::Direction::kSender) {
9697
auto mock_frame = std::make_unique<NiceMock<MockTransformableAudioFrame>>();
9798
ON_CALL(*mock_frame.get(), GetDirection).WillByDefault(Return(direction));
99+
webrtc::RTPHeader header;
100+
ON_CALL(*mock_frame.get(), GetHeader).WillByDefault(ReturnRef(header));
98101
std::unique_ptr<webrtc::TransformableAudioFrameInterface> audio_frame =
99102
base::WrapUnique(static_cast<webrtc::TransformableAudioFrameInterface*>(
100103
mock_frame.release()));

third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_metadata.idl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ dictionary RTCEncodedVideoFrameMetadata {
4343
// RTP related metadata
4444
unsigned long synchronizationSource;
4545
sequence<unsigned long> contributingSources;
46-
short payloadType;
46+
octet payloadType;
4747
};

third_party/blink/web_tests/external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-audio.https.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
// frames are not passed correctly between sender and receiver.
5757
assert_unreached("Incorrect frame received");
5858
}
59+
assert_not_equals(result.value.getMetadata().sequenceNumber, undefined);
5960

6061
if (numVerifiedFrames == numFramesToSend)
6162
resolve();

0 commit comments

Comments
 (0)