This Intel® Media SDK tutorial sample operates in the same way as the previous "sample_2_decode" sample except that it uses video memory surfaces instead of system memory surfaces.
Video surfaces are required to enable allocation on the GPU. These are implemented in DirectX for Windows and VAAPI for Linux. Device creation, adapter detection and surface management can be found in the tutorial "common" folder.
Video memory surfaces allow greater efficiency by avoiding explicit copies. Further improvement may be achieved by making the decode pipeline asynchronous. We'll explore this approach further when we discuss encoding workloads in the following tutorial sections. Improved GPU utilization can also be achieved by executing several decode workloads concurrently.
Additional details for Windows developers:
Since the introduction of Microsoft Windows* 8, Intel Media SDK can be used with DirectX11 devices and surfaces. Note that Intel Media SDK relies on the features part of DirectX 11.1, and can therefore not be used on Microsoft Windows 7. If your target application must run on Microsoft Windows 7, use the DirectX 9 path via Intel Media SDK.
Tutorial samples illustrating use of D3D surfaces (such as in this sample) have two Microsoft Visual Studio* solution/project (sln/prj) files. sln/prj for DirectX9 usage created using Microsoft Visual Studio 2010 and sln/prj for DirectX11 usage created using Microsoft Visual Studio 2012. Microsoft Visual Studio* 2012 is used for DirectX11 to ensure full DirectX 11.1 environment support.
This tutorial sample is found in the tutorial samples package under the name "simple_2_decode_vmem". The code is extensively documented with inline comments detailing each step required to setup and execute the use case.