summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-09-15 12:49:11 -0700
committerAndreas Huber <andih@google.com>2009-09-15 12:49:11 -0700
commit1b84df1a0823fbcb9cec754311f53eaccfe85ae3 (patch)
treed6f4de4d8cb283ed7dbb0a8b0f5f9c4626a24fc6 /media/libmedia
parent85cca02ebdc636e9b3ed5894503671fd043bf2a7 (diff)
downloadframeworks_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.
Diffstat (limited to 'media/libmedia')
-rw-r--r--media/libmedia/Android.mk1
-rw-r--r--media/libmedia/IOMX.cpp25
2 files changed, 26 insertions, 0 deletions
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)