Android KitKat(4.xx) PreviewCallback должен быть SurfaceHolder?

У меня вопрос.

PreviewCallBack для Android KitKat(4.xx) - это то, что нужно для SurfaceHolder?

Потому что проект My Preview PreviewCallBack очень хорошо работает в Android 6.x, 7.0. И он не использует SurfaceHolder.

Но Мой PreviewProject в KitKat PreviewCallBack не попадает в CallBackEvent.


Я нашел ответ в stackru, но я не могу решить эту проблему.

Камера на предпросмотре кадра не вызывается

PreviewCallback и PreviewCallback с буфером не вызываются

Android Camera PreviewCallback не вызывается в 4.1


Кто-нибудь поможет?


вот мой код

@Override
public void startPreview(String cameraId, int width, int height, int fps) {
    this.CameraId = cameraId;
    this.Width = width;
    this.Height = height;
    this.Fps = fps * 1000;

    this.CameraId = Integer.parseInt(cameraId);

    prepareCamera();

    if (this.RenderMethod == MyProject.RENDER_METHOD_NATIVE_SURFACE_TEXTURE) {
        MySurfaceRenderer.setSize(this.width, this.height);
    }

    startBackgroundThread();
    openCamera();
}

и это мой метод обратного вызова:

private Camera.PreviewCallback myCallBack = new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        Log.i(TAG, "onPreviewFrame data=" + data);

        JNIs.setFrameData(data);
        camera.addCallbackBuffer(this.PreviewData);
    }
};

и это мой метод openCamera:

private void openCamera() {
    if (this.Camera == null) {
        this.Camera = Camera.open(this.CameraId);
    }

    SurfaceTexture tex = MySurfaceRenderer.getSurfaceTexture();
    if (tex != null) {
        try {
            this.Camera.setPreviewTexture(tex);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    this.Data = new byte[this.width * this.height * 12 / 8];

    this.Params = this.Camera.getParameters();
    this.Params.setPreviewSize(this.width, this.height);

    // focus
    set_Focus(this.Params);

    // exposure
    set_Exposure(this.Params);

    this.Camera.setParameters(this.Params);
    this.Camera.setPreviewCallbackWithBuffer(myCallBack);
    this.Camera.startPreview();
    this.Camera.addCallbackBuffer(this.PreviewData);
}

0 ответов

Другие вопросы по тегам