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);
}