Hi, I'm trying to decode PCMU like that:
int
ulaw2linear(ulawbyte)
unsigned char ulawbyte;
{
static int exp_lut[8] = {0,132,396,924,1980,4092,8316,16764};
int sign, exponent, mantissa, sample;
ulawbyte = ~ulawbyte;
sign = (ulawbyte & 0x80);
exponent = (ulawbyte >> 4) & 0x07;
mantissa = ulawbyte & 0x0F;
sample = exp_lut[exponent] + (mantissa << (exponent + 3));
if (sign != 0) sample = -sample;
return(sample);
}
mblk_t *mp=rtp_session_recvm_with_ts(call->r_session, call->recv_ts);
if (mp!=NULL){
unsigned char *payload;
int len = rtp_get_payload(mp,&payload);
int* buf[RTP_RECVBUF] = {0};
for(int i =0; i < len; i++)
buf[i] = ulaw2linear(payload[i]);
fwrite(buf, sizeof(int), len, stdout);
}
But no luck. What am I doing wrong? Thanks.