Commit 6b14e440 authored by Johannes Kron's avatar Johannes Kron Committed by Commit Bot

Add RTP timestamp to RTCRtpReceiver::RTCRtpContributingSource

RTP timestamp was recently added to RTCRtpContributingSource in
the WebRTC specification. This CL reflects that change.

Bug: chromium:965994
Change-Id: Iba76a2b90547e7ca70bb04dd556914c7f36ea3fb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1625106
Commit-Queue: Johannes Kron <kron@chromium.org>
Reviewed-by: default avatarHenrik Boström <hbos@chromium.org>
Reviewed-by: default avatarFlorent Castelli <orphis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#663005}
parent ed90c83a
......@@ -49,4 +49,8 @@ base::Optional<double> RTCRtpSource::AudioLevel() const {
return std::pow(10.0, -(double)rfc_level / 20.0);
}
uint32_t RTCRtpSource::RtpTimestamp() const {
return source_.rtp_timestamp();
}
} // namespace content
......@@ -22,6 +22,7 @@ class CONTENT_EXPORT RTCRtpSource : public blink::WebRTCRtpSource {
double TimestampMs() const override;
uint32_t Source() const override;
base::Optional<double> AudioLevel() const override;
uint32_t RtpTimestamp() const override;
private:
const webrtc::RtpSource source_;
......
......@@ -26,6 +26,7 @@ class BLINK_PLATFORM_EXPORT WebRTCRtpSource {
virtual double TimestampMs() const = 0;
virtual uint32_t Source() const = 0;
virtual base::Optional<double> AudioLevel() const = 0;
virtual uint32_t RtpTimestamp() const = 0;
};
} // namespace blink
......
......@@ -7,4 +7,5 @@ dictionary RTCRtpContributingSource {
required DOMHighResTimeStamp timestamp;
required unsigned long source;
double audioLevel;
required unsigned long rtpTimestamp;
};
......@@ -79,6 +79,7 @@ RTCRtpReceiver::getSynchronizationSources() {
synchronization_source->setSource(web_source->Source());
if (web_source->AudioLevel())
synchronization_source->setAudioLevel(*web_source->AudioLevel());
synchronization_source->setRtpTimestamp(web_source->RtpTimestamp());
synchronization_sources.push_back(synchronization_source);
}
return synchronization_sources;
......@@ -97,6 +98,7 @@ RTCRtpReceiver::getContributingSources() {
contributing_source->setSource(web_source->Source());
if (web_source->AudioLevel())
contributing_source->setAudioLevel(*web_source->AudioLevel());
contributing_source->setRtpTimestamp(web_source->RtpTimestamp());
contributing_sources.push_back(contributing_source);
}
return contributing_sources;
......
This is a testharness.js-based test.
PASS [audio] getSynchronizationSources() eventually returns a non-empty list
PASS [audio] RTCRtpSynchronizationSource.timestamp is a number
PASS [audio] RTCRtpSynchronizationSource.rtpTimestamp is a number [0, 2^32-1]
PASS [audio] getSynchronizationSources() does not contain SSRCs older than 10 seconds
FAIL [audio] RTCRtpSynchronizationSource.timestamp is comparable to performance.timeOrigin + performance.now() assert_true: expected true got false
PASS [audio] RTCRtpSynchronizationSource.source is a number
PASS [video] getSynchronizationSources() eventually returns a non-empty list
PASS [video] RTCRtpSynchronizationSource.timestamp is a number
PASS [video] RTCRtpSynchronizationSource.rtpTimestamp is a number [0, 2^32-1]
PASS [video] getSynchronizationSources() does not contain SSRCs older than 10 seconds
FAIL [video] RTCRtpSynchronizationSource.timestamp is comparable to performance.timeOrigin + performance.now() assert_true: expected true got false
PASS [video] RTCRtpSynchronizationSource.source is a number
......
......@@ -41,6 +41,15 @@ for (const kind of ['audio', 'video']) {
assert_true(ssrc.timestamp >= startTime);
}, '[' + kind + '] RTCRtpSynchronizationSource.timestamp is a number');
promise_test(async t => {
const receiver = await initiateSingleTrackCallAndReturnReceiver(t, kind);
const [ssrc] = await listenForSSRCs(t, receiver);
assert_equals(typeof ssrc.rtpTimestamp, 'number');
assert_greater_than_equal(ssrc.rtpTimestamp, 0);
assert_less_than_equal(ssrc.rtpTimestamp, 0xffffffff);
}, '[' + kind + '] RTCRtpSynchronizationSource.rtpTimestamp is a number ' +
'[0, 2^32-1]');
promise_test(async t => {
const receiver = await initiateSingleTrackCallAndReturnReceiver(t, kind);
// Wait for packets to start flowing.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment