h26x_ascend解码器

1 简介

Ffmepg-Ascend 中内置了h264_ascend和h265_ascend解码器,利用昇腾NPU设备分别处理h264视频流和h265视频流的解码。

2 头文件

#include "libavcodec/ascend_dec.h"

3 特性支持

特性 参数名 类型 说明 h264_ascend h265_ascend
指定运行设备 device_id int 取值范围取决于芯片个数,默认为 0。 `npu-smi info` 命令可以查看芯片个数
指定运行通道号 channel_id int 取值范围取决于芯片实际情况,超出时会报错(对于昇腾Atlas 300I pro、 Atlas 300V pro,该参数的取值范围:[0, 256),JPEGD功能和VDEC功能共用通道,且通道总数最多256。对于Atlas 500 A2推理产品,该参数的取值范围:[0, 128),JPEGD功能和VDEC功能共用通道,且通道总数最多128)。 若是指定的通道已被占用, 则自动寻找并申请新的通道。
缩放 resize_str char* 输入格式为: {width}x{height}, 宽高:[128x128-4096x4096]

4 解码器使用

开发态使用解码器代码样例请参考:FFmpeg-n4.4.1/doc/examples/hw_decode.c

特别的

解码器默认在“0”号设备上用编号“0”通道进行解码操作,且默认不指定缩放尺寸。

如用户对执行设备,执行通道以及是否缩放有自定义诉求,可以利用“ascend_dec.h”文件中的ASCENDContext_t结构体实现,如下代码所示:


ASCENDContext_t* privData = (ASCENDContext_t*)av_malloc(sizeof(ASCENDContext_t));
privData->device_id = 1;  // 用户可自定义修改
privData->channel_id = 1; // 用户可自定义修改
privData->resize_str = "1920x1080"; // 用户可自定义修改

AVCodec *decoder;   // 假设已经完成对decoder的初始化

AVCodecContext* decoder_ctx = avcodec_alloc_context3(decoder);

decoder_ctx->priv_data = privData;  // 将自定义数据传入解码器上下文

/* 执行解码以及相关资源释放 */
···