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 { ...@@ -49,4 +49,8 @@ base::Optional<double> RTCRtpSource::AudioLevel() const {
return std::pow(10.0, -(double)rfc_level / 20.0); return std::pow(10.0, -(double)rfc_level / 20.0);
} }
uint32_t RTCRtpSource::RtpTimestamp() const {
return source_.rtp_timestamp();
}
} // namespace content } // namespace content
...@@ -22,6 +22,7 @@ class CONTENT_EXPORT RTCRtpSource : public blink::WebRTCRtpSource { ...@@ -22,6 +22,7 @@ class CONTENT_EXPORT RTCRtpSource : public blink::WebRTCRtpSource {
double TimestampMs() const override; double TimestampMs() const override;
uint32_t Source() const override; uint32_t Source() const override;
base::Optional<double> AudioLevel() const override; base::Optional<double> AudioLevel() const override;
uint32_t RtpTimestamp() const override;
private: private:
const webrtc::RtpSource source_; const webrtc::RtpSource source_;
......
...@@ -26,6 +26,7 @@ class BLINK_PLATFORM_EXPORT WebRTCRtpSource { ...@@ -26,6 +26,7 @@ class BLINK_PLATFORM_EXPORT WebRTCRtpSource {
virtual double TimestampMs() const = 0; virtual double TimestampMs() const = 0;
virtual uint32_t Source() const = 0; virtual uint32_t Source() const = 0;
virtual base::Optional<double> AudioLevel() const = 0; virtual base::Optional<double> AudioLevel() const = 0;
virtual uint32_t RtpTimestamp() const = 0;
}; };
} // namespace blink } // namespace blink
......
...@@ -7,4 +7,5 @@ dictionary RTCRtpContributingSource { ...@@ -7,4 +7,5 @@ dictionary RTCRtpContributingSource {
required DOMHighResTimeStamp timestamp; required DOMHighResTimeStamp timestamp;
required unsigned long source; required unsigned long source;
double audioLevel; double audioLevel;
required unsigned long rtpTimestamp;
}; };
...@@ -79,6 +79,7 @@ RTCRtpReceiver::getSynchronizationSources() { ...@@ -79,6 +79,7 @@ RTCRtpReceiver::getSynchronizationSources() {
synchronization_source->setSource(web_source->Source()); synchronization_source->setSource(web_source->Source());
if (web_source->AudioLevel()) if (web_source->AudioLevel())
synchronization_source->setAudioLevel(*web_source->AudioLevel()); synchronization_source->setAudioLevel(*web_source->AudioLevel());
synchronization_source->setRtpTimestamp(web_source->RtpTimestamp());
synchronization_sources.push_back(synchronization_source); synchronization_sources.push_back(synchronization_source);
} }
return synchronization_sources; return synchronization_sources;
...@@ -97,6 +98,7 @@ RTCRtpReceiver::getContributingSources() { ...@@ -97,6 +98,7 @@ RTCRtpReceiver::getContributingSources() {
contributing_source->setSource(web_source->Source()); contributing_source->setSource(web_source->Source());
if (web_source->AudioLevel()) if (web_source->AudioLevel())
contributing_source->setAudioLevel(*web_source->AudioLevel()); contributing_source->setAudioLevel(*web_source->AudioLevel());
contributing_source->setRtpTimestamp(web_source->RtpTimestamp());
contributing_sources.push_back(contributing_source); contributing_sources.push_back(contributing_source);
} }
return contributing_sources; return contributing_sources;
......
This is a testharness.js-based test. This is a testharness.js-based test.
PASS [audio] getSynchronizationSources() eventually returns a non-empty list PASS [audio] getSynchronizationSources() eventually returns a non-empty list
PASS [audio] RTCRtpSynchronizationSource.timestamp is a number 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 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 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 [audio] RTCRtpSynchronizationSource.source is a number
PASS [video] getSynchronizationSources() eventually returns a non-empty list PASS [video] getSynchronizationSources() eventually returns a non-empty list
PASS [video] RTCRtpSynchronizationSource.timestamp is a number 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 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 FAIL [video] RTCRtpSynchronizationSource.timestamp is comparable to performance.timeOrigin + performance.now() assert_true: expected true got false
PASS [video] RTCRtpSynchronizationSource.source is a number PASS [video] RTCRtpSynchronizationSource.source is a number
......
...@@ -41,6 +41,15 @@ for (const kind of ['audio', 'video']) { ...@@ -41,6 +41,15 @@ for (const kind of ['audio', 'video']) {
assert_true(ssrc.timestamp >= startTime); assert_true(ssrc.timestamp >= startTime);
}, '[' + kind + '] RTCRtpSynchronizationSource.timestamp is a number'); }, '[' + 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 => { promise_test(async t => {
const receiver = await initiateSingleTrackCallAndReturnReceiver(t, kind); const receiver = await initiateSingleTrackCallAndReturnReceiver(t, kind);
// Wait for packets to start flowing. // 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