Changeset 156713 in webkit


Ignore:
Timestamp:
Oct 1, 2013 9:26:52 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[GStreamer] Support "chapter" text tracks
https://bugs.webkit.org/show_bug.cgi?id=122000

Patch by Brendan Long <b.long@cablelabs.com> on 2013-10-01
Reviewed by Eric Carlson.

Source/WebCore:

Test: media/track/in-band/track-in-band-mkv-chapters.html

  • platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h: New class, needed for cues that aren't associated with GstPads.
  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

(WebCore::MediaPlayerPrivateGStreamer::handleMessage): Check for table of contents messages.
(WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Parse table of contents messages into text tracks.
(WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry): Recursive method for parsing all of the TOC entries.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add the processTableOfContents functions.

LayoutTests:

  • media/content/counting-subtitled-srt.mkv: Added chapters metadata.
  • media/track/in-band/track-in-band-mkv-chapters-expected.txt: New test, similar to cues-added-one, but uses "chapters" track.
  • media/track/in-band/track-in-band-mkv-chapters.html: Same.
  • media/in-band-cues.js: Updated tests to handle the new "chapters" track.
  • media/track/in-band/track-in-band-kate-ogg-cues-added-once-expected.txt: Same.
  • media/track/in-band/track-in-band-kate-ogg-cues-added-once.html: Same.
  • media/track/in-band/track-in-band-kate-ogg-mode-expected.txt: Same.
  • media/track/in-band/track-in-band-kate-ogg-mode.html: Same.
  • media/track/in-band/track-in-band-kate-ogg-style-expected.txt: Same.
  • media/track/in-band/track-in-band-kate-ogg-track-order-expected.txt: Same.
  • media/track/in-band/track-in-band-kate-ogg-track-order.html: Same.
  • media/track/in-band/track-in-band-srt-mkv-cues-added-once-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-cues-added-once.html: Same.
  • media/track/in-band/track-in-band-srt-mkv-kind-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-kind.html: Same.
  • media/track/in-band/track-in-band-srt-mkv-language-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-language.html: Same.
  • media/track/in-band/track-in-band-srt-mkv-mode-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-mode.html: Same.
  • media/track/in-band/track-in-band-srt-mkv-style-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-track-order-expected.txt: Same.
  • media/track/in-band/track-in-band-srt-mkv-track-order.html: Same.
Location:
trunk
Files:
1 added
24 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r156712 r156713  
     12013-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
    1312013-10-01  Darin Adler  <darin@apple.com>
    232
  • trunk/LayoutTests/media/in-band-cues.js

    r154908 r156713  
    55        consoleWrite("<br><i>** Check in-band kind attributes</i>");
    66        testExpected("video.textTracks.length", values.length);
    7         for (var i = 0; i < values.length; ++i) {
     7        for (var i = 0; i < values.length; ++i)
    88            testExpected("video.textTracks[" + i + "]." + attribute, values[i]);
    9         }
    109
    1110        consoleWrite("");
     
    1817}
    1918
    20 function testCuesAddedOnce(uri)
     19function testCuesAddedOnce(uri, kind)
    2120{
    2221    var seekedCount = 0;
     
    6665
    6766        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        }
    6973        run("inbandTrack1.mode = 'showing'");
    7074        run("video.play()");
     
    7680}
    7781
    78 function testMode(uri)
     82function testMode(uri, kind)
    7983{
    8084    function seeked()
     
    9498    function canplaythrough()
    9599    {
    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        }
    97106
    98107        consoleWrite("<br><i>** A hidden track should not have visible cues<" + "/i>");
     
    128137    {
    129138        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        }
    131145
    132146        inbandTrack1.mode = 'showing';
     
    142156}
    143157
    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 
     158function testTrackOrder(uri, numInBandTracks) {
    155159    function compareTracks(track1, track2)
    156160    {
     
    162166    {
    163167        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 + "]");
    167171
    168172        consoleWrite("<br><i>** Add two tracks, check sort order<" + "/i>");
     
    171175        trackElement.label = '<track>';
    172176        run("video.appendChild(trackElement)");
    173         testExpected("video.textTracks.length", 4);
     177        testExpected("video.textTracks.length", numInBandTracks + 2);
    174178
    175179        compareTracks("video.textTracks[0]", "trackElement.track");
    176180        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);
    179183
    180184        consoleWrite("<br><i>** Unload video file, check track count<" + "/i>");
     
    187191
    188192    findMediaElement();
    189     video.textTracks.addEventListener("addtrack", trackAdded);
    190193    video.src = uri;
    191194    waitForEvent('canplaythrough', canplaythrough);
  • trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-cues-added-once-expected.txt

    r154908 r156713  
    44
    55** Setting track 1 to showing
    6 RUN(inbandTrack1 = video.textTracks[0])
    76RUN(inbandTrack1.mode = 'showing')
    87RUN(video.play())
  • trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-cues-added-once.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </head>
    10     <body onload="testCuesAddedOnce('../../content/counting-subtitled-kate.ogv')">
     10    <body onload="testCuesAddedOnce('../../content/counting-subtitled-kate.ogv', 'subtitles')">
    1111        <video controls></video>
    1212        <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  
    22
    33EVENT(canplaythrough)
    4 RUN(inbandTrack1 = video.textTracks[0])
    54
    65** A hidden track should not have visible cues
  • trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-mode.html

    r154908 r156713  
    99        <script src=../../in-band-cues.js></script>
    1010    </head>
    11     <body onload="testMode('../../content/counting-subtitled-kate.ogv')">
     11    <body onload="testMode('../../content/counting-subtitled-kate.ogv', 'subtitles')">
    1212        <video controls></video>
    1313        <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  
    33
    44** Setting track 1 to showing and starting video
    5 RUN(inbandTrack1 = video.textTracks[0])
    65RUN(video.play())
    76EVENT(seeked)
  • trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order-expected.txt

    r154908 r156713  
    11Test track order when using in-band and out-of-band text tracks.
    2 
    3 EVENT(addtrack)
    4 EXPECTED (event.track == 'video.textTracks[0]') OK
    5 
    6 EVENT(addtrack)
    7 EXPECTED (event.track == 'video.textTracks[1]') OK
    82
    93EVENT(canplaythrough)
  • trunk/LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </head>
    10     <body onload="testTrackOrder('../../content/counting-subtitled-kate.ogv')">
     10    <body onload="testTrackOrder('../../content/counting-subtitled-kate.ogv', 2)">
    1111        <video controls></video>
    1212        <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.
     1Check for chapter track from an mkv file.
    22
    33EVENT(canplaythrough)
    44
    55** Setting track 1 to showing
    6 RUN(inbandTrack1 = video.textTracks[0])
    76RUN(inbandTrack1.mode = 'showing')
    87RUN(video.play())
  • trunk/LayoutTests/media/track/in-band/track-in-band-mkv-chapters.html

    r156712 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </head>
    10     <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv')">
     10    <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv', 'chapters')">
    1111        <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>
    1313    </body>
    1414</html>
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-cues-added-once-expected.txt

    r154908 r156713  
    44
    55** Setting track 1 to showing
    6 RUN(inbandTrack1 = video.textTracks[0])
    76RUN(inbandTrack1.mode = 'showing')
    87RUN(video.play())
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-cues-added-once.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </head>
    10     <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv')">
     10    <body onload="testCuesAddedOnce('../../content/counting-subtitled-srt.mkv', 'subtitles')">
    1111        <video controls></video>
    1212        <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  
    44
    55** Check in-band kind attributes
    6 EXPECTED (video.textTracks.length == '2') OK
    7 EXPECTED (video.textTracks[0].kind == 'subtitles') OK
     6EXPECTED (video.textTracks.length == '3') OK
     7EXPECTED (video.textTracks[0].kind == 'chapters') OK
    88EXPECTED (video.textTracks[1].kind == 'subtitles') OK
     9EXPECTED (video.textTracks[2].kind == 'subtitles') OK
    910
    1011END OF TEST
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-kind.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </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'])">
    1111        <video controls></video>
    1212        <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  
    44
    55** 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
     6EXPECTED (video.textTracks.length == '3') OK
     7EXPECTED (video.textTracks[0].language == '') OK
     8EXPECTED (video.textTracks[1].language == 'en') OK
     9EXPECTED (video.textTracks[2].language == 'fr') OK
    910
    1011END OF TEST
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-language.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </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'])">
    1111        <video controls></video>
    1212        <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  
    22
    33EVENT(canplaythrough)
    4 RUN(inbandTrack1 = video.textTracks[0])
    54
    65** A hidden track should not have visible cues
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-mode.html

    r154908 r156713  
    99        <script src=../../in-band-cues.js></script>
    1010    </head>
    11     <body onload="testMode('../../content/counting-subtitled-srt.mkv')">
     11    <body onload="testMode('../../content/counting-subtitled-srt.mkv', 'subtitles')">
    1212        <video controls></video>
    1313        <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  
    33
    44** Setting track 1 to showing and starting video
    5 RUN(inbandTrack1 = video.textTracks[0])
    65RUN(video.play())
    76EVENT(seeked)
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order-expected.txt

    r154908 r156713  
    11Test track order when using in-band and out-of-band text tracks.
    2 
    3 EVENT(addtrack)
    4 EXPECTED (event.track == 'video.textTracks[0]') OK
    5 
    6 EVENT(addtrack)
    7 EXPECTED (event.track == 'video.textTracks[1]') OK
    82
    93EVENT(canplaythrough)
    104
    115** Check initial in-band track states
    12 EXPECTED (video.textTracks.length == '2') OK
     6EXPECTED (video.textTracks.length == '3') OK
    137RUN(inbandTrack1 = video.textTracks[0])
    148RUN(inbandTrack2 = video.textTracks[1])
     9RUN(inbandTrack3 = video.textTracks[2])
    1510
    1611** Add two tracks, check sort order
     
    1813RUN(trackElement = document.createElement('track'))
    1914RUN(video.appendChild(trackElement))
    20 EXPECTED (video.textTracks.length == '4') OK
     15EXPECTED (video.textTracks.length == '5') OK
    2116EXPECTED (video.textTracks[0] == 'trackElement.track') OK
    2217EXPECTED (video.textTracks[1] == 'addTrack') OK
    2318EXPECTED (video.textTracks[2] == 'inbandTrack1') OK
    2419EXPECTED (video.textTracks[3] == 'inbandTrack2') OK
     20EXPECTED (video.textTracks[4] == 'inbandTrack3') OK
    2521
    2622** Unload video file, check track count
  • trunk/LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html

    r154908 r156713  
    88        <script src=../../in-band-cues.js></script>
    99    </head>
    10     <body onload="testTrackOrder('../../content/counting-subtitled-srt.mkv')">
     10    <body onload="testTrackOrder('../../content/counting-subtitled-srt.mkv', 3)">
    1111        <video controls></video>
    1212        <p>Test track order when using in-band and out-of-band text tracks.</p>
  • trunk/Source/WebCore/ChangeLog

    r156710 r156713  
     12013-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
    1172013-10-01  Allan Sandfeld Jensen  <allan.jensen@digia.com>
    218
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r156550 r156713  
    4444
    4545#if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1)
     46#include "InbandMetadataTextTrackPrivateGStreamer.h"
    4647#include "InbandTextTrackPrivateGStreamer.h"
    4748#include "TextCombinerGStreamer.h"
     
    959960        }
    960961        break;
     962#if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1)
     963    case GST_MESSAGE_TOC:
     964        processTableOfContents(message);
     965        break;
     966#endif
    961967    default:
    962968        LOG_MEDIA_MESSAGE("Unhandled GStreamer message type: %s",
     
    986992    updateStates();
    987993}
     994
     995#if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1)
     996void 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
     1015void 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
    9881044
    9891045void MediaPlayerPrivateGStreamer::fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*)
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r156550 r156713  
    136136    void setDownloadBuffering();
    137137    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
    138142
    139143    virtual String engineDescription() const { return "GStreamer"; }
     
    188192#if ENABLE(VIDEO_TRACK) && defined(GST_API_VERSION_1)
    189193    Vector<RefPtr<InbandTextTrackPrivateGStreamer> > m_textTracks;
     194    RefPtr<InbandTextTrackPrivate> m_chaptersTrack;
    190195#endif
    191196};
Note: See TracChangeset for help on using the changeset viewer.