@@ -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
10721093error :
@@ -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
10981122error :
@@ -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
12571287error :
@@ -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
13331366error :
0 commit comments