diff options
author | Andreas Huber <andih@google.com> | 2009-09-15 12:49:11 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2009-09-15 12:49:11 -0700 |
commit | 1b84df1a0823fbcb9cec754311f53eaccfe85ae3 (patch) | |
tree | d6f4de4d8cb283ed7dbb0a8b0f5f9c4626a24fc6 | |
parent | 85cca02ebdc636e9b3ed5894503671fd043bf2a7 (diff) | |
download | frameworks_av-1b84df1a0823fbcb9cec754311f53eaccfe85ae3.zip frameworks_av-1b84df1a0823fbcb9cec754311f53eaccfe85ae3.tar.gz frameworks_av-1b84df1a0823fbcb9cec754311f53eaccfe85ae3.tar.bz2 |
Added an API IOMX::createRendererFromJavaSurface.
This api allows to instantiate a renderer by specifying the hosting java Surface object. This hides the implementation details of (java-)Surface, (native-)Surface and friends.
-rw-r--r-- | cmds/stagefright/Android.mk | 2 | ||||
-rw-r--r-- | include/media/IOMX.h | 13 | ||||
-rw-r--r-- | media/libmedia/Android.mk | 1 | ||||
-rw-r--r-- | media/libmedia/IOMX.cpp | 25 | ||||
-rw-r--r-- | media/libmediaplayerservice/Android.mk | 1 | ||||
-rw-r--r-- | media/libstagefright/Android.mk | 1 | ||||
-rw-r--r-- | media/libstagefright/omx/Android.mk | 1 |
7 files changed, 42 insertions, 2 deletions
diff --git a/cmds/stagefright/Android.mk b/cmds/stagefright/Android.mk index 39ed769..5b55252 100644 --- a/cmds/stagefright/Android.mk +++ b/cmds/stagefright/Android.mk @@ -11,6 +11,7 @@ LOCAL_SHARED_LIBRARIES := \ libstagefright LOCAL_C_INCLUDES:= \ + $(JNI_H_INCLUDE) \ frameworks/base/media/libstagefright \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include @@ -32,6 +33,7 @@ LOCAL_SHARED_LIBRARIES := \ libstagefright LOCAL_C_INCLUDES:= \ + $(JNI_H_INCLUDE) \ frameworks/base/media/libstagefright \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include diff --git a/include/media/IOMX.h b/include/media/IOMX.h index 0014d5c..10e0197 100644 --- a/include/media/IOMX.h +++ b/include/media/IOMX.h @@ -25,6 +25,8 @@ #include <OMX_Core.h> #include <OMX_Video.h> +#include "jni.h" + namespace android { class IMemory; @@ -102,15 +104,22 @@ public: size_t encodedWidth, size_t encodedHeight, size_t displayWidth, size_t displayHeight) = 0; - // Note: This method is _not_ virtual, it exists as a wrapper around + // Note: These methods are _not_ virtual, it exists as a wrapper around // the virtual "createRenderer" method above facilitating extraction - // of the ISurface from a regular Surface. + // of the ISurface from a regular Surface or a java Surface object. sp<IOMXRenderer> createRenderer( const sp<Surface> &surface, const char *componentName, OMX_COLOR_FORMATTYPE colorFormat, size_t encodedWidth, size_t encodedHeight, size_t displayWidth, size_t displayHeight); + + sp<IOMXRenderer> createRendererFromJavaSurface( + JNIEnv *env, jobject javaSurface, + const char *componentName, + OMX_COLOR_FORMATTYPE colorFormat, + size_t encodedWidth, size_t encodedHeight, + size_t displayWidth, size_t displayHeight); }; struct omx_message { diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index 9d442c3..7c01687 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -37,6 +37,7 @@ LOCAL_SHARED_LIBRARIES += libdl endif LOCAL_C_INCLUDES := \ + $(JNI_H_INCLUDE) \ $(call include-path-for, graphics corecg) \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp index 10bebd0..0cec7bb 100644 --- a/media/libmedia/IOMX.cpp +++ b/media/libmedia/IOMX.cpp @@ -45,6 +45,31 @@ sp<IOMXRenderer> IOMX::createRenderer( displayWidth, displayHeight); } +sp<IOMXRenderer> IOMX::createRendererFromJavaSurface( + JNIEnv *env, jobject javaSurface, + const char *componentName, + OMX_COLOR_FORMATTYPE colorFormat, + size_t encodedWidth, size_t encodedHeight, + size_t displayWidth, size_t displayHeight) { + jclass surfaceClass = env->FindClass("android/view/Surface"); + if (surfaceClass == NULL) { + LOGE("Can't find android/view/Surface"); + return NULL; + } + + jfieldID surfaceID = env->GetFieldID(surfaceClass, "mSurface", "I"); + if (surfaceID == NULL) { + LOGE("Can't find Surface.mSurface"); + return NULL; + } + + sp<Surface> surface = (Surface *)env->GetIntField(javaSurface, surfaceID); + + return createRenderer( + surface, componentName, colorFormat, encodedWidth, + encodedHeight, displayWidth, displayHeight); +} + class BpOMX : public BpInterface<IOMX> { public: BpOMX(const sp<IBinder> &impl) diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index 93b7a3a..f21eb73 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -47,6 +47,7 @@ LOCAL_SHARED_LIBRARIES += libdl endif LOCAL_C_INCLUDES := external/tremor/Tremor \ + $(JNI_H_INCLUDE) \ $(call include-path-for, graphics corecg) \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \ $(TOP)/frameworks/base/media/libstagefright/omx diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk index 79a32b5..3c343a3 100644 --- a/media/libstagefright/Android.mk +++ b/media/libstagefright/Android.mk @@ -38,6 +38,7 @@ LOCAL_SRC_FILES += \ endif LOCAL_C_INCLUDES:= \ + $(JNI_H_INCLUDE) \ $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \ $(TOP)/external/opencore/android diff --git a/media/libstagefright/omx/Android.mk b/media/libstagefright/omx/Android.mk index 77e42be..4cadccd 100644 --- a/media/libstagefright/omx/Android.mk +++ b/media/libstagefright/omx/Android.mk @@ -7,6 +7,7 @@ LOCAL_C_INCLUDES := $(PV_INCLUDES) LOCAL_CFLAGS := $(PV_CFLAGS_MINUS_VISIBILITY) LOCAL_C_INCLUDES += $(TOP)/hardware/ti/omap3/liboverlay +LOCAL_C_INCLUDES += $(JNI_H_INCLUDE) LOCAL_SRC_FILES:= \ OMX.cpp \ |