mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-08 06:09:50 +00:00
vaapi_encode_h264: Reduce SAR to valid range
The SAR of the input could have a numerator or denominator greater than 2^16 which would then be truncated to a 16-bit integer when written to the VUI parameters, giving a random result. Instead, reduce the SAR to the nearest representable fraction. Fixes #7502.
This commit is contained in:
parent
ead0d2eb76
commit
a830056b32
1 changed files with 7 additions and 5 deletions
|
|
@ -389,18 +389,20 @@ static int vaapi_encode_h264_init_sequence_params(AVCodecContext *avctx)
|
||||||
{ 80, 33 }, { 18, 11 }, { 15, 11 }, { 64, 33 },
|
{ 80, 33 }, { 18, 11 }, { 15, 11 }, { 64, 33 },
|
||||||
{ 160, 99 }, { 4, 3 }, { 3, 2 }, { 2, 1 },
|
{ 160, 99 }, { 4, 3 }, { 3, 2 }, { 2, 1 },
|
||||||
};
|
};
|
||||||
int i;
|
int num, den, i;
|
||||||
|
av_reduce(&num, &den, avctx->sample_aspect_ratio.num,
|
||||||
|
avctx->sample_aspect_ratio.den, 65535);
|
||||||
for (i = 0; i < FF_ARRAY_ELEMS(sar_idc); i++) {
|
for (i = 0; i < FF_ARRAY_ELEMS(sar_idc); i++) {
|
||||||
if (avctx->sample_aspect_ratio.num == sar_idc[i].num &&
|
if (num == sar_idc[i].num &&
|
||||||
avctx->sample_aspect_ratio.den == sar_idc[i].den) {
|
den == sar_idc[i].den) {
|
||||||
sps->vui.aspect_ratio_idc = i;
|
sps->vui.aspect_ratio_idc = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i >= FF_ARRAY_ELEMS(sar_idc)) {
|
if (i >= FF_ARRAY_ELEMS(sar_idc)) {
|
||||||
sps->vui.aspect_ratio_idc = 255;
|
sps->vui.aspect_ratio_idc = 255;
|
||||||
sps->vui.sar_width = avctx->sample_aspect_ratio.num;
|
sps->vui.sar_width = num;
|
||||||
sps->vui.sar_height = avctx->sample_aspect_ratio.den;
|
sps->vui.sar_height = den;
|
||||||
}
|
}
|
||||||
sps->vui.aspect_ratio_info_present_flag = 1;
|
sps->vui.aspect_ratio_info_present_flag = 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue