On Tue, Dec 6, 2016 at 9:48 PM, Xiang, Haihao <[email protected]> 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:[email protected]] On Behalf Of > Mark > >Thompson > >Sent: Tuesday, December 6, 2016 2:02 AM > >To: [email protected] > >Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate > > > >Signed-off-by: Mark Thompson <[email protected]> > >--- > >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 & 0xffff0000) { > >+ vp9_state->frame_rate_num = > misc_param_fr->framerate >> > >16 & 0xffff; > >+ vp9_state->frame_rate_den = > misc_param_fr->framerate & > >0xffff; > >+ } 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 & 0xffff0000) { > >+ vp9_state->frame_rate_num = > misc_param_fr->framerate >> > >16 & 0xffff; > >+ vp9_state->frame_rate_den = > misc_param_fr->framerate & > >0xffff; > >+ } 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; > > } > > > > if (vp9_state->brc_flag_check & VP9_BRC_RC) { @@ -4031,14 > >+4043,25 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, > > /* If the parameter related with RC is changed. Reset BRC */ > > if (vp9_state->brc_flag_check & VP9_BRC_FR) { > > VAEncMiscParameterFrameRate *misc_param_fr; > >+ uint32_t num, den; > > > > misc_param = (VAEncMiscParameterBuffer *) > > encode_state- > >>misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; > > misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param- > >>data; > > > >- if (vp9_state->frame_rate != misc_param_fr->framerate) { > >+ if (misc_param_fr->framerate & 0xffff0000) { > >+ num = misc_param_fr->framerate >> 16 & 0xffff; > >+ den = misc_param_fr->framerate & 0xffff; > >+ } else { > >+ num = misc_param_fr->framerate; > >+ den = 1; > >+ } > >+ > >+ if (vp9_state->frame_rate_num != num || > >+ vp9_state->frame_rate_den != den) { > > vp9_state->brc_reset = 1; > >- vp9_state->frame_rate = misc_param_fr->framerate; > >+ vp9_state->frame_rate_num = num; > >+ vp9_state->frame_rate_den = den; > > } > > } > > > >diff --git a/src/gen9_vp9_encoder.h b/src/gen9_vp9_encoder.h index > >ad2d875..260b8d5 100644 > >--- a/src/gen9_vp9_encoder.h > >+++ b/src/gen9_vp9_encoder.h > >@@ -1552,7 +1552,6 @@ struct gen9_vp9_brc_curbe_param > > int32_t brc_num_pak_passes; > > bool multi_ref_qp_check; > > int16_t frame_number; > >- int32_t frame_rate; > > VP9_MEDIA_STATE_TYPE media_state_type; > > }; > > > >@@ -1925,7 +1924,8 @@ struct gen9_vp9_state { > > unsigned long init_vbv_buffer_fullness_in_bit; > > unsigned long vbv_buffer_size_in_bit; > > int frame_number; > >- uint32_t frame_rate; > >+ uint32_t frame_rate_num; > >+ uint32_t frame_rate_den; > > uint8_t ref_frame_flag; > > uint8_t dys_ref_frame_flag; > > uint8_t picture_coding_type; > >-- > >2.10.2 > >_______________________________________________ > >Libva mailing list > >[email protected] > >https://lists.freedesktop.org/mailman/listinfo/libva > _______________________________________________ > Libva mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/libva > -- Sean V. Kelley <[email protected]> Open Source Technology Center / SSG Intel Corp.
_______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
