Index: media/base/mime_util_internal.cc |
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc |
index db4f10b97cedcb8392e48a6731cd585e9f0424e9..9bb409995088b2a0d77ae2bfd2008796b7a5c229 100644 |
--- a/media/base/mime_util_internal.cc |
+++ b/media/base/mime_util_internal.cc |
@@ -136,6 +136,31 @@ MimeUtil::MimeUtil() : allow_proprietary_codecs_(false) { |
MimeUtil::~MimeUtil() {} |
+AudioCodec MimeUtilToAudioCodec(MimeUtil::Codec codec) { |
+ switch (codec) { |
+ case MimeUtil::PCM: |
+ return kCodecPCM; |
+ case MimeUtil::MP3: |
+ return kCodecMP3; |
+ case MimeUtil::AC3: |
+ return kCodecAC3; |
+ case MimeUtil::EAC3: |
+ return kCodecEAC3; |
+ case MimeUtil::MPEG2_AAC: |
+ case MimeUtil::MPEG4_AAC: |
+ return kCodecAAC; |
+ case MimeUtil::VORBIS: |
+ return kCodecVorbis; |
+ case MimeUtil::OPUS: |
+ return kCodecOpus; |
+ case MimeUtil::FLAC: |
+ return kCodecFLAC; |
+ default: |
+ break; |
+ } |
+ return kUnknownAudioCodec; |
+} |
+ |
VideoCodec MimeUtilToVideoCodec(MimeUtil::Codec codec) { |
switch (codec) { |
case MimeUtil::H264: |
@@ -710,6 +735,21 @@ SupportsType MimeUtil::IsCodecSupported(const std::string& mime_type_lower_case, |
ambiguous_platform_support = true; |
} |
+ AudioCodec audio_codec = MimeUtilToAudioCodec(codec); |
+ if (audio_codec != kUnknownAudioCodec) { |
+ AudioConfig audio_config = {audio_codec}; |
+ |
+ // If MediaClient is provided use it to check for decoder support. |
+ MediaClient* media_client = GetMediaClient(); |
+ if (media_client && !media_client->IsSupportedAudioConfig(audio_config)) |
+ return IsNotSupported; |
+ |
+ // When no MediaClient is provided, assume default decoders are available |
+ // as described by media::IsSupportedAudioConfig(). |
+ if (!media_client && !IsSupportedAudioConfig(audio_config)) |
+ return IsNotSupported; |
+ } |
+ |
if (video_codec != kUnknownVideoCodec) { |
VideoConfig video_config = {video_codec, video_profile, video_level, |
color_space}; |