Skip to content

Commit 957c994

Browse files
[Cocoa] Support in-band chapter tracks
https://bugs.webkit.org/show_bug.cgi?id=230380 <rdar://problem/83218578> Reviewed by Jer Noble. Source/WebCore: Create a text track for every non-empty AVAssetChapterMetadataGroup, and create a VTT cue for every chapter. Test: media/track/track-in-band-chapters.html * SourcesCocoa.txt: * WebCore.xcodeproj/project.pbxproj: * platform/graphics/InbandTextTrackPrivate.h: (WebCore::InbandTextTrackPrivate::setClient): (WebCore::InbandTextTrackPrivate::cueFormat const): * platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.h: Added. (WebCore::InbandChapterTrackPrivateAVFObjC::create): (WebCore::InbandChapterTrackPrivateAVFObjC::setTextTrackIndex): (WebCore::InbandChapterTrackPrivateAVFObjC::ChapterData::operator== const): * platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.mm: Added. (WebCore::InbandChapterTrackPrivateAVFObjC::InbandChapterTrackPrivateAVFObjC): (WebCore::InbandChapterTrackPrivateAVFObjC::processChapters): (WebCore::InbandChapterTrackPrivateAVFObjC::language const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): (WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset): (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataLoaded): (WebCore::MediaPlayerPrivateAVFoundationObjC::processChapterTracks): (WebCore::assetMetadataKeyNames): (-[WebCoreAVFMovieObserver chapterMetadataDidChange:]): * platform/graphics/iso/ISOVTTCue.cpp: (WebCore::ISOWebVTTCue::ISOWebVTTCue): * platform/graphics/iso/ISOVTTCue.h: Source/WebCore/PAL: * pal/cocoa/AVFoundationSoftLink.h: * pal/cocoa/AVFoundationSoftLink.mm: LayoutTests: * media/content/multi-language-chapters.mp4: Added. * media/track/track-in-band-chapters-expected.txt: Added. * media/track/track-in-band-chapters.html: Added. * media/track/track-manual-mode.html: Updated because the movie file this uses has in-band chapter tracks. * media/track/track-manual-mode-expected.txt: Ditto. * platform/glib/TestExpectations: Skipped. * platform/win/TestExpectations: Skipped. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@283217 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent e2836a7 commit 957c994

21 files changed

+415
-10
lines changed

LayoutTests/ChangeLog

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
2021-09-29 Eric Carlson <[email protected]>
2+
3+
[Cocoa] Support in-band chapter tracks
4+
https://bugs.webkit.org/show_bug.cgi?id=230380
5+
<rdar://problem/83218578>
6+
7+
Reviewed by Jer Noble.
8+
9+
* media/content/multi-language-chapters.mp4: Added.
10+
* media/track/track-in-band-chapters-expected.txt: Added.
11+
* media/track/track-in-band-chapters.html: Added.
12+
* media/track/track-manual-mode.html: Updated because the movie file this uses has
13+
in-band chapter tracks.
14+
* media/track/track-manual-mode-expected.txt: Ditto.
15+
* platform/glib/TestExpectations: Skipped.
16+
* platform/win/TestExpectations: Skipped.
17+
118
2021-09-28 Arcady Goldmints-Orlov <[email protected]>
219

