Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Unified Diff: media/base/android/media_codec_util.cc

Issue 2697643003: media: Clean up MediaCodecBridge and remove subclasses (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698