OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "media/base/android/media_codec_util.h" | 5 #include "media/base/android/media_codec_util.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 supported.end(); | 66 supported.end(); |
67 } | 67 } |
68 | 68 |
69 static std::string GetDefaultCodecName(const std::string& mime_type, | 69 static std::string GetDefaultCodecName(const std::string& mime_type, |
70 MediaCodecDirection direction, | 70 MediaCodecDirection direction, |
71 bool require_software_codec) { | 71 bool require_software_codec) { |
72 DCHECK(MediaCodecUtil::IsMediaCodecAvailable()); | 72 DCHECK(MediaCodecUtil::IsMediaCodecAvailable()); |
73 JNIEnv* env = AttachCurrentThread(); | 73 JNIEnv* env = AttachCurrentThread(); |
74 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type); | 74 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type); |
75 ScopedJavaLocalRef<jstring> j_codec_name = | 75 ScopedJavaLocalRef<jstring> j_codec_name = |
76 Java_MediaCodecUtil_getDefaultCodecName(env, j_mime.obj(), direction, | 76 Java_MediaCodecUtil_getDefaultCodecName(env, j_mime, direction, |
77 require_software_codec); | 77 require_software_codec); |
78 return ConvertJavaStringToUTF8(env, j_codec_name.obj()); | 78 return ConvertJavaStringToUTF8(env, j_codec_name.obj()); |
79 } | 79 } |
80 | 80 |
81 static bool IsDecoderSupportedByDevice(const std::string& android_mime_type) { | 81 static bool IsDecoderSupportedByDevice(const std::string& android_mime_type) { |
82 DCHECK(MediaCodecUtil::IsMediaCodecAvailable()); | 82 DCHECK(MediaCodecUtil::IsMediaCodecAvailable()); |
83 DCHECK(IsSupportedAndroidMimeType(android_mime_type)); | 83 DCHECK(IsSupportedAndroidMimeType(android_mime_type)); |
84 JNIEnv* env = AttachCurrentThread(); | 84 JNIEnv* env = AttachCurrentThread(); |
85 ScopedJavaLocalRef<jstring> j_mime = | 85 ScopedJavaLocalRef<jstring> j_mime = |
86 ConvertUTF8ToJavaString(env, android_mime_type); | 86 ConvertUTF8ToJavaString(env, android_mime_type); |
87 return Java_MediaCodecUtil_isDecoderSupportedForDevice(env, j_mime.obj()); | 87 return Java_MediaCodecUtil_isDecoderSupportedForDevice(env, j_mime); |
88 } | 88 } |
89 | 89 |
90 // static | 90 // static |
91 bool MediaCodecUtil::IsMediaCodecAvailable() { | 91 bool MediaCodecUtil::IsMediaCodecAvailable() { |
92 // MediaCodec is only available on JB and greater. | 92 // MediaCodec is only available on JB and greater. |
93 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) | 93 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) |
94 return false; | 94 return false; |
95 | 95 |
96 // Blacklist some devices on Jellybean as for MediaCodec support is buggy. | 96 // Blacklist some devices on Jellybean as for MediaCodec support is buggy. |
97 // http://crbug.com/365494, http://crbug.com/615872 | 97 // http://crbug.com/365494, http://crbug.com/615872 |
(...skipping 14 matching lines...) Expand all Loading... |
112 // static | 112 // static |
113 std::set<int> MediaCodecUtil::GetEncoderColorFormats( | 113 std::set<int> MediaCodecUtil::GetEncoderColorFormats( |
114 const std::string& mime_type) { | 114 const std::string& mime_type) { |
115 std::set<int> color_formats; | 115 std::set<int> color_formats; |
116 if (!IsMediaCodecAvailable()) | 116 if (!IsMediaCodecAvailable()) |
117 return color_formats; | 117 return color_formats; |
118 | 118 |
119 JNIEnv* env = AttachCurrentThread(); | 119 JNIEnv* env = AttachCurrentThread(); |
120 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type); | 120 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type); |
121 ScopedJavaLocalRef<jintArray> j_color_format_array = | 121 ScopedJavaLocalRef<jintArray> j_color_format_array = |
122 Java_MediaCodecUtil_getEncoderColorFormatsForMime(env, j_mime.obj()); | 122 Java_MediaCodecUtil_getEncoderColorFormatsForMime(env, j_mime); |
123 | 123 |
124 if (j_color_format_array.obj()) { | 124 if (j_color_format_array.obj()) { |
125 std::vector<int> formats; | 125 std::vector<int> formats; |
126 JavaIntArrayToIntVector(env, j_color_format_array.obj(), &formats); | 126 JavaIntArrayToIntVector(env, j_color_format_array.obj(), &formats); |
127 color_formats = std::set<int>(formats.begin(), formats.end()); | 127 color_formats = std::set<int>(formats.begin(), formats.end()); |
128 } | 128 } |
129 | 129 |
130 return color_formats; | 130 return color_formats; |
131 } | 131 } |
132 | 132 |
133 // static | 133 // static |
134 bool MediaCodecUtil::CanDecode(const std::string& codec, bool is_secure) { | 134 bool MediaCodecUtil::CanDecode(const std::string& codec, bool is_secure) { |
135 if (!IsMediaCodecAvailable()) | 135 if (!IsMediaCodecAvailable()) |
136 return false; | 136 return false; |
137 | 137 |
138 JNIEnv* env = AttachCurrentThread(); | 138 JNIEnv* env = AttachCurrentThread(); |
139 std::string mime = CodecTypeToAndroidMimeType(codec); | 139 std::string mime = CodecTypeToAndroidMimeType(codec); |
140 if (mime.empty()) | 140 if (mime.empty()) |
141 return false; | 141 return false; |
142 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime); | 142 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime); |
143 return Java_MediaCodecUtil_canDecode(env, j_mime.obj(), is_secure); | 143 return Java_MediaCodecUtil_canDecode(env, j_mime, is_secure); |
144 } | 144 } |
145 | 145 |
146 // static | 146 // static |
147 bool MediaCodecUtil::IsKnownUnaccelerated(const std::string& android_mime_type, | 147 bool MediaCodecUtil::IsKnownUnaccelerated(const std::string& android_mime_type, |
148 MediaCodecDirection direction) { | 148 MediaCodecDirection direction) { |
149 DCHECK(IsSupportedAndroidMimeType(android_mime_type)); | 149 DCHECK(IsSupportedAndroidMimeType(android_mime_type)); |
150 if (!IsMediaCodecAvailable()) | 150 if (!IsMediaCodecAvailable()) |
151 return true; | 151 return true; |
152 | 152 |
153 std::string codec_name = | 153 std::string codec_name = |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 (sdk_int == 18 && ("OMX.SEC.avc.dec" == codec_name || | 244 (sdk_int == 18 && ("OMX.SEC.avc.dec" == codec_name || |
245 "OMX.SEC.avc.dec.secure" == codec_name)) || | 245 "OMX.SEC.avc.dec.secure" == codec_name)) || |
246 (sdk_int == 19 && | 246 (sdk_int == 19 && |
247 base::StartsWith(base::android::BuildInfo::GetInstance()->model(), | 247 base::StartsWith(base::android::BuildInfo::GetInstance()->model(), |
248 "SM-G800", base::CompareCase::INSENSITIVE_ASCII) && | 248 "SM-G800", base::CompareCase::INSENSITIVE_ASCII) && |
249 ("OMX.Exynos.avc.dec" == codec_name || | 249 ("OMX.Exynos.avc.dec" == codec_name || |
250 "OMX.Exynos.avc.dec.secure" == codec_name)); | 250 "OMX.Exynos.avc.dec.secure" == codec_name)); |
251 } | 251 } |
252 | 252 |
253 } // namespace media | 253 } // namespace media |
OLD | NEW |