Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_BASE_MIME_UTIL_INTERNAL_H_ | 5 #ifndef MEDIA_BASE_MIME_UTIL_INTERNAL_H_ |
| 6 #define MEDIA_BASE_MIME_UTIL_INTERNAL_H_ | 6 #define MEDIA_BASE_MIME_UTIL_INTERNAL_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/containers/hash_tables.h" | 12 #include "base/containers/hash_tables.h" |
| 13 #include "base/lazy_instance.h" | |
| 14 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "media/base/media_export.h" | |
| 15 #include "media/base/mime_util.h" | 15 #include "media/base/mime_util.h" |
| 16 | 16 |
| 17 namespace media { | 17 namespace media { |
| 18 namespace internal { | 18 namespace internal { |
| 19 | 19 |
| 20 #if defined(OS_ANDROID) | |
| 21 // Platform configuration structure. Controls which codecs are supported at | |
|
ddorwin
2016/02/17 21:18:39
Is there a reason this isn't nested in the class?
DaleCurtis
2016/02/18 03:58:09
Done.
| |
| 22 // runtime. Also used by tests to simulate platform differences. | |
| 23 struct PlatformCodecInfo { | |
| 24 bool has_platform_decoder; | |
|
ddorwin
2016/02/17 21:18:39
nit: decoder*s*?
Since it's Android, should we jus
DaleCurtis
2016/02/18 03:58:09
I'd like to keep the name consistent with what we
| |
| 25 bool has_unified_media_pipeline; | |
|
ddorwin
2016/02/17 21:18:39
nit: This isn't really a platform property. Perhap
DaleCurtis
2016/02/18 03:58:09
Done.
| |
| 26 bool has_opus; | |
| 27 bool has_vp8; | |
| 28 bool has_vp9; | |
|
ddorwin
2016/02/17 21:18:39
define default values?
DaleCurtis
2016/02/18 03:58:09
Done.
| |
| 29 }; | |
| 30 #endif | |
| 31 | |
| 20 // Internal utility class for handling mime types. Should only be invoked by | 32 // Internal utility class for handling mime types. Should only be invoked by |
| 21 // tests and the functions within mime_util.cc -- NOT for direct use by others. | 33 // tests and the functions within mime_util.cc -- NOT for direct use by others. |
| 22 class MimeUtil { | 34 class MEDIA_EXPORT MimeUtil { |
| 23 public: | 35 public: |
| 36 MimeUtil(); | |
| 37 | |
| 24 enum Codec { | 38 enum Codec { |
| 25 INVALID_CODEC, | 39 INVALID_CODEC, |
| 26 PCM, | 40 PCM, |
| 27 MP3, | 41 MP3, |
| 28 AC3, | 42 AC3, |
| 29 EAC3, | 43 EAC3, |
| 30 MPEG2_AAC_LC, | 44 MPEG2_AAC_LC, |
| 31 MPEG2_AAC_MAIN, | 45 MPEG2_AAC_MAIN, |
| 32 MPEG2_AAC_SSR, | 46 MPEG2_AAC_SSR, |
| 33 MPEG4_AAC_LC, | 47 MPEG4_AAC_LC, |
| 34 MPEG4_AAC_SBR_v1, | 48 MPEG4_AAC_SBR_v1, |
| 35 MPEG4_AAC_SBR_PS_v2, | 49 MPEG4_AAC_SBR_PS_v2, |
| 36 VORBIS, | 50 VORBIS, |
| 37 OPUS, | 51 OPUS, |
| 38 H264_BASELINE, | 52 H264_BASELINE, |
| 39 H264_MAIN, | 53 H264_MAIN, |
| 40 H264_HIGH, | 54 H264_HIGH, |
| 41 HEVC_MAIN, | 55 HEVC_MAIN, |
| 42 VP8, | 56 VP8, |
| 43 VP9, | 57 VP9, |
| 44 THEORA | 58 THEORA, |
| 59 LAST_CODEC = THEORA | |
| 45 }; | 60 }; |
| 46 | 61 |
| 47 // See mime_util.h for more information on these methods. | 62 // See mime_util.h for more information on these methods. |
| 48 bool IsSupportedMediaMimeType(const std::string& mime_type) const; | 63 bool IsSupportedMediaMimeType(const std::string& mime_type) const; |
| 49 void ParseCodecString(const std::string& codecs, | 64 void ParseCodecString(const std::string& codecs, |
| 50 std::vector<std::string>* codecs_out, | 65 std::vector<std::string>* codecs_out, |
| 51 bool strip); | 66 bool strip); |
| 52 SupportsType IsSupportedMediaFormat( | 67 SupportsType IsSupportedMediaFormat(const std::string& mime_type, |
| 53 const std::string& mime_type, | 68 const std::vector<std::string>& codecs, |
| 54 const std::vector<std::string>& codecs) const; | 69 bool is_encrypted) const; |
| 55 | 70 |
| 56 void RemoveProprietaryMediaTypesAndCodecs(); | 71 void RemoveProprietaryMediaTypesAndCodecs(); |
| 57 | 72 |
| 73 void SetPlatformCodecInfoForTests(const PlatformCodecInfo& info); | |
|
ddorwin
2016/02/17 21:18:39
Move inside #ifdef.
DaleCurtis
2016/02/18 03:58:09
Actually instead I removed all of the #ifdefs from
ddorwin
2016/02/18 20:37:44
See my comment in the next PS.
| |
| 74 | |
| 75 #if defined(OS_ANDROID) | |
| 76 // Checks special Android only codec restrictions. | |
| 77 bool IsCodecSupportedOnAndroidForTests( | |
| 78 Codec codec, | |
| 79 const std::string& mime_type_lower_case, | |
| 80 bool is_encrypted) const { | |
| 81 return IsCodecSupportedOnAndroid(codec, mime_type_lower_case, is_encrypted); | |
| 82 } | |
| 83 #endif | |
| 84 | |
| 58 private: | 85 private: |
| 59 friend struct base::DefaultLazyInstanceTraits<MimeUtil>; | |
| 60 | |
| 61 typedef base::hash_set<int> CodecSet; | 86 typedef base::hash_set<int> CodecSet; |
| 62 typedef std::map<std::string, CodecSet> MediaFormatMappings; | 87 typedef std::map<std::string, CodecSet> MediaFormatMappings; |
| 63 struct CodecEntry { | 88 struct CodecEntry { |
| 64 CodecEntry() : codec(INVALID_CODEC), is_ambiguous(true) {} | 89 CodecEntry() : codec(INVALID_CODEC), is_ambiguous(true) {} |
| 65 CodecEntry(Codec c, bool ambiguous) : codec(c), is_ambiguous(ambiguous) {} | 90 CodecEntry(Codec c, bool ambiguous) : codec(c), is_ambiguous(ambiguous) {} |
| 66 Codec codec; | 91 Codec codec; |
| 67 bool is_ambiguous; | 92 bool is_ambiguous; |
| 68 }; | 93 }; |
| 69 typedef std::map<std::string, CodecEntry> StringToCodecMappings; | 94 typedef std::map<std::string, CodecEntry> StringToCodecMappings; |
| 70 | 95 |
| 71 MimeUtil(); | |
| 72 | |
| 73 // For faster lookup, keep hash sets. | 96 // For faster lookup, keep hash sets. |
| 74 void InitializeMimeTypeMaps(); | 97 void InitializeMimeTypeMaps(); |
| 75 | 98 |
| 76 // Returns IsSupported if all codec IDs in |codecs| are unambiguous | 99 // Returns IsSupported if all codec IDs in |codecs| are unambiguous and are |
| 77 // and are supported by the platform. MayBeSupported is returned if | 100 // supported when contained in |mime_type_lower_case|. MayBeSupported is |
| 78 // at least one codec ID in |codecs| is ambiguous but all the codecs | 101 // returned if at least one codec ID in |codecs| is ambiguous but all the |
| 79 // are supported by the platform. IsNotSupported is returned if at | 102 // codecs are supported. IsNotSupported is returned if at least one codec ID |
|
ddorwin
2016/02/17 21:18:39
To be absolutely clear:
... supported in |mime_typ
DaleCurtis
2016/02/18 03:58:09
Done.
| |
| 80 // least one codec ID is not supported by the platform. | 103 // is not supported. |is_encrypted| means the codec will be used with |
| 104 // encrypted blocks. | |
| 81 SupportsType AreSupportedCodecs(const CodecSet& supported_codecs, | 105 SupportsType AreSupportedCodecs(const CodecSet& supported_codecs, |
| 82 const std::vector<std::string>& codecs) const; | 106 const std::vector<std::string>& codecs, |
| 107 const std::string& mime_type_lower_case, | |
|
ddorwin
2016/02/17 21:18:39
consistency nit: Elsewhere, the mime_type paramete
DaleCurtis
2016/02/18 03:58:09
I intentionally left codecs first here since that'
| |
| 108 bool is_encrypted) const; | |
| 83 | 109 |
| 84 // Converts a codec ID into an Codec enum value and indicates | 110 // Converts a codec ID into an Codec enum value and indicates |
| 85 // whether the conversion was ambiguous. | 111 // whether the conversion was ambiguous. |
| 86 // Returns true if this method was able to map |codec_id| to a specific | 112 // Returns true if this method was able to map |codec_id| to a specific |
| 87 // Codec enum value. |codec| and |is_ambiguous| are only valid if true | 113 // Codec enum value. |codec| and |is_ambiguous| are only valid if true |
| 88 // is returned. Otherwise their value is undefined after the call. | 114 // is returned. Otherwise their value is undefined after the call. |
| 89 // |is_ambiguous| is true if |codec_id| did not have enough information to | 115 // |is_ambiguous| is true if |codec_id| did not have enough information to |
| 90 // unambiguously determine the proper Codec enum value. If |is_ambiguous| | 116 // unambiguously determine the proper Codec enum value. If |is_ambiguous| |
| 91 // is true |codec| contains the best guess for the intended Codec enum value. | 117 // is true |codec| contains the best guess for the intended Codec enum value. |
| 92 bool StringToCodec(const std::string& codec_id, | 118 bool StringToCodec(const std::string& codec_id, |
| 93 Codec* codec, | 119 Codec* codec, |
| 94 bool* is_ambiguous) const; | 120 bool* is_ambiguous) const; |
| 95 | 121 |
| 96 // Returns true if |codec| is supported by the platform. | 122 // Returns true if |codec| is supported when contained in |
| 97 // Note: This method will return false if the platform supports proprietary | 123 // |mime_type_lower_case|. Note: This method will always return false if |
| 98 // codecs but |allow_proprietary_codecs_| is set to false. | 124 // |allow_proprietary_codecs_| is set to false. |is_encrypted| means the codec |
|
ddorwin
2016/02/17 21:18:39
You dropped part of the text from the Note. It wil
DaleCurtis
2016/02/18 03:58:09
Yes, I intentionally dropped that since the new wo
| |
| 99 bool IsCodecSupported(Codec codec) const; | 125 // will be used with encrypted blocks. |
| 126 bool IsCodecSupported(Codec codec, | |
| 127 const std::string& mime_type_lower_case, | |
|
ddorwin
2016/02/17 21:18:39
ditto on order consistency
DaleCurtis
2016/02/18 03:58:09
Acknowledged.
| |
| 128 bool is_encrypted) const; | |
| 100 | 129 |
| 101 // Returns true if |codec| refers to a proprietary codec. | 130 // Returns true if |codec| refers to a proprietary codec. |
| 102 bool IsCodecProprietary(Codec codec) const; | 131 bool IsCodecProprietary(Codec codec) const; |
| 103 | 132 |
| 104 // Returns true and sets |*default_codec| if |mime_type| has a default codec | 133 // Returns true and sets |*default_codec| if |mime_type| has a default codec |
| 105 // associated with it. Returns false otherwise and the value of | 134 // associated with it. Returns false otherwise and the value of |
| 106 // |*default_codec| is undefined. | 135 // |*default_codec| is undefined. |
| 107 bool GetDefaultCodecLowerCase(const std::string& mime_type_lower_case, | 136 bool GetDefaultCodecLowerCase(const std::string& mime_type_lower_case, |
| 108 Codec* default_codec) const; | 137 Codec* default_codec) const; |
| 109 | 138 |
| 110 // Returns true if |mime_type_lower_case| has a default codec associated with | 139 // Returns true if |mime_type_lower_case| has a default codec associated with |
| 111 // it and IsCodecSupported() returns true for that particular codec. | 140 // it and IsCodecSupported() returns true for that particular codec. |
| 112 bool IsDefaultCodecSupportedLowerCase( | 141 // |is_encrypted| means the codec will be used with encrypted blocks. |
| 113 const std::string& mime_type_lower_case) const; | 142 bool IsDefaultCodecSupportedLowerCase(const std::string& mime_type_lower_case, |
| 143 bool is_encrypted) const; | |
| 114 | 144 |
| 115 #if defined(OS_ANDROID) | 145 #if defined(OS_ANDROID) |
| 116 // Checks special Android only codec restrictions. | 146 // Checks special Android only codec restrictions. |
| 117 bool IsCodecSupportedOnAndroid(Codec codec) const; | 147 bool IsCodecSupportedOnAndroid(Codec codec, |
| 148 const std::string& mime_type_lower_case, | |
|
ddorwin
2016/02/17 21:18:39
ditto on order consistency
DaleCurtis
2016/02/18 03:58:09
Acknowledged.
| |
| 149 bool is_encrypted) const; | |
| 150 | |
| 151 // Indicates the support of various codecs within the platform. | |
| 152 PlatformCodecInfo platform_info_; | |
| 118 #endif | 153 #endif |
| 119 | 154 |
| 120 // A map of mime_types and hash map of the supported codecs for the mime_type. | 155 // A map of mime_types and hash map of the supported codecs for the mime_type. |
| 121 MediaFormatMappings media_format_map_; | 156 MediaFormatMappings media_format_map_; |
| 122 | 157 |
| 123 // Keeps track of whether proprietary codec support should be | 158 // Keeps track of whether proprietary codec support should be |
| 124 // advertised to callers. | 159 // advertised to callers. |
| 125 bool allow_proprietary_codecs_; | 160 bool allow_proprietary_codecs_; |
| 126 | 161 |
| 127 // Lookup table for string compare based string -> Codec mappings. | 162 // Lookup table for string compare based string -> Codec mappings. |
| 128 StringToCodecMappings string_to_codec_map_; | 163 StringToCodecMappings string_to_codec_map_; |
| 129 | 164 |
| 130 DISALLOW_COPY_AND_ASSIGN(MimeUtil); | 165 DISALLOW_COPY_AND_ASSIGN(MimeUtil); |
| 131 }; | 166 }; |
| 132 | 167 |
| 133 } // namespace internal | 168 } // namespace internal |
| 134 } // namespace media | 169 } // namespace media |
| 135 | 170 |
| 136 #endif // MEDIA_BASE_MIME_UTIL_INTERNAL_H_ | 171 #endif // MEDIA_BASE_MIME_UTIL_INTERNAL_H_ |
| OLD | NEW |