]> granicus.if.org Git - libx264/commitdiff
Remove unpredictable branch in CABAC dqp
authorFiona Glaser <fiona@x264.com>
Thu, 27 Oct 2011 21:05:56 +0000 (14:05 -0700)
committerFiona Glaser <fiona@x264.com>
Thu, 1 Dec 2011 20:27:43 +0000 (12:27 -0800)
encoder/cabac.c

index d6f49b49c21974a2454dd370f17480961bda6dd8..67483e4484dbaeed9c1bcd53b2de73b90d9ecd97 100644 (file)
@@ -167,7 +167,12 @@ static void x264_cabac_qp_delta( x264_t *h, x264_cabac_t *cb )
 
     if( i_dqp != 0 )
     {
-        int val = i_dqp <= 0 ? (-2*i_dqp) : (2*i_dqp - 1);
+        /* Faster than (i_dqp <= 0 ? (-2*i_dqp) : (2*i_dqp-1)).
+         * If you so much as sneeze on these lines, gcc will compile this suboptimally. */
+        i_dqp *= 2;
+        int val = 1 - i_dqp;
+        if( val < 0 ) val = i_dqp;
+        val--;
         /* dqp is interpreted modulo (QP_MAX_SPEC+1) */
         if( val >= QP_MAX_SPEC && val != QP_MAX_SPEC+1 )
             val = 2*QP_MAX_SPEC+1 - val;