diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /dom/media/hls/HLSDecoder.h | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/hls/HLSDecoder.h')
-rw-r--r-- | dom/media/hls/HLSDecoder.h | 79 |
1 files changed, 79 insertions, 0 deletions
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<HLSDecoder> 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<nsIPrincipal> 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<nsIPrincipal> GetContentPrincipal(nsCString aMediaUrl); + + static size_t sAllocatedInstances; // Access only in the main thread. + + nsCOMPtr<nsIChannel> mChannel; + nsCOMPtr<nsIURI> mURI; + java::GeckoHLSResourceWrapper::GlobalRef mHLSResourceWrapper; + java::GeckoHLSResourceWrapper::Callbacks::GlobalRef mJavaCallbacks; + RefPtr<HLSResourceCallbacksSupport> mCallbackSupport; + nsCOMPtr<nsIPrincipal> mContentPrincipal; +}; + +} // namespace mozilla + +#endif /* HLSDecoder_h_ */ |