summaryrefslogtreecommitdiff
path: root/libavcodec/pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/pcm.c')
-rw-r--r--libavcodec/pcm.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c
index 7f3d630f08..a6c0d343b0 100644
--- a/libavcodec/pcm.c
+++ b/libavcodec/pcm.c
@@ -45,19 +45,11 @@ static int alaw2linear(unsigned char a_val)
a_val ^= 0x55;
- t = (a_val & QUANT_MASK) << 4;
+ t = a_val & QUANT_MASK;
seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT;
- switch (seg) {
- case 0:
- t += 8;
- break;
- case 1:
- t += 0x108;
- break;
- default:
- t += 0x108;
- t <<= seg - 1;
- }
+ if(seg) t= (t + t + 1 + 32) << (seg + 2);
+ else t= (t + t + 1 ) << 3;
+
return ((a_val & SIGN_BIT) ? t : -t);
}