OSDN Git Service

Fix a typo
[android-x86/hardware-intel-common-vaapi.git] / src / i965_device_info.c
index 5303643..a6adcf5 100644 (file)
@@ -72,7 +72,7 @@ static struct hw_codec_info g4x_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .has_mpeg2_decoding = 1,
 
@@ -92,7 +92,7 @@ static struct hw_codec_info ilk_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .has_mpeg2_decoding = 1,
     .has_h264_decoding = 1,
@@ -117,7 +117,7 @@ static struct hw_codec_info snb_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
@@ -132,6 +132,8 @@ static struct hw_codec_info snb_hw_codec_info = {
     .has_tiled_surface = 1,
     .has_di_motion_adptive = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 2,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_NULL },
@@ -154,7 +156,7 @@ static struct hw_codec_info ivb_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
@@ -173,6 +175,8 @@ static struct hw_codec_info ivb_hw_codec_info = {
     .has_di_motion_adptive = 1,
     .has_di_motion_compensated = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 2,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_NULL },
@@ -196,10 +200,10 @@ static struct hw_codec_info hsw_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
 
@@ -217,6 +221,8 @@ static struct hw_codec_info hsw_hw_codec_info = {
     .has_di_motion_compensated = 1,
     .has_h264_mvc_encoding = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
@@ -239,11 +245,11 @@ static struct hw_codec_info bdw_hw_codec_info = {
 
     .max_width = 4096,
     .max_height = 4096,
-    .min_linear_wpitch = 128,
-    .min_linear_hpitch = 16,
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
 
@@ -262,6 +268,8 @@ static struct hw_codec_info bdw_hw_codec_info = {
     .has_vp8_decoding = 1,
     .has_h264_mvc_encoding = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
@@ -282,11 +290,11 @@ static struct hw_codec_info chv_hw_codec_info = {
 
     .max_width = 4096,
     .max_height = 4096,
-    .min_linear_wpitch = 128,
-    .min_linear_hpitch = 16,
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
     .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
@@ -309,6 +317,8 @@ static struct hw_codec_info chv_hw_codec_info = {
     .has_h264_mvc_encoding = 1,
     .has_hevc_decoding = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
@@ -319,22 +329,27 @@ static struct hw_codec_info chv_hw_codec_info = {
     },
 };
 
+static void gen9_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info);
+
 extern struct hw_context *gen9_enc_hw_context_init(VADriverContextP, struct object_config *);
 extern void gen9_post_processing_context_init(VADriverContextP, void *, struct intel_batchbuffer *);
+extern void gen9_max_resolution(struct i965_driver_data *, struct object_config *, int *, int *);
 static struct hw_codec_info skl_hw_codec_info = {
     .dec_hw_context_init = gen9_dec_hw_context_init,
     .enc_hw_context_init = gen9_enc_hw_context_init,
     .proc_hw_context_init = gen75_proc_context_init,
     .render_init = gen9_render_init,
     .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
 
-    .max_width = 4096,
-    .max_height = 4096,
-    .min_linear_wpitch = 128,
-    .min_linear_hpitch = 16,
+    .max_width = 4096,  /* default. See max_resolution */
+    .max_height = 4096, /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
     .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
@@ -357,6 +372,12 @@ static struct hw_codec_info skl_hw_codec_info = {
     .has_h264_mvc_encoding = 1,
     .has_hevc_decoding = 1,
     .has_hevc_encoding = 1,
+    .has_lp_h264_encoding = 1,
+    .has_fei_h264_encoding = 1,
+    .has_h264_preenc = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
 
     .num_filters = 5,
     .filters = {
@@ -375,14 +396,16 @@ static struct hw_codec_info bxt_hw_codec_info = {
     .proc_hw_context_init = gen75_proc_context_init,
     .render_init = gen9_render_init,
     .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
 
-    .max_width = 4096,
-    .max_height = 4096,
-    .min_linear_wpitch = 128,
-    .min_linear_hpitch = 16,
+    .max_width = 4096,  /* default. See max_resolution */
+    .max_height = 4096, /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .vp9_dec_profiles = VP9_PROFILE_MASK(0),
 
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
@@ -410,6 +433,10 @@ static struct hw_codec_info bxt_hw_codec_info = {
     .has_hevc10_decoding = 1,
     .has_vp9_decoding = 1,
     .has_vpp_p010 = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
 
     .num_filters = 5,
     .filters = {
@@ -427,16 +454,216 @@ static struct hw_codec_info kbl_hw_codec_info = {
     .proc_hw_context_init = gen75_proc_context_init,
     .render_init = gen9_render_init,
     .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
+    VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_mpeg2_encoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info glk_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
 
     .max_width = 4096,
     .max_height = 4096,
-    .min_linear_wpitch = 128,
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
+    VP9_PROFILE_MASK(2),
+
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info cfl_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
     .min_linear_hpitch = 16,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
-                        VP9_PROFILE_MASK(2),
+    VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_mpeg2_encoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info cnl_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 16,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) | VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
 
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
@@ -463,8 +690,17 @@ static struct hw_codec_info kbl_hw_codec_info = {
     .has_hevc_decoding = 1,
     .has_hevc_encoding = 1,
     .has_hevc10_decoding = 1,
+    .has_hevc10_encoding = 1,
     .has_vp9_decoding = 1,
     .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+    .has_lp_vp9_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
 
     .num_filters = 5,
     .filters = {
@@ -623,6 +859,31 @@ static const struct intel_device_info kbl_device_info = {
     .is_kabylake = 1,
 };
 
+static const struct intel_device_info glk_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+
+    .is_glklake = 1,
+};
+
+static const struct intel_device_info cfl_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+
+    .is_cfllake = 1,
+};
+
+static const struct intel_device_info cnl_device_info = {
+    .gen = 10,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+};
+
 const struct intel_device_info *
 i965_get_device_info(int devid)
 {
@@ -636,8 +897,8 @@ i965_get_device_info(int devid)
 }
 
 static void cpuid(unsigned int op,
-                         uint32_t *eax, uint32_t *ebx,
-                         uint32_t *ecx, uint32_t *edx)
+                  uint32_t *eax, uint32_t *ebx,
+                  uint32_t *ecx, uint32_t *edx)
 {
     __cpuid_count(op, 0, *eax, *ebx, *ecx, *edx);
 }
@@ -676,12 +937,12 @@ static int intel_driver_detect_cpustring(char *model_id)
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *hsw_cpu_hook_list[] =  {
-"Intel(R)Pentium(R)3556U",
-"Intel(R)Pentium(R)3560Y",
-"Intel(R)Pentium(R)3550M",
-"Intel(R)Celeron(R)2980U",
-"Intel(R)Celeron(R)2955U",
-"Intel(R)Celeron(R)2950M",
+    "Intel(R)Pentium(R)3556U",
+    "Intel(R)Pentium(R)3560Y",
+    "Intel(R)Pentium(R)3550M",
+    "Intel(R)Celeron(R)2980U",
+    "Intel(R)Celeron(R)2955U",
+    "Intel(R)Celeron(R)2950M",
 };
 
 static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -700,7 +961,7 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
     /* strip the cpufreq info */
     model_ptr = model_string;
     tmp_ptr = strstr(model_ptr, "@");
-   
+
     if (tmp_ptr)
         *tmp_ptr = '\0';
 
@@ -708,10 +969,10 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -743,8 +1004,8 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *gen6_cpu_hook_list[] =  {
-"Intel(R)Celeron(R)CPU847",
-"Intel(R)Celeron(R)CPU867",
+    "Intel(R)Celeron(R)CPU847",
+    "Intel(R)Celeron(R)CPU867",
 };
 
 static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -771,10 +1032,10 @@ static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -804,7 +1065,9 @@ static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *gen7_cpu_hook_list[] =  {
-"Intel(R)Celeron(R)CPU1007U",
+    "Intel(R)Celeron(R)CPU1007U",
+    "Intel(R)Celeron(R)CPU1037U",
+    "Intel(R)Pentium(R)CPUG2130",
 };
 
 static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -831,10 +1094,10 @@ static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -859,3 +1122,14 @@ static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     }
     return;
 }
+
+static void gen9_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
+{
+    struct i965_driver_data *i965 = i965_driver_data(ctx);
+
+    if (i965->intel.has_huc && codec_info->has_lp_h264_encoding)
+        codec_info->lp_h264_brc_mode |= (VA_RC_CBR | VA_RC_VBR);
+
+    if (i965->intel.has_huc && codec_info->has_lp_vp9_encoding)
+        codec_info->lp_vp9_brc_mode |= (VA_RC_CQP | VA_RC_CBR | VA_RC_VBR);
+}