gpt4 book ai didi

java - onPreviewFrame 返回倾斜的 YUV 数据

转载 作者:太空狗 更新时间:2023-10-29 12:55:39 26 4
gpt4 key购买 nike

好吧,我已经无计可施了。我正在编写一个 droid 应用程序,它接收预览数据、处理它,然后将更改后的数据显示到屏幕上。到目前为止一切顺利——除了在一些不确定的时间(通常是一两分钟)之后,在 onPreviewFrame 回调期间进入的 YUV 数据被……滚动……水平。我将原始 yuv 捕获到 sd 卡:

[看来我还不能在这里发布图片,所以这是网址:raw yuv capture ]

这是我的第一个机器人应用程序,但我花了很多时间在各种桌面视频软件上工作。当我看到这个时,我立刻想到的是我遇到了线程同步问题,因此缓冲区以某种奇怪的方式被覆盖。

我的代码确实最初使用了工作线程。因此,为了消除问题与线程相关的这种可能性,我取出了工作线程并将所有内容都放在 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 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com