java中onpreviewfram_困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题

====================问题描述====================

9c4246881f53fde21614a5004d33231e.gif

布上我初始化的函数

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,这样就不用自己处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值