算能科技
直播中

123

11年用户 889经验值
擅长:可编程逻辑
私信 关注
[问答]

test_ff_video_encode编码报bmvpu_malloc_device_byte_heap failed怎么解决?

linaro@sophon:~$ test_ff_video_encode zxf.yuv zxf.mp4 H264 384 288 1 I420 3000 25 0
[h264_bm @ 0x4276e0] width : 384
[h264_bm @ 0x4276e0] height : 288
[h264_bm @ 0x4276e0] pix_fmt : yuv420p
[h264_bm @ 0x4276e0] sophon device: 0
/media/oscar/Basislink/BM1688/SDK-1.7/SourceCode/libsophon/libsophav/video/enc/src/bm_vpuenc_interface.c:427 (bmvpu_malloc_device_byte_heap) ERROR: bmvpu_malloc_device_byte_heap failed!
[h264_bm @ 0x4276e0] bmvpu_malloc_device_byte_heap failed! 675
Cannot open video encoder writer.openEnc failed
#######VideoEnc_FFMPEG exit

麻烦在看一下yuv再编码h264,申请内存失败了,用FFmpeg命令同样的问题.
      

回帖(1)

吴凡

2025-4-25 18:27:02

针对 bmvpu_malloc_device_byte_heap failed 错误,以下是分步解决方案:




1. 检查设备内存状态



  • 原因:BM1688 的 VPU 或设备内存不足。

  • 操作
    # 使用 bm-smi 工具查看显存占用
    bm-smi


    • 如果显存已满,关闭其他占用显存的进程。

    • 尝试减少编码参数(如分辨率、码率或帧率),例如将分辨率调整为 320x240。





2. 验证用户权限



  • 原因:用户无权访问设备内存。


  • 操作


    # 尝试以 root 权限运行
    sudo test_ff_video_encode zxf.yuv zxf.mp4 H264 384 288 1 I420 3000 25 0

    # 或添加用户到 video 组
    sudo usermod -aG video linaro
    # 重启生效





3. 确认参数合法性



  • 原因:分辨率/格式不符合编码器要求。

  • 操作

    • 分辨率对齐:确保分辨率是编码器支持的倍数(如 H.264 通常要求 16x16 对齐,此处 384x288 符合)。

    • YUV 格式:确认输入的 YUV 文件是 I420 格式,且文件大小匹配(计算:384*288*1.5 = 165,888 字节/帧)。

    • 验证 YUV 文件
      # 用 ffmpeg 测试 YUV 文件是否能正常播放
      ffplay -video_size 384x288 -pixel_format yuv420p -framerate 25 zxf.yuv





4. 检查驱动和 SDK 环境



  • 原因:驱动或库未正确加载。


  • 操作


    # 确认驱动已加载
    lsmod | grep bm

    # 检查 LD_LIBRARY_PATH 是否包含 SDK 库路径
    echo $LD_LIBRARY_PATH
    # 若无,手动设置路径(根据实际安装位置)
    export LD_LIBRARY_PATH=/media/oscar/Basislink/BM1688/SDK-1.7/lib:$LD_LIBRARY_PATH

    # 重新运行程序





5. 降低资源需求



  • 原因:编码器初始化的内存需求超过默认配置。

  • 操作

    • 尝试在命令中增加 -max_mb 500(限制宏块处理数,减少内存占用)。

    • 降低码率(如从 3000 改为 2000)或帧率(如从 25 改为 15)。





6. 检查硬件限制



  • 原因:BM1688 对 H.264 编码有特定限制。

  • 操作

    • 查阅官方文档,确认 384x288I420 是受支持的分辨率及格式。

    • 联系技术支持,提供完整的错误日志(包括 SDK 版本、固件版本)。





7. 重新安装或更新驱动/SDK



  • 原因:SDK 或驱动版本存在兼容性问题。


  • 操作


    # 卸载旧版本驱动/SDK
    sudo apt purge sophon-driver sophon-sdk

    # 安装最新版本(根据厂商提供的步骤)
    # 例如:解压 SDK 并运行安装脚本
    cd /media/oscar/Basislink/BM1688/SDK-1.7/
    sudo ./install.sh





总结命令示例


# 确保显存充足后,带环境变量运行
export LD_LIBRARY_PATH=/media/oscar/Basislink/BM1688/SDK-1.7/lib:$LD_LIBRARY_PATH
sudo test_ff_video_encode zxf.yuv zxf.mp4 H264 384 288 1 I420 2000 15 0

如果问题仍未解决,请提供以下信息进一步排查:



  • bm-smi 输出

  • 系统日志 dmesg | grep bm

  • SDK 和驱动版本详情。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分