| Index: media/base/mime_util_internal.h
|
| diff --git a/media/base/mime_util_internal.h b/media/base/mime_util_internal.h
|
| index d39a2d855b08444f78fd4d20bca8b2ff6e8f1bca..a2902c0baae1b20b9261df17d85bad9a88b94ad8 100644
|
| --- a/media/base/mime_util_internal.h
|
| +++ b/media/base/mime_util_internal.h
|
| @@ -14,11 +14,10 @@
|
| #include "media/base/media_export.h"
|
| #include "media/base/mime_util.h"
|
| #include "media/base/video_codecs.h"
|
| +#include "media/base/video_color_space.h"
|
|
|
| namespace media {
|
|
|
| -class VideoColorSpace;
|
| -
|
| namespace internal {
|
|
|
| // Internal utility class for handling mime types. Should only be invoked by
|
| @@ -58,11 +57,30 @@ class MEDIA_EXPORT MimeUtil {
|
| bool supports_opus = false;
|
| };
|
|
|
| + struct ParsedCodecResult {
|
| + Codec codec;
|
| + bool is_ambiguous;
|
| + VideoCodecProfile video_profile;
|
| + uint8_t video_level;
|
| + VideoColorSpace video_color_space;
|
| + };
|
| +
|
| // See mime_util.h for more information on these methods.
|
| bool IsSupportedMediaMimeType(const std::string& mime_type) const;
|
| void SplitCodecsToVector(const std::string& codecs,
|
| std::vector<std::string>* codecs_out,
|
| bool strip);
|
| + bool ParseVideoCodecString(const std::string& mime_type,
|
| + const std::string& codec_id,
|
| + bool* out_is_ambiguous,
|
| + VideoCodec* out_codec,
|
| + VideoCodecProfile* out_profile,
|
| + uint8_t* out_level,
|
| + VideoColorSpace* out_color_space);
|
| + bool ParseAudioCodecString(const std::string& mime_type,
|
| + const std::string& codec_id,
|
| + bool* out_is_ambiguous,
|
| + AudioCodec* out_codec);
|
| SupportsType IsSupportedMediaFormat(const std::string& mime_type,
|
| const std::vector<std::string>& codecs,
|
| bool is_encrypted) const;
|
| @@ -100,32 +118,45 @@ class MEDIA_EXPORT MimeUtil {
|
| // 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 std::string& mime_type_lower_case,
|
| - bool is_encrypted) const;
|
| -
|
| - // Converts a codec ID into an Codec enum value and attempts to output the
|
| - // |out_profile| and |out_level|.
|
| - // Returns true if this method was able to map |codec_id| with
|
| - // |mime_type_lower_case| to a specific Codec enum value. |codec| is only
|
| - // valid if true is returned.
|
| - // |ambiguous_codec_string| will be set to true when the codec string matches
|
| - // one of a small number of non-RFC compliant strings (e.g. "avc").
|
| - // |profile| and |level| indicate video codec profile and level (unused for
|
| - // audio codecs). These will be VIDEO_CODEC_PROFILE_UNKNOWN and 0 respectively
|
| - // whenever |codec_id| is incomplete/invalid, or in some cases when
|
| - // |ambiguous_codec_string| is set to true.
|
| - // |is_encrypted| means the codec will be used with encrypted blocks.
|
| - // |out_color| is the color space described by the
|
| - // |codec_id|.
|
| - bool ParseCodecString(const std::string& mime_type_lower_case,
|
| + SupportsType AreSupportedCodecs(
|
| + const std::vector<ParsedCodecResult>& parsed_codecs,
|
| + const std::string& mime_type_lower_case,
|
| + bool is_encrypted) const;
|
| +
|
| + // Parse the combination of |mime_type_lower_case| and |codecs|. Returns true
|
| + // when parsing succeeds and output is written to |out_results|. Returns false
|
| + // when parsing fails. Failure may be caused by
|
| + // - invalid/unrecognized codec strings and mime_types
|
| + // - invalid combinations of codec strings and mime_types (e.g. H264 in WebM)
|
| + // See comment for ParseCodecHelper().
|
| + bool ParseCodecStrings(const std::string& mime_type_lower_case,
|
| + const std::vector<std::string>& codecs,
|
| + std::vector<ParsedCodecResult>* out_results) const;
|
| +
|
| + // Helper to ParseCodecStrings(). Parses a single |codec_id| with
|
| + // |mime_type_lower_case| to populate the fields of |out_result|. This helper
|
| + // method does not validate the combination of |mime_type_lower_case| and
|
| + // |codec_id|, nor does it handle empty/unprovided codecs; See caller
|
| + // ParseCodecStrings().
|
| + //
|
| + // |out_result| is only valid when this method returns true (parsing success).
|
| + // |out_result->is_ambiguous| will be set to true when the codec string
|
| + // matches one of a fixed number of *non-RFC compliant* strings (e.g. "avc").
|
| + // Ambiguous video codec strings may fail to provide video profile and/or
|
| + // level info. In these cases, we use the following values to indicate
|
| + // "unspecified":
|
| + // - out_result->video_profile = VIDEO_CODEC_PROFILE_UNKNOWN
|
| + // - out_result->video_level = 0
|
| + //
|
| + // For unambiguous video codecs, |video_profile| and |video_level| will be
|
| + // set in |out_result|.
|
| + //
|
| + // |out_result|'s |video_color_space| will report the codec strings color
|
| + // space when provided. Most codec strings do not yet describe color, so this
|
| + // will often be set to the default of REC709.
|
| + bool ParseCodecHelper(const std::string& mime_type_lower_case,
|
| const std::string& codec_id,
|
| - Codec* codec,
|
| - bool* ambiguous_codec_string,
|
| - VideoCodecProfile* out_profile,
|
| - uint8_t* out_level,
|
| - VideoColorSpace* out_colorspace) const;
|
| + ParsedCodecResult* out_result) const;
|
|
|
| // Returns IsSupported if |codec| when platform supports codec contained in
|
| // |mime_type_lower_case|. Returns MayBeSupported when platform support is
|
| @@ -157,13 +188,6 @@ class MEDIA_EXPORT MimeUtil {
|
| bool GetDefaultCodec(const std::string& mime_type_lower_case,
|
| Codec* default_codec) const;
|
|
|
| - // Returns IsSupported if |mime_type_lower_case| has a default codec
|
| - // associated with it and IsCodecSupported() returns IsSupported for that
|
| - // particular codec. |is_encrypted| means the codec will be used with
|
| - // encrypted blocks.
|
| - SupportsType IsDefaultCodecSupported(const std::string& mime_type_lower_case,
|
| - bool is_encrypted) const;
|
| -
|
| #if defined(OS_ANDROID)
|
| // Indicates the support of various codecs within the platform.
|
| PlatformInfo platform_info_;
|
|
|