Commit fe9428b
committed
[MSE] Move track buffer management from SourceBuffer to SourceBufferPrivate
https://bugs.webkit.org/show_bug.cgi?id=219332
Reviewed by Daniel Bates.
Source/WebCore:
Currently, the `SourceBuffer` class deals with both the DOM related tasks (providing
Javascript interfaces, firing events, handling object properties, etc.) and track
buffer management. This patch moves the track buffer management from `SourceBuffer`
to `SourceBufferPrivate`. The purpose of this change is to support running the track
buffer management in the GPU process so that the callbacks from a media parser regarding
a new sample is parsed does not need to cross the process boundary (`SourceBufferPrivate`
will run in the GPU process). We have to update the interface `SourceBufferPrivateClient`
accordingly.
When running the track buffer management in the `SourceBuffer` class, we can get
some information related to `MediaSource` directly, such as `isSeeking`, `duration`,
and `currentMediaTime`. However, after moving it to `SourceBufferPrivate`, we have to
get the information from the corresponding `MediaSourcePrivate`. This patch includes
some changes for that.
No new tests because this patch does not want to introduce any behavior change.
* Modules/mediasource/MediaSource.cpp:
(WebCore::MediaSource::seekToTime):
(WebCore::MediaSource::completeSeek):
* Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::SourceBuffer):
(WebCore::SourceBuffer::~SourceBuffer):
(WebCore::SourceBuffer::buffered const):
(WebCore::SourceBuffer::timestampOffset const):
(WebCore::SourceBuffer::setTimestampOffset):
(WebCore::SourceBuffer::setAppendWindowStart):
(WebCore::SourceBuffer::setAppendWindowEnd):
(WebCore::SourceBuffer::resetParserState):
(WebCore::SourceBuffer::abort):
(WebCore::SourceBuffer::changeType):
(WebCore::SourceBuffer::highestPresentationTimestamp const):
(WebCore::SourceBuffer::readyStateChanged):
(WebCore::SourceBuffer::removedFromMediaSource):
(WebCore::SourceBuffer::seekToTime):
(WebCore::SourceBuffer::appendBufferInternal):
(WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
(WebCore::SourceBuffer::removeTimerFired):
(WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
(WebCore::SourceBuffer::validateInitializationSegment):
(WebCore::SourceBuffer::sourceBufferPrivateAppendError):
(WebCore::SourceBuffer::appendError):
(WebCore::SourceBuffer::trySignalAllSamplesEnqueued):
(WebCore::SourceBuffer::sourceBufferPrivateDidParseSample):
(WebCore::SourceBuffer::sourceBufferPrivateDurationChanged):
(WebCore::SourceBuffer::sourceBufferPrivateDidDropSample):
(WebCore::SourceBuffer::sourceBufferPrivateStreamEndedWithDecodeError):
(WebCore::SourceBuffer::extraMemoryCost const):
(WebCore::SourceBuffer::bufferedSamplesForTrackID):
(WebCore::SourceBuffer::setMode):
(WebCore::SourceBuffer::setShouldGenerateTimestamps):
(WebCore::SourceBuffer::isBufferedDirty const):
(WebCore::SourceBuffer::setBufferedDirty):
(): Deleted.
(WebCore::SourceBuffer::TrackBuffer::TrackBuffer): Deleted.
(WebCore::SourceBuffer::TrackBuffer::enqueueDiscontinuityBoundary): Deleted.
(WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime): Deleted.
(WebCore::decodeTimeComparator): Deleted.
(WebCore::removeSamplesFromTrackBuffer): Deleted.
(WebCore::SourceBuffer::removeCodedFrames): Deleted.
(WebCore::SourceBuffer::evictCodedFrames): Deleted.
(WebCore::SampleLessThanComparator::operator()): Deleted.
(WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Deleted.
(WebCore::SourceBuffer::sourceBufferPrivateReenqueSamples): Deleted.
(WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples): Deleted.
(WebCore::SourceBuffer::provideMediaData): Deleted.
(WebCore::SourceBuffer::updateMinimumUpcomingPresentationTime): Deleted.
(WebCore::SourceBuffer::resetMinimumUpcomingPresentationTime): Deleted.
(WebCore::SourceBuffer::trySignalAllSamplesInTrackEnqueued): Deleted.
(WebCore::SourceBuffer::reenqueueMediaForTime): Deleted.
(WebCore::SourceBuffer::didDropSample): Deleted.
(WebCore::SourceBuffer::updateBufferedFromTrackBuffers): Deleted.
* Modules/mediasource/SourceBuffer.h:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/MediaSourcePrivate.h:
(WebCore::MediaSourcePrivate::setIsSeeking):
(WebCore::MediaSourcePrivate::isSeeking const):
* platform/graphics/SourceBufferPrivate.cpp: Added.
(WebCore::SourceBufferPrivate::TrackBuffer::TrackBuffer):
(WebCore::enqueueDiscontinuityBoundary):
(WebCore::SourceBufferPrivate::SourceBufferPrivate):
(WebCore::SourceBufferPrivate::resetTimestampOffsetInTrackBuffers):
(WebCore::SourceBufferPrivate::resetTrackBuffers):
(WebCore::SourceBufferPrivate::highestPresentationTimestamp const):
(WebCore::SourceBufferPrivate::updateBufferedFromTrackBuffers):
(WebCore::SourceBufferPrivate::reenqueSamples):
(WebCore::SourceBufferPrivate::seekToTime):
(WebCore::SourceBufferPrivate::clearTrackBuffers):
(WebCore::SourceBufferPrivate::bufferedSamplesForTrackID):
(WebCore::SourceBufferPrivate::fastSeekTimeForMediaTime):
(WebCore::SourceBufferPrivate::updateMinimumUpcomingPresentationTime):
(WebCore::SourceBufferPrivate::trySignalAllSamplesInTrackEnqueued):
(WebCore::SourceBufferPrivate::provideMediaData):
(WebCore::SourceBufferPrivate::reenqueueMediaForTime):
(WebCore::SourceBufferPrivate::reenqueueMediaIfNeeded):
(WebCore::decodeTimeComparator):
(WebCore::removeSamplesFromTrackBuffer):
(WebCore::SourceBufferPrivate::removeCodedFrames):
(WebCore::SourceBufferPrivate::evictCodedFrames):
(WebCore::SourceBufferPrivate::totalTrackBufferSizeInBytes const):
(WebCore::SourceBufferPrivate::addTrackBuffer):
(WebCore::SourceBufferPrivate::updateTrackIds):
(WebCore::SourceBufferPrivate::setAllTrackBuffersNeedRandomAccess):
(WebCore::SourceBufferPrivate::didReceiveInitializationSegment):
(WebCore::SourceBufferPrivate::validateInitializationSegment):
(WebCore::SourceBufferPrivate::didReceiveSample):
* platform/graphics/SourceBufferPrivate.h:
(WebCore::SourceBufferPrivate::setActive):
(WebCore::SourceBufferPrivate::setClient):
(WebCore::SourceBufferPrivate::setIsAttached):
(WebCore::SourceBufferPrivate::setCurrentTimeFudgeFactor):
(WebCore::SourceBufferPrivate::setAppendWindowStart):
(WebCore::SourceBufferPrivate::setAppendWindowEnd):
(WebCore::SourceBufferPrivate::bufferFull const):
(WebCore::SourceBufferPrivate::buffered const):
(WebCore::SourceBufferPrivate::isBufferedDirty const):
(WebCore::SourceBufferPrivate::setBufferedDirty):
(WebCore::SourceBufferPrivate::timestampOffset const):
(WebCore::SourceBufferPrivate::setTimestampOffset):
(WebCore::SourceBufferPrivate::startChangingType):
(WebCore::SourceBufferPrivate::setShouldGenerateTimestamps):
(WebCore::SourceBufferPrivate::setMode):
(WebCore::SourceBufferPrivate::setGroupStartTimestamp):
(WebCore::SourceBufferPrivate::setGroupStartTimestampToEndTimestamp):
(WebCore::SourceBufferPrivate::isActive const):
(WebCore::SourceBufferPrivate::isSeeking const):
(WebCore::SourceBufferPrivate::currentMediaTime const):
(WebCore::SourceBufferPrivate::duration const):
(WebCore::SourceBufferPrivate::flush):
(WebCore::SourceBufferPrivate::enqueueSample):
(WebCore::SourceBufferPrivate::allSamplesInTrackEnqueued):
(WebCore::SourceBufferPrivate::isReadyForMoreSamples):
(WebCore::SourceBufferPrivate::notifyClientWhenReadyForMoreSamples):
(WebCore::SourceBufferPrivate::canSetMinimumUpcomingPresentationTime const):
(WebCore::SourceBufferPrivate::setMinimumUpcomingPresentationTime):
(WebCore::SourceBufferPrivate::clearMinimumUpcomingPresentationTime):
* platform/graphics/SourceBufferPrivateClient.h:
* platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
(WebCore::MediaSourcePrivateAVFObjC::duration const):
(WebCore::MediaSourcePrivateAVFObjC::currentMediaTime const):
(WebCore::MediaSourcePrivateAVFObjC::duration): Deleted.
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
(WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
(WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
(WebCore::SourceBufferPrivateAVFObjC::setActive):
(WebCore::SourceBufferPrivateAVFObjC::isActive const):
(WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):
(WebCore::SourceBufferPrivateAVFObjC::isSeeking const):
(WebCore::SourceBufferPrivateAVFObjC::currentMediaTime const):
(WebCore::SourceBufferPrivateAVFObjC::duration const):
(WebCore::SourceBufferPrivateAVFObjC::setVideoLayer):
(WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession):
(WebCore::SourceBufferPrivateAVFObjC::setClient): Deleted.
(WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime): Deleted.
* platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
(WebCore::MediaSourcePrivateGStreamer::duration const):
(WebCore::MediaSourcePrivateGStreamer::currentMediaTime const):
* platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:
* platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
(WebCore::SourceBufferPrivateGStreamer::append):
(WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
(WebCore::SourceBufferPrivateGStreamer::notifyReadyForMoreSamples):
(WebCore::SourceBufferPrivateGStreamer::setActive):
(WebCore::SourceBufferPrivateGStreamer::isActive const):
(WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment):
(WebCore::SourceBufferPrivateGStreamer::didReceiveSample):
(WebCore::SourceBufferPrivateGStreamer::didReceiveAllPendingSamples):
(WebCore::SourceBufferPrivateGStreamer::appendParsingFailed):
(WebCore::SourceBufferPrivateGStreamer::isSeeking const):
(WebCore::SourceBufferPrivateGStreamer::currentMediaTime const):
(WebCore::SourceBufferPrivateGStreamer::duration const):
(WebCore::SourceBufferPrivateGStreamer::setClient): Deleted.
* platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:
* platform/mock/mediasource/MockMediaPlayerMediaSource.h:
* platform/mock/mediasource/MockMediaSourcePrivate.cpp:
(WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
(WebCore::MockMediaSourcePrivate::currentMediaTime const):
(WebCore::MockMediaSourcePrivate::logChannel const):
(WebCore::MockMediaSourcePrivate::mediaSourceLogger const): Deleted.
(WebCore::MockMediaSourcePrivate::mediaSourceLogIdentifier): Deleted.
* platform/mock/mediasource/MockMediaSourcePrivate.h:
* platform/mock/mediasource/MockSourceBufferPrivate.cpp:
(WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate):
(WebCore::MockSourceBufferPrivate::didReceiveInitializationSegment):
(WebCore::MockSourceBufferPrivate::didReceiveSample):
(WebCore::MockSourceBufferPrivate::setActive):
(WebCore::MockSourceBufferPrivate::isActive const):
(WebCore::MockSourceBufferPrivate::isSeeking const):
(WebCore::MockSourceBufferPrivate::currentMediaTime const):
(WebCore::MockSourceBufferPrivate::duration const):
(WebCore::MockSourceBufferPrivate::logChannel const):
(WebCore::MockSourceBufferPrivate::setClient): Deleted.
(WebCore::MockSourceBufferPrivate::fastSeekTimeForMediaTime): Deleted.
(WebCore::MockSourceBufferPrivate::sourceBufferLogger const): Deleted.
(WebCore::MockSourceBufferPrivate::sourceBufferLogIdentifier): Deleted.
* platform/mock/mediasource/MockSourceBufferPrivate.h:
Source/WebKit:
Update `SourceBufferPrivateRemote` and `RemoteSourceBufferProxy` because of
the changes on `SourceBufferPrivate` and `SourceBufferPrivateClient`.
* GPUProcess/media/RemoteSourceBufferProxy.cpp:
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendError):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDurationChanged):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidParseSample):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidDropSample):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateStreamEndedWithDecodeError):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateHasAudio const):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateHasVideo const):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveSample): Deleted.
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateReenqueSamples): Deleted.
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidBecomeReadyForMoreSamples): Deleted.
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateFastSeekTimeForMediaTime): Deleted.
* GPUProcess/media/RemoteSourceBufferProxy.h:
* WebProcess/GPU/media/SourceBufferPrivateRemote.cpp:
(WebKit::SourceBufferPrivateRemote::setClient): Deleted.
* WebProcess/GPU/media/SourceBufferPrivateRemote.h:
Canonical link: https://commits.webkit.org/232118@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270435 268f45cc-cd09-0410-ab3c-d52691b4dbfc1 parent 7a5001a commit fe9428b
28 files changed
Lines changed: 1902 additions & 1355 deletions
File tree
- Source
- WebCore
- Modules/mediasource
- WebCore.xcodeproj
- platform
- graphics
- avfoundation/objc
- gstreamer/mse
- mock/mediasource
- WebKit
- GPUProcess/media
- WebProcess/GPU/media
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
1 | 209 | | |
2 | 210 | | |
3 | 211 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
| 234 | + | |
234 | 235 | | |
235 | 236 | | |
236 | 237 | | |
| |||
275 | 276 | | |
276 | 277 | | |
277 | 278 | | |
| 279 | + | |
278 | 280 | | |
279 | 281 | | |
280 | 282 | | |
| |||
0 commit comments