安卓:仅在谷歌Pixel 2和2 XL设备上发生Camera2 API崩溃

5

我在我的一个应用中使用了来自此处的相机2示例代码:https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java

一直以来,它都运行良好,但最近发现只有Google Pixel 2和Pixel 2 XL设备上,在拍照时应用程序会崩溃。

崩溃报告显示如下:

java.lang.NullPointerException: 
  at ....Camera2BasicFragment$ImageSaver.run (Camera2BasicFragment.java:935)
  at android.os.Handler.handleCallback (Handler.java:873)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:193)
  at android.os.HandlerThread.run (HandlerThread.java:65)

这是第935行(ImageSaver类):

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();

我尝试了几种方法,但由于没有Pixel 2设备,所以无法进行测试。有什么建议吗?
更新(2018年11月05日):
因此,逻辑上的解释是从ImageReader返回的图像某种方式为空:
@Override
        public void onImageAvailable(ImageReader reader) {
            mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage(), mFile));
        }

其他一些SO帖子暗示ImageReader格式可能不被支持。这是该格式:

mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
 ImageFormat.JPEG, /*maxImages*/2);

但我想不出为什么JPEG格式会不受支持。

仍在寻找答案!


那个示例应用没有 Camera2ApiActivity.java ...第 1173 行说了什么? - Martin Zeitler
@MartinZeitler 抱歉,我已经更新了行号以匹配示例代码,使其更易于理解。 - Kashif
我已经很久没有使用Camera2 API了。但是这是我的假设。如果我没记错的话,那个回调函数是用于预览的,而不是用于拍摄的图像。大多数设备允许帧预览流以JPEG格式呈现,但并非所有设备都支持。所有设备都支持的格式是YUV格式。我建议你可以尝试将格式更改为YUV。 - Ivan
1个回答

0

所有手机都使用camera2 api的三重摄像头崩溃,这适用于所有背面有2个相机或单个相机的手机。

因此,建议将API更改为多相机API,而不是限制为2或3个相机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接