For HEVC encoding mode i can't disable deblocking

Hi all

i am faced with the problem of disabling deblocking filter in encoding of HEVC stream (by NVENC):

The deblocking filter is controled by eDeblockingMode specified in the structure NV_HW_ENC_CONFIG_PARAMS:

NV_HW_ENC_DEBLOCKING_FILTER_MODE eDeblockingMode; /**< [in]: Specifies the deblocking filter mode. Permissible value range: [0,2].

Regardless to the value i assign to eDeblockingMode, in the output HEVC stream Deblocker is always enabled.

How can i disable Deblocking in HEVC?

Hi,

Unfortunately, this feature isn’t available in the existing SDK for HEVC. The support is there for H264. We will put this on our SDK roapmap and try to expose this capability in one of our upcoming SDKs.

Thanks,
Ryan Park

Thanks Ryan

Non-disabling deblocking across slice/tile boundaries deteriorates error resilience. Indeed, if a slice or detected as corrupted then a player usually replaces it with a co-located slice/tile. If deblocking across slice /tile boundaries is off then the corruption is not “spilt” from the corrupted slice/tile boundaries.

However, if the deblocking is ON then the corruption is spread by deblocking to neighboring slices in same frame.

i look forward the updated SDK.

Regards
Shevach Riabtsev
SW Engineer in EA

Hi Shevach,

It seems there is some confusion, In the shipping nvEncodeAPI.h, we have a flag NV_ENC_CONFIG_HEVC:: disableDeblockAcrossSliceBoundary to disable deblocking across slice boundary? Is this what you need?

Thanks,
Ryan Park

Hi Ryan

i don’t use nvEncodeAPI.h, i use NvIFRHWEnc.h and NvIFR dll.
In NvIFR there is the enum NV_HW_ENC_DEBLOCKING_FILTER_MODE:

NV_HW_ENC_DEBLOCKING_FILTER_MODE_DEFAULT = 0x0, /< Deblocking is enabled across the complete frame. */
NV_HW_ENC_DEBLOCKING_FILTER_MODE_DISABLE = 0x01, /
< Deblocking is disabled completely. */
NV_HW_ENC_DEBLOCKING_FILTER_MODE_SLICE = 0x02, /**< Deblocking is enabled but disabled across the slice boundary. */

i found experimentally on M60 that deblocking is always enabled and applied across slice boundaries.
Probably, there is a flaw in NvIFR dll-file.

NvIFR is deprecated.