IMX219 双目采集丢帧问题

摄像头型号 IMX219

当前分辨率1920x1080;帧率配置:30fps

系统版本3.3.1

连接方式:两个摄像头独立连接

接口:使用的是SP的API接口:int32_t sp_open_camera_v2(void *obj, const int32_t pipe_id, const int32_t video_index, int32_t chn_num, sp_sensors_parameters *parameters, int32_t *width, int32_t *height)

打印日志:

2026-06-12 12:12:44.065] [cam0] [INFO] heartbeat frames=1787 bytes=61278447 run_ms=60033 avg_fps_x1000=29766 max_frame_gap_ms=36

[2026-06-12 12:12:49.035] [cam0] [INFO] heartbeat frames=1938 bytes=66488258 run_ms=65002 avg_fps_x1000=29814 max_frame_gap_ms=36

[2026-06-12 12:12:49.040] [cam1] [INFO] heartbeat frames=1938 bytes=69194905 run_ms=65007 avg_fps_x1000=29812 max_frame_gap_ms=36

[2026-06-12 12:12:54.036] [cam0] [INFO] heartbeat frames=2090 bytes=71752880 run_ms=70004 avg_fps_x1000=29855 max_frame_gap_ms=36

[2026-06-12 12:12:54.041] [cam1] [INFO] heartbeat frames=2090 bytes=74609615 run_ms=70009 avg_fps_x1000=29853 max_frame_gap_ms=36

[2026-06-12 12:12:59.038] [cam0] [INFO] heartbeat frames=2242 bytes=77006989 run_ms=75006 avg_fps_x1000=29890 max_frame_gap_ms=36

[2026-06-12 12:12:59.044] [cam1] [INFO] heartbeat frames=2242 bytes=80018452 run_ms=75012 avg_fps_x1000=29888 max_frame_gap_ms=36

[2026-06-12 12:13:04.041] [cam0] [INFO] heartbeat frames=2394 bytes=82256017 run_ms=80009 avg_fps_x1000=29921 max_frame_gap_ms=36

[2026-06-12 12:13:04.045] [cam1] [INFO] heartbeat frames=2394 bytes=85422325 run_ms=80013 avg_fps_x1000=29920 max_frame_gap_ms=36

