2x speedup of surround decoding on Cortex-A9.

Signed-off-by: Mans Rullgard <[email protected]>
---
 libavcodec/vorbisdec.c |   17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index 08198d7..deaaaa2 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -1409,17 +1409,24 @@ static av_always_inline int 
vorbis_residue_decode_internal(vorbis_context *vc,
                                 }
 
                             } else if (vr_type == 2) {
-                                voffs = voffset;
+                                unsigned voffs_div = FASTDIV(voffset, ch);
+                                unsigned voffs_mod = voffset - voffs_div * ch;
 
                                 for (k = 0; k < step; ++k) {
                                     coffs = get_vlc2(gb, codebook.vlc.table, 
codebook.nb_bits, 3) * dim;
-                                    for (l = 0; l < dim; ++l, ++voffs) {
-                                        vec[voffs / ch + (voffs % ch) * vlen] 
+= codebook.codevectors[coffs + l];  // FPMATH FIXME use if and counter instead 
of / and %
+                                    for (l = 0; l < dim; ++l) {
+                                        vec[voffs_div + voffs_mod * vlen] +=
+                                            codebook.codevectors[coffs + l];
 
                                         av_dlog(NULL, " pass %d offs: %d curr: 
%f change: %f cv offs.: %d+%d  \n",
-                                                pass, voffset / ch + (voffs % 
ch) * vlen,
-                                                vec[voffset / ch + (voffs % 
ch) * vlen],
+                                                pass, voffs_div + voffs_mod * 
vlen,
+                                                vec[voffs_div + voffs_mod * 
vlen],
                                                 codebook.codevectors[coffs + 
l], coffs, l);
+
+                                        if (++voffs_mod == ch) {
+                                            voffs_div++;
+                                            voffs_mod = 0;
+                                        }
                                     }
                                 }
                             }
-- 
1.7.10.2

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to