320
[GLIB] Update test expectations and baselines. Unreviewed test gardening.
Binary file not shown.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
EXPECTED (video.textTracks.length == '3') OK
3+
4+
EXPECTED (track.cues.length == '6') OK
5+
EXPECTED (track.language == 'en') OK
6+
EXPECTED (track.kind == 'chapters') OK
7+
EXPECTED (track.cues[0].text == 'English Chapter 1') OK
8+
EXPECTED (track.cues[1].text == 'English Chapter 2') OK
9+
EXPECTED (track.cues[2].text == 'English Chapter 3') OK
10+
EXPECTED (track.cues[3].text == 'English Chapter 4') OK
11+
EXPECTED (track.cues[4].text == 'English Chapter 5') OK
12+
EXPECTED (track.cues[5].text == 'English Chapter 6') OK
13+
14+
EXPECTED (track.cues.length == '6') OK
15+
EXPECTED (track.language == 'es') OK
16+
EXPECTED (track.kind == 'chapters') OK
17+
EXPECTED (track.cues[0].text == 'Spanish Chapter 1') OK
18+
EXPECTED (track.cues[1].text == 'Spanish Chapter 2') OK
19+
EXPECTED (track.cues[2].text == 'Spanish Chapter 3') OK
20+
EXPECTED (track.cues[3].text == 'Spanish Chapter 4') OK
21+
EXPECTED (track.cues[4].text == 'Spanish Chapter 5') OK
22+
EXPECTED (track.cues[5].text == 'Spanish Chapter 6') OK
23+
24+
EXPECTED (track.cues.length == '6') OK
25+
EXPECTED (track.language == 'fr') OK
26+
EXPECTED (track.kind == 'chapters') OK
27+
EXPECTED (track.cues[0].text == 'French Chapter 1') OK
28+
EXPECTED (track.cues[1].text == 'French Chapter 2') OK
29+
EXPECTED (track.cues[2].text == 'French Chapter 3') OK
30+
EXPECTED (track.cues[3].text == 'French Chapter 4') OK
31+
EXPECTED (track.cues[4].text == 'French Chapter 5') OK
32+
EXPECTED (track.cues[5].text == 'French Chapter 6') OK
33+
34+
END OF TEST
35+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset='utf-8'>
5+
<title>In-band chapter tracks.</title>
6+
<script src="../video-test.js"></script>
7+
<script src="../media-file.js"></script>
8+
<script>
9+
let tracks = { };
10+
var track;
11+
window.addEventListener('load', async event => {
12+
13+
findMediaElement();
14+
video.src = findMediaFile('video', '../content/multi-language-chapters');
15+
16+
await waitForEvent(video, 'canplaythrough');
17+
await testExpectedEventually('video.textTracks.length', 3, '==', 1000);
18+
19+
let checkTrack = async (t, languageCode, languageName) => {
20+
consoleWrite('');
21+
track = t;
22+
await testExpectedEventually('track.cues.length', 6, '==', 1000);
23+
testExpected('track.language', languageCode);
24+
testExpected('track.kind', 'chapters');
25+
for (let i = 0; i < 6; i++)
26+
testExpected(`track.cues[${i}].text`, `${languageName} Chapter ${i + 1}`);
27+
}
28+
29+
tracks = Array.from(video.textTracks);
30+
tracks.sort((track1, track2) => track1.language > track2.language);
31+
32+
tracks.forEach(track => track.mode = 'hidden');
33+
await checkTrack(tracks[0], 'en', 'English');
34+
await checkTrack(tracks[1], 'es', 'Spanish');
35+
await checkTrack(tracks[2], 'fr', 'French');
36+
37+
consoleWrite('');
38+
endTest();
39+
});
40+
41+
</script>
42+
</head>
43+
<body>
44+
<video controls></video>
45+
</body>
46+
</html>
47+

LayoutTests/media/track/track-manual-mode-expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ RUN(internals.setCaptionDisplayMode('manual'))
77
EVENT(canplaythrough)
88

99
** Forced tracks should be in .textTracks as well as in the menu
10-
EXPECTED (video.textTracks.length == '9') OK
10+
EXPECTED (video.textTracks.length == '11') OK
1111

1212
** No track should be enabled by default
1313
EXPECTED (video.textTracks[0].language == 'en') OK

