linear2alaw static method
int
linear2alaw(
- int pcm_val
)
Implementation
/*unsigned char*/ static int linear2alaw(
/*short*/ int pcm_val) /* 2's complement (16-bit range) */
{
/*short*/ final int mask;
/*short*/ final int seg;
/*unsigned char*/ int aval;
pcm_val = pcm_val >> 3;
if (pcm_val >= 0) {
mask = 0xD5; /* sign (7th) bit = 1 */
} else {
mask = 0x55; /* sign bit = 0 */
pcm_val = -pcm_val - 1;
}
/* Convert the scaled magnitude to segment number. */
seg = search(pcm_val, seg_aend);
/* Combine the sign, segment, and quantization bits. */
if (seg >= 8) /* out of range, return maximum value. */
return /*(unsigned char)*/ (0x7F ^ mask);
else {
aval = /*(unsigned char)*/ seg << SEG_SHIFT;
if (seg < 2)
aval |= (pcm_val >> 1) & QUANT_MASK;
else
aval |= (pcm_val >> seg) & QUANT_MASK;
return (aval ^ mask);
}
}