0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA SDK 11.1对DirectX 12进行编码

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-20 16:27 次阅读

DirectX 12 是 Microsoft 提供的一种低级编程 API ,与以前的版本相比,它减少了驱动程序开销。 DirectX 12 使用命令队列、命令列表等在底层硬件上提供了更大的灵活性和细粒度控制,从而提高了资源利用率。您可以利用这些功能,优化应用程序,并获得比早期 DirectX 版本更好的性能。同时,应用程序本身必须负责资源管理、同步等。

越来越多的游戏标题和其他图形应用程序采用 DirectX12 API 。视频编解码器 SDK 11 . 1 在 Windows 20H1 及更高版本的操作系统上引入了 DirectX 12 编码支持。这使 DirectX 12 应用程序能够在所有受支持的 GPU 代中使用 NVENC 。视频编解码器 SDK 包包含 Nvencodepi 头文件、演示用法的示例应用程序以及使用 API 的编程指南。示例应用程序包含 C ++包装类,可以根据需要重用或修改。

typedef struct _NV_ENC_FENCE_POINT_D3D12
 {
     void*                   pFence; /**< [in]: Pointer to ID3D12Fence. This fence object is  
                                                used for synchronization. */
     uint64_t                value;  /**< [in]: Fence value to reach or exceed before the GPU 
                                                operation or fence value to set the fence to,                                                                
                                                after the GPU operation. */ 

初始化 NVENC 时,客户端应用程序还必须指定输入缓冲区格式。

尽管在 DirectX 12 中传递给 Encode picture API 的大多数参数与其他接口中的参数相同,但仍存在某些功能差异。输入端(客户端应用程序写入输入面, NVENC 读取输入面)和输出端( NVENC 写入位流面,应用程序读取位流面)的同步必须使用 fences 进行管理。这与以前的 DirectX 接口不同,后者由操作系统运行时和驱动程序自动处理。

在 DirectX 12 中,需要有关围栏和围栏值的附加信息作为编码图片 API 的输入参数。这些围栏和围栏值用于同步 CPU – GPU 和 GPU – GPU 操作。应用程序必须在NV_ENC_PIC_PARAMS::inputBuffer和NV_ENC_PIC_PARAMS:: outputBitstream中发送以下输入和输出结构指针,其中包含围栏和围栏值:

typedef struct _NV_ENC_INPUT_RESOURCE_D3D12
 {
     NV_ENC_REGISTERED_PTR       pInputBuffer
     NV_ENC_FENCE_POINT_D3D12    inputFencePoint;       
     …
 } NV_ENC_INPUT_RESOURCE_D3D12;
  
 typedef struct _NV_ENC_OUTPUT_RESOURCE_D3D12
 {
     NV_ENC_REGISTERED_PTR      pOutputBuffer;
     NV_ENC_FENCE_POINT_D3D12   outputFencePoint;     
     …

要在异步操作模式下检索编码输出,应用程序应在调用NvEncLockBitstream之前等待完成事件。在同步操作模式下,应用程序可以调用NvEncLockBitstream,因为 NVENCODE API 在返回编码输出之前确保编码已完成。但是,在这两种情况下,客户机应用程序都应该在NV_ENC_LOCK_BITSTREAM::outputBitstream中传递指向NV_ENC_OUTPUT_RESOURCE_D3D12的指针,该指针在NvEncEncodePicture API 中使用。

关于作者

Dipti Taur 是 NVIDIA 多媒体驱动程序团队的高级系统软件工程师。她曾从事DirectX 12的各种视频编解码器、视频驱动程序开发和应用程序编程接口设计。她拥有印度孟买IIT电子工程硕士学位,专业从事通信信号处理。

Sampurnananda Mishra 是 NVIDIA 负责多媒体驱动程序的高级经理。他研究过 NVIDIA GPU s 上支持的各种多媒体用例。他的兴趣包括视频编码、计算机视觉、视频安全、深度学习和系统软件。他拥有印度 IIT 坎普尔电子工程硕士学位,主攻数字信号处理。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7574

    浏览量

    148207
  • NVIDIA
    +关注

    关注

    14

    文章

    4541

    浏览量

    101479
  • 深度学习
    +关注

    关注

    73

    文章

    5204

    浏览量

    119804
收藏 人收藏

    评论

    相关推荐

    #芯圣SDK工具 SDK-HC89S105A,让开发更方便!

    SDK
    上海芯圣电子股份有限公司
    发布于 :2023年11月10日 08:55:03

    #芯圣SDK工具 SDK-HC89S103K6,让开发更方便!

    SDK
    上海芯圣电子股份有限公司
    发布于 :2023年11月08日 09:46:14

    #芯圣SDK工具 SDK-HC89S003A,让开发更方便!

    SDK
    上海芯圣电子股份有限公司
    发布于 :2023年11月07日 09:59:12

    如何用SC5+开发板进行视频编码呢?

    官网给的SC5+的视频编码能力: H.264:1080P @70fps H.265:1080P @60fps 如何用SC5+开发板进行视频编码呢?用ffmpeg还是自带的sdk?哪里有
    发表于 09-15 07:22

    NVIDIA DeepStream SDK 6.3 版本发布

    概述 DeepStream 是一款基于 GStreamer 的 SDK,用于创建图像处理和物体检测方面的 AI 视觉应用程序。DeepStream 6.3 引入了图形执行格式(Graph
    的头像 发表于 08-31 13:05 385次阅读

    使用Nuclei SDK或者HBird SDK进行下载或调试报错怎么解决?

    在使用Nuclei SDK或者HBird SDK进行下载(upload)或者调试(debug)的时候出现下面这种输出: 使用的flash是w25q256FVFIG 求助有啥解决办法?
    发表于 08-12 07:27

    OneCapture 11.1发行说明

    电子发烧友网站提供《OneCapture 11.1发行说明.pdf》资料免费下载
    发表于 08-11 14:46 0次下载
    OneCapture <b class='flag-5'>11.1</b>发行说明

    NVIDIA JETSON载板设计开发教程 NVIDIA SDK Manager对载板进行自定义

    NVIDIA SDK Manager 是在 NVIDIA Jetson 开发者套件 上安装 NVIDIA JetPack SDK 的必备工具
    的头像 发表于 07-28 17:10 1279次阅读
    <b class='flag-5'>NVIDIA</b> JETSON载板设计开发教程 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>SDK</b> Manager对载板<b class='flag-5'>进行</b>自定义

    NVIDIA TensorRT与Apache Beam SDK的集成

    使用 NVIDIA TensorRT 在 Apache Beam 中简化和加速机器学习预测
    的头像 发表于 07-05 16:30 247次阅读

    使用Raspberry Pi和BluPants进行编码

    电子发烧友网站提供《使用Raspberry Pi和BluPants进行编码.zip》资料免费下载
    发表于 07-05 11:21 0次下载
    使用Raspberry Pi和BluPants<b class='flag-5'>进行</b><b class='flag-5'>编码</b>

    使用Beaglebone和BluPants进行编码

    电子发烧友网站提供《使用Beaglebone和BluPants进行编码.zip》资料免费下载
    发表于 07-05 09:20 0次下载
    使用Beaglebone和BluPants<b class='flag-5'>进行</b><b class='flag-5'>编码</b>

    使用AlphaBot2-Pi和BluPants进行编码

    电子发烧友网站提供《使用AlphaBot2-Pi和BluPants进行编码.zip》资料免费下载
    发表于 06-30 15:04 0次下载
    使用AlphaBot2-Pi和BluPants<b class='flag-5'>进行</b><b class='flag-5'>编码</b>

    使用Arduino的Bytebeam SDK进行智能室内农业

    电子发烧友网站提供《使用Arduino的Bytebeam SDK进行智能室内农业.zip》资料免费下载
    发表于 06-13 09:22 0次下载
    使用Arduino的Bytebeam <b class='flag-5'>SDK</b><b class='flag-5'>进行</b>智能室内农业

    使用本机SDK进行编程?

    我是 ESP 世界的新手,我有一个 ESP8266,我想使用本机 SDK 进行编程。 我想避免在我的系统上本地安装交叉编译器的麻烦,所以我想使用 Docker 容器进行构建。周围有很多,但我不确定该
    发表于 06-02 12:26

    SMULL SDK 简介

    SDK
    橙群微电子
    发布于 :2023年03月31日 09:52:11