Android--Camera.addCallbackBuffer/setPreviewCallbackWithBuffer模式使用总结

Android--Camera.addCallbackBuffer/setPreviewCallbackWithBuffer模式使用总结

2015-02-03 15:10:05 本站整理 浏览(795)
id="cproIframe_u2051914_1" width="120" height="600" src="http://pos.baidu.com/acom?adn=4&at=231&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=17&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&dai=1&dis=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dl_GVq8yddyi_5AVZ1MX2fiOiMuxWTaBN0uHhj0CjpvTRPa1_-uveSwom_vYi-bP3%26wd%3D%26eqid%3Dbfc3ec01000082590000000455c2d0f3&ltu=http%3A%2F%2Fwww.aichengxu.com%2Fview%2F43796&lu_161=0&lunum=6&n=48098089_cpr&pcs=1292x682&pis=10000x10000&ps=5x30&psr=1366x768&pss=1292x466&qn=3a1af9b2a3b85b73&rad=&rsi0=120&rsi1=600&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_3&stid=5&td_id=2051914&titFF=%E5%AE%8B%E4%BD%93&titFS=12&titTA=left&tn=text_default_120_600&tpr=1438830926725&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u2051914&ti=Android--Camera.addCallbackBuffer%2FsetPreviewCallbackWithBuff&tt=1438830926703.23.95.99" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true">
id="cproIframe_u2051916_2" width="300" height="250" src="http://pos.baidu.com/acom?adn=3&at=231&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=17&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&dai=2&dis=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dl_GVq8yddyi_5AVZ1MX2fiOiMuxWTaBN0uHhj0CjpvTRPa1_-uveSwom_vYi-bP3%26wd%3D%26eqid%3Dbfc3ec01000082590000000455c2d0f3&ltu=http%3A%2F%2Fwww.aichengxu.com%2Fview%2F43796&lu_161=0&lunum=6&n=48098089_cpr&pcs=1275x682&pis=10000x10000&ps=446x461&psr=1366x768&pss=1275x706&qn=5e6af21debe3154e&rad=&rsi0=300&rsi1=250&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_3&stid=5&td_id=2051916&titFF=%E5%AE%8B%E4%BD%93&titFS=12&titTA=left&tn=text_default_300_250&tpr=1438830926725&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u2051916&ti=Android--Camera.addCallbackBuffer%2FsetPreviewCallbackWithBuff&tt=1438830926703.124.147.147" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true">

Android--Camera.addCallbackBuffer/setPreviewCallbackWithBuffer模式使用总结,有需要的朋友可以参考下。


最近,在Camera开发框架中遇到了这样的问题,为了提高Camera的效率,采用了Camera.addCallbackBuffer()/Camera.setPreviewCallbackWithBuffer的模式,对于Camera.setPreviewCallbackWithBuffer这个接口,官方文档是这么说的:

Installs a callback to be invoked for every preview frame, using buffers supplied withCamera.AddCallbackBuffer(Byte[]), in addition to displaying them on the screen. The callback will be repeatedly called for as long as preview is active and buffers are available. Any other preview callbacks are overridden.

The purpose of this method is to improve preview efficiency and frame rate by allowing preview frame memory reuse. You must call Camera.AddCallbackBuffer(Byte[]) at some point -- before or after calling this method -- or no callbacks will received.

在这里,我们不在深究具体意思,只把如何使用的方法说明一下,这个接口使用的时候需要注意一下几点:

1,这个接口调用前,我们需要提前分配一块buffer,并且这个接口调用一定要放在onPreviewFrame()回调中:

        byte[] mPreBuffer = null;
        @Override
	public void onPreviewFrame(byte[] data, Camera camera) {
		// TODO Auto-generated method stub
		if (data == null || mPreviewSize == null
				|| data.length != mPreviewSize.width * mPreviewSize.height * 3 / 2) {
			return;
		}
                int size = mPreviewSize.width * mPreviewSize.height * 3 / 2;
                if (mPreBuffer == null) {
                mPreBuffer = new byte[size];
                }
               mCamera.addCallbackBuffer(mPreBuffer);
}
 

2,在调用Camera.startPreview()接口前,我们需要setPreviewCallbackWithBuffer,而setPreviewCallbackWithBuffer之前我们需要重新addCallbackBuffer,因为setPreviewCallbackWithBuffer 使用时需要指定一个字节数组作为缓冲区,用于预览图像数据 即addCallbackBuffer,然后你在onPerviewFrame中的data才会有值;

3,从上面看来,我们设置addCallbackBuffer的地方有两个,一个是在startPreview之前,一个是在onPreviewFrame中,这两个都需要调用,如果在onPreviewFrame中不调用,那么,就无法继续回调到onPreviewFrame中了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值