diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/Modules/mediasource/SourceBufferList.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/Modules/mediasource/SourceBufferList.cpp')
-rw-r--r-- | Source/WebCore/Modules/mediasource/SourceBufferList.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/Source/WebCore/Modules/mediasource/SourceBufferList.cpp b/Source/WebCore/Modules/mediasource/SourceBufferList.cpp index 2dd7b81f0..005973709 100644 --- a/Source/WebCore/Modules/mediasource/SourceBufferList.cpp +++ b/Source/WebCore/Modules/mediasource/SourceBufferList.cpp @@ -34,6 +34,7 @@ #if ENABLE(MEDIA_SOURCE) #include "Event.h" +#include "EventNames.h" #include "SourceBuffer.h" namespace WebCore { @@ -49,15 +50,15 @@ SourceBufferList::~SourceBufferList() ASSERT(m_list.isEmpty()); } -void SourceBufferList::add(PassRefPtr<SourceBuffer> buffer) +void SourceBufferList::add(Ref<SourceBuffer>&& buffer) { - m_list.append(buffer); + m_list.append(WTFMove(buffer)); scheduleEvent(eventNames().addsourcebufferEvent); } -void SourceBufferList::remove(SourceBuffer* buffer) +void SourceBufferList::remove(SourceBuffer& buffer) { - size_t index = m_list.find(buffer); + size_t index = m_list.find(&buffer); if (index == notFound) return; m_list.remove(index); @@ -70,12 +71,30 @@ void SourceBufferList::clear() scheduleEvent(eventNames().removesourcebufferEvent); } +void SourceBufferList::swap(Vector<RefPtr<SourceBuffer>>& other) +{ + int changeInSize = other.size() - m_list.size(); + int addedEntries = 0; + for (auto& sourceBuffer : other) { + if (!m_list.contains(sourceBuffer)) + ++addedEntries; + } + int removedEntries = addedEntries - changeInSize; + + m_list.swap(other); + + if (addedEntries) + scheduleEvent(eventNames().addsourcebufferEvent); + if (removedEntries) + scheduleEvent(eventNames().removesourcebufferEvent); +} + void SourceBufferList::scheduleEvent(const AtomicString& eventName) { - RefPtr<Event> event = Event::create(eventName, false, false); + auto event = Event::create(eventName, false, false); event->setTarget(this); - m_asyncEventQueue.enqueueEvent(event.release()); + m_asyncEventQueue.enqueueEvent(WTFMove(event)); } |