Index: media/base/mime_util_internal.h |
diff --git a/media/base/mime_util_internal.h b/media/base/mime_util_internal.h |
index 5750ef775c07088cfbe67f42735f5e8d36ff08a6..cf7f44f9b038381943fab9d0755a213c97547222 100644 |
--- a/media/base/mime_util_internal.h |
+++ b/media/base/mime_util_internal.h |
@@ -11,6 +11,7 @@ |
#include "base/containers/hash_tables.h" |
#include "base/macros.h" |
+#include "media/base/media_export.h" |
#include "media/base/mime_util.h" |
namespace media { |
@@ -18,7 +19,7 @@ namespace internal { |
// Internal utility class for handling mime types. Should only be invoked by |
// tests and the functions within mime_util.cc -- NOT for direct use by others. |
-class MimeUtil { |
+class MEDIA_EXPORT MimeUtil { |
public: |
MimeUtil(); |
~MimeUtil(); |
@@ -41,7 +42,20 @@ class MimeUtil { |
HEVC_MAIN, |
VP8, |
VP9, |
- THEORA |
+ THEORA, |
+ LAST_CODEC = THEORA |
+ }; |
+ |
+ // Platform configuration structure. Controls which codecs are supported at |
+ // runtime. Also used by tests to simulate platform differences. |
+ struct PlatformInfo { |
+ bool has_platform_decoders = false; |
+ |
+ bool has_platform_vp8_decoder = false; |
+ bool supports_opus = false; |
+ bool supports_vp9 = false; |
+ |
+ bool is_unified_media_pipeline_enabled = false; |
}; |
// See mime_util.h for more information on these methods. |
@@ -49,12 +63,23 @@ class MimeUtil { |
void ParseCodecString(const std::string& codecs, |
std::vector<std::string>* codecs_out, |
bool strip); |
- SupportsType IsSupportedMediaFormat( |
- const std::string& mime_type, |
- const std::vector<std::string>& codecs) const; |
+ SupportsType IsSupportedMediaFormat(const std::string& mime_type, |
+ const std::vector<std::string>& codecs, |
+ bool is_encrypted) const; |
void RemoveProprietaryMediaTypesAndCodecs(); |
+ // Checks special platform specific codec restrictions. Returns true if |
+ // |codec| is supported when contained in |mime_type_lower_case|. |
+ // |is_encrypted| means the codec will be used with encrypted blocks. |
+ // |platform_info| describes the availability of various platform features; |
+ // see PlatformInfo for more details. |
+ static bool IsCodecSupportedOnPlatform( |
+ Codec codec, |
+ const std::string& mime_type_lower_case, |
+ bool is_encrypted, |
+ const PlatformInfo& platform_info); |
+ |
private: |
typedef base::hash_set<int> CodecSet; |
typedef std::map<std::string, CodecSet> MediaFormatMappings; |
@@ -69,13 +94,16 @@ class MimeUtil { |
// For faster lookup, keep hash sets. |
void InitializeMimeTypeMaps(); |
- // Returns IsSupported if all codec IDs in |codecs| are unambiguous |
- // and are supported by the platform. MayBeSupported is returned if |
- // at least one codec ID in |codecs| is ambiguous but all the codecs |
- // are supported by the platform. IsNotSupported is returned if at |
- // least one codec ID is not supported by the platform. |
+ // Returns IsSupported if all codec IDs in |codecs| are unambiguous and are |
+ // supported in |mime_type_lower_case|. MayBeSupported is returned if at least |
+ // one codec ID in |codecs| is ambiguous but all the codecs are supported. |
+ // IsNotSupported is returned if |mime_type_lower_case| is not supported or at |
+ // least one is not supported in |mime_type_lower_case|. |is_encrypted| means |
+ // the codec will be used with encrypted blocks. |
SupportsType AreSupportedCodecs(const CodecSet& supported_codecs, |
- const std::vector<std::string>& codecs) const; |
+ const std::vector<std::string>& codecs, |
+ const std::string& mime_type_lower_case, |
+ bool is_encrypted) const; |
// Converts a codec ID into an Codec enum value and indicates |
// whether the conversion was ambiguous. |
@@ -89,10 +117,13 @@ class MimeUtil { |
Codec* codec, |
bool* is_ambiguous) const; |
- // Returns true if |codec| is supported by the platform. |
- // Note: This method will return false if the platform supports proprietary |
- // codecs but |allow_proprietary_codecs_| is set to false. |
- bool IsCodecSupported(Codec codec) const; |
+ // Returns true if |codec| is supported when contained in |
+ // |mime_type_lower_case|. Note: This method will always return false for |
+ // proprietary codecs if |allow_proprietary_codecs_| is set to false. |
+ // |is_encrypted| means the codec will be used with encrypted blocks. |
+ bool IsCodecSupported(Codec codec, |
+ const std::string& mime_type_lower_case, |
+ bool is_encrypted) const; |
// Returns true if |codec| refers to a proprietary codec. |
bool IsCodecProprietary(Codec codec) const; |
@@ -105,12 +136,13 @@ class MimeUtil { |
// Returns true if |mime_type_lower_case| has a default codec associated with |
// it and IsCodecSupported() returns true for that particular codec. |
- bool IsDefaultCodecSupportedLowerCase( |
- const std::string& mime_type_lower_case) const; |
+ // |is_encrypted| means the codec will be used with encrypted blocks. |
+ bool IsDefaultCodecSupportedLowerCase(const std::string& mime_type_lower_case, |
+ bool is_encrypted) const; |
#if defined(OS_ANDROID) |
- // Checks special Android only codec restrictions. |
- bool IsCodecSupportedOnAndroid(Codec codec) const; |
+ // Indicates the support of various codecs within the platform. |
+ PlatformInfo platform_info_; |
#endif |
// A map of mime_types and hash map of the supported codecs for the mime_type. |