diff options
author | Andy McFadden <fadden@android.com> | 2013-02-19 07:29:21 -0800 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2013-03-04 15:04:12 -0800 |
commit | 2621e40d0e0a496a96575768b7e2b70e3b3be640 (patch) | |
tree | 25a3bbd0efdbfa24c637eda15cb505e7e665f101 /media/jni/android_media_MediaCodec.cpp | |
parent | cdac497289fd2c39a352f6167dae3f77cc608cb8 (diff) | |
download | frameworks_base-2621e40d0e0a496a96575768b7e2b70e3b3be640.zip frameworks_base-2621e40d0e0a496a96575768b7e2b70e3b3be640.tar.gz frameworks_base-2621e40d0e0a496a96575768b7e2b70e3b3be640.tar.bz2 |
Implement Surface input to MediaCodec.
Adds two new public methods to MediaCodec, and one new public
constant to MediaCodecInfo (currently @hidden).
Bug 7991062
Change-Id: I830a9794e92334ad05c870cc5fc90be4652147a5
Diffstat (limited to 'media/jni/android_media_MediaCodec.cpp')
-rw-r--r-- | media/jni/android_media_MediaCodec.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 86700b3..3a42db2 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -123,6 +123,11 @@ status_t JMediaCodec::configure( return mCodec->configure(format, mSurfaceTextureClient, crypto, flags); } +status_t JMediaCodec::createInputSurface( + sp<IGraphicBufferProducer>* bufferProducer) { + return mCodec->createInputSurface(bufferProducer); +} + status_t JMediaCodec::start() { return mCodec->start(); } @@ -190,6 +195,10 @@ status_t JMediaCodec::releaseOutputBuffer(size_t index, bool render) { : mCodec->releaseOutputBuffer(index); } +status_t JMediaCodec::signalEndOfInputStream() { + return mCodec->signalEndOfInputStream(); +} + status_t JMediaCodec::getOutputFormat(JNIEnv *env, jobject *format) const { sp<AMessage> msg; status_t err; @@ -417,6 +426,29 @@ static void android_media_MediaCodec_native_configure( throwExceptionAsNecessary(env, err); } +static jobject android_media_MediaCodec_createInputSurface(JNIEnv* env, + jobject thiz) { + ALOGV("android_media_MediaCodec_createInputSurface"); + + sp<JMediaCodec> codec = getMediaCodec(env, thiz); + if (codec == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", NULL); + return NULL; + } + + // Tell the MediaCodec that we want to use a Surface as input. + sp<IGraphicBufferProducer> bufferProducer; + status_t err = codec->createInputSurface(&bufferProducer); + if (err != NO_ERROR) { + throwExceptionAsNecessary(env, err); + return NULL; + } + + // Wrap the IGBP in a Java-language Surface. + return android_view_Surface_createFromIGraphicBufferProducer(env, + bufferProducer); +} + static void android_media_MediaCodec_start(JNIEnv *env, jobject thiz) { ALOGV("android_media_MediaCodec_start"); @@ -685,6 +717,21 @@ static void android_media_MediaCodec_releaseOutputBuffer( throwExceptionAsNecessary(env, err); } +static void android_media_MediaCodec_signalEndOfInputStream(JNIEnv* env, + jobject thiz) { + ALOGV("android_media_MediaCodec_signalEndOfInputStream"); + + sp<JMediaCodec> codec = getMediaCodec(env, thiz); + if (codec == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", NULL); + return; + } + + status_t err = codec->signalEndOfInputStream(); + + throwExceptionAsNecessary(env, err); +} + static jobject android_media_MediaCodec_getOutputFormatNative( JNIEnv *env, jobject thiz) { ALOGV("android_media_MediaCodec_getOutputFormatNative"); @@ -852,6 +899,9 @@ static JNINativeMethod gMethods[] = { "Landroid/media/MediaCrypto;I)V", (void *)android_media_MediaCodec_native_configure }, + { "createInputSurface", "()Landroid/view/Surface;", + (void *)android_media_MediaCodec_createInputSurface }, + { "start", "()V", (void *)android_media_MediaCodec_start }, { "stop", "()V", (void *)android_media_MediaCodec_stop }, { "flush", "()V", (void *)android_media_MediaCodec_flush }, @@ -871,6 +921,9 @@ static JNINativeMethod gMethods[] = { { "releaseOutputBuffer", "(IZ)V", (void *)android_media_MediaCodec_releaseOutputBuffer }, + { "signalEndOfInputStream", "()V", + (void *)android_media_MediaCodec_signalEndOfInputStream }, + { "getOutputFormatNative", "()Ljava/util/Map;", (void *)android_media_MediaCodec_getOutputFormatNative }, |