当前位置:  开发笔记 > 编程语言 > 正文

在某些设备中覆盖了ImageReader格式

如何解决《在某些设备中覆盖了ImageReader格式》经验,为你挑选了0个好方法。

我有一个ImageReader用于获取预览帧的数据(字节数组).它配置了推荐的图像格式,YUV_420_888如下所示:

mPreviewImageReader = ImageReader.newInstance(width,
            height, ImageFormat.YUV_420_888, 2);

当我mPreviewImageReader.setOnImageAvailableListener();调用的监听器被调用时,我检索一个图像:

Image image = reader.acquireLatestImage();

在某些手机中,我在日志中看到以下带有ImageReader_JNI标签的打印输出:

ImageReader_imageSetup:覆盖缓冲区格式YUV_420_888到32315659.

我搜索了,似乎格式被覆盖了YV12.我试着查看ImageReader的c ++代码并发现了这种情况:

int bufFmt = buffer->format;
if (imgReaderFmt == HAL_PIXEL_FORMAT_YCbCr_420_888) {
    bufFmt = buffer->flexFormat;
}
if (imgReaderFmt != bufFmt) {
    if (imgReaderFmt == HAL_PIXEL_FORMAT_YCbCr_420_888 && (bufFmt ==
            HAL_PIXEL_FORMAT_YCrCb_420_SP || bufFmt == HAL_PIXEL_FORMAT_YV12)) {
        // Special casing for when producer switches to a format compatible with flexible YUV
        // (HAL_PIXEL_FORMAT_YCbCr_420_888).
        ctx->setBufferFormat(bufFmt);
        ALOGD("%s: Overriding buffer format YUV_420_888 to %x.", __FUNCTION__, bufFmt);
}
// ... rest of the code

如此看来,缓冲区的格式是YV12同时ImageReader的格式是YUV_420_888因为我设置它.

这让我想到了关于这种情况的2个问题,这些问题与我所拥有的2个选项相对应(据我所知):

    为什么缓冲区的格式YV12,它在哪里设置,我可以改变它吗?

    我可以添加YV12支持 - 但我需要知道发生了这种覆盖.但是在打电话的时候image.getFormat()我收到的35意味着YUV_420_888.有没有办法知道是否发生了这种覆盖?

欢迎任何其他想法.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有