首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Camera2预览输出大小

Android Camera2预览输出大小
EN

Stack Overflow用户
提问于 2016-10-13 20:37:57
回答 1查看 4.9K关注 0票数 3

我试图设置相机预览通过ImageReader(YUV_420_888格式)使用Camera2 API。首先,我需要选择受支持的预览大小:

代码语言:javascript
复制
StreamConfigurationMap scmap = camCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size previewSizes[] = scmap.getOutputSizes(ImageReader.class);

我的Nexus 5X支持更大的尺寸:

代码语言:javascript
复制
[4032x3024,4000x3000,3840x2160,3288x2480,3200x2400,2592x1944,2688x1512,2048x1536,1920x1080,1600x1200,1440x1080,1280x960,1280x768,1280x720,1024x768,800x600,864x480,800x480,720x480,640x480,640x360,352x288,320x240,176x144,160x120]

准备一个ImageReader实例,并使用重复捕获请求启动CaptureSession:

代码语言:javascript
复制
mImageReader = ImageReader.newInstance(W,H, ImageFormat.YUV_420_888,1);

然后,我尝试在OnImageAvailableListener中读取每个预览帧(用于进一步的处理和通过GLES显示)。我想知道的是,我收到了多少个Y通道字节:

代码语言:javascript
复制
public void onImageAvailable(ImageReader reader) {
        ByteBuffer yBuffer = mImageReader.acquireNextImage().getPlanes()[0].getBuffer();
        Log.d("Camera2Debug","Y-channel bytes received: " + yBuffer.remaining());
        ...
    }

YUV_420_888图像的Y通道应该包含WxH字节,其中W -是宽度,H是所考虑的图像的高度。

问题:对于某些受支持的预览大小,不匹配yBuffer的实际大小(WxH)。

例如:

代码语言:javascript
复制
Preview Size  | Y-bytes received | Y-bytes expected  |   match
4032x3024     | 12 192 768       | 12 192 768        |    yes
1920x1080     |  2 073 600       |  2 073 600        |    yes
1440x1080     |  1 589 728       |  1 555 200        |    no
1280x960      |  1 228 800       |  1 228 800        |    yes
1280x768      |    983 040       |    983 040        |    yes
800x600       |    499 168       |    480 000        |    no
...
499168

因此,由于这个问题,我不能使用必要的预览大小,即使它是支持的设备。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 00:59:31

您可能没有考虑到https://developer.android.com/reference/android/media/Image.Plane.html#getRowStride(),它可能大于宽度(但至少等于它)。实际缓冲区大小为

代码语言:javascript
复制
size = rowStride * height - (rowStride - width)

减去(rowStride -宽度),因为最后一行不包括超过最后一个像素的任何填充。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40030533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档