You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三星S10+使用Camera2拍照时出现ExynosCameraNode错误是什么原因?

错误原因分析

从日志和代码来看,错误由多类问题共同导致:

  1. 代码逻辑错误
    你代码中文件路径创建逻辑完全错误,Environment.DIRECTORY_DOWNLOADS是字符串常量而非实际文件路径,直接用它作为父路径生成的文件不存在,也没有写入权限,会导致save方法执行失败,ImageReader的图像缓冲区无法被正常释放,最终底层Exynos相机驱动报缓冲区队列错误。
    此外onImageAvailable回调中没有判断acquireLatestImage返回值是否为空,空值情况下直接调用image.getPlanes()会触发异常,也会导致缓冲区泄漏。
  2. 相机参数配置问题
    代码未体现ImageReader的初始化逻辑,如果ImageReader设置的输出尺寸不在当前相机支持的JPEG输出尺寸列表、maxImages设置过小、输出格式不匹配,都会导致底层缓冲区分配失败。另外你没有在拍照前锁定3A(自动对焦、自动曝光、自动白平衡),底层参数未收敛就发起拍照请求,也会触发Exynos驱动的帧缓冲区错误。
  3. 三星设备适配问题
    日志中IndicatorGardenAlgorithmBasicCutout相关报错是三星S10+挖孔屏的系统适配问题,你当前设置的相机输出尺寸/裁剪参数和系统挖孔区域的校验规则不匹配,触发了系统层面的裁剪拦截。
排查解决步骤
  • 修复文件存储逻辑
    安卓11引入了分区存储限制,不要直接用File操作公共目录,改用MediaStoreAPI将图片写入下载目录,示例逻辑如下:
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DISPLAY_NAME, ts + ".jpg");
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
    Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    OutputStream outputStream = getContentResolver().openOutputStream(uri);
    // 后续将字节数组写入outputStream即可
    
  • 补全回调空判断
    修改onImageAvailable逻辑,先判断image是否为空再执行后续操作:
    @Override
    public void onImageAvailable(ImageReader reader) {
      Image image = reader.acquireLatestImage();
      if (image == null) {
          return;
      }
      // 原有逻辑不变
    }
    
  • 校验ImageReader配置
    通过CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP查询当前相机支持的JPEG输出尺寸,确保ImageReader设置的尺寸在支持列表内,同时将maxImages参数设置为2及以上,避免缓冲区队列溢出。
  • 补充拍照前3A锁逻辑
    发起拍照请求前,先发送捕获请求触发对焦、曝光锁定,等3A状态收敛后再发起静态拍照请求,避免底层参数未就绪导致的缓冲区错误。
  • 适配三星挖孔屏
    测试时先使用标准16:9的输出尺寸(比如19201080、40322268),避开和挖孔区域高度冲突的特殊尺寸,消除系统裁剪校验报错。

内容的提问来源于stack exchange,提问作者jaelim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:11