好吧,我快要死了.我正在编写一个droID应用,该应用接收预览数据,对其进行处理,然后将更改后的数据显示在屏幕上.到目前为止一切顺利-除了经过一段时间的不确定性(通常是一两分钟)之后,onPrevIEwFrame回调期间输入的YUV数据…水平地滚动了.我将原始的yuv捕获到了SD卡中:
[看起来我还不能在这里发布图片,所以这里的网址是:raw yuv capture]
这是我的第一个droID应用,但是我花了很多时间来开发各种桌面视频软件.当我看到这时,我立即想到的是我遇到了线程同步问题,并且由于这个原因,缓冲区以某种奇怪的方式被覆盖.
我的代码最初确实使用了工作线程.因此,为了消除该问题与线程有关的可能性,我取出了工作线程并将所有内容放入onPrevIEwFrame中.同样,同样的问题:YUV数据偏斜.
然后,我进行了一次谷歌搜索,发现onPrevIEwFrame内部的大量处理可能导致随机怪异.为了避免这种情况,我将回调更改为Oneshot变量,这导致了我现在使用的代码:
public voID surfaceCreated(SurfaceHolder holder) { Log.i(TAG, "surfaceCreated"); mCamera = Camera.open(); mCamera.setoneshotPrevIEwCallback(new PrevIEwCallback() { public voID onPrevIEwFrame(byte[] data, Camera camera) { Canvas canvas = mHolder.lockCanvas(); try { Bitmap bmp = processFrame(data); if (bmp != null) { if (canvas != null) { canvas.drawBitmap(bmp, (canvas.getWIDth() - getFrameWIDth()) / 2, (canvas.getHeight() - getFrameHeight()) / 2, null); } bmp.recycle(); } } catch(Exception e) { e.printstacktrace(); } finally { mHolder.unlockCanvasAndPost(canvas); mCamera.setoneshotPrevIEwCallback(this); } } });}
不幸的是,我仍然得到歪曲的yuv数据.
我的测试设备是HTC EVO 4G.我知道这部手机有问题,但我仍谨慎地将其归咎于硬件错误,主要是因为我几乎可以肯定这是由于程序员错误引起的.问题是,我已经将代码精简了,问题仍然很明显.
有人遇到过吗?
解决方法:
好吧,看来这是HTC手机的问题. This是我遇到的确切问题.他们说是Over here,这是由于后摄像头镜头松动引起的,解决方案是用拇指用力将其推入几秒钟以使其复位.
毕竟不是软件问题.
总结以上是内存溢出为你收集整理的java-onPreviewFrame返回偏斜的YUV数据全部内容,希望文章能够帮你解决java-onPreviewFrame返回偏斜的YUV数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)