Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Unified Diff: third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp

Issue 2395543002: reflow comments in modules/[mediasource,plugins] (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
index 6fa56a6b0c9c2783905bdf289e0bc626b2ed3920..9fe115a4a49198ffdc9beb390b68a7a97285b34f 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
@@ -180,20 +180,26 @@ void SourceBuffer::setMode(const AtomicString& newMode,
BLINK_SBLOG << __func__ << " this=" << this << " newMode=" << newMode;
// Section 3.1 On setting mode attribute steps.
// 1. Let new mode equal the new value being assigned to this attribute.
- // 2. If this object has been removed from the sourceBuffers attribute of the parent media source, then throw
- // an INVALID_STATE_ERR exception and abort these steps.
- // 3. If the updating attribute equals true, then throw an INVALID_STATE_ERR exception and abort these steps.
+ // 2. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source, then throw an INVALID_STATE_ERR exception and abort
+ // these steps.
+ // 3. If the updating attribute equals true, then throw an INVALID_STATE_ERR
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState))
return;
- // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
+ // 4. If the readyState attribute of the parent media source is in the "ended"
+ // state then run the following steps:
// 4.1 Set the readyState attribute of the parent media source to "open"
- // 4.2 Queue a task to fire a simple event named sourceopen at the parent media source.
+ // 4.2 Queue a task to fire a simple event named sourceopen at the parent
+ // media source.
m_source->openIfInEndedState();
- // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALID_STATE_ERR and abort these steps.
- // 6. If the new mode equals "sequence", then set the group start timestamp to the highest presentation end timestamp.
+ // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an
+ // INVALID_STATE_ERR and abort these steps.
+ // 6. If the new mode equals "sequence", then set the group start timestamp to
+ // the highest presentation end timestamp.
WebSourceBuffer::AppendMode appendMode = WebSourceBuffer::AppendModeSegments;
if (newMode == sequenceKeyword())
appendMode = WebSourceBuffer::AppendModeSequence;
@@ -211,8 +217,9 @@ void SourceBuffer::setMode(const AtomicString& newMode,
TimeRanges* SourceBuffer::buffered(ExceptionState& exceptionState) const {
// Section 3.1 buffered attribute steps.
- // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an
- // InvalidStateError exception and abort these steps.
+ // 1. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source then throw an InvalidStateError exception and abort
+ // these steps.
if (isRemoved()) {
MediaSource::logAndThrowDOMException(
exceptionState, InvalidStateError,
@@ -220,7 +227,8 @@ TimeRanges* SourceBuffer::buffered(ExceptionState& exceptionState) const {
return nullptr;
}
- // 2. Return a new static normalized TimeRanges object for the media segments buffered.
+ // 2. Return a new static normalized TimeRanges object for the media segments
+ // buffered.
return TimeRanges::create(m_webSourceBuffer->buffered());
}
@@ -233,21 +241,28 @@ void SourceBuffer::setTimestampOffset(double offset,
BLINK_SBLOG << __func__ << " this=" << this << " offset=" << offset;
// Section 3.1 timestampOffset attribute setter steps.
// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#widl-SourceBuffer-timestampOffset
- // 1. Let new timestamp offset equal the new value being assigned to this attribute.
- // 2. If this object has been removed from the sourceBuffers attribute of the parent media source, then throw an
- // InvalidStateError exception and abort these steps.
- // 3. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. Let new timestamp offset equal the new value being assigned to this
+ // attribute.
+ // 2. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source, then throw an InvalidStateError exception and abort
+ // these steps.
+ // 3. If the updating attribute equals true, then throw an InvalidStateError
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState))
return;
- // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
+ // 4. If the readyState attribute of the parent media source is in the "ended"
+ // state then run the following steps:
// 4.1 Set the readyState attribute of the parent media source to "open"
- // 4.2 Queue a task to fire a simple event named sourceopen at the parent media source.
+ // 4.2 Queue a task to fire a simple event named sourceopen at the parent
+ // media source.
m_source->openIfInEndedState();
- // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an INVALID_STATE_ERR and abort these steps.
- // 6. If the mode attribute equals "sequence", then set the group start timestamp to new timestamp offset.
+ // 5. If the append state equals PARSING_MEDIA_SEGMENT, then throw an
+ // INVALID_STATE_ERR and abort these steps.
+ // 6. If the mode attribute equals "sequence", then set the group start
+ // timestamp to new timestamp offset.
if (!m_webSourceBuffer->setTimestampOffset(offset)) {
MediaSource::logAndThrowDOMException(exceptionState, InvalidStateError,
"The timestamp offset may not be set "
@@ -279,15 +294,17 @@ void SourceBuffer::setAppendWindowStart(double start,
BLINK_SBLOG << __func__ << " this=" << this << " start=" << start;
// Section 3.1 appendWindowStart attribute setter steps.
// https://www.w3.org/TR/media-source/#widl-SourceBuffer-appendWindowStart
- // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an
- // InvalidStateError exception and abort these steps.
- // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source then throw an InvalidStateError exception and abort
+ // these steps.
+ // 2. If the updating attribute equals true, then throw an InvalidStateError
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState))
return;
- // 3. If the new value is less than 0 or greater than or equal to appendWindowEnd then throw a TypeError
- // exception and abort these steps.
+ // 3. If the new value is less than 0 or greater than or equal to
+ // appendWindowEnd then throw a TypeError exception and abort these steps.
if (start < 0 || start >= m_appendWindowEnd) {
MediaSource::logAndThrowTypeError(
exceptionState,
@@ -312,21 +329,24 @@ void SourceBuffer::setAppendWindowEnd(double end,
BLINK_SBLOG << __func__ << " this=" << this << " end=" << end;
// Section 3.1 appendWindowEnd attribute setter steps.
// https://www.w3.org/TR/media-source/#widl-SourceBuffer-appendWindowEnd
- // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an
- // InvalidStateError exception and abort these steps.
- // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source then throw an InvalidStateError exception and abort
+ // these steps.
+ // 2. If the updating attribute equals true, then throw an InvalidStateError
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState))
return;
- // 3. If the new value equals NaN, then throw a TypeError and abort these steps.
+ // 3. If the new value equals NaN, then throw a TypeError and abort these
+ // steps.
if (std::isnan(end)) {
MediaSource::logAndThrowTypeError(exceptionState,
ExceptionMessages::notAFiniteNumber(end));
return;
}
- // 4. If the new value is less than or equal to appendWindowStart then throw a TypeError
- // exception and abort these steps.
+ // 4. If the new value is less than or equal to appendWindowStart then throw a
+ // TypeError exception and abort these steps.
if (end <= m_appendWindowStart) {
MediaSource::logAndThrowTypeError(
exceptionState, ExceptionMessages::indexExceedsMinimumBound(
@@ -377,10 +397,12 @@ void SourceBuffer::appendStream(Stream* stream,
void SourceBuffer::abort(ExceptionState& exceptionState) {
BLINK_SBLOG << __func__ << " this=" << this;
// http://w3c.github.io/media-source/#widl-SourceBuffer-abort-void
- // 1. If this object has been removed from the sourceBuffers attribute of the parent media source
- // then throw an InvalidStateError exception and abort these steps.
- // 2. If the readyState attribute of the parent media source is not in the "open" state
- // then throw an InvalidStateError exception and abort these steps.
+ // 1. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source then throw an InvalidStateError exception and abort
+ // these steps.
+ // 2. If the readyState attribute of the parent media source is not in the
+ // "open" state then throw an InvalidStateError exception and abort these
+ // steps.
if (isRemoved()) {
MediaSource::logAndThrowDOMException(
exceptionState, InvalidStateError,
@@ -413,7 +435,8 @@ void SourceBuffer::abort(ExceptionState& exceptionState) {
cancelRemove();
}
- // 4. If the sourceBuffer.updating attribute equals true, then run the following steps: ...
+ // 4. If the sourceBuffer.updating attribute equals true, then run the
+ // following steps: ...
abortIfUpdating();
// 5. Run the reset parser state algorithm.
@@ -434,15 +457,19 @@ void SourceBuffer::remove(double start,
// Section 3.2 remove() method steps.
// https://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end
- // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an
- // InvalidStateError exception and abort these steps.
- // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. If this object has been removed from the sourceBuffers attribute of the
+ // parent media source then throw an InvalidStateError exception and abort
+ // these steps.
+ // 2. If the updating attribute equals true, then throw an InvalidStateError
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState))
return;
- // 3. If duration equals NaN, then throw a TypeError exception and abort these steps.
- // 4. If start is negative or greater than duration, then throw a TypeError exception and abort these steps.
+ // 3. If duration equals NaN, then throw a TypeError exception and abort these
+ // steps.
+ // 4. If start is negative or greater than duration, then throw a TypeError
+ // exception and abort these steps.
if (start < 0 || std::isnan(m_source->duration()) ||
start > m_source->duration()) {
MediaSource::logAndThrowTypeError(
@@ -454,7 +481,8 @@ void SourceBuffer::remove(double start,
return;
}
- // 5. If end is less than or equal to start or end equals NaN, then throw a TypeError exception and abort these steps.
+ // 5. If end is less than or equal to start or end equals NaN, then throw a
+ // TypeError exception and abort these steps.
if (end <= start || std::isnan(end)) {
MediaSource::logAndThrowTypeError(
exceptionState,
@@ -466,19 +494,24 @@ void SourceBuffer::remove(double start,
TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::remove", this);
- // 6. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
+ // 6. If the readyState attribute of the parent media source is in the "ended"
+ // state then run the following steps:
// 6.1. Set the readyState attribute of the parent media source to "open"
- // 6.2. Queue a task to fire a simple event named sourceopen at the parent media source .
+ // 6.2. Queue a task to fire a simple event named sourceopen at the parent
+ // media source .
m_source->openIfInEndedState();
- // 7. Run the range removal algorithm with start and end as the start and end of the removal range.
+ // 7. Run the range removal algorithm with start and end as the start and end
+ // of the removal range.
// 7.3. Set the updating attribute to true.
m_updating = true;
- // 7.4. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
+ // 7.4. Queue a task to fire a simple event named updatestart at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updatestart);
- // 7.5. Return control to the caller and run the rest of the steps asynchronously.
+ // 7.5. Return control to the caller and run the rest of the steps
+ // asynchronously.
m_pendingRemoveStart = start;
m_pendingRemoveEnd = end;
m_removeAsyncPartRunner->runAsync();
@@ -533,7 +566,8 @@ void SourceBuffer::abortIfUpdating() {
traceEventName = "SourceBuffer::appendBuffer";
}
- // 4.1. Abort the buffer append and stream append loop algorithms if they are running.
+ // 4.1. Abort the buffer append and stream append loop algorithms if they are
+ // running.
m_appendBufferAsyncPartRunner->stop();
m_pendingAppendData.clear();
m_pendingAppendDataOffset = 0;
@@ -544,10 +578,12 @@ void SourceBuffer::abortIfUpdating() {
// 4.2. Set the updating attribute to false.
m_updating = false;
- // 4.3. Queue a task to fire a simple event named abort at this SourceBuffer object.
+ // 4.3. Queue a task to fire a simple event named abort at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::abort);
- // 4.4. Queue a task to fire a simple event named updateend at this SourceBuffer object.
+ // 4.4. Queue a task to fire a simple event named updateend at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updateend);
TRACE_EVENT_ASYNC_END0("media", traceEventName, this);
@@ -588,59 +624,86 @@ double SourceBuffer::highestPresentationTimestamp() {
void SourceBuffer::removeMediaTracks() {
DCHECK(RuntimeEnabledFeatures::audioVideoTracksEnabled());
- // Spec: http://w3c.github.io/media-source/#widl-MediaSource-removeSourceBuffer-void-SourceBuffer-sourceBuffer
+ // Spec:
+ // http://w3c.github.io/media-source/#widl-MediaSource-removeSourceBuffer-void-SourceBuffer-sourceBuffer
DCHECK(m_source);
HTMLMediaElement* mediaElement = m_source->mediaElement();
DCHECK(mediaElement);
- // 3. Let SourceBuffer audioTracks list equal the AudioTrackList object returned by sourceBuffer.audioTracks.
- // 4. If the SourceBuffer audioTracks list is not empty, then run the following steps:
- // 4.1 Let HTMLMediaElement audioTracks list equal the AudioTrackList object returned by the audioTracks attribute on the HTMLMediaElement.
+ // 3. Let SourceBuffer audioTracks list equal the AudioTrackList object
+ // returned by sourceBuffer.audioTracks.
+ // 4. If the SourceBuffer audioTracks list is not empty, then run the
+ // following steps:
+ // 4.1 Let HTMLMediaElement audioTracks list equal the AudioTrackList object
+ // returned by the audioTracks attribute on the HTMLMediaElement.
// 4.2 Let the removed enabled audio track flag equal false.
bool removedEnabledAudioTrack = false;
- // 4.3 For each AudioTrack object in the SourceBuffer audioTracks list, run the following steps:
+ // 4.3 For each AudioTrack object in the SourceBuffer audioTracks list, run
+ // the following steps:
while (audioTracks().length() > 0) {
AudioTrack* audioTrack = audioTracks().anonymousIndexedGetter(0);
// 4.3.1 Set the sourceBuffer attribute on the AudioTrack object to null.
SourceBufferTrackBaseSupplement::setSourceBuffer(*audioTrack, nullptr);
- // 4.3.2 If the enabled attribute on the AudioTrack object is true, then set the removed enabled audio track flag to true.
+ // 4.3.2 If the enabled attribute on the AudioTrack object is true, then set
+ // the removed enabled audio track flag to true.
if (audioTrack->enabled())
removedEnabledAudioTrack = true;
- // 4.3.3 Remove the AudioTrack object from the HTMLMediaElement audioTracks list.
- // 4.3.4 Queue a task to fire a trusted event named removetrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the HTMLMediaElement audioTracks list.
+ // 4.3.3 Remove the AudioTrack object from the HTMLMediaElement audioTracks
+ // list.
+ // 4.3.4 Queue a task to fire a trusted event named removetrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the HTMLMediaElement audioTracks list.
mediaElement->audioTracks().remove(audioTrack->id());
- // 4.3.5 Remove the AudioTrack object from the SourceBuffer audioTracks list.
- // 4.3.6 Queue a task to fire a trusted event named removetrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the SourceBuffer audioTracks list.
+ // 4.3.5 Remove the AudioTrack object from the SourceBuffer audioTracks
+ // list.
+ // 4.3.6 Queue a task to fire a trusted event named removetrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the SourceBuffer audioTracks list.
audioTracks().remove(audioTrack->id());
}
- // 4.4 If the removed enabled audio track flag equals true, then queue a task to fire a simple event named change at the HTMLMediaElement audioTracks list.
+ // 4.4 If the removed enabled audio track flag equals true, then queue a task
+ // to fire a simple event named change at the HTMLMediaElement audioTracks
+ // list.
if (removedEnabledAudioTrack) {
Event* event = Event::create(EventTypeNames::change);
event->setTarget(&mediaElement->audioTracks());
mediaElement->scheduleEvent(event);
}
- // 5. Let SourceBuffer videoTracks list equal the VideoTrackList object returned by sourceBuffer.videoTracks.
- // 6. If the SourceBuffer videoTracks list is not empty, then run the following steps:
- // 6.1 Let HTMLMediaElement videoTracks list equal the VideoTrackList object returned by the videoTracks attribute on the HTMLMediaElement.
+ // 5. Let SourceBuffer videoTracks list equal the VideoTrackList object
+ // returned by sourceBuffer.videoTracks.
+ // 6. If the SourceBuffer videoTracks list is not empty, then run the
+ // following steps:
+ // 6.1 Let HTMLMediaElement videoTracks list equal the VideoTrackList object
+ // returned by the videoTracks attribute on the HTMLMediaElement.
// 6.2 Let the removed selected video track flag equal false.
bool removedSelectedVideoTrack = false;
- // 6.3 For each VideoTrack object in the SourceBuffer videoTracks list, run the following steps:
+ // 6.3 For each VideoTrack object in the SourceBuffer videoTracks list, run
+ // the following steps:
while (videoTracks().length() > 0) {
VideoTrack* videoTrack = videoTracks().anonymousIndexedGetter(0);
// 6.3.1 Set the sourceBuffer attribute on the VideoTrack object to null.
SourceBufferTrackBaseSupplement::setSourceBuffer(*videoTrack, nullptr);
- // 6.3.2 If the selected attribute on the VideoTrack object is true, then set the removed selected video track flag to true.
+ // 6.3.2 If the selected attribute on the VideoTrack object is true, then
+ // set the removed selected video track flag to true.
if (videoTrack->selected())
removedSelectedVideoTrack = true;
- // 6.3.3 Remove the VideoTrack object from the HTMLMediaElement videoTracks list.
- // 6.3.4 Queue a task to fire a trusted event named removetrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the HTMLMediaElement videoTracks list.
+ // 6.3.3 Remove the VideoTrack object from the HTMLMediaElement videoTracks
+ // list.
+ // 6.3.4 Queue a task to fire a trusted event named removetrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the HTMLMediaElement videoTracks list.
mediaElement->videoTracks().remove(videoTrack->id());
- // 6.3.5 Remove the VideoTrack object from the SourceBuffer videoTracks list.
- // 6.3.6 Queue a task to fire a trusted event named removetrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the SourceBuffer videoTracks list.
+ // 6.3.5 Remove the VideoTrack object from the SourceBuffer videoTracks
+ // list.
+ // 6.3.6 Queue a task to fire a trusted event named removetrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the SourceBuffer videoTracks list.
videoTracks().remove(videoTrack->id());
}
- // 6.4 If the removed selected video track flag equals true, then queue a task to fire a simple event named change at the HTMLMediaElement videoTracks list.
+ // 6.4 If the removed selected video track flag equals true, then queue a task
+ // to fire a simple event named change at the HTMLMediaElement videoTracks
+ // list.
if (removedSelectedVideoTrack) {
Event* event = Event::create(EventTypeNames::change);
event->setTarget(&mediaElement->videoTracks());
@@ -652,10 +715,14 @@ void SourceBuffer::removeMediaTracks() {
template <class T>
T* findExistingTrackById(const TrackListBase<T>& trackList, const String& id) {
- // According to MSE specification (https://w3c.github.io/media-source/#sourcebuffer-init-segment-received) step 3.1:
- // > If more than one track for a single type are present (ie 2 audio tracks), then the Track IDs match the ones in the first initialization segment.
- // I.e. we only need to search by TrackID if there is more than one track, otherwise we can assume that the only
- // track of the given type is the same one that we had in previous init segments.
+ // According to MSE specification
+ // (https://w3c.github.io/media-source/#sourcebuffer-init-segment-received)
+ // step 3.1:
+ // > If more than one track for a single type are present (ie 2 audio tracks),
+ // then the Track IDs match the ones in the first initialization segment.
+ // I.e. we only need to search by TrackID if there is more than one track,
+ // otherwise we can assume that the only track of the given type is the same
+ // one that we had in previous init segments.
if (trackList.length() == 1)
return trackList.anonymousIndexedGetter(0);
return trackList.getTrackById(id);
@@ -664,14 +731,21 @@ T* findExistingTrackById(const TrackListBase<T>& trackList, const String& id) {
const TrackDefault* SourceBuffer::getTrackDefault(
const AtomicString& trackType,
const AtomicString& byteStreamTrackID) const {
- // This is a helper for implementation of default track label and default track language algorithms.
- // defaultTrackLabel spec: https://w3c.github.io/media-source/#sourcebuffer-default-track-label
- // defaultTrackLanguage spec: https://w3c.github.io/media-source/#sourcebuffer-default-track-language
-
- // 1. If trackDefaults contains a TrackDefault object with a type attribute equal to type and a byteStreamTrackID attribute equal to byteStreamTrackID,
- // then return the value of the label/language attribute on this matching object and abort these steps.
- // 2. If trackDefaults contains a TrackDefault object with a type attribute equal to type and a byteStreamTrackID attribute equal to an empty string,
- // then return the value of the label/language attribute on this matching object and abort these steps.
+ // This is a helper for implementation of default track label and default
+ // track language algorithms.
+ // defaultTrackLabel spec:
+ // https://w3c.github.io/media-source/#sourcebuffer-default-track-label
+ // defaultTrackLanguage spec:
+ // https://w3c.github.io/media-source/#sourcebuffer-default-track-language
+
+ // 1. If trackDefaults contains a TrackDefault object with a type attribute
+ // equal to type and a byteStreamTrackID attribute equal to byteStreamTrackID,
+ // then return the value of the label/language attribute on this matching
+ // object and abort these steps.
+ // 2. If trackDefaults contains a TrackDefault object with a type attribute
+ // equal to type and a byteStreamTrackID attribute equal to an empty
+ // string, then return the value of the label/language attribute on this
+ // matching object and abort these steps.
// 3. Return an empty string to the caller
const TrackDefault* trackDefaultWithEmptyBytestreamId = nullptr;
for (unsigned i = 0; i < m_trackDefaults->length(); ++i) {
@@ -699,7 +773,8 @@ AtomicString SourceBuffer::defaultTrackLabel(
AtomicString SourceBuffer::defaultTrackLanguage(
const AtomicString& trackType,
const AtomicString& byteStreamTrackID) const {
- // Spec: https://w3c.github.io/media-source/#sourcebuffer-default-track-language
+ // Spec:
+ // https://w3c.github.io/media-source/#sourcebuffer-default-track-language
const TrackDefault* trackDefault =
getTrackDefault(trackType, byteStreamTrackID);
return trackDefault ? AtomicString(trackDefault->language()) : "";
@@ -764,26 +839,36 @@ bool SourceBuffer::initializationSegmentReceived(
// 1. Update the duration attribute if it currently equals NaN:
// TODO(servolk): Pass also stream duration into initSegmentReceived.
- // 2. If the initialization segment has no audio, video, or text tracks, then run the append error algorithm with the decode error parameter set to true and abort these steps.
+ // 2. If the initialization segment has no audio, video, or text tracks, then
+ // run the append error algorithm with the decode error parameter set to
+ // true and abort these steps.
if (newTracks.size() == 0) {
BLINK_SBLOG << __func__ << " this=" << this
<< " failed: no tracks found in the init segment.";
- // The append error algorithm will be called at the top level after we return false here to indicate failure.
+ // The append error algorithm will be called at the top level after we
+ // return false here to indicate failure.
return false;
}
- // 3. If the first initialization segment received flag is true, then run the following steps:
+ // 3. If the first initialization segment received flag is true, then run the
+ // following steps:
if (m_firstInitializationSegmentReceived) {
- // 3.1 Verify the following properties. If any of the checks fail then run the append error algorithm with the decode error parameter set to true and abort these steps.
+ // 3.1 Verify the following properties. If any of the checks fail then run
+ // the append error algorithm with the decode error parameter set to
+ // true and abort these steps.
bool tracksMatchFirstInitSegment = true;
- // - The number of audio, video, and text tracks match what was in the first initialization segment.
+ // - The number of audio, video, and text tracks match what was in the first
+ // initialization segment.
if (newAudioTracks.size() != audioTracks().length() ||
newVideoTracks.size() != videoTracks().length()) {
tracksMatchFirstInitSegment = false;
}
- // - The codecs for each track, match what was specified in the first initialization segment.
+ // - The codecs for each track, match what was specified in the first
+ // initialization segment.
// This is currently done in MediaSourceState::OnNewConfigs.
- // - If more than one track for a single type are present (ie 2 audio tracks), then the Track IDs match the ones in the first initialization segment.
+ // - If more than one track for a single type are present (ie 2 audio
+ // tracks), then the Track IDs match the ones in the first initialization
+ // segment.
if (tracksMatchFirstInitSegment && newAudioTracks.size() > 1) {
for (size_t i = 0; i < newAudioTracks.size(); ++i) {
const String& newTrackId = newVideoTracks[i].id;
@@ -809,12 +894,14 @@ bool SourceBuffer::initializationSegmentReceived(
if (!tracksMatchFirstInitSegment) {
BLINK_SBLOG << __func__ << " this=" << this
<< " failed: tracks mismatch the first init segment.";
- // The append error algorithm will be called at the top level after we return false here to indicate failure.
+ // The append error algorithm will be called at the top level after we
+ // return false here to indicate failure.
return false;
}
- // 3.2 Add the appropriate track descriptions from this initialization segment to each of the track buffers.
- // This is done in Chromium code in stream parsers and demuxer implementations.
+ // 3.2 Add the appropriate track descriptions from this initialization
+ // segment to each of the track buffers. This is done in Chromium code
+ // in stream parsers and demuxer implementations.
// 3.3 Set the need random access point flag on all track buffers to true.
// This is done in Chromium code, see MediaSourceState::OnNewConfigs.
@@ -823,30 +910,45 @@ bool SourceBuffer::initializationSegmentReceived(
// 4. Let active track flag equal false.
bool activeTrack = false;
- // 5. If the first initialization segment received flag is false, then run the following steps:
+ // 5. If the first initialization segment received flag is false, then run the
+ // following steps:
if (!m_firstInitializationSegmentReceived) {
- // 5.1 If the initialization segment contains tracks with codecs the user agent does not support, then run the append error algorithm with the decode error parameter set to true and abort these steps.
+ // 5.1 If the initialization segment contains tracks with codecs the user
+ // agent does not support, then run the append error algorithm with the
+ // decode error parameter set to true and abort these steps.
// This is done in Chromium code, see MediaSourceState::OnNewConfigs.
- // 5.2 For each audio track in the initialization segment, run following steps:
+ // 5.2 For each audio track in the initialization segment, run following
+ // steps:
for (const MediaTrackInfo& trackInfo : newAudioTracks) {
- // 5.2.1 Let audio byte stream track ID be the Track ID for the current track being processed.
+ // 5.2.1 Let audio byte stream track ID be the Track ID for the current
+ // track being processed.
const auto& byteStreamTrackID = trackInfo.byteStreamTrackID;
- // 5.2.2 Let audio language be a BCP 47 language tag for the language specified in the initialization segment for this track or an empty string if no language info is present.
+ // 5.2.2 Let audio language be a BCP 47 language tag for the language
+ // specified in the initialization segment for this track or an
+ // empty string if no language info is present.
WebString language = trackInfo.language;
- // 5.2.3 If audio language equals an empty string or the 'und' BCP 47 value, then run the default track language algorithm with byteStreamTrackID set to
- // audio byte stream track ID and type set to "audio" and assign the value returned by the algorithm to audio language.
+ // 5.2.3 If audio language equals an empty string or the 'und' BCP 47
+ // value, then run the default track language algorithm with
+ // byteStreamTrackID set to audio byte stream track ID and type set
+ // to "audio" and assign the value returned by the algorithm to
+ // audio language.
if (language.isEmpty() || language == "und")
language = defaultTrackLanguage(TrackDefault::audioKeyword(),
byteStreamTrackID);
- // 5.2.4 Let audio label be a label specified in the initialization segment for this track or an empty string if no label info is present.
+ // 5.2.4 Let audio label be a label specified in the initialization
+ // segment for this track or an empty string if no label info is present.
WebString label = trackInfo.label;
- // 5.3.5 If audio label equals an empty string, then run the default track label algorithm with byteStreamTrackID set to audio byte stream track ID and
- // type set to "audio" and assign the value returned by the algorithm to audio label.
+ // 5.3.5 If audio label equals an empty string, then run the default track
+ // label algorithm with byteStreamTrackID set to audio byte stream
+ // track ID and type set to "audio" and assign the value returned by
+ // the algorithm to audio label.
if (label.isEmpty())
label =
defaultTrackLabel(TrackDefault::audioKeyword(), byteStreamTrackID);
- // 5.2.6 Let audio kinds be an array of kind strings specified in the initialization segment for this track or an empty array if no kind information is provided.
+ // 5.2.6 Let audio kinds be an array of kind strings specified in the
+ // initialization segment for this track or an empty array if no
+ // kind information is provided.
const auto& kind = trackInfo.kind;
// 5.2.7 TODO(servolk): Implement track kind processing.
// 5.2.8.2 Let new audio track be a new AudioTrack object.
@@ -860,33 +962,53 @@ bool SourceBuffer::initializationSegmentReceived(
// 5.2.8.7.2 Set active track flag to true.
activeTrack = true;
}
- // 5.2.8.8 Add new audio track to the audioTracks attribute on this SourceBuffer object.
- // 5.2.8.9 Queue a task to fire a trusted event named addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the AudioTrackList object referenced by the audioTracks attribute on this SourceBuffer object.
+ // 5.2.8.8 Add new audio track to the audioTracks attribute on this
+ // SourceBuffer object.
+ // 5.2.8.9 Queue a task to fire a trusted event named addtrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the AudioTrackList object referenced by the
+ // audioTracks attribute on this SourceBuffer object.
audioTracks().add(audioTrack);
- // 5.2.8.10 Add new audio track to the audioTracks attribute on the HTMLMediaElement.
- // 5.2.8.11 Queue a task to fire a trusted event named addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the AudioTrackList object referenced by the audioTracks attribute on the HTMLMediaElement.
+ // 5.2.8.10 Add new audio track to the audioTracks attribute on the
+ // HTMLMediaElement.
+ // 5.2.8.11 Queue a task to fire a trusted event named addtrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the AudioTrackList object referenced by the
+ // audioTracks attribute on the HTMLMediaElement.
m_source->mediaElement()->audioTracks().add(audioTrack);
}
- // 5.3. For each video track in the initialization segment, run following steps:
+ // 5.3. For each video track in the initialization segment, run following
+ // steps:
for (const MediaTrackInfo& trackInfo : newVideoTracks) {
- // 5.3.1 Let video byte stream track ID be the Track ID for the current track being processed.
+ // 5.3.1 Let video byte stream track ID be the Track ID for the current
+ // track being processed.
const auto& byteStreamTrackID = trackInfo.byteStreamTrackID;
- // 5.3.2 Let video language be a BCP 47 language tag for the language specified in the initialization segment for this track or an empty string if no language info is present.
+ // 5.3.2 Let video language be a BCP 47 language tag for the language
+ // specified in the initialization segment for this track or an
+ // empty string if no language info is present.
WebString language = trackInfo.language;
- // 5.3.3 If video language equals an empty string or the 'und' BCP 47 value, then run the default track language algorithm with byteStreamTrackID set to
- // video byte stream track ID and type set to "video" and assign the value returned by the algorithm to video language.
+ // 5.3.3 If video language equals an empty string or the 'und' BCP 47
+ // value, then run the default track language algorithm with
+ // byteStreamTrackID set to video byte stream track ID and type set
+ // to "video" and assign the value returned by the algorithm to
+ // video language.
if (language.isEmpty() || language == "und")
language = defaultTrackLanguage(TrackDefault::videoKeyword(),
byteStreamTrackID);
- // 5.3.4 Let video label be a label specified in the initialization segment for this track or an empty string if no label info is present.
+ // 5.3.4 Let video label be a label specified in the initialization
+ // segment for this track or an empty string if no label info is present.
WebString label = trackInfo.label;
- // 5.3.5 If video label equals an empty string, then run the default track label algorithm with byteStreamTrackID set to video byte stream track ID and
- // type set to "video" and assign the value returned by the algorithm to video label.
+ // 5.3.5 If video label equals an empty string, then run the default track
+ // label algorithm with byteStreamTrackID set to video byte stream
+ // track ID and type set to "video" and assign the value returned by
+ // the algorithm to video label.
if (label.isEmpty())
label =
defaultTrackLabel(TrackDefault::videoKeyword(), byteStreamTrackID);
- // 5.3.6 Let video kinds be an array of kind strings specified in the initialization segment for this track or an empty array if no kind information is provided.
+ // 5.3.6 Let video kinds be an array of kind strings specified in the
+ // initialization segment for this track or an empty array if no
+ // kind information is provided.
const auto& kind = trackInfo.kind;
// 5.3.7 TODO(servolk): Implement track kind processing.
// 5.3.8.2 Let new video track be a new VideoTrack object.
@@ -900,11 +1022,19 @@ bool SourceBuffer::initializationSegmentReceived(
// 5.3.8.7.2 Set active track flag to true.
activeTrack = true;
}
- // 5.3.8.8 Add new video track to the videoTracks attribute on this SourceBuffer object.
- // 5.3.8.9 Queue a task to fire a trusted event named addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the VideoTrackList object referenced by the videoTracks attribute on this SourceBuffer object.
+ // 5.3.8.8 Add new video track to the videoTracks attribute on this
+ // SourceBuffer object.
+ // 5.3.8.9 Queue a task to fire a trusted event named addtrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the VideoTrackList object referenced by the
+ // videoTracks attribute on this SourceBuffer object.
videoTracks().add(videoTrack);
- // 5.3.8.10 Add new video track to the videoTracks attribute on the HTMLMediaElement.
- // 5.3.8.11 Queue a task to fire a trusted event named addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent interface, at the VideoTrackList object referenced by the videoTracks attribute on the HTMLMediaElement.
+ // 5.3.8.10 Add new video track to the videoTracks attribute on the
+ // HTMLMediaElement.
+ // 5.3.8.11 Queue a task to fire a trusted event named addtrack, that does
+ // not bubble and is not cancelable, and that uses the TrackEvent
+ // interface, at the VideoTrackList object referenced by the
+ // videoTracks attribute on the HTMLMediaElement.
m_source->mediaElement()->videoTracks().add(videoTrack);
}
@@ -914,7 +1044,8 @@ bool SourceBuffer::initializationSegmentReceived(
// activesourcebuffers.
if (activeTrack) {
// 5.5.1 Add this SourceBuffer to activeSourceBuffers.
- // 5.5.2 Queue a task to fire a simple event named addsourcebuffer at activeSourceBuffers
+ // 5.5.2 Queue a task to fire a simple event named addsourcebuffer at
+ // activeSourceBuffers
m_source->setSourceBufferActive(this, true);
}
@@ -973,15 +1104,19 @@ bool SourceBuffer::prepareAppend(size_t newDataSize,
TRACE_EVENT_ASYNC_BEGIN0("media", "SourceBuffer::prepareAppend", this);
// http://w3c.github.io/media-source/#sourcebuffer-prepare-append
// 3.5.4 Prepare Append Algorithm
- // 1. If the SourceBuffer has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps.
- // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps.
+ // 1. If the SourceBuffer has been removed from the sourceBuffers attribute of
+ // the parent media source then throw an InvalidStateError exception and
+ // abort these steps.
+ // 2. If the updating attribute equals true, then throw an InvalidStateError
+ // exception and abort these steps.
if (throwExceptionIfRemovedOrUpdating(isRemoved(), m_updating,
exceptionState)) {
TRACE_EVENT_ASYNC_END0("media", "SourceBuffer::prepareAppend", this);
return false;
}
- // 3. If the HTMLMediaElement.error attribute is not null, then throw an InvalidStateError exception and abort these steps.
+ // 3. If the HTMLMediaElement.error attribute is not null, then throw an
+ // InvalidStateError exception and abort these steps.
DCHECK(m_source);
DCHECK(m_source->mediaElement());
if (m_source->mediaElement()->error()) {
@@ -992,14 +1127,17 @@ bool SourceBuffer::prepareAppend(size_t newDataSize,
return false;
}
- // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps:
+ // 4. If the readyState attribute of the parent media source is in the "ended"
+ // state then run the following steps:
// 1. Set the readyState attribute of the parent media source to "open"
- // 2. Queue a task to fire a simple event named sourceopen at the parent media source.
+ // 2. Queue a task to fire a simple event named sourceopen at the parent
+ // media source.
m_source->openIfInEndedState();
// 5. Run the coded frame eviction algorithm.
if (!evictCodedFrames(newDataSize)) {
- // 6. If the buffer full flag equals true, then throw a QUOTA_EXCEEDED_ERR exception and abort these steps.
+ // 6. If the buffer full flag equals true, then throw a QUOTA_EXCEEDED_ERR
+ // exception and abort these steps.
BLINK_SBLOG << __func__ << " this=" << this
<< " -> throw QuotaExceededError";
MediaSource::logAndThrowDOMException(exceptionState, QuotaExceededError,
@@ -1053,7 +1191,8 @@ void SourceBuffer::appendBufferInternal(const unsigned char* data,
// 3. Set the updating attribute to true.
m_updating = true;
- // 4. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
+ // 4. Queue a task to fire a simple event named updatestart at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updatestart);
// 5. Asynchronously run the buffer append algorithm.
@@ -1117,10 +1256,12 @@ void SourceBuffer::appendBufferAsyncPart() {
m_pendingAppendData.clear();
m_pendingAppendDataOffset = 0;
- // 4. Queue a task to fire a simple event named update at this SourceBuffer object.
+ // 4. Queue a task to fire a simple event named update at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::update);
- // 5. Queue a task to fire a simple event named updateend at this SourceBuffer object.
+ // 5. Queue a task to fire a simple event named updateend at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updateend);
}
@@ -1137,7 +1278,8 @@ void SourceBuffer::removeAsyncPart() {
// Section 3.2 remove() method steps
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-remove-void-double-start-double-end
- // 9. Run the coded frame removal algorithm with start and end as the start and end of the removal range.
+ // 9. Run the coded frame removal algorithm with start and end as the start
+ // and end of the removal range.
m_webSourceBuffer->remove(m_pendingRemoveStart, m_pendingRemoveEnd);
// 10. Set the updating attribute to false.
@@ -1145,10 +1287,12 @@ void SourceBuffer::removeAsyncPart() {
m_pendingRemoveStart = -1;
m_pendingRemoveEnd = -1;
- // 11. Queue a task to fire a simple event named update at this SourceBuffer object.
+ // 11. Queue a task to fire a simple event named update at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::update);
- // 12. Queue a task to fire a simple event named updateend at this SourceBuffer object.
+ // 12. Queue a task to fire a simple event named updateend at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updateend);
}
@@ -1158,7 +1302,8 @@ void SourceBuffer::appendStreamInternal(Stream* stream,
// Section 3.2 appendStream()
// http://w3c.github.io/media-source/#widl-SourceBuffer-appendStream-void-ReadableStream-stream-unsigned-long-long-maxSize
- // (0. If the stream has been neutered, then throw an InvalidAccessError exception and abort these steps.)
+ // (0. If the stream has been neutered, then throw an InvalidAccessError
+ // exception and abort these steps.)
if (stream->isNeutered()) {
MediaSource::logAndThrowDOMException(
exceptionState, InvalidAccessError,
@@ -1177,10 +1322,12 @@ void SourceBuffer::appendStreamInternal(Stream* stream,
// 2. Set the updating attribute to true.
m_updating = true;
- // 3. Queue a task to fire a simple event named updatestart at this SourceBuffer object.
+ // 3. Queue a task to fire a simple event named updatestart at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updatestart);
- // 4. Asynchronously run the stream append loop algorithm with stream and maxSize.
+ // 4. Asynchronously run the stream append loop algorithm with stream and
+ // maxSize.
stream->neuter();
m_loader = FileReaderLoader::create(FileReaderLoader::ReadByClient, this);
m_stream = stream;
@@ -1198,14 +1345,16 @@ void SourceBuffer::appendStreamAsyncPart() {
// http://w3c.github.io/media-source/#sourcebuffer-stream-append-loop
// 1. If maxSize is set, then let bytesLeft equal maxSize.
- // 2. Loop Top: If maxSize is set and bytesLeft equals 0, then jump to the loop done step below.
+ // 2. Loop Top: If maxSize is set and bytesLeft equals 0, then jump to the
+ // loop done step below.
if (m_streamMaxSizeValid && !m_streamMaxSize) {
appendStreamDone(NoError);
return;
}
// Steps 3-11 are handled by m_loader.
- // Note: Passing 0 here signals that maxSize was not set. (i.e. Read all the data in the stream).
+ // Note: Passing 0 here signals that maxSize was not set. (i.e. Read all the
+ // data in the stream).
m_loader->start(getExecutionContext(), *m_stream,
m_streamMaxSizeValid ? m_streamMaxSize : 0);
}
@@ -1230,15 +1379,18 @@ void SourceBuffer::appendStreamDone(AppendStreamDoneAction action) {
}
// Section 3.5.6 Stream Append Loop
- // Steps 1-11 are handled by appendStreamAsyncPart(), |m_loader|, and |m_webSourceBuffer|.
+ // Steps 1-11 are handled by appendStreamAsyncPart(), |m_loader|, and
+ // |m_webSourceBuffer|.
// 12. Loop Done: Set the updating attribute to false.
m_updating = false;
- // 13. Queue a task to fire a simple event named update at this SourceBuffer object.
+ // 13. Queue a task to fire a simple event named update at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::update);
- // 14. Queue a task to fire a simple event named updateend at this SourceBuffer object.
+ // 14. Queue a task to fire a simple event named updateend at this
+ // SourceBuffer object.
scheduleEvent(EventTypeNames::updateend);
TRACE_EVENT_ASYNC_END0("media", "SourceBuffer::appendStream", this);
BLINK_SBLOG << __func__ << " ended. this=" << this << " buffered="
@@ -1263,10 +1415,12 @@ void SourceBuffer::appendError(AppendError err) {
// 2. Set the updating attribute to false.
m_updating = false;
- // 3. Queue a task to fire a simple event named error at this SourceBuffer object.
+ // 3. Queue a task to fire a simple event named error at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::error);
- // 4. Queue a task to fire a simple event named updateend at this SourceBuffer object.
+ // 4. Queue a task to fire a simple event named updateend at this SourceBuffer
+ // object.
scheduleEvent(EventTypeNames::updateend);
// 5. If decode error is true, then run the end of stream algorithm with the
@@ -1294,7 +1448,9 @@ void SourceBuffer::didReceiveDataForClient(const char* data,
// 10. Run the coded frame eviction algorithm.
if (!evictCodedFrames(dataLength)) {
- // 11. (in appendStreamDone) If the buffer full flag equals true, then run the append error algorithm with the decode error parameter set to false and abort this algorithm.
+ // 11. (in appendStreamDone) If the buffer full flag equals true, then run
+ // the append error algorithm with the decode error parameter set to
+ // false and abort this algorithm.
appendStreamDone(RunAppendErrorWithNoDecodeError);
return;
}

Powered by Google App Engine
This is Rietveld 408576698