Changeset 269121 in webkit
- Timestamp:
- Oct 28, 2020 1:42:59 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r269111 r269121 1 2020-10-28 Jer Noble <jer.noble@apple.com> 2 3 [MSE] Handle trackId changing across Initialization Segments 4 https://bugs.webkit.org/show_bug.cgi?id=218294 5 <rdar://problem/70771306> 6 7 Reviewed by Eric Carlson. 8 9 * media/media-source/media-source-trackid-change-expected.txt: Added. 10 * media/media-source/media-source-trackid-change.html: Added. 11 1 12 2020-10-28 Sam Weinig <weinig@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r269118 r269121 1 2020-10-28 Jer Noble <jer.noble@apple.com> 2 3 [MSE] Handle trackId changing across Initialization Segments 4 https://bugs.webkit.org/show_bug.cgi?id=218294 5 <rdar://problem/70771306> 6 7 Reviewed by Eric Carlson. 8 9 Test: media/media-source/media-source-trackid-change.html 10 11 When appending an initialization segment after the receivedFirstInitializationSegment flag is 12 true, and when the number of video or audio tracks is 1, the trackId is allowed to change across 13 initialiaztion segments. When this occurs, move the TrackBuffer inside the trackBufferMap to 14 refer to the new trackId, so that when MediaSamples are parsed, they're put into the correct 15 TrackBuffer. 16 17 * Modules/mediasource/SourceBuffer.cpp: 18 (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): 19 * html/track/AudioTrack.cpp: 20 (WebCore::AudioTrack::setPrivate): 21 * html/track/InbandTextTrack.cpp: 22 (WebCore::InbandTextTrack::setPrivate): 23 * html/track/VideoTrack.cpp: 24 (WebCore::VideoTrack::setPrivate): 25 1 26 2020-10-28 Tim Horton <timothy_horton@apple.com> 2 27 -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp
r269001 r269121 1112 1112 return; 1113 1113 } 1114 1115 Vector<std::pair<AtomString, TrackBuffer>> newTrackBuffers; 1116 1114 1117 // 3.2 Add the appropriate track descriptions from this initialization segment to each of the track buffers. 1115 1118 ASSERT(segment.audioTracks.size() == audioTracks().length()); 1116 1119 for (auto& audioTrackInfo : segment.audioTracks) { 1117 1120 if (audioTracks().length() == 1) { 1118 audioTracks().item(0)->setPrivate(*audioTrackInfo.track); 1121 auto* track = audioTracks().item(0); 1122 auto oldId = track->id(); 1123 auto newId = audioTrackInfo.track->id(); 1124 track->setPrivate(*audioTrackInfo.track); 1125 if (newId != oldId) { 1126 auto trackBuffer = m_trackBufferMap.take(oldId); 1127 newTrackBuffers.append(std::make_pair(newId, WTFMove(trackBuffer))); 1128 } 1119 1129 break; 1120 1130 } … … 1128 1138 for (auto& videoTrackInfo : segment.videoTracks) { 1129 1139 if (videoTracks().length() == 1) { 1130 videoTracks().item(0)->setPrivate(*videoTrackInfo.track); 1140 auto* track = videoTracks().item(0); 1141 auto oldId = track->id(); 1142 auto newId = videoTrackInfo.track->id(); 1143 track->setPrivate(*videoTrackInfo.track); 1144 if (newId != oldId) { 1145 auto trackBuffer = m_trackBufferMap.take(oldId); 1146 newTrackBuffers.append(std::make_pair(newId, WTFMove(trackBuffer))); 1147 } 1131 1148 break; 1132 1149 } … … 1140 1157 for (auto& textTrackInfo : segment.textTracks) { 1141 1158 if (textTracks().length() == 1) { 1142 downcast<InbandTextTrack>(*textTracks().item(0)).setPrivate(*textTrackInfo.track); 1159 auto* track = downcast<InbandTextTrack>(textTracks().item(0)); 1160 auto oldId = track->id(); 1161 auto newId = textTrackInfo.track->id(); 1162 track->setPrivate(*textTrackInfo.track); 1163 if (newId != oldId) { 1164 auto trackBuffer = m_trackBufferMap.take(oldId); 1165 newTrackBuffers.append(std::make_pair(newId, WTFMove(trackBuffer))); 1166 } 1143 1167 break; 1144 1168 } … … 1147 1171 ASSERT(textTrack); 1148 1172 downcast<InbandTextTrack>(*textTrack).setPrivate(*textTrackInfo.track); 1173 } 1174 1175 while (!newTrackBuffers.isEmpty()) { 1176 auto trackPair = newTrackBuffers.takeLast(); 1177 m_trackBufferMap.add(trackPair.first, WTFMove(trackPair.second)); 1149 1178 } 1150 1179 -
trunk/Source/WebCore/html/track/AudioTrack.cpp
r262695 r269121 105 105 106 106 updateKindFromPrivate(); 107 setId(m_private->id()); 107 108 } 108 109 -
trunk/Source/WebCore/html/track/InbandTextTrack.cpp
r262695 r269121 78 78 setModeInternal(mode()); 79 79 updateKindFromPrivate(); 80 setId(m_private->id()); 80 81 } 81 82 -
trunk/Source/WebCore/html/track/VideoTrack.cpp
r262695 r269121 110 110 m_private->setSelected(m_selected); 111 111 updateKindFromPrivate(); 112 setId(m_private->id()); 112 113 } 113 114
Note: See TracChangeset
for help on using the changeset viewer.