[SCM] libav/experimental: Extract duplicated code into a separate function. 5% faster on Intel Atom with gcc 4.4.1 (performance is unchanged if using av_always_inline).

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:58:54 UTC 2013


The following commit has been merged in the experimental branch:
commit 88517e9f9d684e58a641cc77b68df377d82fad5b
Author: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
Date:   Thu Jan 28 20:15:19 2010 +0000

    Extract duplicated code into a separate function.
    5% faster on Intel Atom with gcc 4.4.1 (performance is unchanged
    if using av_always_inline).
    
    Originally committed as revision 21516 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index e80b892..ac57f4a 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -175,6 +175,14 @@ static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *
     }
 }
 
+static int get_scale_idx(GetBitContext *gb, int ref)
+{
+    int t = get_vlc2(gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
+    if (t == 8)
+        return get_bits(gb, 6);
+    return ref + t;
+}
+
 static int mpc7_decode_frame(AVCodecContext * avctx,
                             void *data, int *data_size,
                             AVPacket *avpkt)
@@ -222,24 +230,19 @@ static int mpc7_decode_frame(AVCodecContext * avctx,
         for(ch = 0; ch < 2; ch++){
             if(bands[i].res[ch]){
                 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i];
-                t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
-                bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t);
+                bands[i].scf_idx[ch][0] = get_scale_idx(&gb, bands[i].scf_idx[ch][2]);
                 switch(bands[i].scfi[ch]){
                 case 0:
-                    t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
-                    bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
-                    t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
-                    bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
+                    bands[i].scf_idx[ch][1] = get_scale_idx(&gb, bands[i].scf_idx[ch][0]);
+                    bands[i].scf_idx[ch][2] = get_scale_idx(&gb, bands[i].scf_idx[ch][1]);
                     break;
                 case 1:
-                    t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
-                    bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
+                    bands[i].scf_idx[ch][1] = get_scale_idx(&gb, bands[i].scf_idx[ch][0]);
                     bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1];
                     break;
                 case 2:
                     bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
-                    t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
-                    bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
+                    bands[i].scf_idx[ch][2] = get_scale_idx(&gb, bands[i].scf_idx[ch][1]);
                     break;
                 case 3:
                     bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list