Changeset 156713 in webkit
- Timestamp:
- Oct 1, 2013 9:26:52 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 24 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r156712 r156713 1 2013-10-01 Brendan Long <b.long@cablelabs.com> 2 3 [GStreamer] Support "chapter" text tracks 4 https://bugs.webkit.org/show_bug.cgi?id=122000 5 6 Reviewed by Eric Carlson. 7 8 * media/content/counting-subtitled-srt.mkv: Added chapters metadata. 9 * media/track/in-band/track-in-band-mkv-chapters-expected.txt: New test, similar to cues-added-one, but uses "chapters" track. 10 * media/track/in-band/track-in-band-mkv-chapters.html: Same. 11 * media/in-band-cues.js: Updated tests to handle the new "chapters" track. 12 * media/track/in-band/track-in-band-kate-ogg-cues-added-once-expected.txt: Same. 13 * media/track/in-band/track-in-band-kate-ogg-cues-added-once.html: Same. 14 * media/track/in-band/track-in-band-kate-ogg-mode-expected.txt: Same. 15 * media/track/in-band/track-in-band-kate-ogg-mode.html: Same. 16 * media/track/in-band/track-in-band-kate-ogg-style-expected.txt: Same. 17 * media/track/in-band/track-in-band-kate-ogg-track-order-expected.txt: Same. 18 * media/track/in-band/track-in-band-kate-ogg-track-order.html: Same. 19 * media/track/in-band/track-in-band-srt-mkv-cues-added-once-expected.txt: Same. 20 * media/track/in-band/track-in-band-srt-mkv-cues-added-once.html: Same. 21 * media/track/in-band/track-in-band-srt-mkv-kind-expected.txt: Same. 22 * media/track/in-band/track-in-band-srt-mkv-kind.html: Same. 23 * media/track/in-band/track-in-band-srt-mkv-language-expected.txt: Same. 24 * media/track/in-band/track-in-band-srt-mkv-language.html: Same. 25 * media/track/in-band/track-in-band-srt-mkv-mode-expected.txt: Same. 26 * media/track/in-band/track-in-band-srt-mkv-mode.html: Same. 27 * media/track/in-band/track-in-band-srt-mkv-style-expected.txt: Same. 28 * media/track/in-band/track-in-band-srt-mkv-track-order-expected.txt: Same. 29 * media/track/in-band/track-in-band-srt-mkv-track-order.html: Same. 30 1 31 2013-10-01 Darin Adler <darin@apple.com> 2 32 -
trunk/LayoutTests/media/in-band-cues.js
r154908 r156713 5 5 consoleWrite("<br><i>** Check in-band kind attributes</i>"); 6 6 testExpected("video.textTracks.length", values.length); 7 for (var i = 0; i < values.length; ++i) {7 for (var i = 0; i < values.length; ++i) 8 8 testExpected("video.textTracks[" + i + "]." + attribute, values[i]); 9 }10 9 11 10 consoleWrite(""); … … 18 17 } 19 18 20 function testCuesAddedOnce(uri )19 function testCuesAddedOnce(uri, kind) 21 20 { 22 21 var seekedCount = 0; … … 66 65 67 66 consoleWrite("<br><i>** Setting track 1 to showing</i>"); 68 run("inbandTrack1 = video.textTracks[0]"); 67 for (var i = 0; i < video.textTracks.length; ++i) { 68 if (video.textTracks[i].kind == kind) { 69 inbandTrack1 = video.textTracks[i]; 70 break; 71 } 72 } 69 73 run("inbandTrack1.mode = 'showing'"); 70 74 run("video.play()"); … … 76 80 } 77 81 78 function testMode(uri )82 function testMode(uri, kind) 79 83 { 80 84 function seeked() … … 94 98 function canplaythrough() 95 99 { 96 run("inbandTrack1 = video.textTracks[0]"); 100 for (var i = 0; i < video.textTracks.length; ++i) { 101 if (video.textTracks[i].kind == kind) { 102 inbandTrack1 = video.textTracks[i]; 103 break; 104 } 105 } 97 106 98 107 consoleWrite("<br><i>** A hidden track should not have visible cues<" + "/i>"); … … 128 137 { 129 138 consoleWrite("<br><i>** Setting track 1 to showing and starting video</i>"); 130 run("inbandTrack1 = video.textTracks[0]"); 139 for (var i = 0; i < video.textTracks.length; ++i) { 140 if (video.textTracks[i].kind == "subtitles" || video.textTracks[i].kind == "captions") { 141 inbandTrack1 = video.textTracks[i]; 142 break; 143 } 144 } 131 145 132 146 inbandTrack1.mode = 'showing'; … … 142 156 } 143 157 144 function testTrackOrder(uri) { 145 var addtrackEventCount = 0; 146 147 function trackAdded(event) 148 { 149 consoleWrite("EVENT(" + event.type + ")"); 150 compareTracks("event.track", "video.textTracks[" + addtrackEventCount + "]"); 151 ++addtrackEventCount; 152 consoleWrite(""); 153 } 154 158 function testTrackOrder(uri, numInBandTracks) { 155 159 function compareTracks(track1, track2) 156 160 { … … 162 166 { 163 167 consoleWrite("<br><i>** Check initial in-band track states</i>"); 164 testExpected("video.textTracks.length", 2);165 run("inbandTrack1 = video.textTracks[0]");166 run("inbandTrack2 = video.textTracks[1]");168 testExpected("video.textTracks.length", numInBandTracks); 169 for (var i = 0; i < numInBandTracks; ++i) 170 run("inbandTrack" + (i + 1) + " = video.textTracks[" + i + "]"); 167 171 168 172 consoleWrite("<br><i>** Add two tracks, check sort order<" + "/i>"); … … 171 175 trackElement.label = '<track>'; 172 176 run("video.appendChild(trackElement)"); 173 testExpected("video.textTracks.length", 4);177 testExpected("video.textTracks.length", numInBandTracks + 2); 174 178 175 179 compareTracks("video.textTracks[0]", "trackElement.track"); 176 180 compareTracks("video.textTracks[1]", "addTrack"); 177 compareTracks("video.textTracks[2]", "inbandTrack1");178 compareTracks("video.textTracks[3]", "inbandTrack2");181 for (var i = 1; i < numInBandTracks + 1; ++i) 182 compareTracks("video.textTracks[" + (i + 1) + "]", "inbandTrack" + i); 179 183 180 184 consoleWrite("<br><i>** Unload video file, check track count<" + "/i>"); … … 187 191 188 192 findMediaElement(); 189 video.textTracks.addEventListener("addtrack", trackAdded);190 193 video.src = uri; 191 194 waitForEvent('canplaythrough', canplaythrough); -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-cues-added-once-expected.txt
r154908 r156713 4 4 5 5 ** Setting track 1 to showing 6 RUN(inbandTrack1 = video.textTracks[0])7 6 RUN(inbandTrack1.mode = 'showing') 8 7 RUN(video.play()) -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-cues-added-once.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-kate.ogv' )">10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-kate.ogv', 'subtitles')"> 11 11 <video controls></video> 12 12 <p>Check that we don't have duplicate cues after seeking backwards.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-mode-expected.txt
r154908 r156713 2 2 3 3 EVENT(canplaythrough) 4 RUN(inbandTrack1 = video.textTracks[0])5 4 6 5 ** A hidden track should not have visible cues -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-mode.html
r154908 r156713 9 9 <script src=../../in-band-cues.js></script> 10 10 </head> 11 <body onload="testMode('../../content/counting-subtitled-kate.ogv' )">11 <body onload="testMode('../../content/counting-subtitled-kate.ogv', 'subtitles')"> 12 12 <video controls></video> 13 13 <p>Test that cues from in-band tracks are displayed immediately when a track is made visible.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-style-expected.txt
r154908 r156713 3 3 4 4 ** Setting track 1 to showing and starting video 5 RUN(inbandTrack1 = video.textTracks[0])6 5 RUN(video.play()) 7 6 EVENT(seeked) -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order-expected.txt
r154908 r156713 1 1 Test track order when using in-band and out-of-band text tracks. 2 3 EVENT(addtrack)4 EXPECTED (event.track == 'video.textTracks[0]') OK5 6 EVENT(addtrack)7 EXPECTED (event.track == 'video.textTracks[1]') OK8 2 9 3 EVENT(canplaythrough) -
trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testTrackOrder('../../content/counting-subtitled-kate.ogv' )">10 <body onload="testTrackOrder('../../content/counting-subtitled-kate.ogv', 2)"> 11 11 <video controls></video> 12 12 <p>Test track order when using in-band and out-of-band text tracks.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-mkv-chapters-expected.txt
r156712 r156713 1 Check that we don't have duplicate cues after seeking backwards.1 Check for chapter track from an mkv file. 2 2 3 3 EVENT(canplaythrough) 4 4 5 5 ** Setting track 1 to showing 6 RUN(inbandTrack1 = video.textTracks[0])7 6 RUN(inbandTrack1.mode = 'showing') 8 7 RUN(video.play()) -
trunk/LayoutTests/media/track/in-band/track-in-band-mkv-chapters.html
r156712 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv' )">10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv', 'chapters')"> 11 11 <video controls></video> 12 <p>Check that we don't have duplicate cues after seeking backwards.</p>12 <p>Check for chapter track from an mkv file.</p> 13 13 </body> 14 14 </html> -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-cues-added-once-expected.txt
r154908 r156713 4 4 5 5 ** Setting track 1 to showing 6 RUN(inbandTrack1 = video.textTracks[0])7 6 RUN(inbandTrack1.mode = 'showing') 8 7 RUN(video.play()) -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-cues-added-once.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv' )">10 <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv', 'subtitles')"> 11 11 <video controls></video> 12 12 <p>Check that we don't have duplicate cues after seeking backwards.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-kind-expected.txt
r154908 r156713 4 4 5 5 ** Check in-band kind attributes 6 EXPECTED (video.textTracks.length == ' 2') OK7 EXPECTED (video.textTracks[0].kind == ' subtitles') OK6 EXPECTED (video.textTracks.length == '3') OK 7 EXPECTED (video.textTracks[0].kind == 'chapters') OK 8 8 EXPECTED (video.textTracks[1].kind == 'subtitles') OK 9 EXPECTED (video.textTracks[2].kind == 'subtitles') OK 9 10 10 11 END OF TEST -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-kind.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testAttribute('../../content/counting-subtitled-srt.mkv', 'kind', [' subtitles', 'subtitles'])">10 <body onload="testAttribute('../../content/counting-subtitled-srt.mkv', 'kind', ['chapters', 'subtitles', 'subtitles'])"> 11 11 <video controls></video> 12 12 <p>Check in-band text tracks' kind attributes.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-language-expected.txt
r154908 r156713 4 4 5 5 ** Check in-band kind attributes 6 EXPECTED (video.textTracks.length == '2') OK 7 EXPECTED (video.textTracks[0].language == 'en') OK 8 EXPECTED (video.textTracks[1].language == 'fr') OK 6 EXPECTED (video.textTracks.length == '3') OK 7 EXPECTED (video.textTracks[0].language == '') OK 8 EXPECTED (video.textTracks[1].language == 'en') OK 9 EXPECTED (video.textTracks[2].language == 'fr') OK 9 10 10 11 END OF TEST -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-language.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testAttribute('../../content/counting-subtitled-srt.mkv', 'language', [' en', 'fr'])">10 <body onload="testAttribute('../../content/counting-subtitled-srt.mkv', 'language', ['', 'en', 'fr'])"> 11 11 <video controls></video> 12 12 <p>Check in-band text tracks' language attributes.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-mode-expected.txt
r154908 r156713 2 2 3 3 EVENT(canplaythrough) 4 RUN(inbandTrack1 = video.textTracks[0])5 4 6 5 ** A hidden track should not have visible cues -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-mode.html
r154908 r156713 9 9 <script src=../../in-band-cues.js></script> 10 10 </head> 11 <body onload="testMode('../../content/counting-subtitled-srt.mkv' )">11 <body onload="testMode('../../content/counting-subtitled-srt.mkv', 'subtitles')"> 12 12 <video controls></video> 13 13 <p>Test that cues from in-band tracks are displayed immediately when a track is made visible.</p> -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-style-expected.txt
r154908 r156713 3 3 4 4 ** Setting track 1 to showing and starting video 5 RUN(inbandTrack1 = video.textTracks[0])6 5 RUN(video.play()) 7 6 EVENT(seeked) -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order-expected.txt
r154908 r156713 1 1 Test track order when using in-band and out-of-band text tracks. 2 3 EVENT(addtrack)4 EXPECTED (event.track == 'video.textTracks[0]') OK5 6 EVENT(addtrack)7 EXPECTED (event.track == 'video.textTracks[1]') OK8 2 9 3 EVENT(canplaythrough) 10 4 11 5 ** Check initial in-band track states 12 EXPECTED (video.textTracks.length == ' 2') OK6 EXPECTED (video.textTracks.length == '3') OK 13 7 RUN(inbandTrack1 = video.textTracks[0]) 14 8 RUN(inbandTrack2 = video.textTracks[1]) 9 RUN(inbandTrack3 = video.textTracks[2]) 15 10 16 11 ** Add two tracks, check sort order … … 18 13 RUN(trackElement = document.createElement('track')) 19 14 RUN(video.appendChild(trackElement)) 20 EXPECTED (video.textTracks.length == ' 4') OK15 EXPECTED (video.textTracks.length == '5') OK 21 16 EXPECTED (video.textTracks[0] == 'trackElement.track') OK 22 17 EXPECTED (video.textTracks[1] == 'addTrack') OK 23 18 EXPECTED (video.textTracks[2] == 'inbandTrack1') OK 24 19 EXPECTED (video.textTracks[3] == 'inbandTrack2') OK 20 EXPECTED (video.textTracks[4] == 'inbandTrack3') OK 25 21 26 22 ** Unload video file, check track count -
trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html
r154908 r156713 8 8 <script src=../../in-band-cues.js></script> 9 9 </head> 10 <body onload="testTrackOrder('../../content/counting-subtitled-srt.mkv' )">10 <body onload="testTrackOrder('../../content/counting-subtitled-srt.mkv', 3)"> 11 11 <video controls></video> 12 12 <p>Test track order when using in-band and out-of-band text tracks.</p> -
trunk/Source/WebCore/ChangeLog
r156710 r156713 1 2013-10-01 Brendan Long <b.long@cablelabs.com> 2 3 [GStreamer] Support "chapter" text tracks 4 https://bugs.webkit.org/show_bug.cgi?id=122000 5 6 Reviewed by Eric Carlson. 7 8 Test: media/track/in-band/track-in-band-mkv-chapters.html 9 10 * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h: New class, needed for cues that aren't associated with GstPads. 11 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: 12 (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Check for table of contents messages. 13 (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Parse table of contents messages into text tracks. 14 (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry): Recursive method for parsing all of the TOC entries. 15 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add the processTableOfContents functions. 16 1 17 2013-10-01 Allan Sandfeld Jensen <allan.jensen@digia.com> 2 18 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r156550 r156713 44 44 45 45 #if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1) 46 #include "InbandMetadataTextTrackPrivateGStreamer.h" 46 47 #include "InbandTextTrackPrivateGStreamer.h" 47 48 #include "TextCombinerGStreamer.h" … … 959 960 } 960 961 break; 962 #if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1) 963 case GST_MESSAGE_TOC: 964 processTableOfContents(message); 965 break; 966 #endif 961 967 default: 962 968 LOG_MEDIA_MESSAGE("Unhandled GStreamer message type: %s", … … 986 992 updateStates(); 987 993 } 994 995 #if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1) 996 void MediaPlayerPrivateGStreamer::processTableOfContents(GstMessage* message) 997 { 998 if (m_chaptersTrack) 999 m_player->removeTextTrack(m_chaptersTrack); 1000 1001 m_chaptersTrack = InbandMetadataTextTrackPrivateGStreamer::create(InbandTextTrackPrivate::Chapters); 1002 m_player->addTextTrack(m_chaptersTrack); 1003 1004 GstToc* toc; 1005 gboolean updated; 1006 gst_message_parse_toc(message, &toc, &updated); 1007 ASSERT(toc); 1008 1009 for (GList* i = gst_toc_get_entries(toc); i; i = i->next) 1010 processTableOfContentsEntry(static_cast<GstTocEntry*>(i->data), 0); 1011 1012 gst_toc_unref(toc); 1013 } 1014 1015 void MediaPlayerPrivateGStreamer::processTableOfContentsEntry(GstTocEntry* entry, GstTocEntry* parent) 1016 { 1017 ASSERT(entry); 1018 1019 RefPtr<GenericCueData> cue = GenericCueData::create(); 1020 1021 gint64 start = -1, stop = -1; 1022 gst_toc_entry_get_start_stop_times(entry, &start, &stop); 1023 if (start != -1) 1024 cue->setStartTime(static_cast<double>(start) / GST_SECOND); 1025 if (stop != -1) 1026 cue->setEndTime(static_cast<double>(stop) / GST_SECOND); 1027 1028 GstTagList* tags = gst_toc_entry_get_tags(entry); 1029 if (tags) { 1030 gchar* title = 0; 1031 gst_tag_list_get_string(tags, GST_TAG_TITLE, &title); 1032 if (title) { 1033 cue->setContent(title); 1034 g_free(title); 1035 } 1036 } 1037 1038 m_chaptersTrack->client()->addGenericCue(m_chaptersTrack.get(), cue.release()); 1039 1040 for (GList* i = gst_toc_entry_get_sub_entries(entry); i; i = i->next) 1041 processTableOfContentsEntry(static_cast<GstTocEntry*>(i->data), entry); 1042 } 1043 #endif 988 1044 989 1045 void MediaPlayerPrivateGStreamer::fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*) -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
r156550 r156713 136 136 void setDownloadBuffering(); 137 137 void processBufferingStats(GstMessage*); 138 #if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1) 139 void processTableOfContents(GstMessage*); 140 void processTableOfContentsEntry(GstTocEntry*, GstTocEntry* parent); 141 #endif 138 142 139 143 virtual String engineDescription() const { return "GStreamer"; } … … 188 192 #if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1) 189 193 Vector<RefPtr<InbandTextTrackPrivateGStreamer> > m_textTracks; 194 RefPtr<InbandTextTrackPrivate> m_chaptersTrack; 190 195 #endif 191 196 };
Note: See TracChangeset
for help on using the changeset viewer.