Index: media/base/android/media_codec_bridge.cc |
diff --git a/media/base/android/media_codec_bridge.cc b/media/base/android/media_codec_bridge.cc |
index 37949f48d0237bca29abb5292b70e36fd8f5ff5c..3d799100078e64da398829f3462d72343f766e23 100644 |
--- a/media/base/android/media_codec_bridge.cc |
+++ b/media/base/android/media_codec_bridge.cc |
@@ -23,30 +23,6 @@ using base::android::AttachCurrentThread; |
using base::android::ConvertUTF8ToJavaString; |
using base::android::ScopedJavaLocalRef; |
-namespace { |
- |
-class MediaCodecNativeRegisterer { |
- public: |
- MediaCodecNativeRegisterer() { |
- JNIEnv* env = AttachCurrentThread(); |
- jni_initialized_ = |
- media::RegisterNativesImpl(env) && |
- JNI_MediaFormat::RegisterNativesImpl(env); |
- } |
- |
- bool IsRegistered() { |
- return jni_initialized_; |
- } |
- |
- private: |
- bool jni_initialized_; |
-}; |
- |
-static base::LazyInstance<MediaCodecNativeRegisterer> g_native_registerer = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-} // namespace |
- |
namespace media { |
enum { kBufferFlagEndOfStream = 4 }; |
@@ -92,7 +68,6 @@ bool MediaCodecBridge::IsAvailable() { |
MediaCodecBridge::MediaCodecBridge(const char* mime) { |
JNIEnv* env = AttachCurrentThread(); |
CHECK(env); |
- CHECK(g_native_registerer.Pointer()->IsRegistered()); |
DCHECK(mime); |
ScopedJavaLocalRef<jstring> j_type = ConvertUTF8ToJavaString(env, mime); |
@@ -213,8 +188,8 @@ void MediaCodecBridge::GetOutputBuffers() { |
Java_MediaCodecBridge_getOutputBuffers(env, j_media_codec_.obj()); |
} |
-AudioCodecBridge::AudioCodecBridge(const AudioCodec codec) |
- : MediaCodecBridge(AudioCodecToMimeType(codec)) { |
+AudioCodecBridge::AudioCodecBridge(const char* mime) |
+ : MediaCodecBridge(mime) { |
} |
bool AudioCodecBridge::Start( |
@@ -300,8 +275,8 @@ void AudioCodecBridge::PlayOutputBuffer(int index, size_t size) { |
env, media_codec(), byte_array.obj()); |
} |
-VideoCodecBridge::VideoCodecBridge(const VideoCodec codec) |
- : MediaCodecBridge(VideoCodecToMimeType(codec)) { |
+VideoCodecBridge::VideoCodecBridge(const char* mime) |
+ : MediaCodecBridge(mime) { |
} |
bool VideoCodecBridge::Start( |
@@ -321,5 +296,21 @@ bool VideoCodecBridge::Start( |
return true; |
} |
+AudioCodecBridge* AudioCodecBridge::Create(const AudioCodec codec) { |
+ const char* mime = AudioCodecToMimeType(codec); |
+ return mime ? new AudioCodecBridge(mime) : NULL; |
+} |
+ |
+VideoCodecBridge* VideoCodecBridge::Create(const VideoCodec codec) { |
+ const char* mime = VideoCodecToMimeType(codec); |
+ return mime ? new VideoCodecBridge(mime) : NULL; |
+} |
+ |
+bool MediaCodecBridge::RegisterMediaCodecBridge(JNIEnv* env) { |
+ if (!MediaCodecBridge::IsAvailable()) |
+ return false; |
+ return RegisterNativesImpl(env) && JNI_MediaFormat::RegisterNativesImpl(env); |
+} |
+ |
} // namespace media |