2020-08-18

2 篇文章 0 订阅
2 篇文章 0 订阅

linux arm nvidia硬编码

1.首先https://developer.nvidia.com/nvidia-video-codec-sdk下载最新的nvidia codec

aarch64里找到对应的库libnvcuvid.so libnvidia-encode.so

这些库可以像静态链接库一样加载 并不需要dlopen等函数进行动库加载

 

2.因为在linux版本下都是使用cuda进行编解码

所以需要安装cuda 

在nvidia官网下载对应的cuda版本:cuda-11.0

安装后配置库目录为:/usr/local/cuda-11.0/lib64 以及/usr/local/cuda-11.0/lib64/stubs

分别对应以下2个库  cuda cudart

 

3.之后将video-codec-sdk中的sample打开 引入

其中crc.cu 是cuda 的语法的源文件 要编译需使用nvcc进行编译

将crc编译成为静态库 之后加载即可

例如:

nvcc -lib test1.cu -o libtestcu.a 

对应的就是 nvcc -lib crc.cu -o libcrc.a 就会生成出静态库

 

5.调整传入的参数

AppEncCuda中的参数是命令行传入

所以需要自行设置一些参数

首先是输入视频的宽高 ,视频的格式,以及编码之后的视频流格式(h264,h265等)

而AppEncCuda代码中有一个NV_ENC_INITIALIZE_PARAMS initializeParams 需要特别注意

因为传参数并没有文档说明

那么大部分我们需要默认参数

那么initializeParams.encodeConfig则可以通过nvidia的api预处理

 

代码如下:

NV_ENCODE_API_FUNCTION_LIST API;
    void* encoder;
    NV_ENC_PRESET_CONFIG encodepreset;
    //NV_ENC_RECONFIGURE_PARAMS
    memset(&encodepreset, 0, sizeof(NV_ENC_PRESET_CONFIG));
    encodepreset.version = NV_ENC_PRESET_CONFIG_VER;
    encodepreset.presetCfg.version = NV_ENC_CONFIG_VER;

    NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS encodeSessionExParams = { NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER };
    encodeSessionExParams.device = NvEncC::getInstance()->getContext();
    encodeSessionExParams.deviceType = NV_ENC_DEVICE_TYPE_CUDA;
    encodeSessionExParams.apiVersion = NVENCAPI_VERSION;

    API = { NV_ENCODE_API_FUNCTION_LIST_VER };
    NVENC_API_CALL(NvEncodeAPICreateInstance(&API));
    API.nvEncOpenEncodeSessionEx(&encodeSessionExParams, &encoder);
    NVENCSTATUS nvStatus = API.nvEncGetEncodePresetConfig(encoder, NvEncC::getInstance()->getGuidCodeC(), NvEncC::getInstance()->getGuidPreset(), &encodepreset);
    memcpy(&encodeConfig, &encodepreset.presetCfg, sizeof(NV_ENC_CONFIG));

如此一来encodeConfig就可以获取nvdia的预处理值了。

6.需要注意的点

 NVENC_API_CALL(m_nvenc.nvEncInitializeEncoder(m_hEncoder, &m_initializeParams));

如果返回的是8

那么传递的参数有误

需要修改对应的参数

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值