Android.Единство родной текстуры с Java.Ошибка E / NativeCrypto - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь перенести предварительный просмотр камеры из родного Java-плагина в одно целое. Я создаю Texture2D в Unity, делю имя openGl на плагин Java. В java-коде я создаю SearTexture и запускаю камеру с этой текстурой. Я ожидаю, что на стороне Unity я увижу предварительный просмотр камеры.

Быт я вижу только черный скрин.

Также в logcat есть несколько ошибок:

09-13 10:58:36.979 9773-9773/com.aaa.nativecamera E/MPlugin: Unsupported class: com.mediatek.common.telephony.IOnlyOwnerSimSupport

09-13 10:58:41.557 9773-9799/com.aaa.nativecamera E/NativeCrypto: ssl=0xdf2c07c0 cert_verify_callback x509_store_ctx=0xcaf7f4ac arg=0x0
ssl=0xdf2c07c0 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA

09-13 10:58:43.113 9773-9800/com.aaa.nativecamera E/NativeCrypto: ssl=0xc742bcc0 cert_verify_callback x509_store_ctx=0xcae804ac arg=0x0
ssl=0xc742bcc0 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA

также в logcat появляется странное сообщение

09-13 11:02:17.797 9773-9785/com.aaa.nativecamera I/BufferQueueProducer: [SurfaceTexture-22-9773-0](this:0xc73fa000,id:0,api:4,p:412,c:9773) queueBuffer: slot 1 is dropped, handle=0xe7fb4400

родной плагин Java:

...
public int startCamera(int pointer){
    PermissionFragment.RequestPermissions();
    int texturePointer = createExternalTexture(pointer);
    mSurfaceTexture = new SurfaceTexture(texturePointer);
    mSurfaceTexture.setOnFrameAvailableListener(this);
    mSurfaceTexture.detachFromGLContext();

    startPreview();

    return texturePointer;
}
...
private void startPreview() {
    mCamera = Camera.open();
    if (mCamera == null) {
        throw new RuntimeException("Default camera not available");
    }

    try {
        mCamera.setPreviewTexture(mSurfaceTexture);
        mCamera.setDisplayOrientation(90);
        mCamera.startPreview();
    } catch (IOException ioe) {
        // Something bad happened
    }
}
...
private int createExternalTexture(int pointer) {
    int[] textureIdContainer = new int[1];

    int error;
    if (pointer == 0) {
        GLES20.glGenTextures(1, textureIdContainer, 0);
        error = GLES20.glGetError();
    } else {
        textureIdContainer[0] = pointer;
    }

    GLES20.glActiveTexture(GLES10.GL_TEXTURE0 + textureIdContainer[0]);//GLES11Ext.GL_TEXTURE_EXTERNAL_OES);
    error = GLES20.glGetError();
    GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES10.GL_TEXTURE0 + textureIdContainer[0]);
    error = GLES20.glGetError();

    GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
            GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    error = GLES20.glGetError();
    GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
            GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    error = GLES20.glGetError();
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
            GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
    error = GLES20.glGetError();
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
            GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
    error = GLES20.glGetError();

    return textureIdContainer[0];
}

Скрипт Unity:

void Start ()
{
    nativeCamera = new NativeCamera();

    texture = new Texture2D(1024, 720, TextureFormat.ARGB32 ,false, false);

    p = nativeCamera.StartCamera((int) texture.GetNativeTexturePtr());
    rawImage.texture = texture;
}

Буду благодарен, если вы укажете на мою ошибку.

Извините за мой английский.

...