e[1;31m2026/06/12 12:13:07.553 ERROR [vp_codec_set_input][0730]hb_mm_mc_dequeue_input_buffer failed ret = -268435443

e[me[1;31m2026/06/12 12:13:07.554 ERROR [WorkFunc][0070]Module Camera SetImageFrame failed

e[m[2026-06-12 12:13:09.043] [cam0] [INFO] heartbeat frames=2546 bytes=87494352 run_ms=85011 avg_fps_x1000=29949 max_frame_gap_ms=36

[2026-06-12 12:13:09.466] [cam1] [INFO] heartbeat frames=2430 bytes=86689208 run_ms=85433 avg_fps_x1000=28443 max_frame_gap_ms=4268

[2026-06-12 12:13:14.046] [cam0] [INFO] heartbeat frames=2698 bytes=92733658 run_ms=90014 avg_fps_x1000=29973 max_frame_gap_ms=36

[2026-06-12 12:13:14.050] [cam1] [INFO] heartbeat frames=2580 bytes=92009140 run_ms=90018 avg_fps_x1000=28660 max_frame_gap_ms=4268

[2026-06-12 12:13:19.048] [cam0] [INFO] heartbeat frames=2850 bytes=97986851 run_ms=95016 avg_fps_x1000=29994 max_frame_gap_ms=36

[2026-06-12 12:13:19.052] [cam1] [INFO] heartbeat frames=2732 bytes=97453389 run_ms=95020 avg_fps_x1000=28751 max_frame_gap_ms=4268

[2026-06-12 12:13:24.051] [cam0] [INFO] heartbeat frames=3002 bytes=103260181 run_ms=100019 avg_fps_x1000=30014 max_frame_gap_ms=36

[2026-06-12 12:13:24.056] [cam1] [INFO] heartbeat frames=2884 bytes=102827273 run_ms=100024 avg_fps_x1000=28833 max_frame_gap_ms=4268

[2026-06-12 12:13:29.053] [cam0] [INFO] heartbeat frames=3154 bytes=108509878 run_ms=105021 avg_fps_x1000=30032 max_frame_gap_ms=36

需要提供下当前的代码

vio2encoder.txt (27.5 KB)

  1. 确认 video_index 配置

    • 根据 /etc/board_config.json,双摄默认 MIPI host 是 02
    • 因此两路摄像头建议配置为:
      • cam0-video-index=0
      • cam1-video-index=2
    • 不建议第二路使用 video_index=1
  2. 修正 sp_open_camera_v2() 参数

    • width / height 需要传入已初始化的输出分辨率数组,不要传未初始化变量。
    • 示例:
int width[1] = {1920};
int height[1] = {1080};

sp_sensors_parameters params = {};
params.raw_width = 1920;
params.raw_height = 1080;
params.fps = 30;

sp_open_camera_v2(vio, pipe_id, video_index, 1, &params, width, height);
  1. 编码器分辨率保持一致
    • sp_start_encode() 使用和相机输出一致的分辨率:
sp_start_encode(enc, encode_chn, SP_ENCODER_H264, 1920, 1080, bitrate);
  1. 增大码流 buffer

    • 双路 1080p 编码时,sp_encoder_get_stream() 的 buffer 建议增大到 4MB~6MB
  2. 复测建议

    • 先单路分别验证 video_index=0video_index=2
    • 再双路同时运行,观察是否还出现 hb_mm_mc_dequeue_input_buffer failed

好的,之前video_index修改成为2了,但是出现了两路同时丢帧

[2026-06-26 14:31:10.166] [cam1] [INFO] heartbeat frames=721 bytes=23992632 run_ms=25032 avg_fps_x1000=28803 max_frame_gap_ms=37

[2026-06-26 14:31:15.138] [cam1] [INFO] heartbeat frames=872 bytes=29095108 run_ms=30004 avg_fps_x1000=29062 max_frame_gap_ms=37

[2026-06-26 14:31:15.167] [cam0] [INFO] heartbeat frames=873 bytes=30100745 run_ms=30032 avg_fps_x1000=29068 max_frame_gap_ms=38

[2026-06-26 14:31:20.136] [cam1] [INFO] heartbeat frames=1024 bytes=34230733 run_ms=35002 avg_fps_x1000=29255 max_frame_gap_ms=37

[2026-06-26 14:31:20.164] [cam0] [INFO] heartbeat frames=1025 bytes=35383759 run_ms=35031 avg_fps_x1000=29259 max_frame_gap_ms=38

[2026-06-26 14:31:25.139] [cam0] [INFO] heartbeat frames=1176 bytes=40617251 run_ms=40004 avg_fps_x1000=29397 max_frame_gap_ms=38

[2026-06-26 14:31:25.144] [cam1] [INFO] heartbeat frames=1176 bytes=39388113 run_ms=40010 avg_fps_x1000=29392 max_frame_gap_ms=37

[2026-06-26 14:31:30.139] [cam0] [INFO] heartbeat frames=1328 bytes=45876792 run_ms=45005 avg_fps_x1000=29507 max_frame_gap_ms=38

[2026-06-26 14:31:30.143] [cam1] [INFO] heartbeat frames=1328 bytes=44550643 run_ms=45009 avg_fps_x1000=29505 max_frame_gap_ms=37

[2026-06-26 14:31:35.139] [cam0] [INFO] heartbeat frames=1480 bytes=51129341 run_ms=50005 avg_fps_x1000=29597 max_frame_gap_ms=38

[2026-06-26 14:31:35.143] [cam1] [INFO] heartbeat frames=1480 bytes=49700486 run_ms=50010 avg_fps_x1000=29594 max_frame_gap_ms=37

[2026-06-26 14:31:40.143] [cam0] [INFO] heartbeat frames=1632 bytes=56372260 run_ms=55009 avg_fps_x1000=29667 max_frame_gap_ms=38

[2026-06-26 14:31:40.147] [cam1] [INFO] heartbeat frames=1632 bytes=54824323 run_ms=55013 avg_fps_x1000=29665 max_frame_gap_ms=37

e[1;31m2026/06/26 14:31:45.888 ERROR [vp_codec_set_input][0730]hb_mm_mc_dequeue_input_buffer failed ret = -268435443

e[me[1;31m2026/06/26 14:31:45.888 ERROR [WorkFunc][0070]Module Camera SetImageFrame failed

e[me[1;31m2026/06/26 14:31:45.892 ERROR [vp_codec_set_input][0730]hb_mm_mc_dequeue_input_buffer failed ret = -268435443

e[me[1;31m2026/06/26 14:31:45.893 ERROR [WorkFunc][0070]Module Camera SetImageFrame failed

e[m[2026-06-26 14:31:45.913] [cam1] [INFO] heartbeat frames=1736 bytes=58333694 run_ms=60779 avg_fps_x1000=28562 max_frame_gap_ms=2376

[2026-06-26 14:31:45.914] [cam0] [INFO] heartbeat frames=1736 bytes=59939974 run_ms=60780 avg_fps_x1000=28562 max_frame_gap_ms=2382

[2026-06-26 14:31:50.147] [cam0] [INFO] heartbeat frames=1876 bytes=64782819 run_ms=65013 avg_fps_x1000=28855 max_frame_gap_ms=2382

[2026-06-26 14:31:50.151] [cam1] [INFO] heartbeat frames=1876 bytes=63097137 run_ms=65017 avg_fps_x1000=28853 max_frame_gap_ms=2376

[2026-06-26 14:31:55.153] [cam0] [INFO] heartbeat frames=2028 bytes=70024082 run_ms=70019 avg_fps_x1000=28963 max_frame_gap_ms=2382

[2026-06-26 14:31:55.158] [cam1] [INFO] heartbeat frames=2028 bytes=68236160 run_ms=70024 avg_fps_x1000=28961 max_frame_gap_ms=2376

[2026-06-26 14:32:00.156] [cam0] [INFO] heartbeat frames=2180 bytes=75264850 run_ms=75021 avg_fps_x1000=29058 max_frame_gap_ms=2382

[2026-06-26 14:32:00.161] [cam1] [INFO] heartbeat frames=2180 bytes=73373568 run_ms=75026 avg_fps_x1000=29056 max_frame_gap_ms=2376

[2026-06-26 14:32:05.154] [cam0] [INFO] heartbeat frames=2332 bytes=80505646 run_ms=80020 avg_fps_x1000=29142 max_frame_gap_ms=2382

[2026-06-26 14:32:05.158] [cam1] [INFO] heartbeat frames=2332 bytes=78522546 run_ms=80024 avg_fps_x1000=29141 max_frame_gap_ms=2376

[2026-06-26 14:32:10.158] [cam0] [INFO] heartbeat frames=2484 bytes=85750729 run_ms=85024 avg_fps_x1000=29215 max_frame_gap_ms=2382

目前暂无双IMX219使用的案例,可以提供根据意见修改后的源码和日志来协助分析

码流buffer分配的内存增加到了6MB,还是有丢帧,我这边记录了当时的内存使用日志

还有一个问题请教一下:数据在CSI和ISP是独立的,到了VIO、VPU和DDR就共享了?他们分别能处理多大的速率的数据

记录.txt (70.3 KB)

  1. 猜测为编码器输入侧 / 多媒体 ION buffer 池获取失败,建议通过 srpi-config 调大对应ION内存
  2. 参考手册可知

关于 CSI / ISP / VIO / VPU / DDR

  • CSI/MIPI host 前端是按 camera host 接入的,两路摄像头走不同 MIPI host,例如 02
  • 到 VIN/ISP/VIO 后,会进入 SoC 内部视频链路,部分模块可以并行,但 buffer 管理和数据搬运会开始依赖共享内存资源。
  • 到 VPS/VSE、VPU/VENC、DDR 后,基本可以认为会共享 DDR 带宽和 ION/多媒体 buffer 池。
  • 编码输出码流本身不大,例如 8Mbps 只有约 1MB/s 一路;真正压力主要来自编码前的原始 NV12/YUV 帧。

能力参考

  • 文档里 X5 的 VPS 最大处理能力写的是 3840x2160@60fps,双路 1080p@30fps 从像素量上低于这个能力。
  • 但实际稳定性还取决于 ION buffer 大小、内部队列深度、是否有额外显示/缩放/算法任务、DDR 占用和系统负载。

需要确认

  • 确认双摄使用 video_index=02
  • 确认 sp_open_camera_v2() 输出分辨率数组显式设置为 1920x1080
  • 保持 sp_start_encode() 分辨率与 VIO 输出一致。
  • 通过 srpi-config 或系统配置适当增大 ION memory

建议升级至 v3.5.0 有历史版本问题的修复 + 新的sample示例,并且基于此版本发现的问题才会在下个版本修复

这个版本升级到3.5.0是指什么版本?RDK OS的版本?我把ION调到了最大值512x1024x1024还是有丢帧

U-Boot 2022.10+ (Aug 06 2025 - 21:11:53 +0800) [cam1] [INFO] heartbeat frames=1786 bytes=60242313 run_ms=60026 avg_fps_x1000=29753 max_frame_gap_ms=38

[2026-06-26 22:03:48.433] [cam0] [INFO] heartbeat frames=1938 bytes=64861741 run_ms=65027 avg_fps_x1000=29803 max_frame_gap_ms=38

[2026-06-26 22:03:48.438] [cam1] [INFO] heartbeat frames=1938 bytes=65324956 run_ms=65032 avg_fps_x1000=29800 max_frame_gap_ms=38

[2026-06-26 22:03:53.435] [cam1] [INFO] heartbeat frames=2090 bytes=70430927 run_ms=70030 avg_fps_x1000=29844 max_frame_gap_ms=38

e[1;31m2026/06/26 22:03:53.681 ERROR [vp_codec_set_input][0730]hb_mm_mc_dequeue_input_buffer failed ret = -268435443

e[me[1;31m2026/06/26 22:03:53.681 ERROR [WorkFunc][0070]Module Camera SetImageFrame failed

e[m[2026-06-26 22:03:54.216] [cam0] [INFO] heartbeat frames=2027 bytes=67858132 run_ms=70811 avg_fps_x1000=28625 max_frame_gap_ms=2888

[2026-06-26 22:03:58.410] [cam1] [INFO] heartbeat frames=2241 bytes=75516312 run_ms=75004 avg_fps_x1000=29878 max_frame_gap_ms=38

[2026-06-26 22:03:58.436] [cam0] [INFO] heartbeat frames=2166 bytes=72553309 run_ms=75031 avg_fps_x1000=28868 max_frame_gap_ms=2888

[2026-06-26 22:04:03.407] [cam0] [INFO] heartbeat frames=2317 bytes=77655365 run_ms=80002 avg_fps_x1000=28961 max_frame_gap_ms=2888

[2026-06-26 22:04:03.412] [cam1] [INFO] heartbeat frames=2393 bytes=80639875 run_ms=80007 avg_fps_x1000=29909 max_frame_gap_ms=38

[2026-06-26 22:04:08.406] [cam0] [INFO] heartbeat frames=2469 bytes=82762926 run_ms=85001 avg_fps_x1000=29046 max_frame_gap_ms=2888

[2026-06-26 22:04:08.410] [cam1] [INFO] heartbeat frames=2545 bytes=85779471 run_ms=85005 avg_fps_x1000=29939 max_frame_gap_ms=38

[2026-06-26 22:04:13.412] [cam0] [INFO] heartbeat frames=2621 bytes=87903645 run_ms=90006 avg_fps_x1000=29120 max_frame_gap_ms=2888

[2026-06-26 22:04:13.417] [cam1] [INFO] heartbeat frames=2697 bytes=90934748 run_ms=90011 avg_fps_x1000=29963 max_frame_gap_ms=38

[2026-06-26 22:04:18.415] [cam0] [INFO] heartbeat frames=2773 bytes=93042638 run_ms=95009 avg_fps_x1000=29186 max_frame_gap_ms=2888

[2026-06-26 22:04:18.419] [cam1] [INFO] heartbeat frames=2849 bytes=96091404 run_ms=95014 avg_fps_x1000=29985 max_frame_gap_ms=38

[2026-06-26 22:04:23.413] [cam0] [INFO] heartbeat frames=2925 bytes=98177320 run_ms=100007 avg_fps_x1000=29247 max_frame_gap_ms=2888

[2026-06-26 22:04:23.418] [cam1] [INFO] heartbeat frames=3001 bytes=101284594 run_ms=100012 avg_fps_x1000=30006 max_frame_gap_ms=38

这是Agent的回答

CMA大小不足问题分析与解决方案

1. 问题确认

根据之前的分析,您的系统存在CMA容量瓶颈

当前状态:

  • CMA总大小:382MB(391168 kB)

  • CMA空闲:195MB(199664 kB)

  • ION配置:512MB+1024MB+1024MB = 2560MB(2.5GB)

  • 问题:ION配置需求(2.5GB) >> CMA实际容量(382MB)

根本原因: 在RDK X5平台,ION内存从CMA区域分配。CMA是连续物理内存池,大小固定。当ION配置超过CMA容量时,实际分配会失败。

单目跑了100次,没有出现过丢帧

指的是升级系统镜像到最新版本,可以参考手册烧录使用最新版本的镜像

或是能否使用Agent定位下问题是否为接口的问题,板端编解码能力是足够的

这个怎么用Agent定位是否为接口问题,有什么定位方法指导说明吗

可以先升级至 v 3.5.0 最新版本后 尝试使用 RDK Studio

输入接口文档让他直接进行尝试

可让 Agent 参考 GitHub - D-Robotics/hobot_mipi_cam · GitHub 中的双目来实现 ,具体为 一路一个 pipe_id 分开为两条pipline

关闭写文件代码在测试看看,在打印一份log:
write_size = fwrite(ctx->stream_buffer, sizeof(char), (size_t)stream_frame_size, ctx->stream);
if (write_size != (size_t)stream_frame_size)
{
ctx->write_fail_count++;
log_message(ctx->thread_index, “ERROR”, “fwrite failed expect=%d actual=%zu count=%” PRIu64,
stream_frame_size, write_size, ctx->write_fail_count);
ctx->exit_reason = EXIT_REASON_WRITE_FAILURE;
request_stop(camera_error_stop_reason(ctx->thread_index));
return -1;
}