Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-08 Thread Mark Thompson
On 08/12/16 01:13, Zhao Yakui wrote:
> On 12/07/2016 01:48 PM, Xiang, Haihao wrote:
>> Now we have the same way for frame rate for each codec in i965_encoder.c, it 
>> would be better to use the result directly
> 
> Hi, Mark
> 
> Can you refresh your patch based on Haihao's suggestion?
> Now the frame rate is parsed in the function of 
> intel_encoder_check_framerate_parameter. (It is defined in i965_encoder.c) 
> and it is stored as framerate_per_100s.
> So the vp9 can use the framerate_per_100s for the frame_rate_m. The 
> frame_rate_d can be 100.

Right, I went a bit further than that.  The following removes all use of any of 
the RC parameter buffers (RC, HRD, framerate) from the specific encoders, 
moving top-level RC code into i965_encoder.c.

Tested with VP8, VP9, H.264 and H.265 on Kaby Lake.  I haven't tested the 
low-power H.264 encoder (gen9_vdenc.c) because it is only enabled for Skylake 
using CQP at the moment, though there are some edits there.

Thanks,

- Mark
___
Libva mailing list
Libva@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libva


Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-07 Thread Zhao Yakui

On 12/07/2016 01:48 PM, Xiang, Haihao wrote:

Now we have the same way for frame rate for each codec in i965_encoder.c, it 
would be better to use the result directly


Hi, Mark

Can you refresh your patch based on Haihao's suggestion?
Now the frame rate is parsed in the function of 
intel_encoder_check_framerate_parameter. (It is defined in 
i965_encoder.c) and it is stored as framerate_per_100s.
So the vp9 can use the framerate_per_100s for the frame_rate_m. The 
frame_rate_d can be 100.


Thanks
   Yakui



Thanks
Haihao


-Original Message-
From: Libva [mailto:libva-boun...@lists.freedesktop.org] On Behalf Of Mark
Thompson
Sent: Tuesday, December 6, 2016 2:02 AM
To: libva@lists.freedesktop.org
Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

Signed-off-by: Mark Thompson
---
Tested on Kaby Lake.  Someone who has access to the manuals should make
sure that the framerate numerator/denominator actually works there as I am
guessing it does.

Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because
there is no longer a sensible value to set it to (and also it's not read 
anywhere).
If it is needed, it wants to be replaced by the two parts of the fraction.

src/gen9_vp9_encoder.c | 45 ++---

src/gen9_vp9_encoder.h |  4 ++--
2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index
3ea1537..8ff1b9b 100644
--- a/src/gen9_vp9_encoder.c
+++ b/src/gen9_vp9_encoder.c
@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
ctx,
   VP9_BRC_KBPS;
 cmd->dw9.min_bit_rate   = (vp9_state->min_bit_rate  +
VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
   VP9_BRC_KBPS;
-cmd->dw10.frame_ratem   = vp9_state->frame_rate;
-cmd->dw11.frame_rated   = 1;
+cmd->dw10.frame_ratem   = vp9_state->frame_rate_num;
+cmd->dw11.frame_rated   = vp9_state->frame_rate_den;

 cmd->dw14.avbr_accuracy = 30;
 cmd->dw14.avbr_convergence  = 150;
@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
ctx,
 cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
 cmd->dw17.brc_overshoot_cbr_pct = 150;

-dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) / (vp9_state-

frame_rate);

+dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate *
+ vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);
 dbps_ratio = dInputBitsPerFrame / ((double)(vp9_state-

vbv_buffer_size_in_bit) / 30);

 if (dbps_ratio<  0.1)
 dbps_ratio = 0.1;
