好吧,我快要死了.我正在编写一个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,这是由于后摄像头镜头松动引起的,解决方案是用拇指用力将其推入几秒钟以使其复位.
毕竟不是软件问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。