Before this version QtAV does not support zero-copy for DXVA. The decoded data must be read back from GPU and it wastes a lot of cpu time. Now the renderer can directly render the picture on GPU. The CPU load can be very low.
ANGLE (OpenGL ES2) is required to support 0-copy. Since Qt5.4, Qt supports dynamic OpenGL. Desktop OpenGL will be used if it's available. There are 2 ways to enable OpenGL ES:
qApp->setAttribute(Qt::AA_UseOpenGLES);at the beginning
If OpenGL ES is used, 0-copy mode will be used for DXVA decoder in QtAV. You can force copy-back mode like this
QVariantHash dec_opt(player->optionsForVideoCodec()); dec_opt["copyMode"] = "OptimizedCopy"; // or "GenericCopy" player->setOptionsForVideoCodec(dec_opt);
The QMLPlayer example use OpenGL ES by default, You have to edit
%HOME%\.QtAV\QMLPlayer.ini to change opengl.
The player example has a gui option to choose OpenGL ES or Desktop OpenGL
NOTE: git submode
capi is required to build with 0-copy support
A WGL extension is required. https://www.opengl.org/registry/specs/NV/DX_interop.txt
I wrote the code but it and test for several GPUs. Only Intel HD4600 works.
Video encoding support is still working in progress. Currently you can transcode video streams but not audio stream.
I use appveyor for windows build. When I push a commit to github, appveyor will build it and create a package. It's very helpful to watch the build issue. You can download the latest build from https://ci.appveyor.com/project/wang-bin/qtav/build/artifacts or https://sourceforge.net/projects/qtav/files/ci/