libhevc-mirror/decoder
Narayan Kalaburgi 0aa9a2566f libhevcdec: Fix HBD transquant bypass decoding mismatch
When transquant bypass is enabled in HBD streams, decoded frames
mismatched the reference output due to two issues:

1. Intra boundary filtering:
   In the 8-bit path, boundary filtering for horizontal (mode 10) and
   vertical (mode 26) intra predictions is disabled when transquant bypass
   is active with implicit RDPCM. However, the HBD reconstruction path was
   passing raw u1_luma_pred_mode instead of disable_boundary_filter, and the
   HBD filter functions ignored the mode parameter.

2. SAO Scratch Buffer Overflow:
   During shifted CTB SAO processing, transquant bypass blocks are temporarily
   backed up into pu1_tmp_buf_luma and restored afterwards to keep them lossless.
   In HBD, each sample requires 2 bytes (UWORD16), but the static scratch buffer
   was allocated for 8-bit samples (sizeof(UWORD8)).
   Because the shifted CTB processing window spans beyond standard CTB boundaries
   to handle delayed neighbor boundaries, the 16-bit luma backup exceeded the
   allocated buffer capacity and overflowed into pu1_tmp_buf_chroma. Consequently,
   chroma backup overwrote the luma backup data, resulting in corrupted samples
   upon restoration.

This commit resolves the above issues with the following changes:
- common/ihevc_hbd_intra_pred_filters.c: Check 'disable_boundary_filter' to bypass
  boundary filtering in ihevc_hbd_intra_pred_luma_horz and ihevc_hbd_intra_pred_luma_ver.
- decoder/ihevcd_iquant_itrans_recon_ctb.c: Pass disable_boundary_filter
  to apf_hbd_intra_pred_luma for modes 10 and 26.
- decoder/ihevcd_api.c: Scale SAO temporary scratch buffer allocation
  (pu1_tmp_buf_luma and pu1_tmp_buf_chroma) by sizeof(UWORD16) to prevent
  buffer collision in HBD mode.
