Changeset 167025 in webkit


Ignore:
Timestamp:
Apr 9, 2014 11:43:40 AM (10 years ago)
Author:
b.long@cablelabs.com
Message:

[GStreamer] Expose MPEG-TS metadata
https://bugs.webkit.org/show_bug.cgi?id=122001

Reviewed by Eric Carlson.

.:

  • Source/cmake/FindGStreamer.cmake: Look for gstreamer-mpegts >= 1.3.0.
  • Source/cmake/OptionsEfl.cmake: Same.
  • Source/cmake/OptionsGTK.cmake: Same.

Source/WebCore:

Test: media/track/in-band/track-in-band-mpegts-metadata.html

  • CMakeLists.txt: Add InbandDataTextTrack.
  • PlatformGTK.cmake: Look for gstreamer-mpegts and use it if available.
  • WebCore.vcxproj/WebCore.vcxproj: Add InbandDataTextTrack.
  • WebCore.vcxproj/WebCore.vcxproj.filters: Same.
  • WebCore.xcodeproj/project.pbxproj: Same.
  • html/track/DataCue.cpp:

(WebCore::DataCue::DataCue): Add a constructor using raw data.

  • html/track/DataCue.h:

(WebCore::DataCue::create): Same.

  • html/track/InbandDataTextTrack.cpp: Added, InbandTextTrack which implements addDataCue().
  • html/track/InbandDataTextTrack.h:
  • html/track/InbandGenericTextTrack.h: Move unimplemented methods to InbandTextTrack.
  • html/track/InbandWebVTTTextTrack.h: Same.
  • html/track/InbandTextTrack.h: Same, and add inBandMetadataTrackDispatchType.
  • html/track/InbandTextTrack.cpp:

(WebCore::InbandTextTrack::create): Add constructor for InbandDataTextTrack.
(WebCore::InbandTextTrack::inBandMetadataTrackDispatchType): Added.

  • html/track/TextTrack.h:

(WebCore::TextTrack::inBandMetadataTrackDispatchType): Added (empty).

  • html/track/TextTrack.idl: Add inBandMetadataTrackDispatchType.
  • platform/graphics/InbandTextTrackPrivate.h: Add inBandMetadataTrackDispatchType and Data format.

(WebCore::InbandTextTrackPrivate::inBandMetadataTrackDispatchType):

  • platform/graphics/InbandTextTrackPrivateClient.h: Add addDataCue() method.
  • platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:

(WebCore::InbandMetadataTextTrackPrivateGStreamer::create): Allow specifying the cue format and id.

(WebCore::InbandMetadataTextTrackPrivateGStreamer::InbandMetadataTextTrackPrivateGStreamer): Same.

(WebCore::InbandMetadataTextTrackPrivateGStreamer::setInBandMetadataTrackDispatchType): Added.
(WebCore::InbandMetadataTextTrackPrivateGStreamer::addDataCue): Added.
(WebCore::InbandMetadataTextTrackPrivateGStreamer::addGenericCue): Added.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

