summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/mediasource/MediaSource.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/Modules/mediasource/MediaSource.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/Modules/mediasource/MediaSource.h')
-rw-r--r--Source/WebCore/Modules/mediasource/MediaSource.h134
1 files changed, 79 insertions, 55 deletions
diff --git a/Source/WebCore/Modules/mediasource/MediaSource.h b/Source/WebCore/Modules/mediasource/MediaSource.h
index 131b549d0..549319f12 100644
--- a/Source/WebCore/Modules/mediasource/MediaSource.h
+++ b/Source/WebCore/Modules/mediasource/MediaSource.h
@@ -28,99 +28,125 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef MediaSource_h
-#define MediaSource_h
+#pragma once
#if ENABLE(MEDIA_SOURCE)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
+#include "ExceptionOr.h"
#include "GenericEventQueue.h"
-#include "HTMLMediaSource.h"
-#include "MediaSourcePrivate.h"
-#include "ScriptWrappable.h"
-#include "SourceBuffer.h"
-#include "SourceBufferList.h"
+#include "MediaSourcePrivateClient.h"
#include "URLRegistry.h"
-#include <wtf/PassOwnPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/Vector.h>
namespace WebCore {
-class GenericEventQueue;
+class ContentType;
+class HTMLMediaElement;
+class SourceBuffer;
+class SourceBufferList;
+class SourceBufferPrivate;
+class TimeRanges;
-class MediaSource : public RefCounted<MediaSource>, public HTMLMediaSource, public ActiveDOMObject, public EventTargetWithInlineData, public ScriptWrappable {
+class MediaSource final : public MediaSourcePrivateClient, public ActiveDOMObject, public EventTargetWithInlineData, public URLRegistrable {
public:
- static const AtomicString& openKeyword();
- static const AtomicString& closedKeyword();
- static const AtomicString& endedKeyword();
+ static void setRegistry(URLRegistry*);
+ static MediaSource* lookup(const String& url) { return s_registry ? static_cast<MediaSource*>(s_registry->lookup(url)) : nullptr; }
- static PassRefPtr<MediaSource> create(ScriptExecutionContext&);
+ static Ref<MediaSource> create(ScriptExecutionContext&);
virtual ~MediaSource();
void addedToRegistry();
void removedFromRegistry();
void openIfInEndedState();
bool isOpen() const;
- void sourceBufferDidChangeAcitveState(SourceBuffer*, bool);
- void streamEndedWithError(const AtomicString& error, ExceptionCode&);
-
- // HTMLMediaSource
- virtual bool attachToElement(HTMLMediaElement*) override;
- virtual void setPrivateAndOpen(PassRef<MediaSourcePrivate>) override;
- virtual void close() override;
- virtual bool isClosed() const override;
- virtual double duration() const override;
- virtual PassRefPtr<TimeRanges> buffered() const override;
- virtual void refHTMLMediaSource() override { ref(); }
- virtual void derefHTMLMediaSource() override { deref(); }
- virtual void monitorSourceBuffers() override;
-
- void setDuration(double, ExceptionCode&);
+ bool isClosed() const;
+ bool isEnded() const;
+ void sourceBufferDidChangeActiveState(SourceBuffer&, bool);
+
+ enum class EndOfStreamError { Network, Decode };
+ void streamEndedWithError(std::optional<EndOfStreamError>);
+
+ MediaTime duration() const final;
+ void durationChanged(const MediaTime&) final;
+ std::unique_ptr<PlatformTimeRanges> buffered() const final;
+
+ bool attachToElement(HTMLMediaElement&);
+ void detachFromElement(HTMLMediaElement&);
+ void monitorSourceBuffers() override;
+ bool isSeeking() const { return m_pendingSeekTime.isValid(); }
+ Ref<TimeRanges> seekable();
+ ExceptionOr<void> setLiveSeekableRange(double start, double end);
+ ExceptionOr<void> clearLiveSeekableRange();
+
+ ExceptionOr<void> setDuration(double);
+ ExceptionOr<void> setDurationInternal(const MediaTime&);
+ MediaTime currentTime() const;
const AtomicString& readyState() const { return m_readyState; }
- void setReadyState(const AtomicString&);
- void endOfStream(const AtomicString& error, ExceptionCode&);
+ ExceptionOr<void> endOfStream(std::optional<EndOfStreamError>);
HTMLMediaElement* mediaElement() const { return m_mediaElement; }
- // MediaSource.idl methods
SourceBufferList* sourceBuffers() { return m_sourceBuffers.get(); }
SourceBufferList* activeSourceBuffers() { return m_activeSourceBuffers.get(); }
- SourceBuffer* addSourceBuffer(const String& type, ExceptionCode&);
- void removeSourceBuffer(SourceBuffer*, ExceptionCode&);
+ ExceptionOr<SourceBuffer&> addSourceBuffer(const String& type);
+ ExceptionOr<void> removeSourceBuffer(SourceBuffer&);
static bool isTypeSupported(const String& type);
- // ActiveDOMObject interface
- virtual bool hasPendingActivity() const override;
- virtual void stop() override;
+ ScriptExecutionContext* scriptExecutionContext() const final;
- // EventTarget interface
- virtual ScriptExecutionContext* scriptExecutionContext() const override final;
- virtual void refEventTarget() override final { ref(); }
- virtual void derefEventTarget() override final { deref(); }
- virtual EventTargetInterface eventTargetInterface() const override;
+ using RefCounted::ref;
+ using RefCounted::deref;
- // URLRegistrable interface
- virtual URLRegistry& registry() const override;
+ bool hasPendingActivity() const final;
- using RefCounted<MediaSource>::ref;
- using RefCounted<MediaSource>::deref;
+ static const MediaTime& currentTimeFudgeFactor();
-protected:
+private:
explicit MediaSource(ScriptExecutionContext&);
+ void stop() final;
+ bool canSuspendForDocumentSuspension() const final;
+ const char* activeDOMObjectName() const final;
+
+ void setPrivateAndOpen(Ref<MediaSourcePrivate>&&) final;
+ void seekToTime(const MediaTime&) final;
+
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
+ EventTargetInterface eventTargetInterface() const final;
+
+ URLRegistry& registry() const final;
+
+ static const AtomicString& openKeyword();
+ static const AtomicString& closedKeyword();
+ static const AtomicString& endedKeyword();
+ void setReadyState(const AtomicString&);
void onReadyStateChange(const AtomicString& oldState, const AtomicString& newState);
- Vector<RefPtr<TimeRanges>> activeRanges() const;
- RefPtr<SourceBufferPrivate> createSourceBufferPrivate(const ContentType&, ExceptionCode&);
+ Vector<PlatformTimeRanges> activeRanges() const;
+
+ ExceptionOr<Ref<SourceBufferPrivate>> createSourceBufferPrivate(const ContentType&);
void scheduleEvent(const AtomicString& eventName);
- GenericEventQueue& asyncEventQueue() { return m_asyncEventQueue; }
+
+ bool hasBufferedTime(const MediaTime&);
+ bool hasCurrentTime();
+ bool hasFutureTime();
+
+ void regenerateActiveSourceBuffers();
+
+ void completeSeek();
+
+ static URLRegistry* s_registry;
RefPtr<MediaSourcePrivate> m_private;
RefPtr<SourceBufferList> m_sourceBuffers;
RefPtr<SourceBufferList> m_activeSourceBuffers;
- HTMLMediaElement* m_mediaElement;
+ mutable std::unique_ptr<PlatformTimeRanges> m_buffered;
+ std::unique_ptr<PlatformTimeRanges> m_liveSeekable;
+ HTMLMediaElement* m_mediaElement { nullptr };
+ MediaTime m_duration;
+ MediaTime m_pendingSeekTime;
AtomicString m_readyState;
GenericEventQueue m_asyncEventQueue;
};
@@ -128,5 +154,3 @@ protected:
}
#endif
-
-#endif