Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f9afef3 authored by Andreas Huber's avatar Andreas Huber
Browse files

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.
parent e80534ff
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -11,6 +11,7 @@ LOCAL_SHARED_LIBRARIES := \
	libstagefright
	libstagefright


LOCAL_C_INCLUDES:= \
LOCAL_C_INCLUDES:= \
	$(JNI_H_INCLUDE) \
	frameworks/base/media/libstagefright \
	frameworks/base/media/libstagefright \
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include


@@ -32,6 +33,7 @@ LOCAL_SHARED_LIBRARIES := \
	libstagefright
	libstagefright


LOCAL_C_INCLUDES:= \
LOCAL_C_INCLUDES:= \
	$(JNI_H_INCLUDE) \
	frameworks/base/media/libstagefright \
	frameworks/base/media/libstagefright \
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include


+11 −2
Original line number Original line Diff line number Diff line
@@ -25,6 +25,8 @@
#include <OMX_Core.h>
#include <OMX_Core.h>
#include <OMX_Video.h>
#include <OMX_Video.h>


#include "jni.h"

namespace android {
namespace android {


class IMemory;
class IMemory;
@@ -102,15 +104,22 @@ public:
            size_t encodedWidth, size_t encodedHeight,
            size_t encodedWidth, size_t encodedHeight,
            size_t displayWidth, size_t displayHeight) = 0;
            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
    // 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(
    sp<IOMXRenderer> createRenderer(
            const sp<Surface> &surface,
            const sp<Surface> &surface,
            const char *componentName,
            const char *componentName,
            OMX_COLOR_FORMATTYPE colorFormat,
            OMX_COLOR_FORMATTYPE colorFormat,
            size_t encodedWidth, size_t encodedHeight,
            size_t encodedWidth, size_t encodedHeight,
            size_t displayWidth, size_t displayHeight);
            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 {
struct omx_message {
+1 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ LOCAL_SHARED_LIBRARIES += libdl
endif
endif


LOCAL_C_INCLUDES := \
LOCAL_C_INCLUDES := \
	$(JNI_H_INCLUDE) \
	$(call include-path-for, graphics corecg) \
	$(call include-path-for, graphics corecg) \
        $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
        $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include


+25 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,31 @@ sp<IOMXRenderer> IOMX::createRenderer(
            displayWidth, displayHeight);
            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> {
class BpOMX : public BpInterface<IOMX> {
public:
public:
    BpOMX(const sp<IBinder> &impl)
    BpOMX(const sp<IBinder> &impl)
+1 −0
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ LOCAL_SHARED_LIBRARIES += libdl
endif
endif


LOCAL_C_INCLUDES := external/tremor/Tremor                              \
LOCAL_C_INCLUDES := external/tremor/Tremor                              \
	$(JNI_H_INCLUDE)                                                \
	$(call include-path-for, graphics corecg)                       \
	$(call include-path-for, graphics corecg)                       \
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
	$(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
	$(TOP)/frameworks/base/media/libstagefright/omx
	$(TOP)/frameworks/base/media/libstagefright/omx
Loading