<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 6, 2016 at 9:48 PM, Xiang, Haihao <span dir="ltr"><<a href="mailto:haihao.xiang@intel.com" target="_blank">haihao.xiang@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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<br></blockquote><div><br></div><div>Agree, Yakui can you look into this?</div><div><br></div><div>Sean</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks<br>
Haihao<br>
<div><div class="h5"><br>
>-----Original Message-----<br>
>From: Libva [mailto:<a href="mailto:libva-bounces@lists.freedesktop.org">libva-bounces@lists.<wbr>freedesktop.org</a>] On Behalf Of Mark<br>
>Thompson<br>
>Sent: Tuesday, December 6, 2016 2:02 AM<br>
>To: <a href="mailto:libva@lists.freedesktop.org">libva@lists.freedesktop.org</a><br>
>Subject: [Libva] [PATCH 3/3] VP9 encode: support fractional framerate<br>
><br>
>Signed-off-by: Mark Thompson <<a href="mailto:sw@jkqxz.net">sw@jkqxz.net</a>><br>
>---<br>
>Tested on Kaby Lake.  Someone who has access to the manuals should make<br>
>sure that the framerate numerator/denominator actually works there as I am<br>
>guessing it does.<br>
><br>
>Removes the frame_rate field in struct gen9_vp9_brc_curbe_param, because<br>
>there is no longer a sensible value to set it to (and also it's not read anywhere).<br>
>If it is needed, it wants to be replaced by the two parts of the fraction.<br>
><br>
> src/gen9_vp9_encoder.c | 45 ++++++++++++++++++++++++++++++<wbr>++++---<br>
>--------<br>
> src/gen9_vp9_encoder.h |  4 ++--<br>
> 2 files changed, 36 insertions(+), 13 deletions(-)<br>
><br>
>diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index<br>
>3ea1537..8ff1b9b 100644<br>
>--- a/src/gen9_vp9_encoder.c<br>
>+++ b/src/gen9_vp9_encoder.c<br>
>@@ -1201,8 +1201,8 @@ void gen9_vp9_set_curbe_brc(<wbr>VADriverContextP<br>
>ctx,<br>
>                                                   VP9_BRC_KBPS;<br>
>             cmd->dw9.min_bit_rate           = (vp9_state->min_bit_rate  +<br>
>VP9_BRC_KBPS - 1) / VP9_BRC_KBPS *<br>
>                                                   VP9_BRC_KBPS;<br>
>-            cmd->dw10.frame_ratem           = vp9_state->frame_rate;<br>
>-            cmd->dw11.frame_rated           = 1;<br>
>+            cmd->dw10.frame_ratem           = vp9_state->frame_rate_num;<br>
>+            cmd->dw11.frame_rated           = vp9_state->frame_rate_den;<br>
><br>
>             cmd->dw14.avbr_accuracy         = 30;<br>
>             cmd->dw14.avbr_convergence      = 150;<br>
>@@ -1235,7 +1235,7 @@ void gen9_vp9_set_curbe_brc(<wbr>VADriverContextP<br>
>ctx,<br>
>             cmd->dw17.enable_dynamic_<wbr>scaling = vp9_state->dys_in_use;<br>
>             cmd->dw17.brc_overshoot_cbr_<wbr>pct = 150;<br>
><br>
>-            dInputBitsPerFrame = (double)(cmd->dw8.max_bit_<wbr>rate) / (vp9_state-<br>
>>frame_rate);<br>
>+            dInputBitsPerFrame = ((double)cmd->dw8.max_bit_rate *<br>
</div></div>>+ vp9_state->frame_rate_den) / (vp9_state->frame_rate_num);<br>
<div class="HOEnZb"><div class="h5">>             dbps_ratio         = dInputBitsPerFrame / ((double)(vp9_state-<br>
>>vbv_buffer_size_in_bit) / 30);<br>
>             if (dbps_ratio < 0.1)<br>
>                 dbps_ratio = 0.1;<br>
>@@ -1423,7 +1423,6 @@ gen9_vp9_brc_init_reset_<wbr>kernel(VADriverContextP<br>
>ctx,<br>
>     brc_initreset_curbe.initbrc            = !vp9_state->brc_inited;<br>
>     brc_initreset_curbe.mbbrc_<wbr>enabled      = 0;<br>
>     brc_initreset_curbe.ref_frame_<wbr>flag      = vp9_state->ref_frame_flag;<br>
>-    brc_initreset_curbe.frame_rate           = vp9_state->frame_rate;<br>
><br>
>     vme_context->pfn_set_curbe_<wbr>brc(ctx, encode_state,<br>
>                                    gpe_context, @@ -1523,7 +1522,6 @@<br>
>gen9_vp9_brc_intra_dist_<wbr>kernel(VADriverContextP ctx,<br>
>     brc_intra_dist_curbe.initbrc            = !vp9_state->brc_inited;<br>
>     brc_intra_dist_curbe.mbbrc_<wbr>enabled      = 0;<br>
>     brc_intra_dist_curbe.ref_<wbr>frame_flag      = vp9_state->ref_frame_flag;<br>
>-    brc_intra_dist_curbe.frame_<wbr>rate           = vp9_state->frame_rate;<br>
><br>
>     vme_context->pfn_set_curbe_<wbr>brc(ctx, encode_state,<br>
>                                    gpe_context, @@ -3964,10 +3962,17 @@<br>
>gen9_encode_vp9_check_<wbr>parameter(VADriverContextP ctx,<br>
>                         encode_state-<br>
>>misc_param[<wbr>VAEncMiscParameterTypeFrameRat<wbr>e][0]->buffer;<br>
>                     misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param-<br>
>>data;<br>
><br>
>-                    vp9_state->frame_rate = misc_param_fr->framerate;<br>
>+                    if (misc_param_fr->framerate & 0xffff0000) {<br>
>+                        vp9_state->frame_rate_num = misc_param_fr->framerate >><br>
>16 & 0xffff;<br>
>+                        vp9_state->frame_rate_den = misc_param_fr->framerate       &<br>
>0xffff;<br>
>+                    } else {<br>
>+                        vp9_state->frame_rate_num = misc_param_fr->framerate;<br>
>+                        vp9_state->frame_rate_den = 1;<br>
>+                    }<br>
>                 } else {<br>
>                     /* Assign the default frame rate */<br>
>-                    vp9_state->frame_rate = 30;<br>
>+                    vp9_state->frame_rate_num = 30;<br>
>+                    vp9_state->frame_rate_den = 1;<br>
>                 }<br>
><br>
>                 /* RC misc will override HRD parameter */ @@ -3999,10 +4004,17 @@<br>
>gen9_encode_vp9_check_<wbr>parameter(VADriverContextP ctx,<br>
>                         encode_state-<br>
>>misc_param[<wbr>VAEncMiscParameterTypeFrameRat<wbr>e][0]->buffer;<br>
>                     misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param-<br>
>>data;<br>
><br>
>-                    vp9_state->frame_rate = misc_param_fr->framerate;<br>
>+                    if (misc_param_fr->framerate & 0xffff0000) {<br>
>+                        vp9_state->frame_rate_num = misc_param_fr->framerate >><br>
>16 & 0xffff;<br>
>+                        vp9_state->frame_rate_den = misc_param_fr->framerate       &<br>
>0xffff;<br>
>+                    } else {<br>
>+                        vp9_state->frame_rate_num = misc_param_fr->framerate;<br>
>+                        vp9_state->frame_rate_den = 1;<br>
>+                    }<br>
>                 } else {<br>
>                     /* Assign the default frame rate */<br>
>-                    vp9_state->frame_rate = 30;<br>
>+                    vp9_state->frame_rate_num = 30;<br>
>+                    vp9_state->frame_rate_den = 1;<br>
>                 }<br>
><br>
>                 if (vp9_state->brc_flag_check & VP9_BRC_RC) { @@ -4031,14<br>
>+4043,25 @@ gen9_encode_vp9_check_<wbr>parameter(VADriverContextP ctx,<br>
>             /* If the parameter related with RC is changed. Reset BRC */<br>
>             if (vp9_state->brc_flag_check & VP9_BRC_FR) {<br>
>                VAEncMiscParameterFrameRate *misc_param_fr;<br>
>+               uint32_t num, den;<br>
><br>
>                misc_param = (VAEncMiscParameterBuffer *)<br>
>                    encode_state-<br>
>>misc_param[<wbr>VAEncMiscParameterTypeFrameRat<wbr>e][0]->buffer;<br>
>                misc_param_fr = (VAEncMiscParameterFrameRate *)misc_param-<br>
>>data;<br>
><br>
>-               if (vp9_state->frame_rate != misc_param_fr->framerate) {<br>
>+               if (misc_param_fr->framerate & 0xffff0000) {<br>
>+                   num = misc_param_fr->framerate >> 16 & 0xffff;<br>
>+                   den = misc_param_fr->framerate       & 0xffff;<br>
>+               } else {<br>
>+                   num = misc_param_fr->framerate;<br>
>+                   den = 1;<br>
>+               }<br>
>+<br>
>+               if (vp9_state->frame_rate_num != num ||<br>
>+                   vp9_state->frame_rate_den != den) {<br>
>                    vp9_state->brc_reset = 1;<br>
>-                   vp9_state->frame_rate = misc_param_fr->framerate;<br>
>+                   vp9_state->frame_rate_num = num;<br>
>+                   vp9_state->frame_rate_den = den;<br>
>                }<br>
>             }<br>
><br>
>diff --git a/src/gen9_vp9_encoder.h b/src/gen9_vp9_encoder.h index<br>
>ad2d875..260b8d5 100644<br>
>--- a/src/gen9_vp9_encoder.h<br>
>+++ b/src/gen9_vp9_encoder.h<br>
>@@ -1552,7 +1552,6 @@ struct gen9_vp9_brc_curbe_param<br>
>     int32_t   brc_num_pak_passes;<br>
>     bool      multi_ref_qp_check;<br>
>     int16_t   frame_number;<br>
>-    int32_t   frame_rate;<br>
>     VP9_MEDIA_STATE_TYPE                       media_state_type;<br>
> };<br>
><br>
>@@ -1925,7 +1924,8 @@ struct gen9_vp9_state {<br>
>     unsigned long init_vbv_buffer_fullness_in_<wbr>bit;<br>
>     unsigned long vbv_buffer_size_in_bit;<br>
>     int      frame_number;<br>
>-    uint32_t frame_rate;<br>
>+    uint32_t frame_rate_num;<br>
>+    uint32_t frame_rate_den;<br>
>     uint8_t  ref_frame_flag;<br>
>     uint8_t  dys_ref_frame_flag;<br>
>     uint8_t  picture_coding_type;<br>
>--<br>
>2.10.2<br>
>_____________________________<wbr>__________________<br>
>Libva mailing list<br>
><a href="mailto:Libva@lists.freedesktop.org">Libva@lists.freedesktop.org</a><br>
><a href="https://lists.freedesktop.org/mailman/listinfo/libva" rel="noreferrer" target="_blank">https://lists.freedesktop.<wbr>org/mailman/listinfo/libva</a><br>
______________________________<wbr>_________________<br>
Libva mailing list<br>
<a href="mailto:Libva@lists.freedesktop.org">Libva@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/libva" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/libva</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Sean V. Kelley <<a href="mailto:sean.v.kelley@intel.com" target="_blank">sean.v.kelley@intel.com</a>><br>Open Source Technology Center / SSG<br>Intel Corp.<br></div>
</div></div>