summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/all_android.gyp1
-rw-r--r--content/common/gpu/media/android_video_decode_accelerator.cc12
-rw-r--r--content/common/gpu/media/android_video_decode_accelerator.h5
-rw-r--r--content/common/gpu/media/android_video_decode_accelerator_unittest.cc102
-rw-r--r--content/content_tests.gypi35
-rw-r--r--media/base/android/java/src/org/chromium/media/MediaCodecBridge.java32
-rw-r--r--media/base/android/media_codec_bridge.cc77
-rw-r--r--media/base/android/media_codec_bridge.h16
-rw-r--r--media/base/android/media_codec_bridge_unittest.cc11
-rw-r--r--media/base/android/media_jni_registrar.cc3
-rw-r--r--media/base/android/media_source_player.cc4
-rw-r--r--media/media.gyp1
12 files changed, 229 insertions, 70 deletions
diff --git a/build/all_android.gyp b/build/all_android.gyp
index bf0d477..79bbcdd 100644
--- a/build/all_android.gyp
+++ b/build/all_android.gyp
@@ -100,6 +100,7 @@
'../components/components.gyp:components_unittests_apk',
'../content/content.gyp:content_browsertests_apk',
'../content/content.gyp:content_unittests_apk',
+ '../content/content.gyp:video_decode_accelerator_unittest_apk',
'../gpu/gpu.gyp:gl_tests_apk',
'../gpu/gpu.gyp:gpu_unittests_apk',
'../ipc/ipc.gyp:ipc_tests_apk',
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc
index 15d9d44..87a06f7 100644
--- a/content/common/gpu/media/android_video_decode_accelerator.cc
+++ b/content/common/gpu/media/android_video_decode_accelerator.cc
@@ -104,7 +104,10 @@ bool AndroidVideoDecodeAccelerator::Initialize(
surface_texture_ = new gfx::SurfaceTextureBridge(surface_texture_id_);
- ConfigureMediaCodec();
+ if (!ConfigureMediaCodec()) {
+ LOG(ERROR) << "Failed to create MediaCodec instance.";
+ return false;
+ }
base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
&AndroidVideoDecodeAccelerator::NotifyInitializeDone,
@@ -376,10 +379,12 @@ void AndroidVideoDecodeAccelerator::Flush() {
Decode(media::BitstreamBuffer(-1, base::SharedMemoryHandle(), 0));
}
-void AndroidVideoDecodeAccelerator::ConfigureMediaCodec() {
+bool AndroidVideoDecodeAccelerator::ConfigureMediaCodec() {
DCHECK(surface_texture_.get());
+ media_codec_.reset(media::VideoCodecBridge::Create(codec_));
- media_codec_.reset(new media::VideoCodecBridge(codec_));
+ if (!media_codec_)
+ return false;
gfx::ScopedJavaSurface surface(surface_texture_.get());
// VDA does not pass the container indicated resolution in the initialization
@@ -388,6 +393,7 @@ void AndroidVideoDecodeAccelerator::ConfigureMediaCodec() {
media_codec_->Start(
codec_, gfx::Size(1280, 720), surface.j_surface().obj());
media_codec_->GetOutputBuffers();
+ return true;
}
void AndroidVideoDecodeAccelerator::Reset() {
diff --git a/content/common/gpu/media/android_video_decode_accelerator.h b/content/common/gpu/media/android_video_decode_accelerator.h
index e892999..b846831 100644
--- a/content/common/gpu/media/android_video_decode_accelerator.h
+++ b/content/common/gpu/media/android_video_decode_accelerator.h
@@ -25,7 +25,6 @@ class SurfaceTextureBridge;
}
namespace content {
-
// A VideoDecodeAccelerator implementation for Android.
// This class decodes the input encoded stream by using Android's MediaCodec
// class. http://developer.android.com/reference/android/media/MediaCodec.html
@@ -59,7 +58,7 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator :
virtual ~AndroidVideoDecodeAccelerator();
// Configures |media_codec_| with the given codec parameters from the client.
- void ConfigureMediaCodec();
+ bool ConfigureMediaCodec();
// Sends the current picture on the surface to the client.
void SendCurrentSurfaceToClient(int32 bitstream_id);
@@ -163,6 +162,8 @@ class CONTENT_EXPORT AndroidVideoDecodeAccelerator :
// Used for copy the texture from |surface_texture_| to picture buffers.
scoped_ptr<gpu::CopyTextureCHROMIUMResourceManager> copier_;
+
+ friend class AndroidVideoDecodeAcceleratorTest;
};
} // namespace content
diff --git a/content/common/gpu/media/android_video_decode_accelerator_unittest.cc b/content/common/gpu/media/android_video_decode_accelerator_unittest.cc
new file mode 100644
index 0000000..baf516d
--- /dev/null
+++ b/content/common/gpu/media/android_video_decode_accelerator_unittest.cc
@@ -0,0 +1,102 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/gpu/media/android_video_decode_accelerator.h"
+
+#include "base/android/jni_android.h"
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/common/gpu/media/android_video_decode_accelerator.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
+#include "media/base/android/media_codec_bridge.h"
+#include "media/base/android/media_jni_registrar.h"
+#include "media/video/picture.h"
+#include "media/video/video_decode_accelerator.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/android/surface_texture_bridge.h"
+
+namespace {
+
+bool MockMakeContextCurrent() {
+ return true;
+}
+
+} // namespace
+
+namespace content {
+
+// TODO(felipeg): Add more unit tests to test the ordinary behavior of
+// AndroidVideoDecodeAccelerator.
+// http://crbug.com/178647
+class MockVideoDecodeAcceleratorClient
+ : public media::VideoDecodeAccelerator::Client {
+ public:
+ MockVideoDecodeAcceleratorClient() {};
+ virtual ~MockVideoDecodeAcceleratorClient() {};
+
+ // VideoDecodeAccelerator::Client implementation.
+ virtual void NotifyInitializeDone() OVERRIDE {};
+ virtual void ProvidePictureBuffers(uint32 requested_num_of_buffers,
+ const gfx::Size& dimensions,
+ uint32 texture_target) OVERRIDE {};
+ virtual void DismissPictureBuffer(int32 picture_buffer_id) OVERRIDE {};
+ virtual void PictureReady(const media::Picture& picture) OVERRIDE {};
+ virtual void NotifyEndOfBitstreamBuffer(
+ int32 bitstream_buffer_id) OVERRIDE {};
+ virtual void NotifyFlushDone() OVERRIDE {};
+ virtual void NotifyResetDone() OVERRIDE {};
+ virtual void NotifyError(
+ media::VideoDecodeAccelerator::Error error) OVERRIDE {};
+};
+
+class AndroidVideoDecodeAcceleratorTest : public testing::Test {
+ public:
+ virtual ~AndroidVideoDecodeAcceleratorTest() {}
+
+ protected:
+ virtual void SetUp() OVERRIDE {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ media::RegisterJni(env);
+ // TODO(felipeg): fix GL bindings, so that the decoder can perform GL
+ // calls.
+ scoped_ptr<gpu::gles2::MockGLES2Decoder> decoder(
+ new gpu::gles2::MockGLES2Decoder());
+ scoped_ptr<MockVideoDecodeAcceleratorClient> client(
+ new MockVideoDecodeAcceleratorClient());
+ accelerator_.reset(new AndroidVideoDecodeAccelerator(
+ client.get(), decoder->AsWeakPtr(),
+ base::Bind(&MockMakeContextCurrent)));
+ }
+
+ bool Configure(media::VideoCodec codec) {
+ AndroidVideoDecodeAccelerator* accelerator =
+ static_cast<AndroidVideoDecodeAccelerator*>(accelerator_.get());
+ accelerator->surface_texture_ = new gfx::SurfaceTextureBridge(0);
+ accelerator->codec_ = codec;
+ return accelerator->ConfigureMediaCodec();
+ }
+
+ private:
+ scoped_ptr<media::VideoDecodeAccelerator> accelerator_;
+};
+
+TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureUnsupportedCodec) {
+ if (!media::MediaCodecBridge::IsAvailable())
+ return;
+ EXPECT_FALSE(Configure(media::kUnknownVideoCodec));
+}
+
+TEST_F(AndroidVideoDecodeAcceleratorTest, ConfigureSupportedCodec) {
+ if (!media::MediaCodecBridge::IsAvailable())
+ return;
+ EXPECT_TRUE(Configure(media::kCodecVP8));
+}
+
+} // namespace content
+
+int main(int argc, char **argv) {
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index 9a82984..fcfe651 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -988,13 +988,11 @@
},
],
}],
- ['chromeos==1 or OS=="win"', {
- # TODO(felipeg): Make video_decode_accelerator_unittest work on Android.
- # http://crbug.com/178647
+ ['chromeos==1 or OS=="win" or OS=="android"', {
'targets': [
{
'target_name': 'video_decode_accelerator_unittest',
- 'type': 'executable',
+ 'type': '<(gtest_target_type)',
'dependencies': [
'content',
'../base/base.gyp:base',
@@ -1007,11 +1005,28 @@
'<(DEPTH)/third_party/khronos',
],
'sources': [
+ 'common/gpu/media/android_video_decode_accelerator_unittest.cc',
'common/gpu/media/rendering_helper.h',
'common/gpu/media/rendering_helper_gl.cc',
'common/gpu/media/video_decode_accelerator_unittest.cc',
],
'conditions': [
+ ['OS=="android"', {
+ 'sources/': [
+ ['exclude', '^common/gpu/media/rendering_helper.h'],
+ ['exclude', '^common/gpu/media/rendering_helper_gl.cc'],
+ ['exclude', '^common/gpu/media/video_decode_accelerator_unittest.cc'],
+ ],
+ 'dependencies': [
+ '../testing/gmock.gyp:gmock',
+ '../testing/android/native_test.gyp:native_test_native_code',
+ '../gpu/gpu.gyp:gpu_unittest_utils',
+ ],
+ }, { # OS!="android"
+ 'sources/': [
+ ['exclude', '^common/gpu/media/android_video_decode_accelerator_unittest.cc'],
+ ],
+ }],
['target_arch=="arm"', {
'include_dirs': [
'<(DEPTH)/third_party/openmax/il',
@@ -1101,6 +1116,18 @@
},
'includes': [ '../build/java_apk.gypi' ],
},
+ {
+ 'target_name': 'video_decode_accelerator_unittest_apk',
+ 'type': 'none',
+ 'dependencies': [
+ 'video_decode_accelerator_unittest',
+ ],
+ 'variables': {
+ 'test_suite_name': 'video_decode_accelerator_unittest',
+ 'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)content_unittests<(SHARED_LIB_SUFFIX)',
+ },
+ 'includes': [ '../build/apk_test.gypi' ],
+ },
],
}],
['OS == "android"', {
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
index 9e7894c..13b9334 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -111,8 +111,13 @@ class MediaCodecBridge {
}
@CalledByNative
- private MediaFormat getOutputFormat() {
- return mMediaCodec.getOutputFormat();
+ private int getOutputHeight() {
+ return mMediaCodec.getOutputFormat().getInteger(MediaFormat.KEY_HEIGHT);
+ }
+
+ @CalledByNative
+ private int getOutputWidth() {
+ return mMediaCodec.getOutputFormat().getInteger(MediaFormat.KEY_WIDTH);
}
@CalledByNative
@@ -156,6 +161,29 @@ class MediaCodecBridge {
}
@CalledByNative
+ private static MediaFormat createAudioFormat(String mime, int SampleRate, int ChannelCount) {
+ return MediaFormat.createAudioFormat(mime, SampleRate, ChannelCount);
+ }
+
+ @CalledByNative
+ private static MediaFormat createVideoFormat(String mime, int width, int height) {
+ return MediaFormat.createVideoFormat(mime, width, height);
+ }
+
+ @CalledByNative
+ private static void setCodecSpecificData(MediaFormat format, int index, ByteBuffer bytes) {
+ String name = null;
+ if (index == 0) {
+ name = "csd-0";
+ } else if (index == 1) {
+ name = "csd-1";
+ }
+ if (name != null) {
+ format.setByteBuffer(name, bytes);
+ }
+ }
+
+ @CalledByNative
private void configureAudio(MediaFormat format, MediaCrypto crypto, int flags,
boolean playAudio) {
mMediaCodec.configure(format, null, crypto, flags);
diff --git a/media/base/android/media_codec_bridge.cc b/media/base/android/media_codec_bridge.cc
index 37949f4..2587fc4 100644
--- a/media/base/android/media_codec_bridge.cc
+++ b/media/base/android/media_codec_bridge.cc
@@ -17,36 +17,11 @@
#include "base/stringprintf.h"
#include "jni/MediaCodecBridge_jni.h"
-#include "jni/MediaFormat_jni.h"
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 +67,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);
@@ -124,19 +98,8 @@ void MediaCodecBridge::Stop() {
void MediaCodecBridge::GetOutputFormat(int* width, int* height) {
JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> j_format(
- Java_MediaCodecBridge_getOutputFormat(env, j_media_codec_.obj()));
- if (!j_format.is_null()) {
- ScopedJavaLocalRef<jstring> j_key_width =
- ConvertUTF8ToJavaString(env, "width");
- *width = JNI_MediaFormat::Java_MediaFormat_getInteger(
- env, j_format.obj(), j_key_width.obj());
-
- ScopedJavaLocalRef<jstring> j_key_height =
- ConvertUTF8ToJavaString(env, "height");
- *height = JNI_MediaFormat::Java_MediaFormat_getInteger(
- env, j_format.obj(), j_key_height.obj());
- }
+ *width = Java_MediaCodecBridge_getOutputWidth(env, j_media_codec_.obj());
+ *height = Java_MediaCodecBridge_getOutputHeight(env, j_media_codec_.obj());
}
size_t MediaCodecBridge::QueueInputBuffer(
@@ -213,8 +176,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(
@@ -226,7 +189,7 @@ bool AudioCodecBridge::Start(
ScopedJavaLocalRef<jstring> j_mime =
ConvertUTF8ToJavaString(env, AudioCodecToMimeType(codec));
ScopedJavaLocalRef<jobject> j_format(
- JNI_MediaFormat::Java_MediaFormat_createAudioFormat(
+ Java_MediaCodecBridge_createAudioFormat(
env, j_mime.obj(), sample_rate, channel_count));
DCHECK(!j_format.is_null());
@@ -266,16 +229,14 @@ bool AudioCodecBridge::Start(
// The first header is identification header.
jobject identification_header = env->NewDirectByteBuffer(
const_cast<uint8*>(current_pos), header_length[0]);
- ScopedJavaLocalRef<jstring> j_csd_0 = ConvertUTF8ToJavaString(env, "csd-0");
- JNI_MediaFormat::Java_MediaFormat_setByteBuffer(
- env, j_format.obj(), j_csd_0.obj(), identification_header);
+ Java_MediaCodecBridge_setCodecSpecificData(
+ env, j_format.obj(), 0, identification_header);
// The last header is codec header.
jobject codec_header = env->NewDirectByteBuffer(
const_cast<uint8*>(extra_data + total_length),
extra_data_size - total_length);
- ScopedJavaLocalRef<jstring> j_csd_1 = ConvertUTF8ToJavaString(env, "csd-1");
- JNI_MediaFormat::Java_MediaFormat_setByteBuffer(
- env, j_format.obj(), j_csd_1.obj(), codec_header);
+ Java_MediaCodecBridge_setCodecSpecificData(
+ env, j_format.obj(), 1, codec_header);
env->DeleteLocalRef(codec_header);
env->DeleteLocalRef(identification_header);
}
@@ -300,8 +261,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(
@@ -312,7 +273,7 @@ bool VideoCodecBridge::Start(
ScopedJavaLocalRef<jstring> j_mime =
ConvertUTF8ToJavaString(env, VideoCodecToMimeType(codec));
ScopedJavaLocalRef<jobject> j_format(
- JNI_MediaFormat::Java_MediaFormat_createVideoFormat(
+ Java_MediaCodecBridge_createVideoFormat(
env, j_mime.obj(), size.width(), size.height()));
DCHECK(!j_format.is_null());
Java_MediaCodecBridge_configureVideo(
@@ -321,5 +282,19 @@ 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) {
+ return RegisterNativesImpl(env);
+}
+
} // namespace media
diff --git a/media/base/android/media_codec_bridge.h b/media/base/android/media_codec_bridge.h
index bff24f9..7bea7b6 100644
--- a/media/base/android/media_codec_bridge.h
+++ b/media/base/android/media_codec_bridge.h
@@ -85,6 +85,8 @@ class MEDIA_EXPORT MediaCodecBridge {
// To access them, use DequeueOutputBuffer().
void GetOutputBuffers();
+ static bool RegisterMediaCodecBridge(JNIEnv* env);
+
protected:
explicit MediaCodecBridge(const char* mime);
@@ -103,7 +105,9 @@ class MEDIA_EXPORT MediaCodecBridge {
class AudioCodecBridge : public MediaCodecBridge {
public:
- explicit AudioCodecBridge(const AudioCodec codec);
+ // Returns an AudioCodecBridge instance if |codec| is supported, or a NULL
+ // pointer otherwise.
+ static AudioCodecBridge* Create(const AudioCodec codec);
// Start the audio codec bridge.
bool Start(const AudioCodec codec, int sample_rate, int channel_count,
@@ -113,16 +117,24 @@ class AudioCodecBridge : public MediaCodecBridge {
// Play the output buffer. This call must be called after
// DequeueOutputBuffer() and before ReleaseOutputBuffer.
void PlayOutputBuffer(int index, size_t size);
+
+ private:
+ explicit AudioCodecBridge(const char* mime);
};
class VideoCodecBridge : public MediaCodecBridge {
public:
- explicit VideoCodecBridge(const VideoCodec codec);
+ // Returns an VideoCodecBridge instance if |codec| is supported, or a NULL
+ // pointer otherwise.
+ static VideoCodecBridge* Create(const VideoCodec codec);
// Start the video codec bridge.
// TODO(qinmin): Pass codec specific data if available.
bool Start(
const VideoCodec codec, const gfx::Size& size, jobject surface);
+
+ private:
+ explicit VideoCodecBridge(const char* mime);
};
} // namespace media
diff --git a/media/base/android/media_codec_bridge_unittest.cc b/media/base/android/media_codec_bridge_unittest.cc
index ea95c52..962ae3a 100644
--- a/media/base/android/media_codec_bridge_unittest.cc
+++ b/media/base/android/media_codec_bridge_unittest.cc
@@ -97,7 +97,7 @@ TEST(MediaCodecBridgeTest, Initialize) {
return;
scoped_ptr<media::MediaCodecBridge> media_codec;
- media_codec.reset(new VideoCodecBridge(kCodecH264));
+ media_codec.reset(VideoCodecBridge::Create(kCodecH264));
}
TEST(MediaCodecBridgeTest, DoNormal) {
@@ -105,7 +105,7 @@ TEST(MediaCodecBridgeTest, DoNormal) {
return;
scoped_ptr<media::AudioCodecBridge> media_codec;
- media_codec.reset(new AudioCodecBridge(kCodecMP3));
+ media_codec.reset(AudioCodecBridge::Create(kCodecMP3));
media_codec->Start(kCodecMP3, 44100, 2, NULL, 0, false);
@@ -162,7 +162,7 @@ TEST(MediaCodecBridgeTest, InvalidVorbisHeader) {
return;
scoped_ptr<media::AudioCodecBridge> media_codec;
- media_codec.reset(new AudioCodecBridge(kCodecVorbis));
+ media_codec.reset(AudioCodecBridge::Create(kCodecVorbis));
// The first byte of the header is not 0x02.
uint8 invalid_first_byte[] = { 0x00, 0xff, 0xff, 0xff, 0xff };
@@ -187,4 +187,9 @@ TEST(MediaCodecBridgeTest, InvalidVorbisHeader) {
delete[] very_large_header;
}
+TEST(MediaCodecBridgeTest, CreateUnsupportedCodec) {
+ EXPECT_EQ(NULL, AudioCodecBridge::Create(kUnknownAudioCodec));
+ EXPECT_EQ(NULL, VideoCodecBridge::Create(kUnknownVideoCodec));
+}
+
} // namespace media
diff --git a/media/base/android/media_jni_registrar.cc b/media/base/android/media_jni_registrar.cc
index 9cedfac..93a46c3 100644
--- a/media/base/android/media_jni_registrar.cc
+++ b/media/base/android/media_jni_registrar.cc
@@ -9,6 +9,7 @@
#include "base/android/jni_registrar.h"
#include "media/audio/android/audio_manager_android.h"
+#include "media/base/android/media_codec_bridge.h"
#include "media/base/android/media_player_bridge.h"
#include "media/base/android/media_player_listener.h"
#include "media/base/android/webaudio_media_codec_bridge.h"
@@ -19,6 +20,8 @@ namespace media {
static base::android::RegistrationMethod kMediaRegisteredMethods[] = {
{ "AudioManagerAndroid",
AudioManagerAndroid::RegisterAudioManager },
+ { "MediaCodecBridge",
+ MediaCodecBridge::RegisterMediaCodecBridge },
{ "MediaPlayerBridge",
MediaPlayerBridge::RegisterMediaPlayerBridge },
{ "MediaPlayerListener",
diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc
index 00cddb7..193c1a3 100644
--- a/media/base/android/media_source_player.cc
+++ b/media/base/android/media_source_player.cc
@@ -167,7 +167,7 @@ VideoDecoderJob::VideoDecoderJob(
const scoped_refptr<base::MessageLoopProxy>& message_loop,
const VideoCodec video_codec, const gfx::Size& size, jobject surface)
: MediaDecoderJob(false, message_loop) {
- scoped_ptr<VideoCodecBridge> codec(new VideoCodecBridge(video_codec));
+ scoped_ptr<VideoCodecBridge> codec(VideoCodecBridge::Create(video_codec));
codec->Start(video_codec, size, surface);
media_codec_bridge_.reset(codec.release());
thread_.reset(new base::Thread("MediaSource_VideoDecoderThread"));
@@ -181,7 +181,7 @@ AudioDecoderJob::AudioDecoderJob(
const uint8* extra_data,
size_t extra_data_size)
: MediaDecoderJob(true, message_loop) {
- scoped_ptr<AudioCodecBridge> codec(new AudioCodecBridge(audio_codec));
+ scoped_ptr<AudioCodecBridge> codec(AudioCodecBridge::Create(audio_codec));
codec->Start(audio_codec, sample_rate, channel_count, extra_data,
extra_data_size, true);
media_codec_bridge_.reset(codec.release());
diff --git a/media/media.gyp b/media/media.gyp
index 253f6d4..b913d68 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -1584,7 +1584,6 @@
'dependencies': [
'../base/base.gyp:base',
'media_android_jni_headers',
- 'media_format_jni_headers',
],
'include_dirs': [
'<(SHARED_INTERMEDIATE_DIR)/media',