Index: Source/modules/mediasource/SourceBuffer.cpp |
diff --git a/Source/modules/mediasource/SourceBuffer.cpp b/Source/modules/mediasource/SourceBuffer.cpp |
index 3f9bbf97b7ac9d4c9188c45eccb459d9880f1c03..d3c03c0c6b597c2b09224ec28a1b1c4e657b1cd3 100644 |
--- a/Source/modules/mediasource/SourceBuffer.cpp |
+++ b/Source/modules/mediasource/SourceBuffer.cpp |
@@ -483,6 +483,13 @@ void SourceBuffer::scheduleEvent(const AtomicString& eventName) |
m_asyncEventQueue->enqueueEvent(event.release()); |
} |
+void SourceBuffer::updateTimestampOffsetIfNecessary() |
+{ |
+ double offset = m_webSourceBuffer->updatedTimestampOffset(); |
+ if (!std::isnan(offset)) |
+ m_timestampOffset = offset; |
+} |
+ |
void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size, ExceptionState& exceptionState) |
{ |
// Section 3.2 appendBuffer() |
@@ -536,6 +543,10 @@ void SourceBuffer::appendBufferAsyncPart() |
} |
m_webSourceBuffer->append(m_pendingAppendData.data(), appendSize); |
+ // Update our cached |m_timestampOffset| since the implementation may change |
+ // it during append() processing. |
+ updateTimestampOffsetIfNecessary(); |
+ |
// 3. Set the updating attribute to false. |
m_updating = false; |
m_pendingAppendData.clear(); |
@@ -690,6 +701,10 @@ void SourceBuffer::didReceiveDataForClient(const char* data, unsigned dataLength |
ASSERT(m_loader); |
m_webSourceBuffer->append(reinterpret_cast<const unsigned char*>(data), dataLength); |
+ |
+ // Update our cached |m_timestampOffset| since the implementation may change |
+ // it during append() processing. |
+ updateTimestampOffsetIfNecessary(); |
} |
void SourceBuffer::didFinishLoading() |