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 2fa35646b2d85e978b8d00c90306c75a62c097f0..871c54082a76a2b0f8c2a68a1d071f950e80c3a4 100644 |
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp |
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp |
@@ -49,6 +49,7 @@ |
#include "core/html/track/VideoTrackList.h" |
#include "core/streams/Stream.h" |
#include "modules/mediasource/MediaSource.h" |
+#include "modules/mediasource/SourceBufferTrackBaseSupplement.h" |
#include "platform/Logging.h" |
#include "platform/TraceEvent.h" |
#include "public/platform/WebSourceBuffer.h" |
@@ -232,6 +233,18 @@ void SourceBuffer::setTimestampOffset(double offset, ExceptionState& exceptionSt |
m_timestampOffset = offset; |
} |
+AudioTrackList& SourceBuffer::audioTracks() |
+{ |
+ ASSERT(RuntimeEnabledFeatures::audioVideoTracksEnabled()); |
+ return *m_audioTracks; |
wolenetz
2016/03/23 20:18:52
Prior to attachment of MediaSource to a MediaEleme
servolk
2016/03/31 00:03:40
Yes, I've changed this already in the previous CL.
wolenetz
2016/03/31 18:57:59
Acknowledged.
|
+} |
+ |
+VideoTrackList& SourceBuffer::videoTracks() |
+{ |
+ ASSERT(RuntimeEnabledFeatures::audioVideoTracksEnabled()); |
+ return *m_videoTracks; |
+} |
+ |
double SourceBuffer::appendWindowStart() const |
{ |
return m_appendWindowStart; |
@@ -506,11 +519,18 @@ void SourceBuffer::initializationSegmentReceived(const WebVector<WebMediaPlayer: |
return; |
} |
+ if (!m_audioTracks) |
+ m_audioTracks = AudioTrackList::create(*m_source->mediaElement()); |
+ if (!m_videoTracks) |
+ m_videoTracks = VideoTrackList::create(*m_source->mediaElement()); |
+ |
for (const auto& trackId : m_audioTrackIds) { |
m_source->mediaElement()->audioTracks().remove(trackId); |
+ audioTracks().remove(trackId); |
} |
for (const auto& trackId : m_videoTrackIds) { |
m_source->mediaElement()->videoTracks().remove(trackId); |
+ videoTracks().remove(trackId); |
} |
m_audioTrackIds.clear(); |
m_videoTrackIds.clear(); |
@@ -521,11 +541,13 @@ void SourceBuffer::initializationSegmentReceived(const WebVector<WebMediaPlayer: |
if (track->type() == WebMediaPlayer::AudioTrack) { |
AudioTrack* audioTrack = static_cast<AudioTrack*>(track.get()); |
WTF_LOG(Media, "Tracks (sb=%p): adding audioTrack %p trackId=%d id=%s label=%s lang=%s", this, audioTrack, audioTrack->trackId(), audioTrack->id().utf8().data(), audioTrack->label().utf8().data(), audioTrack->language().utf8().data()); |
+ audioTracks().add(audioTrack); |
m_source->mediaElement()->audioTracks().add(audioTrack); |
m_audioTrackIds.append(trackId); |
} else if (track->type() == WebMediaPlayer::VideoTrack) { |
VideoTrack* videoTrack = static_cast<VideoTrack*>(track.get()); |
WTF_LOG(Media, "Tracks (sb=%p): adding videoTrack %p trackId=%d id=%s label=%s lang=%s", this, videoTrack, videoTrack->trackId(), videoTrack->id().utf8().data(), videoTrack->label().utf8().data(), videoTrack->language().utf8().data()); |
+ videoTracks().add(videoTrack); |
m_source->mediaElement()->videoTracks().add(videoTrack); |
m_videoTrackIds.append(trackId); |
} |
@@ -539,17 +561,25 @@ void SourceBuffer::initializationSegmentReceived(const WebVector<WebMediaPlayer: |
WebMediaPlayer::TrackId SourceBuffer::createMediaTrack(WebMediaPlayer::TrackType type, WebString id, WebString kind, WebString label, WebString language) |
{ |
TrackBase* result = nullptr; |
+ const char* typeStr = ""; |
switch (type) { |
case WebMediaPlayer::AudioTrack: |
result = AudioTrack::create(id, kind, label, language, false); |
+ new SourceBufferTrackBaseSupplement(*result, this); |
+ typeStr = "audio"; |
break; |
case WebMediaPlayer::TextTrack: |
result = TextTrack::create(kind, label, language); |
+ typeStr = "text"; |
break; |
case WebMediaPlayer::VideoTrack: |
result = VideoTrack::create(id, kind, label, language, false); |
+ new SourceBufferTrackBaseSupplement(*result, this); |
+ typeStr = "video"; |
break; |
} |
+ ASSERT_UNUSED(typeStr, typeStr); |
+ WTF_LOG(Media, "SourceBuffer(%p)::createMediaTrack: %s track %p trackId=%d id=%s label=%s lang=%s", this, typeStr, result, result->trackId(), result->id().utf8().data(), result->label().utf8().data(), result->language().utf8().data()); |
ASSERT(result); |
m_pendingTracks.append(result); |
@@ -937,6 +967,8 @@ DEFINE_TRACE(SourceBuffer) |
visitor->trace(m_pendingTracks); |
visitor->trace(m_audioTrackIds); |
visitor->trace(m_videoTrackIds); |
+ visitor->trace(m_audioTracks); |
+ visitor->trace(m_videoTracks); |
RefCountedGarbageCollectedEventTargetWithInlineData<SourceBuffer>::trace(visitor); |
ActiveDOMObject::trace(visitor); |
} |