diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2012-09-13 19:45:21 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2012-09-14 14:26:27 +0200 |
commit | 714508bcb91057868a96588b9fba4d29c6c4fc77 (patch) | |
tree | 91de1202d42e0606fbbf8f70e64d0bb5cd6cb717 | |
parent | 44272c1cccfb92415801ae60693a7ed04e458916 (diff) | |
download | ffmpeg-714508bcb91057868a96588b9fba4d29c6c4fc77.tar.gz |
vorbisdec: ensure FASTDIV denominator is never 1
In both usages of FASTDIV the denominator might be 1.
Using a branch could make the function slower than using a normal
division.
Both denominator and numerator can be multiplied by 2 safely and
using shifts is faster than using a branch.
-rw-r--r-- | libavcodec/vorbisdec.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c index f11e2f5d61..f5a541adae 100644 --- a/libavcodec/vorbisdec.c +++ b/libavcodec/vorbisdec.c @@ -1354,8 +1354,7 @@ static av_always_inline int vorbis_residue_decode_internal(vorbis_context *vc, if (vqbook >= 0 && vc->codebooks[vqbook].codevectors) { unsigned coffs; unsigned dim = vc->codebooks[vqbook].dimensions; - unsigned step = dim == 1 ? vr->partition_size - : FASTDIV(vr->partition_size, dim); + unsigned step = FASTDIV(vr->partition_size << 1, dim << 1); vorbis_codebook codebook = vc->codebooks[vqbook]; if (vr_type == 0) { @@ -1409,7 +1408,7 @@ static av_always_inline int vorbis_residue_decode_internal(vorbis_context *vc, } } else if (vr_type == 2) { - unsigned voffs_div = FASTDIV(voffset, ch); + unsigned voffs_div = FASTDIV(voffset << 1, ch <<1); unsigned voffs_mod = voffset - voffs_div * ch; for (k = 0; k < step; ++k) { |