diff options
Diffstat (limited to 'contrib/ffmpeg/libavcodec/wavpack.c')
-rw-r--r-- | contrib/ffmpeg/libavcodec/wavpack.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/contrib/ffmpeg/libavcodec/wavpack.c b/contrib/ffmpeg/libavcodec/wavpack.c index 5a54f7d0e..e79d4a570 100644 --- a/contrib/ffmpeg/libavcodec/wavpack.c +++ b/contrib/ffmpeg/libavcodec/wavpack.c @@ -98,7 +98,7 @@ static const uint8_t wp_exp2_table [256] = { 0xea, 0xec, 0xed, 0xee, 0xf0, 0xf1, 0xf2, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xff }; -static always_inline int wp_exp2(int16_t val) +static av_always_inline int wp_exp2(int16_t val) { int res, neg = 0; @@ -137,12 +137,12 @@ static inline int get_unary(GetBitContext *gb){ } -static always_inline int get_tail(GetBitContext *gb, int k) +static av_always_inline int get_tail(GetBitContext *gb, int k) { int p, e, res; - if(k<1 || k>65535)return 0; - p = av_log2_16bit(k); + if(k<1)return 0; + p = av_log2(k); e = (1 << (p + 1)) - k - 1; res = p ? get_bits(gb, p) : 0; if(res >= e){ @@ -383,19 +383,25 @@ static int wavpack_decode_frame(AVCodecContext *avctx, uint8_t* buf_end = buf + buf_size; int i, j, id, size, ssize, weights, t; - if (buf_size == 0) return 0; + if (buf_size == 0){ + *data_size = 0; + return 0; + } memset(s->decorr, 0, MAX_TERMS * sizeof(Decorr)); - s->samples = LE_32(buf); buf += 4; - if(!s->samples) return buf_size; + s->samples = AV_RL32(buf); buf += 4; + if(!s->samples){ + *data_size = 0; + return buf_size; + } /* should not happen but who knows */ - if(s->samples * 2 * avctx->channels > AVCODEC_MAX_AUDIO_FRAME_SIZE){ + if(s->samples * 2 * avctx->channels > *data_size){ av_log(avctx, AV_LOG_ERROR, "Packet size is too big to be handled in lavc!\n"); return -1; } - s->joint = LE_32(buf) & WV_JOINT; buf += 4; - s->CRC = LE_32(buf); buf += 4; + s->joint = AV_RL32(buf) & WV_JOINT; buf += 4; + s->CRC = AV_RL32(buf); buf += 4; // parse metadata blocks while(buf < buf_end){ id = *buf++; @@ -467,23 +473,23 @@ static int wavpack_decode_frame(AVCodecContext *avctx, t = 0; for(i = s->terms - 1; (i >= 0) && (t < size); i--) { if(s->decorr[i].value > 8){ - s->decorr[i].samplesA[0] = wp_exp2(LE_16(buf)); buf += 2; - s->decorr[i].samplesA[1] = wp_exp2(LE_16(buf)); buf += 2; + s->decorr[i].samplesA[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesA[1] = wp_exp2(AV_RL16(buf)); buf += 2; if(s->stereo){ - s->decorr[i].samplesB[0] = wp_exp2(LE_16(buf)); buf += 2; - s->decorr[i].samplesB[1] = wp_exp2(LE_16(buf)); buf += 2; + s->decorr[i].samplesB[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesB[1] = wp_exp2(AV_RL16(buf)); buf += 2; t += 4; } t += 4; }else if(s->decorr[i].value < 0){ - s->decorr[i].samplesA[0] = wp_exp2(LE_16(buf)); buf += 2; - s->decorr[i].samplesB[0] = wp_exp2(LE_16(buf)); buf += 2; + s->decorr[i].samplesA[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesB[0] = wp_exp2(AV_RL16(buf)); buf += 2; t += 4; }else{ for(j = 0; j < s->decorr[i].value; j++){ - s->decorr[i].samplesA[j] = wp_exp2(LE_16(buf)); buf += 2; + s->decorr[i].samplesA[j] = wp_exp2(AV_RL16(buf)); buf += 2; if(s->stereo){ - s->decorr[i].samplesB[j] = wp_exp2(LE_16(buf)); buf += 2; + s->decorr[i].samplesB[j] = wp_exp2(AV_RL16(buf)); buf += 2; } } t += s->decorr[i].value * 2 * avctx->channels; @@ -498,7 +504,7 @@ static int wavpack_decode_frame(AVCodecContext *avctx, continue; } for(i = 0; i < 3 * avctx->channels; i++){ - s->median[i] = wp_exp2(LE_16(buf)); + s->median[i] = wp_exp2(AV_RL16(buf)); buf += 2; } got_entropy = 1; |