Hyper Encode uses Intel integrated and discrete graphics on one system
to accelerate encoding of a single video stream.
Depending on the selected parameters and codecs, performance gain on AlderLake iGPU + ARC Gfx up to 1.6x.
More information: https://www.intel.co.uk/content/www/uk/en/architecture-and-technology/adaptix/deep-link.html
Developer guide: https://github.com/oneapi-src/oneVPL-intel-gpu/blob/main/doc/HyperEncode_FeatureDeveloperGuide.md
Hyper Encode is supported only on Windows and requires D3D11 and oneVPL.
To enable Hyper Encode need to specify:
-Hyper Encode mode (-dual_gfx on or dual_gfx adaptive)
-Encoder: h264_qsv or hevc_qsv
-BRC: VBR, CQP or ICQ
-Lowpower mode (-low_power 1)
-Closed GOP for AVC or strict GOP for HEVC -idr_interval = 0 used by default
Depending on the encoding parameters, the following parameters may need
to be adjusted:
-g recommended >= 30 for better performance
-async_depth recommended >= 30 for better performance
-extra_hw_frames recommended equal to async_depth value
-bf recommended = 0 for better performance
In the cases with fast encoding (-preset veryfast) there may be no
performance gain due to the fact that the decode is slower than the encode.
Command line examples:
ffmpeg.exe -init_hw_device qsv:hw,child_device_type=d3d11va,child_device=0 -v verbose -y -hwaccel qsv -extra_hw_frames 60 -async_depth 60 -c:v h264_qsv -i bbb_sunflower_2160p_60fps_normal.mp4
-async_depth 60 -c:v h264_qsv -preset medium -g 60 -low_power 1 -bf 0 -dual_gfx on output.h265
Signed-off-by: galinart <artem.galin@intel.com>
{"forced_idr","Forcing I frames as IDR frames",OFFSET(qsv.forced_idr),AV_OPT_TYPE_BOOL,{.i64=0},0,1,VE}, \
{"low_power","enable low power mode(experimental: many limitations by mfx version, BRC modes, etc.)",OFFSET(qsv.low_power),AV_OPT_TYPE_BOOL,{.i64=-1},-1,1,VE},
#if QSV_HAVE_HE
#define QSV_HE_OPTIONS \
{"dual_gfx","Prefer processing on both iGfx and dGfx simultaneously",OFFSET(qsv.dual_gfx),AV_OPT_TYPE_INT,{.i64=MFX_HYPERMODE_OFF},MFX_HYPERMODE_OFF,MFX_HYPERMODE_ADAPTIVE,VE,"dual_gfx"}, \
{"on","Enable HyperEncode mode and return error if incompatible parameters during initialization",0,AV_OPT_TYPE_CONST,{.i64=MFX_HYPERMODE_ON},INT_MIN,INT_MAX,VE,"dual_gfx"}, \
{"adaptive","Enable HyperEncode mode or fallback to single GPU if incompatible parameters during initialization",0,AV_OPT_TYPE_CONST,{.i64=MFX_HYPERMODE_ADAPTIVE},INT_MIN,INT_MAX,VE,"dual_gfx"},