(WebCore::MediaPlayerPrivateGStreamer::handleMessage): Check for MPEG-TS sections.
(WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection): Add MPEG-TS section metadata, and get inBandMetadataTrackDispatchType from the PMT.
(WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Explicitly use Generic CueFormat.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

LayoutTests:

  • media/content/user-private-streams.ts: Added.
  • media/track/in-band/track-in-band-mpegts-metadata-expected.txt: Added.
  • media/track/in-band/track-in-band-mpegts-metadata.html: Added.
Location:
trunk
Files:
3 added
24 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r166984 r167025  
     12014-04-09  Brendan Long  <b.long@cablelabs.com>
     2
     3        [GStreamer] Expose MPEG-TS metadata
     4        https://bugs.webkit.org/show_bug.cgi?id=122001
     5
     6        Reviewed by Eric Carlson.
     7
     8        * Source/cmake/FindGStreamer.cmake: Look for gstreamer-mpegts >= 1.3.0.
     9        * Source/cmake/OptionsEfl.cmake: Same.
     10        * Source/cmake/OptionsGTK.cmake: Same.
     11
    1122014-04-08  Brian J. Burg  <burg@cs.washington.edu>
    213
  • trunk/LayoutTests/ChangeLog

    r167024 r167025  
     12014-04-09  Brendan Long  <b.long@cablelabs.com>
     2
     3        [GStreamer] Expose MPEG-TS metadata
     4        https://bugs.webkit.org/show_bug.cgi?id=122001
     5
     6        Reviewed by Eric Carlson.
     7
     8        * media/content/user-private-streams.ts: Added.
     9        * media/track/in-band/track-in-band-mpegts-metadata-expected.txt: Added.
     10        * media/track/in-band/track-in-band-mpegts-metadata.html: Added.
     11
    1122014-04-08  Chris Fleizach  <cfleizach@apple.com>
    213
  • trunk/Source/WebCore/CMakeLists.txt

    r167016 r167025  
    27232723        html/track/BufferedLineReader.cpp
    27242724        html/track/DataCue.cpp
     2725        html/track/InbandDataTextTrack.cpp
    27252726        html/track/InbandGenericTextTrack.cpp
    27262727        html/track/InbandTextTrack.cpp
  • trunk/Source/WebCore/ChangeLog

    r167024 r167025  
     12014-04-09  Brendan Long  <b.long@cablelabs.com>
     2
     3        [GStreamer] Expose MPEG-TS metadata
     4        https://bugs.webkit.org/show_bug.cgi?id=122001
     5
     6        Reviewed by Eric Carlson.
     7
     8        Test: media/track/in-band/track-in-band-mpegts-metadata.html
     9
     10        * CMakeLists.txt: Add InbandDataTextTrack.
     11        * PlatformGTK.cmake: Look for gstreamer-mpegts and use it if available.
     12        * WebCore.vcxproj/WebCore.vcxproj: Add InbandDataTextTrack.
     13        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
     14        * WebCore.xcodeproj/project.pbxproj: Same.
     15        * html/track/DataCue.cpp:
     16        (WebCore::DataCue::DataCue): Add a constructor using raw data.
     17        * html/track/DataCue.h:
     18        (WebCore::DataCue::create): Same.
     19        * html/track/InbandDataTextTrack.cpp: Added, InbandTextTrack which implements addDataCue().
     20        * html/track/InbandDataTextTrack.h:
     21        * html/track/InbandGenericTextTrack.h: Move unimplemented methods to InbandTextTrack.
     22        * html/track/InbandWebVTTTextTrack.h: Same.
     23        * html/track/InbandTextTrack.h: Same, and add inBandMetadataTrackDispatchType.
     24        * html/track/InbandTextTrack.cpp:
     25        (WebCore::InbandTextTrack::create): Add constructor for InbandDataTextTrack.
     26        (WebCore::InbandTextTrack::inBandMetadataTrackDispatchType): Added.
     27        * html/track/TextTrack.h:
     28        (WebCore::TextTrack::inBandMetadataTrackDispatchType): Added (empty).
     29        * html/track/TextTrack.idl: Add inBandMetadataTrackDispatchType.
     30        * platform/graphics/InbandTextTrackPrivate.h: Add inBandMetadataTrackDispatchType and Data format.
     31        (WebCore::InbandTextTrackPrivate::inBandMetadataTrackDispatchType):
     32        * platform/graphics/InbandTextTrackPrivateClient.h: Add addDataCue() method.
     33        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
     34        (WebCore::InbandMetadataTextTrackPrivateGStreamer::create): Allow specifying the cue format and id.
     35         (WebCore::InbandMetadataTextTrackPrivateGStreamer::InbandMetadataTextTrackPrivateGStreamer): Same.
     36        (WebCore::InbandMetadataTextTrackPrivateGStreamer::setInBandMetadataTrackDispatchType): Added.
     37        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addDataCue): Added.
     38        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addGenericCue): Added.
     39        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     40        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Check for MPEG-TS sections.
     41        (WebCore::MediaPlayerPrivateGStreamer::processMpegTsSection): Add MPEG-TS section metadata, and get inBandMetadataTrackDispatchType from the PMT.
     42        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents): Explicitly use Generic CueFormat.
     43        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     44
    1452014-04-08  Chris Fleizach  <cfleizach@apple.com>
    246
  • trunk/Source/WebCore/PlatformGTK.cmake

    r167016 r167025  
    344344        ${GSTREAMER_VIDEO_LIBRARIES}
    345345    )
     346
     347    if (USE_GSTREAMER_MPEGTS)
     348        list(APPEND WebCore_INCLUDE_DIRECTORIES
     349            ${GSTREAMER_MPEGTS_INCLUDE_DIRS}
     350        )
     351
     352        list(APPEND WebCore_LIBRARIES
     353            ${GSTREAMER_MPEGTS_LIBRARIES}
     354        )
     355    endif ()
    346356endif ()
    347357
     
    456466list(APPEND GObjectDOMBindings_IDL_FILES
    457467    Modules/battery/BatteryManager.idl
     468
    458469    Modules/gamepad/Gamepad.idl
    459470    Modules/gamepad/GamepadList.idl
     471
    460472    Modules/geolocation/Geolocation.idl
     473
    461474    Modules/mediasource/VideoPlaybackQuality.idl
     475
    462476    Modules/quota/StorageInfo.idl
    463477    Modules/quota/StorageQuota.idl
     478
    464479    Modules/webdatabase/Database.idl
    465480
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r166965 r167025  
    1587015870    <ClCompile Include="..\html\track\BufferedLineReader.cpp" />
    1587115871    <ClCompile Include="..\html\track\DataCue.cpp" />
     15872    <ClCompile Include="..\html\track\InbandDataTextTrack.cpp" />
    1587215873    <ClCompile Include="..\html\track\InbandGenericTextTrack.cpp" />
    1587315874    <ClCompile Include="..\html\track\InbandTextTrack.cpp" />
     
    2067020671    <ClInclude Include="..\html\track\BufferedLineReader.h" />
    2067120672    <ClInclude Include="..\html\track\DataCue.h" />
     20673    <ClInclude Include="..\html\track\InbandDataTextTrack.h" />
    2067220674    <ClInclude Include="..\html\track\InbandGenericTextTrack.h" />
    2067320675    <ClInclude Include="..\html\track\InbandTextTrack.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r166965 r167025  
    41774177      <Filter>html\track</Filter>
    41784178    </ClCompile>
     4179    <ClCompile Include="..\html\track\InbandDataTextTrack.cpp">
     4180      <Filter>html\track</Filter>
     4181    </ClCompile>
    41794182    <ClCompile Include="..\html\track\InbandGenericTextTrack.cpp">
    41804183      <Filter>html\track</Filter>
     
    1125911262    </ClInclude>
    1126011263    <ClInclude Include="..\html\track\DataCue.h">
     11264      <Filter>html\track</Filter>
     11265    </ClInclude>
     11266    <ClInclude Include="..\html\track\InbandDataTextTrack.h">
    1126111267      <Filter>html\track</Filter>
    1126211268    </ClInclude>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r166997 r167025  
    54185418                BE8EF04D171C9014009B48C3 /* JSVideoTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = BE8EF049171C9014009B48C3 /* JSVideoTrackList.h */; };
    54195419                BE913D80181EF92400DCB09E /* TrackPrivateBase.h in Headers */ = {isa = PBXBuildFile; fileRef = BE913D7F181EF8E500DCB09E /* TrackPrivateBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
     5420                BE961C5418AD338500D07DC5 /* InbandDataTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE961C5218AD337C00D07DC5 /* InbandDataTextTrack.cpp */; };
     5421                BE961C5518AD338C00D07DC5 /* InbandDataTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = BE961C5318AD337C00D07DC5 /* InbandDataTextTrack.h */; };
    54205422                BEA807C80F714A0300524199 /* SelectionRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEA807C60F714A0300524199 /* SelectionRect.cpp */; };
    54215423                BEA807C90F714A0300524199 /* SelectionRect.h in Headers */ = {isa = PBXBuildFile; fileRef = BEA807C70F714A0300524199 /* SelectionRect.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1272312725                BE91FC8B06133666005E3790 /* Position.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Position.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
    1272412726                BE91FC8C06133666005E3790 /* Position.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Position.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
     12727                BE961C5218AD337C00D07DC5 /* InbandDataTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandDataTextTrack.cpp; sourceTree = "<group>"; };
     12728                BE961C5318AD337C00D07DC5 /* InbandDataTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandDataTextTrack.h; sourceTree = "<group>"; };
    1272512729                BE983D95052A2E0A00892D85 /* WebCoreKeyboardUIMode.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreKeyboardUIMode.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
    1272612730                BEA807C60F714A0300524199 /* SelectionRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SelectionRect.cpp; path = ios/SelectionRect.cpp; sourceTree = "<group>"; };
     
    1934419348                                BE23480A18A9870300E4B6E8 /* DataCue.h */,
    1934519349                                BE23480B18A9870300E4B6E8 /* DataCue.idl */,
     19350                                BE961C5218AD337C00D07DC5 /* InbandDataTextTrack.cpp */,
     19351                                BE961C5318AD337C00D07DC5 /* InbandDataTextTrack.h */,
    1934619352                                BE16C58E17CFE17200852C04 /* InbandGenericTextTrack.cpp */,
    1934719353                                BE16C58F17CFE17200852C04 /* InbandGenericTextTrack.h */,
     
    2442724433                                A80E7A180A19C3D6007FB8C5 /* JSHTMLMetaElement.h in Headers */,
    2442824434                                A7BBE26711AFB3F20005EA03 /* JSHTMLMeterElement.h in Headers */,
     24435                                BE961C5518AD338C00D07DC5 /* InbandDataTextTrack.h in Headers */,
    2442924436                                1AE2AB2A0A1CE63B00B42B25 /* JSHTMLModElement.h in Headers */,
    2443024437                                BC305C7A0C076BB300CD20F0 /* JSHTMLObjectElement.h in Headers */,
     
    2696626973                                4162A450101145AE00DFF3ED /* DedicatedWorkerGlobalScope.cpp in Sources */,
    2696726974                                41A3D58E101C152D00316D07 /* DedicatedWorkerThread.cpp in Sources */,
     26975                                BE961C5418AD338500D07DC5 /* InbandDataTextTrack.cpp in Sources */,
    2696826976                                FD06DFA5134A4DEF006F5D7D /* DefaultAudioDestinationNode.cpp in Sources */,
    2696926977                                CD2F4A2718D8A3490063746D /* AudioHardwareListenerMac.cpp in Sources */,
  • trunk/Source/WebCore/html/track/DataCue.cpp

    r165676 r167025  
    4141}
    4242
     43DataCue::DataCue(ScriptExecutionContext& context, double start, double end, const void* data, unsigned length)
     44    : TextTrackCue(context, start, end)
     45{
     46    m_data = ArrayBuffer::create(data, length);
     47}
     48
    4349DataCue::~DataCue()
    4450{
  • trunk/Source/WebCore/html/track/DataCue.h

    r165676 r167025  
    4444    }
    4545
     46    static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, const void* data, unsigned length)
     47    {
     48        return adoptRef(new DataCue(context, start, end, data, length));
     49    }
     50
    4651    virtual ~DataCue();
    4752    virtual CueType cueType() const { return Data; }
     
    5358protected:
    5459    DataCue(ScriptExecutionContext&, double start, double end, ArrayBuffer*, ExceptionCode&);
     60    DataCue(ScriptExecutionContext&, double start, double end, const void* data, unsigned length);
    5561
    5662private:
  • trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp

    r167024 r167025  
    11/*
    2  * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
     2 * Copyright (C) 2014 Cable Television Labs Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    1111 *    documentation and/or other materials provided with the distribution.
    1212 *
    13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
    1414 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1515 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    1717 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    1818 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     
    2424 */
    2525
    26 #ifndef DataCue_h
    27 #define DataCue_h
     26#include "config.h"
    2827
    2928#if ENABLE(VIDEO_TRACK)
     29#include "InbandDataTextTrack.h"
    3030
    31 #include "TextTrackCue.h"
     31#include "DataCue.h"
     32#include "ExceptionCodePlaceholder.h"
     33#include "InbandTextTrackPrivate.h"
    3234#include <runtime/ArrayBuffer.h>
    33 #include <wtf/RefCounted.h>
    3435
    3536namespace WebCore {
    3637
    37 class ScriptExecutionContext;
     38PassRefPtr<InbandDataTextTrack> InbandDataTextTrack::create(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> playerPrivate)
     39{
     40    return adoptRef(new InbandDataTextTrack(context, client, playerPrivate));
     41}
    3842
    39 class DataCue : public TextTrackCue {
    40 public:
    41     static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, ExceptionCode& ec)
    42     {
    43         return adoptRef(new DataCue(context, start, end, data, ec));
    44     }
     43InbandDataTextTrack::InbandDataTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate)
     44    : InbandTextTrack(context, client, trackPrivate)
     45{
     46}
    4547
    46     virtual ~DataCue();
    47     virtual CueType cueType() const { return Data; }
     48InbandDataTextTrack::~InbandDataTextTrack()
     49{
     50}
    4851
    49     RefPtr<ArrayBuffer> data() const;
    50     void setData(ArrayBuffer*, ExceptionCode&);
    51     String text(bool& isNull) const;
    52 
    53 protected:
    54     DataCue(ScriptExecutionContext&, double start, double end, ArrayBuffer*, ExceptionCode&);
    55 
    56 private:
    57     RefPtr<ArrayBuffer> m_data;
    58 };
    59 
    60 DataCue* toDataCue(TextTrackCue*);
    61 const DataCue* toDataCue(const TextTrackCue*);
     52void InbandDataTextTrack::addDataCue(InbandTextTrackPrivate*, double start, double end, const void* data, unsigned length)
     53{
     54    RefPtr<DataCue> cue = DataCue::create(*scriptExecutionContext(), start, end, data, length);
     55    addCue(cue.release(), ASSERT_NO_EXCEPTION);
     56}
    6257
    6358} // namespace WebCore
    6459
    6560#endif
    66 #endif
  • trunk/Source/WebCore/html/track/InbandDataTextTrack.h

    r167024 r167025  
    1111 *    documentation and/or other materials provided with the distribution.
    1212 *
    13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
    1414 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1515 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    1717 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    1818 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     
    2424 */
    2525
    26 #ifndef DataCue_h
    27 #define DataCue_h
     26#ifndef InbandDataTextTrack_h
     27#define InbandDataTextTrack_h
    2828
    2929#if ENABLE(VIDEO_TRACK)
    3030
    31 #include "TextTrackCue.h"
    32 #include <runtime/ArrayBuffer.h>
    33 #include <wtf/RefCounted.h>
     31#include "InbandTextTrack.h"
     32#include <wtf/RefPtr.h>
    3433
    3534namespace WebCore {
    3635
    37 class ScriptExecutionContext;
     36class Document;
     37class InbandTextTrackPrivate;
     38class TextTrackCue;
    3839
    39 class DataCue : public TextTrackCue {
     40class InbandDataTextTrack : public InbandTextTrack {
    4041public:
    41     static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, ExceptionCode& ec)
    42     {
    43         return adoptRef(new DataCue(context, start, end, data, ec));
    44     }
    45 
    46     virtual ~DataCue();
    47     virtual CueType cueType() const { return Data; }
    48 
    49     RefPtr<ArrayBuffer> data() const;
    50     void setData(ArrayBuffer*, ExceptionCode&);
    51     String text(bool& isNull) const;
    52 
    53 protected:
    54     DataCue(ScriptExecutionContext&, double start, double end, ArrayBuffer*, ExceptionCode&);
     42    static PassRefPtr<InbandDataTextTrack> create(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>);
     43    virtual ~InbandDataTextTrack();
    5544
    5645private:
    57     RefPtr<ArrayBuffer> m_data;
     46    InbandDataTextTrack(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>);
     47
     48    virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, const void*, unsigned) override;
    5849};
    59 
    60 DataCue* toDataCue(TextTrackCue*);
    61 const DataCue* toDataCue(const TextTrackCue*);
    6250
    6351} // namespace WebCore
  • trunk/Source/WebCore/html/track/InbandGenericTextTrack.h

    r165676 r167025  
    7373    virtual void removeCue(TextTrackCue*, ExceptionCode&) override;
    7474
    75     virtual void parseWebVTTCueData(InbandTextTrackPrivate*, const char*, unsigned) override { ASSERT_NOT_REACHED(); }
    76 
    7775    PassRefPtr<TextTrackCueGeneric> createCue(PassRefPtr<GenericCueData>);
    7876    void updateCueFromCueData(TextTrackCueGeneric*, GenericCueData*);
  • trunk/Source/WebCore/html/track/InbandTextTrack.cpp

    r165676 r167025  
    3434#include "ExceptionCodePlaceholder.h"
    3535#include "HTMLMediaElement.h"
     36#include "InbandDataTextTrack.h"
    3637#include "InbandGenericTextTrack.h"
    3738#include "InbandTextTrackPrivate.h"
     
    4849{
    4950    switch (trackPrivate->cueFormat()) {
     51    case InbandTextTrackPrivate::Data:
     52        return InbandDataTextTrack::create(context, client, trackPrivate);
    5053    case InbandTextTrackPrivate::Generic:
    5154        return InbandGenericTextTrack::create(context, client, trackPrivate);
     
    155158}
    156159
     160AtomicString InbandTextTrack::inBandMetadataTrackDispatchType() const
     161{
     162    ASSERT(m_private);
     163    return m_private->inBandMetadataTrackDispatchType();
     164}
     165
    157166void InbandTextTrack::idChanged(TrackPrivateBase* trackPrivate, const AtomicString& id)
    158167{
  • trunk/Source/WebCore/html/track/InbandTextTrack.h

    r165676 r167025  
    4949    size_t inbandTrackIndex();
    5050
     51    virtual AtomicString inBandMetadataTrackDispatchType() const;
     52
    5153protected:
    5254    InbandTextTrack(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>);
     
    6163    virtual void willRemove(TrackPrivateBase*) override;
    6264
     65    virtual void addDataCue(InbandTextTrackPrivate*, double, double, const void*, unsigned) override { ASSERT_NOT_REACHED(); }
     66
     67    virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) override { ASSERT_NOT_REACHED(); }
     68    virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
     69    virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
     70
     71    virtual void parseWebVTTCueData(InbandTextTrackPrivate*, const char*, unsigned) override { ASSERT_NOT_REACHED(); }
     72
    6373#if USE(PLATFORM_TEXT_TRACK_MENU)
    6474    virtual InbandTextTrackPrivate* privateTrack() override { return m_private.get(); }
  • trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.h

    r165676 r167025  
    5252    virtual void fileFailedToParse() override;
    5353
    54     virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) override { ASSERT_NOT_REACHED(); }
    55     virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
    56     virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
    57 
    5854    std::unique_ptr<WebVTTParser> m_webVTTParser;
    5955};
  • trunk/Source/WebCore/html/track/TextTrack.h

    r166022 r167025  
    9595    virtual void setKind(const AtomicString&) override;
    9696
     97    virtual AtomicString inBandMetadataTrackDispatchType() const { return emptyString(); }
     98
    9799    AtomicString mode() const { return m_mode; }
    98100    virtual void setMode(const AtomicString&);
  • trunk/Source/WebCore/html/track/TextTrack.idl

    r166180 r167025  
    3838    readonly attribute DOMString label;
    3939    [CustomSetter] attribute DOMString language;
     40    readonly attribute DOMString inBandMetadataTrackDispatchType;
    4041
    4142    attribute TextTrackMode mode;
  • trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivate.h

    r165676 r167025  
    3636public:
    3737    enum CueFormat {
     38        Data,
    3839        Generic,
    3940        WebVTT
     
    7273    virtual AtomicString language() const { return emptyAtom; }
    7374    virtual AtomicString id() const { return emptyAtom; }
     75    virtual AtomicString inBandMetadataTrackDispatchType() const { return emptyAtom; }
    7476
    7577    virtual int textTrackIndex() const { return 0; }
  • trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h

    r165676 r167025  
    135135    virtual ~InbandTextTrackPrivateClient() { }
    136136
     137    virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, const void*, unsigned) = 0;
     138
    137139    virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) = 0;
    138140    virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
  • trunk/Source/WebCore/platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h

    r162139 r167025  
    3636class InbandMetadataTextTrackPrivateGStreamer : public InbandTextTrackPrivate {
    3737public:
    38     static PassRefPtr<InbandMetadataTextTrackPrivateGStreamer> create(Kind kind)
     38    static PassRefPtr<InbandMetadataTextTrackPrivateGStreamer> create(Kind kind, CueFormat cueFormat, const AtomicString& id = emptyAtom)
    3939    {
    40         return adoptRef(new InbandMetadataTextTrackPrivateGStreamer(kind));
     40        return adoptRef(new InbandMetadataTextTrackPrivateGStreamer(kind, cueFormat, id));
    4141    }
    4242
     
    4444
    4545    virtual Kind kind() const override { return m_kind; }
     46    virtual AtomicString id() const override { return m_id; }
     47    virtual AtomicString inBandMetadataTrackDispatchType() const override { return m_inBandMetadataTrackDispatchType; }
     48    void setInBandMetadataTrackDispatchType(const AtomicString& value) { m_inBandMetadataTrackDispatchType = value; }
     49
     50    void addDataCue(double start, double end, const void* data, unsigned length)
     51    {
     52        ASSERT(cueFormat() == Data);
     53        client()->addDataCue(this, start, end, data, length);
     54    }
     55
     56    void addGenericCue(PassRefPtr<GenericCueData> data)
     57    {
     58        ASSERT(cueFormat() == Generic);
     59        client()->addGenericCue(this, data);
     60    }
    4661
    4762private:
    48     InbandMetadataTextTrackPrivateGStreamer(Kind kind)
    49         : InbandTextTrackPrivate(Generic)
     63    InbandMetadataTextTrackPrivateGStreamer(Kind kind, CueFormat cueFormat, const AtomicString& id)
     64        : InbandTextTrackPrivate(cueFormat)
    5065        , m_kind(kind)
     66        , m_id(id)
    5167    {
    5268
     
    5470
    5571    Kind m_kind;
     72    AtomicString m_id;
     73    AtomicString m_inBandMetadataTrackDispatchType;
    5674};
    5775
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r166643 r167025  
    55 * Copyright (C) 2009 Gustavo Noronha Silva <gns@gnome.org>
    66 * Copyright (C) 2009, 2010, 2011, 2012, 2013 Igalia S.L
     7 * Copyright (C) 2014 Cable Television Laboratories, Inc.
    78 *
    89 * This library is free software; you can redistribute it and/or
     
    3839#include <gst/pbutils/missing-plugins.h>
    3940#include <limits>
     41#include <wtf/HexNumber.h>
    4042#include <wtf/gobject/GUniquePtr.h>
    4143#include <wtf/text/CString.h>
     
    5052#endif
    5153
     54#if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
     55#define GST_USE_UNSTABLE_API
     56#include <gst/mpegts/mpegts.h>
     57#undef GST_USE_UNSTABLE_API
     58#endif
    5259#include <gst/audio/streamvolume.h>
    5360
     
    972979            g_free(detail);
    973980        }
     981#if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
     982        else {
     983            GstMpegTsSection* section = gst_message_parse_mpegts_section(message);
     984            if (section) {
     985                processMpegTsSection(section);
     986                gst_mpegts_section_unref(section);
     987            }
     988        }
     989#endif
    974990        break;
    975991#if ENABLE(VIDEO_TRACK)
     
    10061022}
    10071023
     1024#if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
     1025void MediaPlayerPrivateGStreamer::processMpegTsSection(GstMpegTsSection* section)
     1026{
     1027    ASSERT(section);
     1028
     1029    if (section->section_type == GST_MPEGTS_SECTION_PMT) {
     1030        const GstMpegTsPMT* pmt = gst_mpegts_section_get_pmt(section);
     1031        m_metadataTracks.clear();
     1032        for (guint i = 0; i < pmt->streams->len; ++i) {
     1033            const GstMpegTsPMTStream* stream = static_cast<const GstMpegTsPMTStream*>(g_ptr_array_index(pmt->streams, i));
     1034            if (stream->stream_type == 0x05 || stream->stream_type >= 0x80) {
     1035                AtomicString pid = String::number(stream->pid);
     1036                RefPtr<InbandMetadataTextTrackPrivateGStreamer> track = InbandMetadataTextTrackPrivateGStreamer::create(
     1037                    InbandTextTrackPrivate::Metadata, InbandTextTrackPrivate::Data, pid);
     1038
     1039                // 4.7.10.12.2 Sourcing in-band text tracks
     1040                // If the new text track's kind is metadata, then set the text track in-band metadata track dispatch
     1041                // type as follows, based on the type of the media resource:
     1042                // Let stream type be the value of the "stream_type" field describing the text track's type in the
     1043                // file's program map section, interpreted as an 8-bit unsigned integer. Let length be the value of
     1044                // the "ES_info_length" field for the track in the same part of the program map section, interpreted
     1045                // as an integer as defined by the MPEG-2 specification. Let descriptor bytes be the length bytes
     1046                // following the "ES_info_length" field. The text track in-band metadata track dispatch type must be
     1047                // set to the concatenation of the stream type byte and the zero or more descriptor bytes bytes,
     1048                // expressed in hexadecimal using uppercase ASCII hex digits.
     1049                String inbandMetadataTrackDispatchType;
     1050                appendUnsignedAsHexFixedSize(stream->stream_type, inbandMetadataTrackDispatchType, 2);
     1051                for (guint j = 0; j < stream->descriptors->len; ++j) {
     1052                    const GstMpegTsDescriptor* descriptor = static_cast<const GstMpegTsDescriptor*>(g_ptr_array_index(stream->descriptors, j));
     1053                    for (guint k = 0; k < descriptor->length; ++k)
     1054                        appendByteAsHex(descriptor->data[k], inbandMetadataTrackDispatchType);
     1055                }
     1056                track->setInBandMetadataTrackDispatchType(inbandMetadataTrackDispatchType);
     1057
     1058                m_metadataTracks.add(pid, track);
     1059                m_player->addTextTrack(track);
     1060            }
     1061        }
     1062    } else {
     1063        AtomicString pid = String::number(section->pid);
     1064        RefPtr<InbandMetadataTextTrackPrivateGStreamer> track = m_metadataTracks.get(pid);
     1065        if (!track)
     1066            return;
     1067
     1068        GRefPtr<GBytes> data = gst_mpegts_section_get_data(section);
     1069        gsize size;
     1070        const void* bytes = g_bytes_get_data(data.get(), &size);
     1071
     1072        track->addDataCue(currentTimeDouble(), currentTimeDouble(), bytes, size);
     1073    }
     1074}
     1075#endif
     1076
    10081077#if ENABLE(VIDEO_TRACK)
    10091078void MediaPlayerPrivateGStreamer::processTableOfContents(GstMessage* message)
     
    10121081        m_player->removeTextTrack(m_chaptersTrack);
    10131082
    1014     m_chaptersTrack = InbandMetadataTextTrackPrivateGStreamer::create(InbandTextTrackPrivate::Chapters);
     1083    m_chaptersTrack = InbandMetadataTextTrackPrivateGStreamer::create(InbandTextTrackPrivate::Chapters, InbandTextTrackPrivate::Generic);
    10151084    m_player->addTextTrack(m_chaptersTrack);
    10161085
     
    10481117    }
    10491118
    1050     m_chaptersTrack->client()->addGenericCue(m_chaptersTrack.get(), cue.release());
     1119    m_chaptersTrack->addGenericCue(cue.release());
    10511120
    10521121    for (GList* i = gst_toc_entry_get_sub_entries(entry); i; i = i->next)
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r166496 r167025  
    44 * Copyright (C) 2007 Alp Toker <alp@atoker.com>
    55 * Copyright (C) 2009, 2010 Igalia S.L
     6 * Copyright (C) 2014 Cable Television Laboratories, Inc.
    67 *
    78 * This library is free software; you can redistribute it and/or
     
    4243typedef struct _GstMessage GstMessage;
    4344typedef struct _GstElement GstElement;
     45typedef struct _GstMpegTsSection GstMpegTsSection;
    4446
    4547namespace WebCore {
    4648
    4749class AudioTrackPrivateGStreamer;
     50class InbandMetadataTextTrackPrivateGStreamer;
    4851class InbandTextTrackPrivateGStreamer;
    4952class VideoTrackPrivateGStreamer;
     
    144147    void setDownloadBuffering();
    145148    void processBufferingStats(GstMessage*);
     149#if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
     150    void processMpegTsSection(GstMpegTsSection*);
     151#endif
    146152#if ENABLE(VIDEO_TRACK)
    147153    void processTableOfContents(GstMessage*);
     
    206212    Vector<RefPtr<InbandTextTrackPrivateGStreamer>> m_textTracks;
    207213    Vector<RefPtr<VideoTrackPrivateGStreamer>> m_videoTracks;
    208     RefPtr<InbandTextTrackPrivate> m_chaptersTrack;
     214    RefPtr<InbandMetadataTextTrackPrivateGStreamer> m_chaptersTrack;
     215#endif
     216#if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
     217    HashMap<AtomicString, RefPtr<InbandMetadataTextTrackPrivateGStreamer>> m_metadataTracks;
    209218#endif
    210219#if ENABLE(MEDIA_SOURCE)
  • trunk/Source/cmake/FindGStreamer.cmake

    r165763 r167025  
    2020#  gstreamer-audio:      GSTREAMER_AUDIO_INCLUDE_DIRS and GSTREAMER_AUDIO_LIBRARIES
    2121#  gstreamer-fft:        GSTREAMER_FFT_INCLUDE_DIRS and GSTREAMER_FFT_LIBRARIES
     22#  gstreamer-mpegts:     GSTREAMER_MPEGTS_INCLUDE_DIRS and GSTREAMER_MPEGTS_LIBRARIES
    2223#  gstreamer-pbutils:    GSTREAMER_PBUTILS_INCLUDE_DIRS and GSTREAMER_PBUTILS_LIBRARIES
    2324#  gstreamer-tag:        GSTREAMER_TAG_INCLUDE_DIRS and GSTREAMER_TAG_LIBRARIES
     
    106107FIND_GSTREAMER_COMPONENT(GSTREAMER_AUDIO gstreamer-audio-1.0 gst/audio/audio.h gstaudio-1.0)
    107108FIND_GSTREAMER_COMPONENT(GSTREAMER_FFT gstreamer-fft-1.0 gst/fft/gstfft.h gstfft-1.0)
     109FIND_GSTREAMER_COMPONENT(GSTREAMER_MPEGTS gstreamer-mpegts-1.0>=1.3.0 gst/mpegts/mpegts.h gstmpegts-1.0)
    108110FIND_GSTREAMER_COMPONENT(GSTREAMER_PBUTILS gstreamer-pbutils-1.0 gst/pbutils/pbutils.h gstpbutils-1.0)
    109111FIND_GSTREAMER_COMPONENT(GSTREAMER_TAG gstreamer-tag-1.0 gst/tag/tag.h gsttag-1.0)
     
    137139    GSTREAMER_INCLUDE_DIRS
    138140    GSTREAMER_LIBRARIES
     141    GSTREAMER_MPEGTS_INCLUDE_DIRS
     142    GSTREAMER_MPEGTS_LIBRARIES
    139143    GSTREAMER_PBUTILS_INCLUDE_DIRS
    140144    GSTREAMER_PBUTILS_LIBRARIES
  • trunk/Source/cmake/OptionsEfl.cmake

    r166872 r167025  
    177177
    178178if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
    179     set(GSTREAMER_COMPONENTS app pbutils)
     179    set(GSTREAMER_COMPONENTS app mpegts pbutils)
    180180    set(WTF_USE_GSTREAMER 1)
    181181    add_definitions(-DWTF_USE_GSTREAMER=1)
     
    191191
    192192    find_package(GStreamer 1.0.5 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
     193
     194    if (PC_GSTREAMER_MPEGTS_FOUND)
     195        add_definitions(-DWTF_USE_GSTREAMER_MPEGTS)
     196        set(USE_GSTREAMER_MPEGTS TRUE)
     197    endif ()
    193198endif ()
    194199
  • trunk/Source/cmake/OptionsGTK.cmake

    r166979 r167025  
    138138    add_definitions(-DWTF_USE_GSTREAMER)
    139139    if (ENABLE_VIDEO)
    140         list(APPEND GSTREAMER_COMPONENTS video tag)
     140        list(APPEND GSTREAMER_COMPONENTS video mpegts tag)
    141141    endif ()
    142142
     
    147147
    148148    find_package(GStreamer 1.0.3 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
     149
     150    if (PC_GSTREAMER_MPEGTS_FOUND)
     151        add_definitions(-DWTF_USE_GSTREAMER_MPEGTS)
     152        set(USE_GSTREAMER_MPEGTS TRUE)
     153    endif ()
    149154endif ()
    150155
Note: See TracChangeset for help on using the changeset viewer.