2026-09-04 09:35:33 -07:00
..
arm Cleanup few more unnecessary changes from HBD path 2026-08-09 05:13:29 +00:00
arm64 Cleanup few more unnecessary changes from HBD path 2026-08-09 05:13:29 +00:00
riscv64 Include ihevcd_defs.h and ihevcd_structs.h in risc function selector 2026-06-22 20:01:44 -07:00
x86 Cleanup few more unnecessary changes from HBD path 2026-08-09 05:13:29 +00:00
ihevcd_api.c libhevcdec: Fix HBD transquant bypass decoding mismatch 2026-09-04 09:35:33 -07:00
ihevcd_bitstream.c use unsigned word type in ihevcd_bits_seek to avoid signed shift ub 2026-07-06 21:28:17 -07:00
ihevcd_bitstream.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_boundary_strength.c libhevcdec: Cast pu1_pic_qp to WORD8 * in boundary strength calculation 2026-08-14 01:13:07 +00:00
ihevcd_boundary_strength.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_cabac.c hevcdec: add support for persistent rice adaptation flag 2026-03-16 10:03:26 -07:00
ihevcd_cabac.h hevcdec: add support for persistent rice adaptation flag 2026-03-16 10:03:26 -07:00
ihevcd_common_tables.c hevcdec: update lib for chroma format idc 422 2026-03-04 15:39:55 -08:00
ihevcd_common_tables.h hevcdec: update lib for chroma format idc 422 2026-03-04 15:39:55 -08:00
ihevcd_cxa.h Move HEVC_DEC_PROFILE_T to ihevcd_structs.h 2026-08-09 23:47:45 +00:00
ihevcd_deblk.c libhevcdec: Add deblocking support for YUV444 HBD 2026-08-31 09:40:08 -07:00
ihevcd_deblk.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_debug.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_decode.c libhevcdec: Fix dynamic bitstream buffer reallocation based on NAL unit size 2026-09-03 14:07:39 -07:00
ihevcd_decode.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_defs.h Remove few more unnecessary changes from HBD path 2026-08-09 23:47:45 +00:00
ihevcd_error.h Remove few more unnecessary changes from HBD path 2026-08-09 23:47:45 +00:00
ihevcd_fmt_conv.c libhevc: Implement 10-bit 444 sp to p Output format conversion 2026-08-14 21:34:32 +00:00
ihevcd_fmt_conv.h Few minor cleanups in headers to minimize the differences with main branch 2026-08-12 05:24:06 +00:00
ihevcd_func_types.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_function_selector.h libhevcdec: Implement 10-bit decoding support for Cross Component Prediction 2026-08-24 05:35:06 +00:00
ihevcd_function_selector_generic.c libhevcdec: Implement 10-bit decoding support for Cross Component Prediction 2026-08-24 05:35:06 +00:00
ihevcd_get_mv.c fix oob top-left pu-map read in ihevcd_get_mv_ctb 2026-07-14 07:25:34 -07:00
ihevcd_get_mv.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_ilf_padding.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_inter_pred.c libhevcdec: Add support for High Precision Weighted Prediction in HBD 2026-09-02 08:38:08 -07:00
ihevcd_inter_pred.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_intra_pred_mode_prediction.c libhevc: Direct memcpy and memset calls to enable _FORTIFY_SOURCE 2026-06-18 06:44:56 -07:00
ihevcd_intra_pred_mode_prediction.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_iquant_itrans_recon_ctb.c libhevcdec: Fix HBD transquant bypass decoding mismatch 2026-09-04 09:35:33 -07:00
ihevcd_iquant_itrans_recon_ctb.h Remove few more unnecessary changes from HBD path 2026-08-09 23:47:45 +00:00
ihevcd_itrans_recon_dc.c Remove few more unnecessary changes from HBD path 2026-08-09 23:47:45 +00:00
ihevcd_itrans_recon_dc.h Few minor cleanups in headers to minimize the differences with main branch 2026-08-12 05:24:06 +00:00
ihevcd_ittiam_logo.h Clean up HBD support before split 2026-08-07 17:25:44 +00:00
ihevcd_job_queue.c Source files clean up 2014-07-12 15:09:24 -07:00
ihevcd_job_queue.h Source files clean up 2014-07-12 15:09:24 -07:00
ihevcd_mv_merge.c Reduced memory requirements 2015-10-09 11:44:26 -07:00
ihevcd_mv_merge.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_mv_pred.c Source files clean up 2014-07-12 15:09:24 -07:00
ihevcd_mv_pred.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_nal.c libhevc: move SEI related code under a macro 2024-05-07 10:07:49 -07:00
ihevcd_nal.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_parse_headers.c Fix PCM luma coding block size validation as per spec 2026-09-03 11:34:08 +05:30
ihevcd_parse_headers.h libhevc: move SEI related code under a macro 2024-05-07 10:07:49 -07:00
ihevcd_parse_residual.c Cleanup few more unnecessary changes from HBD path 2026-08-09 05:13:29 +00:00
ihevcd_parse_residual.h Remove few more unnecessary changes from HBD path 2026-08-09 23:47:45 +00:00
ihevcd_parse_slice.c libhevcdec: Fix compiler warnings in ihevcd_parse_slice 2026-08-22 02:33:24 +00:00
ihevcd_parse_slice.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_parse_slice_header.c libhevcdec: Fix slice QP delta lower bound validation for HBD 2026-08-19 14:32:49 +00:00
ihevcd_parse_slice_header.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_process_slice.c Remove SAO wrapper 2026-08-09 23:47:45 +00:00
ihevcd_process_slice.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_profile.h Source files clean up 2014-07-12 15:09:24 -07:00
ihevcd_ref_list.c Decoder: Fix integer-overflow sanitizer issues 2019-01-09 13:16:37 -08:00
ihevcd_ref_list.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_sao.c libhevcdec: Update SAO support for 444 HBD 2026-08-31 09:39:45 -07:00
ihevcd_sao.h Remove SAO wrapper 2026-08-09 23:47:45 +00:00
ihevcd_statistics.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_structs.h libhevcdec: Implement 10-bit decoding support for Cross Component Prediction 2026-08-24 05:35:06 +00:00
ihevcd_trace.h Initial Version of HEVC decoder 2014-05-21 18:14:55 -07:00
ihevcd_utils.c Remove SAO wrapper 2026-08-09 23:47:45 +00:00
ihevcd_utils.h libhevcdec: disable simd optimizations during 422/444 decoding. 2026-05-07 07:00:35 -07:00
ihevcd_version.c Clean up HBD support before split 2026-08-07 17:25:44 +00:00
libhevcdec.cmake decoder: Clean up HBD function pointers and rename to match convention 2026-08-09 23:47:45 +00:00