# IntelMediaSDK_Sampledecode **Repository Path**: tetian/IntelMediaSDK_Sampledecode ## Basic Information - **Project Name**: IntelMediaSDK_Sampledecode - **Description**: 基于Intel Media SDK 2019 R1 - Media Samples 8.4.27.25的例程开发, 用来验证WGL_NV_DX_interop/WGL_NV_DX_interop2的使用方法 - **Primary Language**: C++ - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2022-05-05 - **Last Updated**: 2022-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IntelMediaSDK_Sampledecode #### 介绍 基于Intel Media SDK 2019 R1 - Media Samples 8.4.27.25的例程开发, 用来验证使用WGL_NV_DX_interop/WGL_NV_DX_interop2直接在GPU显存内共享OpenGL/DirectX数据的方法。 #### 软件架构 - VS项目为sample_decode\sample_decode.sln - 编译需要用VS2017,并且先安装好Intel MediaSDK, 可以在Intel官网免费[下载](https://software.intel.com/content/www/us/en/develop/tools/media-sdk.html) - 目前编译只设置了x64 debug/Release, 所以只能在x64模式下编译运行(Win32模式需要自己换一下GLEW的Win32库,并且照着x64的项目配置编译和链接参数) - 硬件解码方面因为使用了Intel显卡硬解码,所以必须使用有Intel集成显卡的CPU 原演示代码使用Intel QSV硬件解码,解码器输出为DirectX NV12 surface,然后将输出的Surface转换为RGBA格式并显示在一个窗口里。增加的代码在原有DX窗口之外另外创建了一个OpenGL窗口,OpenGL共享DirectX的一个Texture2D(D3D11)或IDirect3DSurface9(D3D9)的对象作为GLtexture来做纹理贴图 #### 使用说明 1. 项目选项 Debugging的Command Arguments里设置 DX9 `h264 -i C:\work\qsv_dec\x64\Debug\jellyfish-120-mbps-4k-uhd-h264.h264 -r -w 640 -h 480` - 走的是dx9流程, dx9下NV12 surface到RGBA Surface是用StretchRect来做的,根据MS的文档,这种情况下不能做缩放,所以现在代码里OGL窗口默认就是640x480, 命令行里-r -w 640 -h 480这个参数不能改 DX11 `h264 -d3d11 -i C:\work\qsv_dec\x64\Debug\jellyfish-120-mbps-4k-uhd-h264.h264 -r -w 640 -h 480` - 走D3d11流程,dx11下NV12 surface到RGBA Surface是用VideoProcessorBlt来做的,VideoProcessorBlt支持缩放,所以命令行里-r -w 640 -h 480 这个窗口的大小640x480可以随意修改 2. 或者在命令行里使用参数运行 DX9 `sample_decode.exe h264 -i C:\work\qsv_dec\x64\Debug\jellyfish-120-mbps-4k-uhd-h264.h264 -r -w 640 -h 480` DX11 `sample_decode.exe h264 -d3d11 -i C:\work\qsv_dec\x64\Debug\jellyfish-120-mbps-4k-uhd-h264.h264 -r -w 640 -h 480` 参数说明 ``` h264 指定用h264 codec来解码,因为后面的jellyfish-120-mbps-4k-uhd-h264.h264为264编码 -d3d11 使用direct3d 11的接口,如果不加则默认走direct3d 9的接口 -i C:\work\qsv_dec\x64\Debug\jellyfish-120-mbps-4k-uhd-h264.h264 指定解码的文件,需要是纯视频文件,不能是mp4或者mkv这种有系统层封装的格式 -r -w 640 -h 480 告诉程序需要显示图像渲染窗口,窗口大小为640x480 ``` - 本程序用以上参数编译验证过,具体参数及其他参数的用法可以参考sample_decode\readme-decode.pdf的说明 #### Intek MSDK原始项目 1. Intel MediaSDK的最新版本在[https://github.com/Intel-Media-SDK/MediaSDK](https://github.com/Intel-Media-SDK/MediaSDK)