[FFmpeg-cvslog] alsdec: Fix the clipping range
Luca Barbato
git at videolan.org
Wed Jul 24 10:23:25 CEST 2013
ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Fri Jul 12 23:02:25 2013 +0200| [70ecc175c7b513a153ac87d1c5d219556ca55070] | committer: Luca Barbato
alsdec: Fix the clipping range
mcc_weightings is only 32 elements.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable at libav.org
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=70ecc175c7b513a153ac87d1c5d219556ca55070
---
libavcodec/alsdec.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
index 8451edb..608c50a 100644
--- a/libavcodec/alsdec.c
+++ b/libavcodec/alsdec.c
@@ -1152,6 +1152,12 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
return 0;
}
+static inline int als_weighting(GetBitContext *gb, int k, int off)
+{
+ int idx = av_clip(decode_rice(gb, k) + off,
+ 0, FF_ARRAY_ELEMS(mcc_weightings) - 1);
+ return mcc_weightings[idx];
+}
/** Read the channel data.
*/
@@ -1172,14 +1178,14 @@ static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
if (current->master_channel != c) {
current->time_diff_flag = get_bits1(gb);
- current->weighting[0] = mcc_weightings[av_clip(decode_rice(gb, 1) + 16, 0, 32)];
- current->weighting[1] = mcc_weightings[av_clip(decode_rice(gb, 2) + 14, 0, 32)];
- current->weighting[2] = mcc_weightings[av_clip(decode_rice(gb, 1) + 16, 0, 32)];
+ current->weighting[0] = als_weighting(gb, 1, 16);
+ current->weighting[1] = als_weighting(gb, 2, 14);
+ current->weighting[2] = als_weighting(gb, 1, 16);
if (current->time_diff_flag) {
- current->weighting[3] = mcc_weightings[av_clip(decode_rice(gb, 1) + 16, 0, 32)];
- current->weighting[4] = mcc_weightings[av_clip(decode_rice(gb, 1) + 16, 0, 32)];
- current->weighting[5] = mcc_weightings[av_clip(decode_rice(gb, 1) + 16, 0, 32)];
+ current->weighting[3] = als_weighting(gb, 1, 16);
+ current->weighting[4] = als_weighting(gb, 1, 16);
+ current->weighting[5] = als_weighting(gb, 1, 16);
current->time_diff_sign = get_bits1(gb);
current->time_diff_index = get_bits(gb, ctx->ltp_lag_length - 3) + 3;
More information about the ffmpeg-cvslog
mailing list