[FFmpeg-cvslog] adpcmenc:Optimize adpcm_ima_qt_compress_sample()
Michael Niedermayer
git at videolan.org
Sun May 8 13:30:11 CEST 2011
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun May 8 13:20:22 2011 +0200| [af3c8f823018ef8c07b25c8834d8032093a49418] | committer: Michael Niedermayer
adpcmenc:Optimize adpcm_ima_qt_compress_sample()
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=af3c8f823018ef8c07b25c8834d8032093a49418
---
libavcodec/adpcm.c | 33 ++++++++++++++++++---------------
1 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c
index 2d231e8..ba31255 100644
--- a/libavcodec/adpcm.c
+++ b/libavcodec/adpcm.c
@@ -274,24 +274,27 @@ static inline unsigned char adpcm_ima_compress_sample(ADPCMChannelStatus *c, sho
static inline unsigned char adpcm_ima_qt_compress_sample(ADPCMChannelStatus *c, short sample)
{
int delta = sample - c->prev_sample;
- int mask, step = step_table[c->step_index];
- int diff = step >> 3;
- int nibble = 0;
+ int diff, step = step_table[c->step_index];
+ int nibble = 8*(delta < 0);
- if (delta < 0) {
- nibble = 8;
- delta = -delta;
- }
+ delta= abs(delta);
+ diff = delta + (step >> 3);
- for (mask = 4; mask;) {
- if (delta >= step) {
- nibble |= mask;
- delta -= step;
- diff += step;
- }
- step >>= 1;
- mask >>= 1;
+ if (delta >= step) {
+ nibble |= 4;
+ delta -= step;
+ }
+ step >>= 1;
+ if (delta >= step) {
+ nibble |= 2;
+ delta -= step;
+ }
+ step >>= 1;
+ if (delta >= step) {
+ nibble |= 1;
+ delta -= step;
}
+ diff -= delta;
if (nibble & 8)
c->prev_sample -= diff;
More information about the ffmpeg-cvslog
mailing list