[x264-devel] [Git][videolan/x264][master] Remove code for non-positive f_ip_factor/f_pb_factor

Anton Mitrofanov gitlab at videolan.org
Mon Jun 15 22:15:33 CEST 2020



Anton Mitrofanov pushed to branch master at VideoLAN / x264


Commits:
4c9b076b by Anton Mitrofanov at 2020-06-15T22:01:02+02:00
Remove code for non-positive f_ip_factor/f_pb_factor

Currently they are guaranteed to be positive.

- - - - -


1 changed file:

- encoder/ratecontrol.c


Changes:

=====================================
encoder/ratecontrol.c
=====================================
@@ -1770,8 +1770,8 @@ int x264_ratecontrol_slice_type( x264_t *h, int frame_num )
             h->param.rc.i_qp_constant = (h->stat.i_frame_count[SLICE_TYPE_P] == 0) ? 24 + QP_BD_OFFSET
                                       : 1 + h->stat.f_frame_qp[SLICE_TYPE_P] / h->stat.i_frame_count[SLICE_TYPE_P];
             rc->qp_constant[SLICE_TYPE_P] = x264_clip3( h->param.rc.i_qp_constant, 0, QP_MAX );
-            rc->qp_constant[SLICE_TYPE_I] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) / fabs( h->param.rc.f_ip_factor )) + 0.5 ), 0, QP_MAX );
-            rc->qp_constant[SLICE_TYPE_B] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) * fabs( h->param.rc.f_pb_factor )) + 0.5 ), 0, QP_MAX );
+            rc->qp_constant[SLICE_TYPE_I] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) / h->param.rc.f_ip_factor ) + 0.5 ), 0, QP_MAX );
+            rc->qp_constant[SLICE_TYPE_B] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) * h->param.rc.f_pb_factor ) + 0.5 ), 0, QP_MAX );
 
             x264_log( h, X264_LOG_ERROR, "2nd pass has more frames than 1st pass (%d)\n", rc->num_entries );
             x264_log( h, X264_LOG_ERROR, "continuing anyway, at constant QP=%d\n", h->param.rc.i_qp_constant );
@@ -1909,7 +1909,7 @@ int x264_ratecontrol_end( x264_t *h, int bits, int *filler )
         {
             /* Depends on the fact that B-frame's QP is an offset from the following P-frame's.
              * Not perfectly accurate with B-refs, but good enough. */
-            rc->cplxr_sum += bits * qp2qscale( rc->qpa_rc ) / (rc->last_rceq * fabs( h->param.rc.f_pb_factor ));
+            rc->cplxr_sum += bits * qp2qscale( rc->qpa_rc ) / (rc->last_rceq * h->param.rc.f_pb_factor);
         }
         rc->cplxr_sum *= rc->cbr_decay;
         rc->wanted_bits_window += h->fenc->f_duration * rc->bitrate;
@@ -2034,12 +2034,10 @@ static double get_diff_limited_q(x264_t *h, ratecontrol_entry_t *rce, double q,
     {
         double iq = q;
         double pq = qp2qscale( rcc->accum_p_qp / rcc->accum_p_norm );
-        double ip_factor = fabs( h->param.rc.f_ip_factor );
+        double ip_factor = h->param.rc.f_ip_factor;
         /* don't apply ip_factor if the following frame is also I */
         if( rcc->accum_p_norm <= 0 )
             q = iq;
-        else if( h->param.rc.f_ip_factor < 0 )
-            q = iq / ip_factor;
         else if( rcc->accum_p_norm >= 1 )
             q = pq / ip_factor;
         else
@@ -2047,10 +2045,9 @@ static double get_diff_limited_q(x264_t *h, ratecontrol_entry_t *rce, double q,
     }
     else if( pict_type == SLICE_TYPE_B )
     {
-        if( h->param.rc.f_pb_factor > 0 )
-            q = rcc->last_qscale_for[rcc->last_non_b_pict_type];
+        q = rcc->last_qscale_for[rcc->last_non_b_pict_type];
         if( !rce->kept_as_ref )
-            q *= fabs( h->param.rc.f_pb_factor );
+            q *= h->param.rc.f_pb_factor;
     }
     else if( pict_type == SLICE_TYPE_P
              && rcc->last_non_b_pict_type == SLICE_TYPE_P
@@ -2583,7 +2580,7 @@ static float rate_estimate_qscale( x264_t *h )
                 && rcc->last_non_b_pict_type != SLICE_TYPE_I )
             {
                 q = qp2qscale( rcc->accum_p_qp / rcc->accum_p_norm );
-                q /= fabs( h->param.rc.f_ip_factor );
+                q /= h->param.rc.f_ip_factor;
             }
             else if( h->i_frame > 0 )
             {
@@ -2603,7 +2600,7 @@ static float rate_estimate_qscale( x264_t *h )
             }
             else if( h->param.rc.i_rc_method == X264_RC_CRF && rcc->qcompress != 1 )
             {
-                q = qp2qscale( ABR_INIT_QP ) / fabs( h->param.rc.f_ip_factor );
+                q = qp2qscale( ABR_INIT_QP ) / h->param.rc.f_ip_factor;
             }
             rcc->qp_novbv = qscale2qp( q );
 
@@ -2615,7 +2612,7 @@ static float rate_estimate_qscale( x264_t *h )
         rcc->last_qscale = q;
 
         if( !(rcc->b_2pass && !rcc->b_vbv) && h->fenc->i_frame == 0 )
-            rcc->last_qscale_for[SLICE_TYPE_P] = q * fabs( h->param.rc.f_ip_factor );
+            rcc->last_qscale_for[SLICE_TYPE_P] = q * h->param.rc.f_ip_factor;
 
         if( rcc->b_2pass )
             rcc->frame_size_planned = qscale2bits( &rce, q );



View it on GitLab: https://code.videolan.org/videolan/x264/-/commit/4c9b076be684832b9141f5b6c03aaf302adca0e4

-- 
View it on GitLab: https://code.videolan.org/videolan/x264/-/commit/4c9b076be684832b9141f5b6c03aaf302adca0e4
You're receiving this email because of your account on code.videolan.org.




More information about the x264-devel mailing list