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

Sean V Kelley sean.v.kelley at intel.com
Wed Dec 7 17:42:01 UTC 2016


On Tue, Dec 6, 2016 at 9:48 PM, Xiang, Haihao <haihao.xiang at intel.com>
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-bounces at lists.freedesktop.org] On Behalf Of
> Mark
> >Thompson
> >Sent: Tuesday, December 6, 2016 2:02 AM
> >To: libva at lists.freedesktop.org
> >Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate
> >
> >Signed-off-by: Mark Thompson <sw at jkqxz.net>
> >---
> >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
> >Libva at lists.freedesktop.org
> >https://lists.freedesktop.org/mailman/listinfo/libva
> _______________________________________________
> Libva mailing list
> Libva at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libva
>



-- 
Sean V. Kelley <sean.v.kelley at intel.com>
Open Source Technology Center / SSG
Intel Corp.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libva/attachments/20161207/6663c31e/attachment.html>


More information about the Libva mailing list