コード例 #1
0
status_t BnRemoteDisplayClient::onTransact(
    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
    switch (code) {
    case ON_DISPLAY_CONNECTED: {
        CHECK_INTERFACE(IRemoteDisplayClient, data, reply);
        sp<IGraphicBufferProducer> surfaceTexture(
            interface_cast<IGraphicBufferProducer>(data.readStrongBinder()));
        uint32_t width = data.readInt32();
        uint32_t height = data.readInt32();
        uint32_t flags = data.readInt32();
        uint32_t session = data.readInt32();
        onDisplayConnected(surfaceTexture, width, height, flags, session);
        return NO_ERROR;
    }
    case ON_DISPLAY_DISCONNECTED: {
        CHECK_INTERFACE(IRemoteDisplayClient, data, reply);
        onDisplayDisconnected();
        return NO_ERROR;
    }
    case ON_DISPLAY_ERROR: {
        CHECK_INTERFACE(IRemoteDisplayClient, data, reply);
        int32_t error = data.readInt32();
        onDisplayError(error);
        return NO_ERROR;
    }
    default:
        return BBinder::onTransact(code, data, reply, flags);
    }
}
コード例 #2
0
static jint jni_eglCreateWindowSurfaceTexture(JNIEnv *_env, jobject _this, jobject display,
        jobject config, jobject native_window, jintArray attrib_list) {
    if (display == NULL || config == NULL
        || !validAttribList(_env, attrib_list)) {
        jniThrowException(_env, "java/lang/IllegalArgumentException", NULL);
        return JNI_FALSE;
    }
    EGLDisplay dpy = getDisplay(_env, display);
    EGLContext cnf = getConfig(_env, config);
    sp<ANativeWindow> window;
    if (native_window == 0) {
not_valid_surface:
        jniThrowException(_env, "java/lang/IllegalArgumentException",
                "Make sure the SurfaceTexture is valid");
        return 0;
    }
    
    sp<SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(_env, native_window));

    window = new SurfaceTextureClient(surfaceTexture);
    if (window == NULL)
        goto not_valid_surface;

    jint* base = beginNativeAttribList(_env, attrib_list);
    EGLSurface sur = eglCreateWindowSurface(dpy, cnf, window.get(), base);
    endNativeAttributeList(_env, attrib_list, base);
    return (jint)sur;
}
コード例 #3
0
void CSurfaceTexture::NativeGetTransformMatrix(
    /* [in] */ ArrayOf<Float>* mtxArray)
{
    android::sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    float* mtx = mtxArray->GetPayload();
    surfaceTexture->getTransformMatrix(mtx);
}
コード例 #4
0
void CSurfaceTexture::NativeSetDefaultBufferSize(
    /* [in] */ Int32 width,
    /* [in] */ Int32 height)
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    surfaceTexture->setDefaultBufferSize(width, height);
}
コード例 #5
0
void CSurfaceTexture::NativeFinalize()
{
    android::sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    surfaceTexture->setFrameAvailableListener(0);
    SurfaceTexture_setFrameAvailableListener(this, 0);
    SurfaceTexture_setSurfaceTexture(this, 0);
    SurfaceTexture_setProducer(this, 0);
}
コード例 #6
0
sp<ANativeWindow> android_SurfaceTexture_getNativeWindow(
        JNIEnv* env, jobject thiz)
{
    sp<SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    sp<SurfaceTextureClient> surfaceTextureClient(surfaceTexture != NULL ?
            new SurfaceTextureClient(surfaceTexture) : NULL);
    return surfaceTextureClient;
}
コード例 #7
0
static void SurfaceTexture_getTransformMatrix(JNIEnv* env, jobject thiz,
        jfloatArray jmtx)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    float* mtx = env->GetFloatArrayElements(jmtx, NULL);
    surfaceTexture->getTransformMatrix(mtx);
    env->ReleaseFloatArrayElements(jmtx, mtx, 0);
}
コード例 #8
0
static void SurfaceTexture_finalize(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    surfaceTexture->setFrameAvailableListener(0);
    SurfaceTexture_setFrameAvailableListener(env, thiz, 0);
    SurfaceTexture_setSurfaceTexture(env, thiz, 0);
    SurfaceTexture_setProducer(env, thiz, 0);
}
コード例 #9
0
static void SurfaceTexture_releaseTexImage(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    status_t err = surfaceTexture->releaseTexImage();
    if (err == INVALID_OPERATION) {
        jniThrowException(env, IllegalStateException, "Unable to release texture contents (see "
                "logcat for details)");
    } else if (err < 0) {
        jniThrowRuntimeException(env, "Error during releaseTexImage (see logcat for details)");
    }
}
コード例 #10
0
ECode CSurfaceTexture::NativeUpdateTexImage()
{
    android::sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    android::status_t err = surfaceTexture->updateTexImage();
    if (err == android::INVALID_OPERATION) {
        // jniThrowException(env, IllegalStateException, "Unable to update texture contents (see "
        //         "logcat for details)");
        return E_ILLEGAL_STATE_EXCEPTION;
    } else if (err < 0) {
        // jniThrowRuntimeException(env, "Error during updateTexImage (see logcat for details)");
        return E_RUNTIME_EXCEPTION;
    }
    return NOERROR;
}
コード例 #11
0
ECode CSurfaceTexture::NativeInit(
    /* [in] */ Int32 texName,
    /* [in] */ Boolean allowSynchronousMode)
{
    android::sp<android::SurfaceTexture> surfaceTexture(new android::SurfaceTexture(texName, allowSynchronousMode));
    if (surfaceTexture == 0) {
        // jniThrowException(env, OutOfResourcesException,
        //         "Unable to create native SurfaceTexture");
        return E_OUT_OF_RESOURCES_EXCEPTION;
    }
    SurfaceTexture_setSurfaceTexture(this, surfaceTexture);

    android::sp<DroidSurfaceTextureContext> ctx(new DroidSurfaceTextureContext(this));
    surfaceTexture->setFrameAvailableListener(ctx);

    return NOERROR;
}
コード例 #12
0
static void SurfaceTexture_init(JNIEnv* env, jobject thiz, jint texName,
        jobject weakThiz, jboolean allowSynchronous)
{
    sp<SurfaceTexture> surfaceTexture(new SurfaceTexture(texName, allowSynchronous));
    if (surfaceTexture == 0) {
        jniThrowException(env, OutOfResourcesException,
                "Unable to create native SurfaceTexture");
        return;
    }
    SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture);

    jclass clazz = env->GetObjectClass(thiz);
    if (clazz == NULL) {
        jniThrowRuntimeException(env,
                "Can't find android/graphics/SurfaceTexture");
        return;
    }

    sp<JNISurfaceTextureContext> ctx(new JNISurfaceTextureContext(env, weakThiz,
            clazz));
    surfaceTexture->setFrameAvailableListener(ctx);
}
コード例 #13
0
static void SurfaceTexture_release(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    surfaceTexture->abandon();
}
コード例 #14
0
sp<SurfaceTexture> SurfaceTexture_getSurfaceTexture(JNIEnv* env, jobject thiz)
{
    sp<SurfaceTexture> surfaceTexture(
        (SurfaceTexture*)env->GetIntField(thiz, fields.surfaceTexture));
    return surfaceTexture;
}
コード例 #15
0
static jlong SurfaceTexture_getTimestamp(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->getTimestamp();
}
コード例 #16
0
static jint SurfaceTexture_detachFromGLContext(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->detachFromContext();
}
コード例 #17
0
static jint SurfaceTexture_attachToGLContext(JNIEnv* env, jobject thiz, jint tex)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->attachToContext((GLuint)tex);
}
コード例 #18
0
static void SurfaceTexture_setDefaultBufferSize(
        JNIEnv* env, jobject thiz, jint width, jint height) {
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    surfaceTexture->setDefaultBufferSize(width, height);
}
コード例 #19
0
android::sp<android::SurfaceTexture> SurfaceTexture_getSurfaceTexture(
    /* [in] */ CSurfaceTexture* thiz)
{
    android::sp<android::SurfaceTexture> surfaceTexture((android::SurfaceTexture*)thiz->mSurfaceTexture);
    return surfaceTexture;
}
コード例 #20
0
sp<ANativeWindow> android_SurfaceTexture_getNativeWindow(JNIEnv* env, jobject thiz) {
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    sp<IGraphicBufferProducer> producer(SurfaceTexture_getProducer(env, thiz));
    sp<Surface> surfaceTextureClient(surfaceTexture != NULL ? new Surface(producer) : NULL);
    return surfaceTextureClient;
}
コード例 #21
0
void CSurfaceTexture::NativeFinalize()
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    surfaceTexture->setFrameAvailableListener(0);
    SurfaceTexture_setSurfaceTexture(this, 0);
}
コード例 #22
0
void CSurfaceTexture::NativeRelease()
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    surfaceTexture->abandon();
}
コード例 #23
0
static jboolean SurfaceTexture_isReleased(JNIEnv* env, jobject thiz)
{
    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->isAbandoned();
}
コード例 #24
0
Int32 CSurfaceTexture::NativeAttachToGLContext(
    /* [in] */ Int32 texName)
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    return surfaceTexture->attachToContext((GLuint)texName);
}
コード例 #25
0
Int32 CSurfaceTexture::NativeDetachFromGLContext()
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    return surfaceTexture->detachFromContext();
}
コード例 #26
0
static jint SurfaceTexture_updateTexImage(JNIEnv* env, jobject thiz)
{
    sp<SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, thiz));
    return surfaceTexture->updateTexImage();
}
コード例 #27
0
Int64 CSurfaceTexture::NativeGetTimestamp()
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    return surfaceTexture->getTimestamp();
}
コード例 #28
0
void CSurfaceTexture::NativeGetTransformMatrix(
    /* [in] */ const ArrayOf<Float>& mtx)
{
    android::sp<android::SurfaceTexture> surfaceTexture(SurfaceTexture_getSurfaceTexture(this));
    surfaceTexture->getTransformMatrix(mtx.GetPayload());
}