From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/media/mediasource/MediaSourceDecoder.h | 96 ++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 dom/media/mediasource/MediaSourceDecoder.h (limited to 'dom/media/mediasource/MediaSourceDecoder.h') diff --git a/dom/media/mediasource/MediaSourceDecoder.h b/dom/media/mediasource/MediaSourceDecoder.h new file mode 100644 index 000000000..2bf0ad831 --- /dev/null +++ b/dom/media/mediasource/MediaSourceDecoder.h @@ -0,0 +1,96 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef MOZILLA_MEDIASOURCEDECODER_H_ +#define MOZILLA_MEDIASOURCEDECODER_H_ + +#include "mozilla/Atomics.h" +#include "mozilla/Attributes.h" +#include "nsCOMPtr.h" +#include "nsError.h" +#include "MediaDecoder.h" +#include "MediaFormatReader.h" + +class nsIStreamListener; + +namespace mozilla { + +class MediaResource; +class MediaDecoderStateMachine; +class SourceBufferDecoder; +class TrackBuffer; +enum MSRangeRemovalAction : uint8_t; +class MediaSourceDemuxer; + +namespace dom { + +class HTMLMediaElement; +class MediaSource; + +} // namespace dom + +class MediaSourceDecoder : public MediaDecoder +{ +public: + explicit MediaSourceDecoder(dom::HTMLMediaElement* aElement); + + MediaDecoder* Clone(MediaDecoderOwner* aOwner) override; + MediaDecoderStateMachine* CreateStateMachine() override; + nsresult Load(nsIStreamListener**) override; + media::TimeIntervals GetSeekable() override; + media::TimeIntervals GetBuffered() override; + + void Shutdown() override; + + static already_AddRefed CreateResource(nsIPrincipal* aPrincipal = nullptr); + + void AttachMediaSource(dom::MediaSource* aMediaSource); + void DetachMediaSource(); + + void Ended(bool aEnded); + + // Return the duration of the video in seconds. + double GetDuration() override; + + void SetInitialDuration(int64_t aDuration); + void SetMediaSourceDuration(double aDuration); + + MediaSourceDemuxer* GetDemuxer() + { + return mDemuxer; + } + + // Returns a string describing the state of the MediaSource internal + // buffered data. Used for debugging purposes. + void GetMozDebugReaderData(nsAString& aString) override; + + void AddSizeOfResources(ResourceSizes* aSizes) override; + + MediaDecoderOwner::NextFrameStatus NextFrameBufferedStatus() override; + bool CanPlayThrough() override; + + void NotifyWaitingForKey() override; + + MediaEventSource* WaitingForKeyEvent() override; + +private: + void DoSetMediaSourceDuration(double aDuration); + media::TimeInterval ClampIntervalToEnd(const media::TimeInterval& aInterval); + + // The owning MediaSource holds a strong reference to this decoder, and + // calls Attach/DetachMediaSource on this decoder to set and clear + // mMediaSource. + dom::MediaSource* mMediaSource; + RefPtr mDemuxer; + RefPtr mReader; + MediaEventProducer mWaitingForKeyEvent; + + bool mEnded; +}; + +} // namespace mozilla + +#endif /* MOZILLA_MEDIASOURCEDECODER_H_ */ -- cgit v1.2.3