LayoutTests/media/track/track-manual-mode.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
function testTracks()
1111
{
1212
consoleWrite(`<br><i>** Forced tracks should be in .textTracks as well as in the menu`);
13-
testExpected("video.textTracks.length", 9);
13+
testExpected("video.textTracks.length", 11);
1414

1515
consoleWrite("<br><i>** No track should be enabled by default<" + "/i>");
1616
testExpected("video.textTracks[0].language", "en");

LayoutTests/platform/glib/TestExpectations

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,6 +1624,7 @@ webkit.org/b/131546 media/track/track-forced-subtitles-in-band.html [ Timeout Fa
16241624
webkit.org/b/131546 media/track/track-in-band-cues-added-once.html [ Timeout Crash ]
16251625
webkit.org/b/131546 webkit.org/b/198830 media/track/track-in-band-legacy-api.html [ Failure Crash ]
16261626
webkit.org/b/131546 media/track/track-in-band-mode.html [ Skip ]
1627+
media/track/track-in-band-chapters.html [ Skip ]
16271628

16281629
# DataCue.value not enabled
16291630
http/tests/media/track-in-band-hls-metadata.html [ Skip ]

LayoutTests/platform/win/TestExpectations

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ media/audio-constructor-src.html [ Skip ] # Timeout
984984
media/track/track-in-band-legacy-api.html [ Skip ]
985985
media/track/track-in-band-mode.html [ Skip ]
986986
media/track/track-in-band-duplicate-tracks-when-source-changes.html [ Skip ]
987+
media/track/track-in-band-chapters.html [ Skip ]
987988
#fast/media/mq-transform-02.html [ Pass ImageOnlyFailure ]
988989
#fast/media/mq-transform-03.html [ Pass ImageOnlyFailure ]
989990

Source/WebCore/ChangeLog

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,42 @@
1+
2021-09-29 Eric Carlson <[email protected]>
2+
3+
[Cocoa] Support in-band chapter tracks
4+
https://bugs.webkit.org/show_bug.cgi?id=230380
5+
<rdar://problem/83218578>
6+
7+
Reviewed by Jer Noble.
8+
9+
Create a text track for every non-empty AVAssetChapterMetadataGroup, and create
10+
a VTT cue for every chapter.
11+
12+
Test: media/track/track-in-band-chapters.html
13+
14+
* SourcesCocoa.txt:
15+
* WebCore.xcodeproj/project.pbxproj:
16+
* platform/graphics/InbandTextTrackPrivate.h:
17+
(WebCore::InbandTextTrackPrivate::setClient):
18+
(WebCore::InbandTextTrackPrivate::cueFormat const):
19+
* platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.h: Added.
20+
(WebCore::InbandChapterTrackPrivateAVFObjC::create):
21+
(WebCore::InbandChapterTrackPrivateAVFObjC::setTextTrackIndex):
22+
(WebCore::InbandChapterTrackPrivateAVFObjC::ChapterData::operator== const):
23+
* platform/graphics/avfoundation/objc/InbandChapterTrackPrivateAVFObjC.mm: Added.
24+
(WebCore::InbandChapterTrackPrivateAVFObjC::InbandChapterTrackPrivateAVFObjC):
25+
(WebCore::InbandChapterTrackPrivateAVFObjC::processChapters):
26+
(WebCore::InbandChapterTrackPrivateAVFObjC::language const):
27+
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
28+
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
29+
(WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
30+
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
31+
(WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset):
32+
(WebCore::MediaPlayerPrivateAVFoundationObjC::metadataLoaded):
33+
(WebCore::MediaPlayerPrivateAVFoundationObjC::processChapterTracks):
34+
(WebCore::assetMetadataKeyNames):
35+
(-[WebCoreAVFMovieObserver chapterMetadataDidChange:]):
36+
* platform/graphics/iso/ISOVTTCue.cpp:
37+
(WebCore::ISOWebVTTCue::ISOWebVTTCue):
38+
* platform/graphics/iso/ISOVTTCue.h:
39+
140
2021-09-29 Antti Koivisto <[email protected]>
241

342
[CSS Cascade Layers] Add fonts and keyframes in cascade layer order

Source/WebCore/PAL/ChangeLog

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
2021-09-29 Eric Carlson <[email protected]>
2+
3+
[Cocoa] Support in-band chapter tracks
4+
https://bugs.webkit.org/show_bug.cgi?id=230380
5+
<rdar://problem/83218578>
6+
7+
Reviewed by Jer Noble.
8+
9+
* pal/cocoa/AVFoundationSoftLink.h:
10+
* pal/cocoa/AVFoundationSoftLink.mm:
11+
112
2021-09-28 Alex Christensen <[email protected]>
213

314
Mostly fix Mac CMake build

0 commit comments

Comments
 (0)