Re: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate
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
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
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
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
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
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; +