@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_kernel(VADriverContextP
ctx,
 brc_initreset_curbe.initbrc= !vp9_state->brc_inited;
 brc_initreset_curbe.mbbrc_enabled  = 0;
 brc_initreset_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_initreset_curbe.frame_rate   = vp9_state->frame_rate;

 vme_context->pfn_set_curbe_brc(ctx, encode_state,
gpe_context, @@ -1523,7 +1522,6 @@
gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
 brc_intra_dist_curbe.initbrc= !vp9_state->brc_inited;
 brc_intra_dist_curbe.mbbrc_enabled  = 0;
 brc_intra_dist_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_intra_dist_curbe.frame_rate   = vp9_state->frame_rate;

 vme_context->pfn_set_curbe_brc(ctx, encode_state,
gpe_context, @@ -3964,10 +3962,17 @@
gen9_encode_vp9_check_parameter(VADriverContextP ctx,
 encode_state-

misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;

 misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param-

data;


-vp9_state->frame_rate = misc_param_fr->framerate;
+if (misc_param_fr->framerate&  0x) {
+vp9_state->frame_rate_num = misc_param_fr->framerate>>
16&  0x;
+vp9_state->frame_rate_den = misc_param_fr->framerate&
0x;
+} else {
+vp9_state->frame_rate_num = misc_param_fr->framerate;
+vp9_state->frame_rate_den = 1;
+}
 } else {
 /* Assign the default frame rate */
-vp9_state->frame_rate = 30;
+vp9_state->frame_rate_num = 30;
+vp9_state->frame_rate_den = 1;
 }

 /* RC misc will override HRD parameter */ @@ -3999,10 +4004,17 

Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-07 Thread Sean V Kelley
On Tue, Dec 6, 2016 at 9:48 PM, Xiang, Haihao 
wrote:

> Now we have the same way for frame rate for each codec in i965_encoder.c,
> it would be better to use the result directly
>

Agree, Yakui can you look into this?

Sean


>
> Thanks
> Haihao
>
> >-Original Message-
> >From: Libva [mailto:libva-boun...@lists.freedesktop.org] On Behalf Of
> Mark
> >Thompson
> >Sent: Tuesday, December 6, 2016 2:02 AM
> >To: libva@lists.freedesktop.org
> >Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate
> >
> >Signed-off-by: Mark Thompson 
> >---
> >Tested on Kaby Lake.  Someone who has access to the manuals should make
> >sure that the framerate numerator/denominator actually works there as I am
> >guessing it does.
> >
> >Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because
> >there is no longer a sensible value to set it to (and also it's not read
> anywhere).
> >If it is needed, it wants to be replaced by the two parts of the fraction.
> >
> > src/gen9_vp9_encoder.c | 45 ++---
> >
> > src/gen9_vp9_encoder.h |  4 ++--
> > 2 files changed, 36 insertions(+), 13 deletions(-)
> >
> >diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index
> >3ea1537..8ff1b9b 100644
> >--- a/src/gen9_vp9_encoder.c
> >+++ b/src/gen9_vp9_encoder.c
> >@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
> >ctx,
> >   VP9_BRC_KBPS;
> > cmd->dw9.min_bit_rate   = (vp9_state->min_bit_rate  +
> >VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
> >   VP9_BRC_KBPS;
> >-cmd->dw10.frame_ratem   = vp9_state->frame_rate;
> >-cmd->dw11.frame_rated   = 1;
> >+cmd->dw10.frame_ratem   = vp9_state->frame_rate_num;
> >+cmd->dw11.frame_rated   = vp9_state->frame_rate_den;
> >
> > cmd->dw14.avbr_accuracy = 30;
> > cmd->dw14.avbr_convergence  = 150;
> >@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
> >ctx,
> > cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
> > cmd->dw17.brc_overshoot_cbr_pct = 150;
> >
> >-dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) /
> (vp9_state-
> >>frame_rate);
> >+dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate *
> >+ vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);
> > dbps_ratio = dInputBitsPerFrame /
> ((double)(vp9_state-
> >>vbv_buffer_size_in_bit) / 30);
> > if (dbps_ratio < 0.1)
> > dbps_ratio = 0.1;
> >@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_kernel(VADriverContextP
> >ctx,
> > brc_initreset_curbe.initbrc= !vp9_state->brc_inited;
> > brc_initreset_curbe.mbbrc_enabled  = 0;
> > brc_initreset_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
> >-brc_initreset_curbe.frame_rate   = vp9_state->frame_rate;
> >
> > vme_context->pfn_set_curbe_brc(ctx, encode_state,
> >gpe_context, @@ -1523,7 +1522,6 @@
> >gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
> > brc_intra_dist_curbe.initbrc= !vp9_state->brc_inited;
> > brc_intra_dist_curbe.mbbrc_enabled  = 0;
> > brc_intra_dist_curbe.ref_frame_flag  =
> vp9_state->ref_frame_flag;
> >-brc_intra_dist_curbe.frame_rate   = vp9_state->frame_rate;
> >
> > vme_context->pfn_set_curbe_brc(ctx, encode_state,
> >gpe_context, @@ -3964,10 +3962,17 @@
> >gen9_encode_vp9_check_parameter(VADriverContextP ctx,
> > encode_state-
> >>misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
> > misc_param_fr = (VAEncMiscParameterFrameRate
> *)misc_param-
> >>data;
> >
> >-vp9_state->frame_rate = misc_param_fr->framerate;
> >+if (misc_param_fr->framerate & 0x) {
> >+vp9_state->frame_rate_num =
> misc_param_fr->framerate >>
> >16 & 0x;
> >+vp9_state->frame_rate_den =
> misc_param_fr->framerate   &
> >0x;
> >+} else {
> >+ 

Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-06 Thread Xiang, Haihao
Now we have the same way for frame rate for each codec in i965_encoder.c, it 
would be better to use the result directly

Thanks
Haihao

>-Original Message-
>From: Libva [mailto:libva-boun...@lists.freedesktop.org] On Behalf Of Mark
>Thompson
>Sent: Tuesday, December 6, 2016 2:02 AM
>To: libva@lists.freedesktop.org
>Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate
>
>Signed-off-by: Mark Thompson 
>---
>Tested on Kaby Lake.  Someone who has access to the manuals should make
>sure that the framerate numerator/denominator actually works there as I am
>guessing it does.
>
>Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because
>there is no longer a sensible value to set it to (and also it's not read 
>anywhere).
>If it is needed, it wants to be replaced by the two parts of the fraction.
>
> src/gen9_vp9_encoder.c | 45 ++---
>
> src/gen9_vp9_encoder.h |  4 ++--
> 2 files changed, 36 insertions(+), 13 deletions(-)
>
>diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index
>3ea1537..8ff1b9b 100644
>--- a/src/gen9_vp9_encoder.c
>+++ b/src/gen9_vp9_encoder.c
>@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
>ctx,
>   VP9_BRC_KBPS;
> cmd->dw9.min_bit_rate   = (vp9_state->min_bit_rate  +
>VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
>   VP9_BRC_KBPS;
>-cmd->dw10.frame_ratem   = vp9_state->frame_rate;
>-cmd->dw11.frame_rated   = 1;
>+cmd->dw10.frame_ratem   = vp9_state->frame_rate_num;
>+cmd->dw11.frame_rated   = vp9_state->frame_rate_den;
>
> cmd->dw14.avbr_accuracy = 30;
> cmd->dw14.avbr_convergence  = 150;
>@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(VADriverContextP
>ctx,
> cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
> cmd->dw17.brc_overshoot_cbr_pct = 150;
>
>-dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) / (vp9_state-
>>frame_rate);
>+dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate *
>+ vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);
> dbps_ratio = dInputBitsPerFrame / ((double)(vp9_state-
>>vbv_buffer_size_in_bit) / 30);
> if (dbps_ratio < 0.1)
> dbps_ratio = 0.1;
>@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_kernel(VADriverContextP
>ctx,
> brc_initreset_curbe.initbrc= !vp9_state->brc_inited;
> brc_initreset_curbe.mbbrc_enabled  = 0;
> brc_initreset_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
>-brc_initreset_curbe.frame_rate   = vp9_state->frame_rate;
>
> vme_context->pfn_set_curbe_brc(ctx, encode_state,
>gpe_context, @@ -1523,7 +1522,6 @@
>gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
> brc_intra_dist_curbe.initbrc= !vp9_state->brc_inited;
> brc_intra_dist_curbe.mbbrc_enabled  = 0;
> brc_intra_dist_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
>-brc_intra_dist_curbe.frame_rate   = vp9_state->frame_rate;
>
> vme_context->pfn_set_curbe_brc(ctx, encode_state,
>gpe_context, @@ -3964,10 +3962,17 @@
>gen9_encode_vp9_check_parameter(VADriverContextP ctx,
> encode_state-
>>misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
> misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param-
>>data;
>
>-vp9_state->frame_rate = misc_param_fr->framerate;
>+if (misc_param_fr->framerate & 0x) {
>+vp9_state->frame_rate_num = misc_param_fr->framerate 
>>>
>16 & 0x;
>+vp9_state->frame_rate_den = misc_param_fr->framerate  
> &
>0x;
>+} else {
>+vp9_state->frame_rate_num = misc_param_fr->framerate;
>+vp9_state->frame_rate_den = 1;
>+}
> } else {
> /* Assign the default frame rate */
>-vp9_state->frame_rate = 30;
>+vp9_state->frame_rate_num = 30;
>+vp9_state->frame_rate_den = 1;
> }
>
> /* RC misc will override HRD parameter */ @@ -3999,10 
> +4004,17 @@
>gen9_encode_vp9_c

Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-05 Thread Zhao Yakui

On 12/06/2016 02:02 AM, Mark Thompson wrote:

Signed-off-by: Mark Thompson


Good work.

This patch looks good to me.

Add: Reviewed-by: Zhao Yakui 

Thanks


---
Tested on Kaby Lake.  Someone who has access to the manuals should make sure 
that the framerate numerator/denominator actually works there as I am guessing 
it does.

Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because there 
is no longer a sensible value to set it to (and also it's not read anywhere).  
If it is needed, it wants to be replaced by the two parts of the fraction.

  src/gen9_vp9_encoder.c | 45 ++---
  src/gen9_vp9_encoder.h |  4 ++--
  2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c
index 3ea1537..8ff1b9b 100644
--- a/src/gen9_vp9_encoder.c
+++ b/src/gen9_vp9_encoder.c
@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(VADriverContextP ctx,
VP9_BRC_KBPS;
  cmd->dw9.min_bit_rate   = (vp9_state->min_bit_rate  + 
VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
VP9_BRC_KBPS;
-cmd->dw10.frame_ratem   = vp9_state->frame_rate;
-cmd->dw11.frame_rated   = 1;
+cmd->dw10.frame_ratem   = vp9_state->frame_rate_num;
+cmd->dw11.frame_rated   = vp9_state->frame_rate_den;

  cmd->dw14.avbr_accuracy = 30;
  cmd->dw14.avbr_convergence  = 150;
@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(VADriverContextP ctx,
  cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
  cmd->dw17.brc_overshoot_cbr_pct = 150;

-dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) / 
(vp9_state->frame_rate);
+dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate * 
vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);
  dbps_ratio = dInputBitsPerFrame / 
((double)(vp9_state->vbv_buffer_size_in_bit) / 30);
  if (dbps_ratio<  0.1)
  dbps_ratio = 0.1;
@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_kernel(VADriverContextP ctx,
  brc_initreset_curbe.initbrc= !vp9_state->brc_inited;
  brc_initreset_curbe.mbbrc_enabled  = 0;
  brc_initreset_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_initreset_curbe.frame_rate   = vp9_state->frame_rate;

  vme_context->pfn_set_curbe_brc(ctx, encode_state,
 gpe_context,
@@ -1523,7 +1522,6 @@ gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
  brc_intra_dist_curbe.initbrc= !vp9_state->brc_inited;
  brc_intra_dist_curbe.mbbrc_enabled  = 0;
  brc_intra_dist_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_intra_dist_curbe.frame_rate   = vp9_state->frame_rate;

  vme_context->pfn_set_curbe_brc(ctx, encode_state,
 gpe_context,
@@ -3964,10 +3962,17 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx,
  
encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
  misc_param_fr = (VAEncMiscParameterFrameRate 
*)misc_param->data;

-vp9_state->frame_rate = misc_param_fr->framerate;
+if (misc_param_fr->framerate&  0x) {
+vp9_state->frame_rate_num = misc_param_fr->framerate>>  
16&  0x;
+vp9_state->frame_rate_den = misc_param_fr->framerate&  
0x;
+} else {
+vp9_state->frame_rate_num = misc_param_fr->framerate;
+vp9_state->frame_rate_den = 1;
+}
  } else {
  /* Assign the default frame rate */
-vp9_state->frame_rate = 30;
+vp9_state->frame_rate_num = 30;
+vp9_state->frame_rate_den = 1;
  }

  /* RC misc will override HRD parameter */
@@ -3999,10 +4004,17 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx,
  
encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
  misc_param_fr = (VAEncMiscParameterFrameRate 
*)misc_param->data;

-vp9_state->frame_rate = misc_param_fr->framerate;
+if (misc_param_fr->framerate&  0x) {
+vp9_state->frame_rate_num = misc_param_fr->framerate>>  
16&  0x;
+vp9_state->frame_rate_den = misc_param_fr->framerate&  
0x;
+} else {
+vp9_state->frame_rate_num = misc_param_fr->framerate;
+vp9_state->frame_rate_den = 1;
+}
  } else {
  /* Assign t

[Libva] [PATCH 3/3] VP9 encode: support fractional framerate

2016-12-05 Thread Mark Thompson
Signed-off-by: Mark Thompson 
---
Tested on Kaby Lake.  Someone who has access to the manuals should make sure 
that the framerate numerator/denominator actually works there as I am guessing 
it does.

Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because there 
is no longer a sensible value to set it to (and also it's not read anywhere).  
If it is needed, it wants to be replaced by the two parts of the fraction.

 src/gen9_vp9_encoder.c | 45 ++---
 src/gen9_vp9_encoder.h |  4 ++--
 2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c
index 3ea1537..8ff1b9b 100644
--- a/src/gen9_vp9_encoder.c
+++ b/src/gen9_vp9_encoder.c
@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(VADriverContextP ctx,
   VP9_BRC_KBPS;
 cmd->dw9.min_bit_rate   = (vp9_state->min_bit_rate  + 
VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *
   VP9_BRC_KBPS;
-cmd->dw10.frame_ratem   = vp9_state->frame_rate;
-cmd->dw11.frame_rated   = 1;
+cmd->dw10.frame_ratem   = vp9_state->frame_rate_num;
+cmd->dw11.frame_rated   = vp9_state->frame_rate_den;
 
 cmd->dw14.avbr_accuracy = 30;
 cmd->dw14.avbr_convergence  = 150;
@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(VADriverContextP ctx,
 cmd->dw17.enable_dynamic_scaling = vp9_state->dys_in_use;
 cmd->dw17.brc_overshoot_cbr_pct = 150;
 
-dInputBitsPerFrame = (double)(cmd->dw8.max_bit_rate) / 
(vp9_state->frame_rate);
+dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate * 
vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);
 dbps_ratio = dInputBitsPerFrame / 
((double)(vp9_state->vbv_buffer_size_in_bit) / 30);
 if (dbps_ratio < 0.1)
 dbps_ratio = 0.1;
@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_kernel(VADriverContextP ctx,
 brc_initreset_curbe.initbrc= !vp9_state->brc_inited;
 brc_initreset_curbe.mbbrc_enabled  = 0;
 brc_initreset_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_initreset_curbe.frame_rate   = vp9_state->frame_rate;
 
 vme_context->pfn_set_curbe_brc(ctx, encode_state,
gpe_context,
@@ -1523,7 +1522,6 @@ gen9_vp9_brc_intra_dist_kernel(VADriverContextP ctx,
 brc_intra_dist_curbe.initbrc= !vp9_state->brc_inited;
 brc_intra_dist_curbe.mbbrc_enabled  = 0;
 brc_intra_dist_curbe.ref_frame_flag  = vp9_state->ref_frame_flag;
-brc_intra_dist_curbe.frame_rate   = vp9_state->frame_rate;
 
 vme_context->pfn_set_curbe_brc(ctx, encode_state,
gpe_context,
@@ -3964,10 +3962,17 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx,
 
encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
 misc_param_fr = (VAEncMiscParameterFrameRate 
*)misc_param->data;
 
-vp9_state->frame_rate = misc_param_fr->framerate;
+if (misc_param_fr->framerate & 0x) {
+vp9_state->frame_rate_num = misc_param_fr->framerate 
>> 16 & 0x;
+vp9_state->frame_rate_den = misc_param_fr->framerate   
& 0x;
+} else {
+vp9_state->frame_rate_num = misc_param_fr->framerate;
+vp9_state->frame_rate_den = 1;
+}
 } else {
 /* Assign the default frame rate */
-vp9_state->frame_rate = 30;
+vp9_state->frame_rate_num = 30;
+vp9_state->frame_rate_den = 1;
 }
 
 /* RC misc will override HRD parameter */
@@ -3999,10 +4004,17 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx,
 
encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer;
 misc_param_fr = (VAEncMiscParameterFrameRate 
*)misc_param->data;
 
-vp9_state->frame_rate = misc_param_fr->framerate;
+if (misc_param_fr->framerate & 0x) {
+vp9_state->frame_rate_num = misc_param_fr->framerate 
>> 16 & 0x;
+vp9_state->frame_rate_den = misc_param_fr->framerate   
& 0x;
+} else {
+vp9_state->frame_rate_num = misc_param_fr->framerate;
+vp9_state->frame_rate_den = 1;
+}
 } else {
 /* Assign the default frame rate */
-vp9_state->frame_rate = 30;
+vp9_state->frame_rate_num = 30;
+