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.
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 @@
 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 @@
             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 @@
 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 @@
 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_CFLAGS := $(PV_CFLAGS_MINUS_VISIBILITY)
 
 LOCAL_C_INCLUDES += $(TOP)/hardware/ti/omap3/liboverlay
+LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
 
 LOCAL_SRC_FILES:=                 \
 	OMX.cpp                   \