Skip to content
This repository was archived by the owner on Jan 31, 2025. It is now read-only.

Commit 5d7d525

Browse files
Pengfei Quxhaihao
authored andcommitted
ENC: add sanity check for invalid input resolution of encoder
Signed-off-by: Pengfei Qu <[email protected]>
1 parent b538762 commit 5d7d525

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/i965_encoder.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,16 @@ intel_encoder_check_misc_parameter(VADriverContextP ctx,
824824
{
825825
struct i965_driver_data *i965 = i965_driver_data(ctx);
826826
VAStatus ret = VA_STATUS_SUCCESS;
827+
int min_width_height = 32;
828+
829+
if (encoder_context->frame_width_in_pixel > 0 &&
830+
encoder_context->frame_height_in_pixel > 0) {
831+
if (profile == VAProfileJPEGBaseline)
832+
min_width_height = 16;
833+
if (encoder_context->frame_width_in_pixel < min_width_height ||
834+
encoder_context->frame_height_in_pixel < min_width_height)
835+
return VA_STATUS_ERROR_INVALID_PARAMETER;
836+
}
827837

828838
if (encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0] &&
829839
encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0]->buffer) {
@@ -1014,10 +1024,16 @@ intel_encoder_check_mpeg2_parameter(VADriverContextP ctx,
10141024
{
10151025
struct i965_driver_data *i965 = i965_driver_data(ctx);
10161026
VAEncPictureParameterBufferMPEG2 *pic_param = (VAEncPictureParameterBufferMPEG2 *)encode_state->pic_param_ext->buffer;
1027+
VAEncSequenceParameterBufferMPEG2 *seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer;
10171028
struct object_surface *obj_surface;
10181029
struct object_buffer *obj_buffer;
10191030
int i = 0;
10201031

1032+
seq_param = NULL;
1033+
if (encode_state->seq_param_ext &&
1034+
encode_state->seq_param_ext->buffer)
1035+
seq_param = (VAEncSequenceParameterBufferMPEG2 *)encode_state->seq_param_ext->buffer;
1036+
10211037
obj_surface = SURFACE(pic_param->reconstructed_picture);
10221038
assert(obj_surface); /* It is possible the store buffer isn't allocated yet */
10231039

@@ -1067,6 +1083,11 @@ intel_encoder_check_mpeg2_parameter(VADriverContextP ctx,
10671083
for (; i < 16; i++)
10681084
encode_state->reference_objects[i] = NULL;
10691085

1086+
if (seq_param) {
1087+
encoder_context->frame_width_in_pixel = seq_param->picture_width;
1088+
encoder_context->frame_height_in_pixel = seq_param->picture_height;
1089+
}
1090+
10701091
return VA_STATUS_SUCCESS;
10711092

10721093
error:
@@ -1093,6 +1114,9 @@ intel_encoder_check_jpeg_parameter(VADriverContextP ctx,
10931114

10941115
encode_state->coded_buf_object = obj_buffer;
10951116

1117+
encoder_context->frame_width_in_pixel = pic_param->picture_width;
1118+
encoder_context->frame_height_in_pixel = pic_param->picture_height;
1119+
10961120
return VA_STATUS_SUCCESS;
10971121

10981122
error:
@@ -1252,6 +1276,12 @@ intel_encoder_check_hevc_parameter(VADriverContextP ctx,
12521276

12531277
encoder_context->is_new_sequence = (pic_param->pic_fields.bits.idr_pic_flag && seq_param);
12541278

1279+
if (encoder_context->is_new_sequence) {
1280+
encoder_context->num_frames_in_sequence = 0;
1281+
encoder_context->frame_width_in_pixel = seq_param->pic_width_in_luma_samples;
1282+
encoder_context->frame_height_in_pixel = seq_param->pic_height_in_luma_samples;
1283+
}
1284+
12551285
return VA_STATUS_SUCCESS;
12561286

12571287
error:
@@ -1328,6 +1358,9 @@ intel_encoder_check_vp9_parameter(VADriverContextP ctx,
13281358

13291359
encoder_context->is_new_sequence = (is_key_frame && seq_param);
13301360

1361+
encoder_context->frame_width_in_pixel = pic_param->frame_width_src;
1362+
encoder_context->frame_height_in_pixel = pic_param->frame_height_src;
1363+
13311364
return VA_STATUS_SUCCESS;
13321365

13331366
error:

0 commit comments

Comments
 (0)