首页 > 代码库 > 困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
============问题描述============
布上我初始化的函数
protected void initCamre() { camera = Camera.open(0); camera.setDisplayOrientation(90); Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(720, 1280); parameters.setPreviewFpsRange(4, 10); parameters.setPictureFormat(ImageFormat.JPEG); parameters.set("jpeg-quelity", 85); parameters.setPictureSize(720, 1280); if (parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); } int[] textures = new int[1]; GLES20.glGenTextures(1, textures, 0); SurfaceTexture surfaceTexture = new SurfaceTexture(textures[0]); try { camera.setPreviewTexture(surfaceTexture); camera.setPreviewCallback(new MyCamera()); camera.startPreview(); } catch (IOException e) { Log.i("tyty", e.toString()); e.printStackTrace(); } }
MyCamera类
class MyCamera implements PreviewCallback { @Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Parameters ps = camera.getParameters(); int[] imgs = new int[ps.getPreviewSize().width * ps.getPreviewSize().height]; camera.addCallbackBuffer(data); Log.i("tyty", "回调"); } }
这里面的onPreviewFrame回调方法只会执行五次,然后就不再执行,这是什么原因呢???
============解决方案1============
camera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
//代码应该是没有问题的。
============解决方案2============
因为你用的是surfaceTexture,surfaceTexture里面的数据要消耗了,才能填充新的数据进去,这样你才能抓到preview数据,你要在surfacetexture收到新的frame之后,调用surfacetexture.updateTexImage()去消耗buffer才行。
或者你直接换用surfaceview,这样就不用自己处理了。
困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。