mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-12-02 16:27:25 +00:00
hevc: Fix modulo operations
Keep qp fields within the range. Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
parent
a7a07cc98a
commit
d5c15ebeaf
@ -771,8 +771,8 @@ static int hls_slice_header(HEVCContext *s)
|
||||
s->HEVClc.first_qp_group = !s->sh.dependent_slice_segment_flag;
|
||||
|
||||
if (!s->pps->cu_qp_delta_enabled_flag)
|
||||
s->HEVClc.qp_y = ((s->sh.slice_qp + 52 + 2 * s->sps->qp_bd_offset) %
|
||||
(52 + s->sps->qp_bd_offset)) - s->sps->qp_bd_offset;
|
||||
s->HEVClc.qp_y = FFUMOD(s->sh.slice_qp + 52 + 2 * s->sps->qp_bd_offset,
|
||||
52 + s->sps->qp_bd_offset) - s->sps->qp_bd_offset;
|
||||
|
||||
s->slice_initialized = 1;
|
||||
|
||||
|
@ -85,6 +85,9 @@
|
||||
s->nal_unit_type == NAL_BLA_N_LP)
|
||||
#define IS_IRAP(s) (s->nal_unit_type >= 16 && s->nal_unit_type <= 23)
|
||||
|
||||
#define FFUDIV(a,b) (((a) > 0 ? (a) : (a) - (b) + 1) / (b))
|
||||
#define FFUMOD(a,b) ((a) - (b) * FFUDIV(a,b))
|
||||
|
||||
/**
|
||||
* Table 7-3: NAL unit type codes
|
||||
*/
|
||||
|
@ -158,8 +158,8 @@ void ff_hevc_set_qPy(HEVCContext *s, int xC, int yC,
|
||||
|
||||
if (s->HEVClc.tu.cu_qp_delta != 0) {
|
||||
int off = s->sps->qp_bd_offset;
|
||||
s->HEVClc.qp_y = ((qp_y + s->HEVClc.tu.cu_qp_delta + 52 + 2 * off) %
|
||||
(52 + off)) - off;
|
||||
s->HEVClc.qp_y = FFUMOD(qp_y + s->HEVClc.tu.cu_qp_delta + 52 + 2 * off,
|
||||
52 + off) - off;
|
||||
} else
|
||||
s->HEVClc.qp_y = qp_y;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user