07-25 15:52:12.639 41696-41696 C02B01/com.hm.example/CAMERA com.hm.example I {CreatePreviewOutputInstance():853} CameraManagerNapi::CreatePreviewOutputInstance ParseProfile size.width = 1920, size.height = 1440, format = 2002, surfaceId = 179082956374016 07-25 15:52:12.639 41696-41696 C02B01/com.hm.example/CAMERA com.hm.example I {CreatePreviewOutputInstance():853} CameraManagerNapi::CreatePreviewOutputInstance ParseProfile size.width = 1920, size.height = 1440, format = 1003, surfaceId = 179082956374016 07-25 20:54:14.227 41696-63370 C02B61/com.hm.example/ImageSource com.hm.example I CreatePixelMapExtended success, imageId:1753448054204387, desiredSize: (0, 0), imageSize: (1920, 1440), desiredHdr: 1, hdrType : 1, memoryType : 4, cost 22771 us 07-25 20:54:15.009 41696-63370 C02B61/com.hm.example/ImageSource com.hm.example I CreatePixelMapExtended success, imageId:1753448055007373, desiredSize: (0, 0), imageSize: (288, 168), desiredHdr: 1, hdrType : 1, memoryType : 2, cost 1896 us 07-25 20:54:15.022 41696-63846 C02B61/com.hm.example/ImageSource com.hm.example I CreatePixelMapExtended success, imageId:1753448055005062, desiredSize: (0, 0), imageSize: (1440, 1920), desiredHdr: 1, hdrType : 1, memoryType : 4, cost 17130 us
前后2次进入相机预览页时,相机预览流选取的Profile格式不一致,第一次选择的是2002(YCRCB_P010格式),第二次选择的是1003(YUV_420_SP格式)。而最终拍照是使用双路预览结合图片转换实现,在图片转换时设置的格式固定为1003对应的PixelMapFormat.NV21,导致第一次图片转换异常。
每次设置相机预览流时,固定选取相同格式的Profile,且在图片转换时设置图片格式与之相符,如2002对应image.PixelMapFormat的值为YCRCB_P010,1003对应image.PixelMapFormat的值为NV21。
格式对照可参考下表:
CameraFormat 枚举名称 | CameraFormat 枚举值 | PixelMapFormat 枚举名称 | PixelMapFormat 枚举值 | 说明 |
|---|---|---|---|---|
CAMERA_FORMAT_RGBA_8888 | 3 | RGBA_8888 | 3 | RGBA_8888格式的图片 |
CAMERA_FORMAT_YUV_420_SP | 1003 | NV21 | 8 | YUV_420_SP格式的图片,对应为NV21格式的图片。 |
CAMERA_FORMAT_YCBCR_P010 | 2001 | YCBCR_P010 | 11 | YCBCR_P010格式的图片。 |
CAMERA_FORMAT_YCRCB_P010 | 2002 | YCRCB_P010 | 12 | YCRCB_P010格式的图片。 |
Q:拍照与录制是否都可以选取CAMERA_FORMAT_YUV_420_SP格式的Profile?
A:CAMERA_FORMAT_YUV_420_SP格式针对拍照与录制的Profile过滤都适用,详情自定义相机拍照示例代码、自定义相机录像。
Q:目前想要实现拍照与录制视频功能,遇到的问题主要是如何查找目标Profile,拍照和录制时需要2个目标Profile。
A:您可以直接参考官网示例代码实现自定义相机功能-拍照以及实现自定义相机功能-录制,示例代码中对查找目标profile都有对应的实现。