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/DecoderTraits.h | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 dom/media/DecoderTraits.h (limited to 'dom/media/DecoderTraits.h') diff --git a/dom/media/DecoderTraits.h b/dom/media/DecoderTraits.h new file mode 100644 index 0000000000..291d3c1192 --- /dev/null +++ b/dom/media/DecoderTraits.h @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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 DecoderTraits_h_ +#define DecoderTraits_h_ + +#include "mozilla/UniquePtr.h" +#include "nsStringFwd.h" +#include "nsTArray.h" + +namespace mozilla { + +class DecoderDoctorDiagnostics; +class MediaContainerType; +class MediaDataDemuxer; +struct MediaFormatReaderInit; +class MediaFormatReader; +class MediaResource; +class TrackInfo; + +enum CanPlayStatus { CANPLAY_NO, CANPLAY_MAYBE, CANPLAY_YES }; + +class DecoderTraits { + public: + // Returns the CanPlayStatus indicating if we can handle this container type. + static CanPlayStatus CanHandleContainerType( + const MediaContainerType& aContainerType, + DecoderDoctorDiagnostics* aDiagnostics); + + // Returns true if we should handle this MIME type when it appears + // as an or as a toplevel page. If, in practice, our support + // for the type is more limited than appears in the wild, we should return + // false here even if CanHandleMediaType would return true. + static bool ShouldHandleMediaType(const char* aMIMEType, + DecoderDoctorDiagnostics* aDiagnostics); + + // Create a demuxer for the given MIME type aType. Returns null if we + // were unable to create the demuxer. + static already_AddRefed CreateDemuxer( + const MediaContainerType& aType, MediaResource* aResource); + + // Create a reader for thew given MIME type aType. Returns null + // if we were unable to create the reader. + static MediaFormatReader* CreateReader(const MediaContainerType& aType, + MediaFormatReaderInit& aInit); + + // Returns true if MIME type aType is supported in video documents, + // or false otherwise. Not all platforms support all MIME types, and + // vice versa. + static bool IsSupportedInVideoDocument(const nsACString& aType); + + // Convenience function that returns false if MOZ_FMP4 is not defined, + // otherwise defers to MP4Decoder::IsSupportedType(). + static bool IsMP4SupportedType(const MediaContainerType& aType, + DecoderDoctorDiagnostics* aDiagnostics); + + // Returns true if aType is MIME type of hls. + static bool IsHttpLiveStreamingType(const MediaContainerType& aType); + + // Returns true if aType is matroska type. + static bool IsMatroskaType(const MediaContainerType& aType); + + // Returns an array of all TrackInfo objects described by this type. + static nsTArray> GetTracksInfo( + const MediaContainerType& aType); +}; + +} // namespace mozilla + +#endif -- cgit v1.2.3