unroll another common case in vorbis_residue_decode
authorLoren Merritt <lorenm@u.washington.edu>
Tue, 15 Jul 2008 23:01:15 +0000 (23:01 +0000)
committerLoren Merritt <lorenm@u.washington.edu>
Tue, 15 Jul 2008 23:01:15 +0000 (23:01 +0000)
Originally committed as revision 14250 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vorbis_dec.c

index d4a5402d861f55fc6a52cd2483265cea652b644e..2143db76e53ceaad0b9593f1c93320dd3a7e5076 100644 (file)
@@ -1330,6 +1330,14 @@ static int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr, uint_fa
                                         vec[voffs+k     ]+=codebook.codevectors[coffs  ];  // FPMATH
                                         vec[voffs+k+vlen]+=codebook.codevectors[coffs+1];  // FPMATH
                                     }
+                                } else if(dim==4) {
+                                    for(k=0;k<step;++k, voffs+=2) {
+                                        coffs=get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * 4;
+                                        vec[voffs       ]+=codebook.codevectors[coffs  ];  // FPMATH
+                                        vec[voffs+1     ]+=codebook.codevectors[coffs+2];  // FPMATH
+                                        vec[voffs+vlen  ]+=codebook.codevectors[coffs+1];  // FPMATH
+                                        vec[voffs+vlen+1]+=codebook.codevectors[coffs+3];  // FPMATH
+                                    }
                                 } else
                                 for(k=0;k<step;++k) {
                                     coffs=get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * dim;