From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/hls/HLSDecoder.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 dom/media/hls/HLSDecoder.h (limited to 'dom/media/hls/HLSDecoder.h') diff --git a/dom/media/hls/HLSDecoder.h b/dom/media/hls/HLSDecoder.h new file mode 100644 index 0000000000..0f65457765 --- /dev/null +++ b/dom/media/hls/HLSDecoder.h @@ -0,0 +1,79 @@ +/* -*- 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 HLSDecoder_h_ +#define HLSDecoder_h_ + +#include "MediaDecoder.h" +#include "mozilla/java/GeckoHLSResourceWrapperWrappers.h" + +namespace mozilla { + +class HLSResourceCallbacksSupport; + +class HLSDecoder final : public MediaDecoder { + public: + static RefPtr Create(MediaDecoderInit& aInit); + + // Returns true if the HLS backend is pref'ed on. + static bool IsEnabled(); + + // Returns true if aContainerType is an HLS type that we think we can render + // with the a platform decoder backend. + // If provided, codecs are checked for support. + static bool IsSupportedType(const MediaContainerType& aContainerType); + + nsresult Load(nsIChannel* aChannel); + + // MediaDecoder interface. + void Play() override; + + void Pause() override; + + void AddSizeOfResources(ResourceSizes* aSizes) override; + already_AddRefed GetCurrentPrincipal() override; + bool HadCrossOriginRedirects() override; + bool IsTransportSeekable() override { return true; } + void Suspend() override; + void Resume() override; + void Shutdown() override; + + // Called as data arrives on the underlying HLS player. Main thread only. + void NotifyDataArrived(); + + // Called when Exoplayer start to load media. Main thread only. + void NotifyLoad(nsCString aMediaUrl); + + private: + friend class HLSResourceCallbacksSupport; + + explicit HLSDecoder(MediaDecoderInit& aInit); + ~HLSDecoder(); + MediaDecoderStateMachineBase* CreateStateMachine( + bool aDisableExternalEngine) override; + + bool CanPlayThroughImpl() final { + // TODO: We don't know how to estimate 'canplaythrough' for this decoder. + // For now we just return true for 'autoplay' can work. + return true; + } + + void UpdateCurrentPrincipal(nsCString aMediaUrl); + already_AddRefed GetContentPrincipal(nsCString aMediaUrl); + + static size_t sAllocatedInstances; // Access only in the main thread. + + nsCOMPtr mChannel; + nsCOMPtr mURI; + java::GeckoHLSResourceWrapper::GlobalRef mHLSResourceWrapper; + java::GeckoHLSResourceWrapper::Callbacks::GlobalRef mJavaCallbacks; + RefPtr mCallbackSupport; + nsCOMPtr mContentPrincipal; +}; + +} // namespace mozilla + +#endif /* HLSDecoder_h_ */ -- cgit v1.2.3