【发布时间】:2017-04-02 06:46:38
【问题描述】:
我正在开发自定义相机 API 2 应用程序,我注意到当我使用 ImageReader 回调时,某些设备上的捕获格式转换是不同的。
例如,在 Nexus 4 中无法正常工作,而在 Nexus5X 中看起来还不错,这是输出。
我以这种形式初始化 ImageReader:
mImageReader = ImageReader.newInstance(320, 240, ImageFormat.YUV_420_888,2);
而我的回调是简单的 ImageReader 回调。
mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable( ImageReader reader) {
try {
mBackgroundHandler.post(
new ImageController(reader.acquireNextImage())
);
}
catch(Exception e)
{
//exception
}
}
};
对于 Nexus 4:我遇到了这个错误。
D/qdgralloc: gralloc_lock_ycbcr: Invalid format passed: 0x32315659
当我尝试在两个设备中写入原始文件时,我有这些不同的图像。所以我知道 Nexus 5X 图像具有 NV21 编码,而 Nexus 4 具有 YV12 编码。
我找到了image format 的规范,并尝试在 ImageReader 中获取格式。 有 YV12 和 NV21 两种选择,但是很明显,当我尝试获取格式时,我得到的是 YUV_420_888 格式。
int test=mImageReader.getImageFormat();
那么有没有办法让相机输入格式(NV21 或 YV12)在相机类中区分这种编码类型?可能是相机特性?
提前致谢。
乌奈。 PD:我使用 OpenGL 来显示 RGB 图像,我使用 Opencv 来进行 YUV_420_888 的转换。
【问题讨论】:
-
Image.getFormat()是否返回与ImageReader相同的格式?看来你并不孤单:stackoverflow.com/questions/34717969/… -
@nandsito 感谢您的建议,但不幸的是,它们在两种情况下都返回相同的值 35,这正是 YUV_420_888。
-
你查过
Camera.Parameters.getSupportedPictureFormats()支持哪些格式吗? -
感谢您的评论,但是,我认为 Camera.Parameters 类仅适用于相机 API 1。developer.android.com/reference/android/hardware/…。它适用于相机 API2?
-
您找到解决方案了吗?
标签: android android-camera2 yuv