Changeset 207880 in webkit


Ignore:
Timestamp:
Oct 26, 2016, 1:41:16 AM (9 years ago)
Author:
eocanha@igalia.com
Message:

[GStreamer][MSE] MediaSourceGStreamer refactoring
https://bugs.webkit.org/show_bug.cgi?id=162899

Reviewed by Žan Doberšek.

Move MediaSourceGStreamer to the mse directory, manage SourceBufferPrivates and delegate WebKitMediaSrc operations to the MSE private player.

  • platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.cpp.

(WebCore::MediaSourceGStreamer::open):
(WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
(WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
(WebCore::MediaSourceGStreamer::addSourceBuffer):
(WebCore::MediaSourceGStreamer::removeSourceBuffer):
(WebCore::MediaSourceGStreamer::durationChanged):
(WebCore::MediaSourceGStreamer::markEndOfStream):
(WebCore::MediaSourceGStreamer::unmarkEndOfStream):
(WebCore::MediaSourceGStreamer::readyState):
(WebCore::MediaSourceGStreamer::setReadyState):
(WebCore::MediaSourceGStreamer::waitForSeekCompleted):
(WebCore::MediaSourceGStreamer::seekCompleted):
(WebCore::MediaSourceGStreamer::sourceBufferPrivateDidChangeActiveState):
(WebCore::MediaSourceGStreamer::buffered):

  • platform/graphics/gstreamer/mse/MediaSourceGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.h.
Location:
trunk/Source/WebCore
Files:
1 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207879 r207880  
     12016-10-26  Enrique Ocaña González  <eocanha@igalia.com>
     2
     3        [GStreamer][MSE] MediaSourceGStreamer refactoring
     4        https://bugs.webkit.org/show_bug.cgi?id=162899
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Move MediaSourceGStreamer to the mse directory, manage SourceBufferPrivates and delegate WebKitMediaSrc operations to the MSE private player.
     9
     10        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.cpp.
     11        (WebCore::MediaSourceGStreamer::open):
     12        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
     13        (WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
     14        (WebCore::MediaSourceGStreamer::addSourceBuffer):
     15        (WebCore::MediaSourceGStreamer::removeSourceBuffer):
     16        (WebCore::MediaSourceGStreamer::durationChanged):
     17        (WebCore::MediaSourceGStreamer::markEndOfStream):
     18        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
     19        (WebCore::MediaSourceGStreamer::readyState):
     20        (WebCore::MediaSourceGStreamer::setReadyState):
     21        (WebCore::MediaSourceGStreamer::waitForSeekCompleted):
     22        (WebCore::MediaSourceGStreamer::seekCompleted):
     23        (WebCore::MediaSourceGStreamer::sourceBufferPrivateDidChangeActiveState):
     24        (WebCore::MediaSourceGStreamer::buffered):
     25        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.h.
     26
    1272016-10-26  Enrique Ocaña González  <eocanha@igalia.com>
    228
  • trunk/Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp

    r207879 r207880  
    33 * Copyright (C) 2013 Orange
    44 * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
     5 * Copyright (C) 2015, 2016 Metrological Group B.V.
     6 * Copyright (C) 2015, 2016 Igalia, S.L
    57 *
    68 * Redistribution and use in source and binary forms, with or without
     
    3638#if ENABLE(MEDIA_SOURCE) && USE(GSTREAMER)
    3739
     40#include "ContentType.h"
     41#include "MediaPlayerPrivateGStreamer.h"
     42#include "MediaPlayerPrivateGStreamerMSE.h"
     43#include "MediaSourceClientGStreamerMSE.h"
    3844#include "NotImplemented.h"
    3945#include "SourceBufferPrivateGStreamer.h"
     46#include "TimeRanges.h"
    4047#include "WebKitMediaSourceGStreamer.h"
    41 
     48#include <wtf/PassRefPtr.h>
    4249#include <wtf/glib/GRefPtr.h>
    4350
    4451namespace WebCore {
    4552
    46 void MediaSourceGStreamer::open(MediaSourcePrivateClient* mediaSource, WebKitMediaSrc* src)
     53void MediaSourceGStreamer::open(MediaSourcePrivateClient& mediaSource, MediaPlayerPrivateGStreamerMSE& playerPrivate)
    4754{
    48     ASSERT(mediaSource);
    49     mediaSource->setPrivateAndOpen(adoptRef(*new MediaSourceGStreamer(mediaSource, src)));
     55    mediaSource.setPrivateAndOpen(adoptRef(*new MediaSourceGStreamer(mediaSource, playerPrivate)));
    5056}
    5157
    52 MediaSourceGStreamer::MediaSourceGStreamer(MediaSourcePrivateClient* mediaSource, WebKitMediaSrc* src)
    53     : m_client(adoptRef(new MediaSourceClientGStreamer(src)))
     58MediaSourceGStreamer::MediaSourceGStreamer(MediaSourcePrivateClient& mediaSource, MediaPlayerPrivateGStreamerMSE& playerPrivate)
     59    : MediaSourcePrivate()
     60    , m_client(MediaSourceClientGStreamerMSE::create(playerPrivate))
    5461    , m_mediaSource(mediaSource)
    55     , m_readyState(MediaPlayer::HaveNothing)
     62    , m_playerPrivate(playerPrivate)
    5663{
    57     ASSERT(m_client);
    5864}
    5965
    6066MediaSourceGStreamer::~MediaSourceGStreamer()
    6167{
     68    for (auto& sourceBufferPrivate : m_sourceBuffers)
     69        sourceBufferPrivate->clearMediaSource();
    6270}
    6371
    6472MediaSourceGStreamer::AddStatus MediaSourceGStreamer::addSourceBuffer(const ContentType& contentType, RefPtr<SourceBufferPrivate>& sourceBufferPrivate)
    6573{
    66     RefPtr<SourceBufferPrivateGStreamer> sourceBufferPrivateGStreamer = SourceBufferPrivateGStreamer::create(*m_client, contentType);
    67     sourceBufferPrivate = sourceBufferPrivateGStreamer;
     74    sourceBufferPrivate = SourceBufferPrivateGStreamer::create(this, m_client.get(), contentType);
     75    RefPtr<SourceBufferPrivateGStreamer> sourceBufferPrivateGStreamer = static_cast<SourceBufferPrivateGStreamer*>(sourceBufferPrivate.get());
     76    m_sourceBuffers.add(sourceBufferPrivateGStreamer);
    6877    return m_client->addSourceBuffer(sourceBufferPrivateGStreamer, contentType);
     78}
     79
     80void MediaSourceGStreamer::removeSourceBuffer(SourceBufferPrivate* sourceBufferPrivate)
     81{
     82    RefPtr<SourceBufferPrivateGStreamer> sourceBufferPrivateGStreamer = static_cast<SourceBufferPrivateGStreamer*>(sourceBufferPrivate);
     83    ASSERT(m_sourceBuffers.contains(sourceBufferPrivateGStreamer));
     84
     85    sourceBufferPrivateGStreamer->clearMediaSource();
     86    m_sourceBuffers.remove(sourceBufferPrivateGStreamer);
     87    m_activeSourceBuffers.remove(sourceBufferPrivateGStreamer.get());
    6988}
    7089
     
    86105MediaPlayer::ReadyState MediaSourceGStreamer::readyState() const
    87106{
    88     return m_readyState;
     107    return m_playerPrivate.readyState();
    89108}
    90109
    91110void MediaSourceGStreamer::setReadyState(MediaPlayer::ReadyState state)
    92111{
    93     m_readyState = state;
     112    m_playerPrivate.setReadyState(state);
    94113}
    95114
    96115void MediaSourceGStreamer::waitForSeekCompleted()
    97116{
    98     notImplemented();
     117    m_playerPrivate.waitForSeekCompleted();
    99118}
    100119
    101120void MediaSourceGStreamer::seekCompleted()
    102121{
    103     notImplemented();
     122    m_playerPrivate.seekCompleted();
     123}
     124
     125void MediaSourceGStreamer::sourceBufferPrivateDidChangeActiveState(SourceBufferPrivateGStreamer* sourceBufferPrivate, bool isActive)
     126{
     127    if (!isActive)
     128        m_activeSourceBuffers.remove(sourceBufferPrivate);
     129    else if (!m_activeSourceBuffers.contains(sourceBufferPrivate))
     130        m_activeSourceBuffers.add(sourceBufferPrivate);
     131}
     132
     133std::unique_ptr<PlatformTimeRanges> MediaSourceGStreamer::buffered()
     134{
     135    return m_mediaSource->buffered();
    104136}
    105137
  • trunk/Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceGStreamer.h

    r207879 r207880  
    33 * Copyright (C) 2013 Orange
    44 * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
     5 * Copyright (C) 2015, 2016 Metrological Group B.V.
     6 * Copyright (C) 2015, 2016 Igalia, S.L
    57 *
    68 * Redistribution and use in source and binary forms, with or without
     
    3133 */
    3234
    33 #ifndef MediaSourceGStreamer_h
    34 #define MediaSourceGStreamer_h
     35#pragma once
    3536
    3637#if ENABLE(MEDIA_SOURCE) && USE(GSTREAMER)
    37 #include "MediaSource.h"
    38 #include "WebKitMediaSourceGStreamer.h"
     38#include "MediaSourcePrivate.h"
     39
     40#include <wtf/Forward.h>
     41#include <wtf/HashSet.h>
     42
     43typedef struct _WebKitMediaSrc WebKitMediaSrc;
    3944
    4045namespace WebCore {
     46
     47class SourceBufferPrivateGStreamer;
     48class MediaSourceClientGStreamerMSE;
     49class MediaPlayerPrivateGStreamerMSE;
     50class PlatformTimeRanges;
    4151
    4252// FIXME: Should this be called MediaSourcePrivateGStreamer?
    4353class MediaSourceGStreamer final : public MediaSourcePrivate {
    4454public:
    45     static void open(MediaSourcePrivateClient*, WebKitMediaSrc*);
     55    static void open(MediaSourcePrivateClient&, MediaPlayerPrivateGStreamerMSE&);
    4656    virtual ~MediaSourceGStreamer();
    4757
    48     virtual AddStatus addSourceBuffer(const ContentType&, RefPtr<SourceBufferPrivate>&);
    49     virtual void durationChanged();
    50     virtual void markEndOfStream(EndOfStreamStatus);
    51     virtual void unmarkEndOfStream();
     58    MediaSourceClientGStreamerMSE& client() { return m_client.get(); }
     59    AddStatus addSourceBuffer(const ContentType&, RefPtr<SourceBufferPrivate>&) override;
     60    void removeSourceBuffer(SourceBufferPrivate*);
    5261
    53     virtual MediaPlayer::ReadyState readyState() const;
    54     virtual void setReadyState(MediaPlayer::ReadyState);
     62    void durationChanged() override;
     63    void markEndOfStream(EndOfStreamStatus) override;
     64    void unmarkEndOfStream() override;
    5565
    56     virtual void waitForSeekCompleted();
    57     virtual void seekCompleted();
     66    MediaPlayer::ReadyState readyState() const override;
     67    void setReadyState(MediaPlayer::ReadyState) override;
     68
     69    void waitForSeekCompleted() override;
     70    void seekCompleted() override;
     71
     72    void sourceBufferPrivateDidChangeActiveState(SourceBufferPrivateGStreamer*, bool);
     73
     74    std::unique_ptr<PlatformTimeRanges> buffered();
    5875
    5976private:
    60     MediaSourceGStreamer(MediaSourcePrivateClient*, WebKitMediaSrc*);
     77    MediaSourceGStreamer(MediaSourcePrivateClient&, MediaPlayerPrivateGStreamerMSE&);
    6178
    62     RefPtr<MediaSourceClientGStreamer> m_client;
    63     MediaSourcePrivateClient* m_mediaSource;
    64     MediaPlayer::ReadyState m_readyState;
     79    HashSet<RefPtr<SourceBufferPrivateGStreamer>> m_sourceBuffers;
     80    HashSet<SourceBufferPrivateGStreamer*> m_activeSourceBuffers;
     81    Ref<MediaSourceClientGStreamerMSE> m_client;
     82    Ref<MediaSourcePrivateClient> m_mediaSource;
     83    MediaPlayerPrivateGStreamerMSE& m_playerPrivate;
    6584};
    6685
     
    6887
    6988#endif
    70 #endif
Note: See TracChangeset for help on using the changeset viewer.