📒
Sophon SE3 Quickstart For Beginners
  • Sophon SE3 Quickstart For Beginners
  • SE3 (Sohpon Embedded AI Mini Box. Generation 3)
    • SE3 硬件资源及使用模型
    • SE3 应用场景
    • SE3 规格参数
    • SE3 产品特性
    • SE3 状态指示灯
    • SE3 软件功能
  • SE3 开发环境搭建
    • 设备清单
    • 开发环境搭建示图
    • SE3上电
    • 系统信息查看
    • 设备驱动加载
  • SE3 SDK(BMNNSDK2)
    • 术语说明
    • BMNNSDK版本特性
    • BMNNSDK工作流程
  • SE3实例演示
    • 算法移植概述
    • 启动开发环境Sophon docker
    • c/c++开发者
    • python开发者
    • 图形解码接口
    • 视频解码接口
  • SE3 系统升级
    • SE3 系统升级
  • 前置学习
    • linux基本知识
    • 机器学习及神经网络
    • python基本知识
    • Docker基本知识
Powered by GitBook
On this page
  • opencv解码
  • ffmpg解码

Was this helpful?

  1. SE3实例演示

视频解码接口

opencv解码

opencv支持YUV/BGR格式输出,为了提高性能,示例中解码输出yuv格式数据。 设置输出yuv格式数据需要对解码的buffer和reference进行设置,方法如下:

  • export OPENCV_FFMPEG_CAPTURE_OPTIONS="extra_frame_buffer_num;8|refcounted_frames;1"

  • extra_frame_buffer_num;8 解码器的frame buffer数量为8,及最多可以保存8帧解码数据。(根据实际业务需要进行调整,默认是5)

  • refcounted_frames;1 设置为1时,需要用户自己管理及时释放Mat对象,每个Mat占一个buffer。Mat对象释放后frame buffer才可以被解码器再次使用。

简单示例如下:​

cv::VideoCapture cap;
 if (!cap.isOpened()) {
  cap.open(input_url);
}
cap.set(cv::CAP_PROP_OUTPUT_YUV, 1.0); //设置输出YUV格式数据
cv::Mat *img = new cv::Mat;
cap.read(*img);
//do something
......
//end
delete img;

/** delete img; 此处是释放img对象后,解码器的frame buffer才可以被解码器利用。
    如果过多Mat对象不被释放,会导致解码器的buffer被占满,引起解码失败。
    cap.set接口函数对输出格式设置, cap::read获取cv::Mat对象img, img数据接下来
    需要通过图像运算加速接口(bmcv模块)对数据进行推理前的预处理操作。**/

ffmpg解码

ffmpeg默认输出NV12格式数据。初始化解码器的buffer配置方法如下:

/* Init the decoders, with reference counting */
av_dict_set(&opts, "refcounted_frames", "1", 0);

/*frame buffer set*/
av_dict_set(&opts, "extra_frame_buffer_num", "20", 0);

/*set tcp*/
av_dict_set(&opts, "rtsp_transport", "tcp", 0);

if ((ret = avcodec_open2(*dec_ctx, dec, &opts)) < 0) {
   fprintf(stderr, "Failed to open %s codec\n",
              av_get_media_type_string(type));
   return ret;
}

Previous图形解码接口NextSE3 系统升级

Last updated 5 years ago

Was this helpful?