 Chromium Code Reviews
 Chromium Code Reviews Issue 2697643003:
  media: Clean up MediaCodecBridge and remove subclasses  (Closed)
    
  
    Issue 2697643003:
  media: Clean up MediaCodecBridge and remove subclasses  (Closed) 
  | Index: media/base/android/media_codec_util.cc | 
| diff --git a/media/base/android/media_codec_util.cc b/media/base/android/media_codec_util.cc | 
| index b2d5f82ad46dea885013e1409e2254611b22796b..6d74769e26257e3c894ce9c1490a43b2870b052d 100644 | 
| --- a/media/base/android/media_codec_util.cc | 
| +++ b/media/base/android/media_codec_util.cc | 
| @@ -28,10 +28,10 @@ using base::android::JavaRef; | 
| using base::android::ScopedJavaLocalRef; | 
| namespace media { | 
| - | 
| namespace { | 
| -const char kMp4aMimeType[] = "audio/mp4a-latm"; | 
| +const char kMp3MimeType[] = "audio/mpeg"; | 
| +const char kAacMimeType[] = "audio/mp4a-latm"; | 
| const char kOpusMimeType[] = "audio/opus"; | 
| const char kVorbisMimeType[] = "audio/vorbis"; | 
| const char kAc3MimeType[] = "audio/ac3"; | 
| @@ -43,31 +43,6 @@ const char kVp9MimeType[] = "video/x-vnd.on2.vp9"; | 
| } // namespace | 
| -static std::string CodecTypeToAndroidMimeType(const std::string& codec) { | 
| - // TODO(xhwang): Shall we handle more detailed strings like "mp4a.40.2"? | 
| - if (codec == "avc1") | 
| - return kAvcMimeType; | 
| - if (codec == "hvc1") | 
| - return kHevcMimeType; | 
| - if (codec == "mp4a") | 
| - return kMp4aMimeType; | 
| - if (codec == "vp8" || codec == "vp8.0") | 
| - return kVp8MimeType; | 
| - if (codec == "vp9" || codec == "vp9.0") | 
| - return kVp9MimeType; | 
| - if (codec == "vorbis") | 
| - return kVorbisMimeType; | 
| - if (codec == "opus") | 
| - return kOpusMimeType; | 
| - if (codec == "ac3") | 
| - return kAc3MimeType; | 
| - if (codec == "eac3") | 
| - return kEac3MimeType; | 
| - | 
| - DLOG(WARNING) << "Cannot convert codec to Android MIME type: " << codec; | 
| - return std::string(); | 
| -} | 
| - | 
| static VideoCodec AndroidCodecToCodecEnum(const std::string& codec) { | 
| if (codec == "AVC") | 
| return kCodecH264; | 
| @@ -96,8 +71,8 @@ static CodecProfileLevel MediaCodecProfileLevelToChromiumProfileLevel( | 
| static bool IsSupportedAndroidMimeType(const std::string& mime_type) { | 
| std::vector<std::string> supported{ | 
| - kMp4aMimeType, kOpusMimeType, kVorbisMimeType, kAvcMimeType, | 
| - kHevcMimeType, kVp8MimeType, kVp9MimeType}; | 
| + kMp3MimeType, kAacMimeType, kOpusMimeType, kVorbisMimeType, | 
| 
watk
2017/02/14 01:40:51
I added mp3 here. Seems like it was missing before
 | 
| + kAvcMimeType, kHevcMimeType, kVp8MimeType, kVp9MimeType}; | 
| return std::find(supported.begin(), supported.end(), mime_type) != | 
| supported.end(); | 
| } | 
| @@ -109,8 +84,8 @@ static std::string GetDefaultCodecName(const std::string& mime_type, | 
| JNIEnv* env = AttachCurrentThread(); | 
| ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type); | 
| ScopedJavaLocalRef<jstring> j_codec_name = | 
| - Java_MediaCodecUtil_getDefaultCodecName(env, j_mime, direction, | 
| - require_software_codec); | 
| + Java_MediaCodecUtil_getDefaultCodecName( | 
| + env, j_mime, static_cast<int>(direction), require_software_codec); | 
| return ConvertJavaStringToUTF8(env, j_codec_name.obj()); | 
| } | 
| @@ -132,6 +107,42 @@ static bool IsEncoderSupportedByDevice(const std::string& android_mime_type) { | 
| } | 
| // static | 
| +std::string MediaCodecUtil::CodecToAndroidMimeType(AudioCodec codec) { | 
| + switch (codec) { | 
| + case kCodecMP3: | 
| + return kMp3MimeType; | 
| + case kCodecVorbis: | 
| + return kVorbisMimeType; | 
| + case kCodecOpus: | 
| + return kOpusMimeType; | 
| + case kCodecAAC: | 
| + return kAacMimeType; | 
| + case kCodecAC3: | 
| + return kAc3MimeType; | 
| + case kCodecEAC3: | 
| + return kEac3MimeType; | 
| + default: | 
| + return std::string(); | 
| + } | 
| +} | 
| + | 
| +// static | 
| +std::string MediaCodecUtil::CodecToAndroidMimeType(VideoCodec codec) { | 
| + switch (codec) { | 
| + case kCodecH264: | 
| + return kAvcMimeType; | 
| + case kCodecHEVC: | 
| + return kHevcMimeType; | 
| + case kCodecVP8: | 
| + return kVp8MimeType; | 
| + case kCodecVP9: | 
| + return kVp9MimeType; | 
| + default: | 
| + return std::string(); | 
| + } | 
| +} | 
| + | 
| +// static | 
| bool MediaCodecUtil::IsMediaCodecAvailable() { | 
| // Blacklist some devices on Jellybean as MediaCodec is buggy. | 
| // http://crbug.com/365494, http://crbug.com/615872 | 
| @@ -183,14 +194,13 @@ std::set<int> MediaCodecUtil::GetEncoderColorFormats( | 
| } | 
| // static | 
| -bool MediaCodecUtil::CanDecode(const std::string& codec, bool is_secure) { | 
| +bool MediaCodecUtil::CanDecode(const std::string& mime, bool is_secure) { | 
| if (!IsMediaCodecAvailable()) | 
| return false; | 
| - | 
| - JNIEnv* env = AttachCurrentThread(); | 
| - std::string mime = CodecTypeToAndroidMimeType(codec); | 
| if (mime.empty()) | 
| return false; | 
| + | 
| + JNIEnv* env = AttachCurrentThread(); | 
| ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime); | 
| return Java_MediaCodecUtil_canDecode(env, j_mime, is_secure); | 
| } | 
| @@ -215,16 +225,15 @@ bool MediaCodecUtil::AddSupportedCodecProfileLevels( | 
| } | 
| // static | 
| -bool MediaCodecUtil::IsKnownUnaccelerated(const std::string& android_mime_type, | 
| +bool MediaCodecUtil::IsKnownUnaccelerated(VideoCodec codec, | 
| MediaCodecDirection direction) { | 
| - DCHECK(IsSupportedAndroidMimeType(android_mime_type)); | 
| if (!IsMediaCodecAvailable()) | 
| return true; | 
| std::string codec_name = | 
| - GetDefaultCodecName(android_mime_type, direction, false); | 
| - DVLOG(1) << __func__ << "Default codec for " << android_mime_type << " : " | 
| - << codec_name << ", direction: " << direction; | 
| + GetDefaultCodecName(CodecToAndroidMimeType(codec), direction, false); | 
| + DVLOG(1) << __func__ << "Default codec for " << GetCodecName(codec) << " : " | 
| + << codec_name << ", direction: " << static_cast<int>(direction); | 
| if (codec_name.empty()) | 
| return true; | 
| @@ -232,10 +241,10 @@ bool MediaCodecUtil::IsKnownUnaccelerated(const std::string& android_mime_type, | 
| // MediaTek hardware vp9 is known crashy, see http://crbug.com/446974 and | 
| // http://crbug.com/597836. | 
| if (base::StartsWith(codec_name, "OMX.MTK.", base::CompareCase::SENSITIVE)) { | 
| - if (android_mime_type == kVp8MimeType) | 
| + if (codec == kCodecVP8) | 
| return true; | 
| - if (android_mime_type == kVp9MimeType) | 
| + if (codec == kCodecVP9) | 
| return base::android::BuildInfo::GetInstance()->sdk_int() < 21; | 
| return false; |