6.4. 解码模块

关于解码详细内容请参考《 多媒体开发参考手册 》。 关于ffmpeg解码python接口请参考《 sophon-sail使用手册 》。

本章主要介绍以下两点内容:

  • OpenCV解码

  • FFmpeg解码

6.4.1. OpenCV解码

OpenCV支持YUVI420/BGR格式输出,为了提高性能,示例中解码输出设置yuv格式数据。

简单示例如下:

 1cv::VideoCapture cap;
 2  if (!cap.isOpened()) {
 3    cap.open(input_url);
 4}
 5cap.set(cv::CAP_PROP_OUTPUT_YUV, 1.0); //设置输出YUVI420格式数据,如选择BGR输出则注释掉此行代码
 6cv::Mat *img = new cv::Mat;
 7cap.read(*img);
 8//do something
 9......
10//end
11delete img;

​cap.set接口函数对输出格式设置, cap::read获取cv::Mat对象img,img数据接下来需要通过图像运算加速接口(bmcv模块)对数据进行推理前的预处理操作。

6.4.2. FFmpeg解码

  • C编程接口初始化配置:

1// ffmpeg默认输出NV12压缩格式数据, 初始化解码器配置方法如下:
2/*set compressed output*/
3av_dict_set(&opts, "output_format", "101", 0);
4
5if ((ret = avcodec_open2(*dec_ctx, dec, &opts)) < 0) {
6fprintf(stderr, "Failed to open %s codec\n",
7            av_get_media_type_string(type));
8return ret;
9}
  • Python编程接口

1import sophon.sail as sail
2decoder = sail.Decoder(filename)
3img0 = decoder.read(handle)   #默认输出yuv i420格式