dect
/
asterisk
Archived
13
0
Fork 0

Spacing changes only

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@180259 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
tilghman 2009-03-04 20:48:42 +00:00
parent 529951d632
commit e2aa86b3e0
5 changed files with 420 additions and 328 deletions

View File

@ -23,7 +23,7 @@
/*! \file
*
* \brief Common implementation-independent jitterbuffer stuff.
*
*
* \author Slav Klenov <slav@securax.org>
*
*
@ -110,7 +110,7 @@ static void jb_force_resynch_adaptive(void *jb);
static void jb_empty_and_reset_adaptive(void *jb);
/* Available jb implementations */
static struct ast_jb_impl avail_impl[] =
static struct ast_jb_impl avail_impl[] =
{
{
.name = "fixed",
@ -183,12 +183,13 @@ static void jb_choose_impl(struct ast_channel *chan)
struct ast_jb_conf *jbconf = &jb->conf;
struct ast_jb_impl *test_impl;
int i, avail_impl_count = ARRAY_LEN(avail_impl);
jb->impl = &avail_impl[default_impl];
if (ast_strlen_zero(jbconf->impl))
if (ast_strlen_zero(jbconf->impl)) {
return;
}
for (i = 0; i < avail_impl_count; i++) {
test_impl = &avail_impl[i];
if (!strcasecmp(jbconf->impl, test_impl->name)) {
@ -229,14 +230,14 @@ int ast_jb_do_usecheck(struct ast_channel *c0, struct ast_channel *c1)
}
ast_set_flag(jb0, JB_TIMEBASE_INITIALIZED);
}
if (!c0_jb_created) {
jb_choose_impl(c0);
}
inuse = 1;
}
/* Determine whether audio going to c1 needs a jitter buffer */
if (((!c1_wants_jitter && c0_creates_jitter) || (c1_force_jb && c0_creates_jitter)) && c1_jb_enabled) {
ast_set_flag(jb1, JB_USE);
@ -248,7 +249,7 @@ int ast_jb_do_usecheck(struct ast_channel *c0, struct ast_channel *c1)
}
ast_set_flag(jb1, JB_TIMEBASE_INITIALIZED);
}
if (!c1_jb_created) {
jb_choose_impl(c1);
}
@ -269,32 +270,32 @@ int ast_jb_get_when_to_wakeup(struct ast_channel *c0, struct ast_channel *c1, in
int c1_jb_is_created = ast_test_flag(jb1, JB_CREATED);
int wait, wait0, wait1;
struct timeval tv_now;
if (time_left == 0) {
/* No time left - the bridge will be retried */
/* TODO: Test disable this */
/*return 0;*/
}
if (time_left < 0) {
time_left = INT_MAX;
}
gettimeofday(&tv_now, NULL);
wait0 = (c0_use_jb && c0_jb_is_created) ? jb0->next - get_now(jb0, &tv_now) : time_left;
wait1 = (c1_use_jb && c1_jb_is_created) ? jb1->next - get_now(jb1, &tv_now) : time_left;
wait = wait0 < wait1 ? wait0 : wait1;
wait = wait < time_left ? wait : time_left;
if (wait == INT_MAX) {
wait = -1;
} else if (wait < 1) {
/* don't let wait=0, because this can cause the pbx thread to loop without any sleeping at all */
wait = 1;
}
return wait;
}
@ -306,7 +307,7 @@ int ast_jb_put(struct ast_channel *chan, struct ast_frame *f)
void *jbobj = jb->jbobj;
struct ast_frame *frr;
long now = 0;
if (!ast_test_flag(jb, JB_USE))
return -1;
@ -315,7 +316,7 @@ int ast_jb_put(struct ast_channel *chan, struct ast_frame *f)
jb_framelog("JB_PUT {now=%ld}: Received DTMF frame. Force resynching jb...\n", now);
jbimpl->force_resync(jbobj);
}
return -1;
}
@ -350,7 +351,7 @@ int ast_jb_put(struct ast_channel *chan, struct ast_frame *f)
jb_framelog("JB_PUT {now=%ld}: Dropped frame with ts=%ld and len=%ld\n", now, frr->ts, frr->len);
ast_frfree(frr);
/*return -1;*/
/* TODO: Check this fix - should return 0 here, because the dropped frame shouldn't
/* TODO: Check this fix - should return 0 here, because the dropped frame shouldn't
be delivered at all */
return 0;
}
@ -372,10 +373,10 @@ void ast_jb_get_and_deliver(struct ast_channel *c0, struct ast_channel *c1)
int c0_jb_is_created = ast_test_flag(jb0, JB_CREATED);
int c1_use_jb = ast_test_flag(jb1, JB_USE);
int c1_jb_is_created = ast_test_flag(jb1, JB_CREATED);
if (c0_use_jb && c0_jb_is_created)
jb_get_and_deliver(c0);
if (c1_use_jb && c1_jb_is_created)
jb_get_and_deliver(c1);
}
@ -389,19 +390,19 @@ static void jb_get_and_deliver(struct ast_channel *chan)
struct ast_frame *f, finterp;
long now;
int interpolation_len, res;
now = get_now(jb, NULL);
jb->next = jbimpl->next(jbobj);
if (now < jb->next) {
jb_framelog("\tJB_GET {now=%ld}: now < next=%ld\n", now, jb->next);
return;
}
while (now >= jb->next) {
interpolation_len = ast_codec_interp_len(jb->last_format);
res = jbimpl->get(jbobj, &f, now, interpolation_len);
switch (res) {
case JB_IMPL_OK:
/* deliver the frame */
@ -439,7 +440,7 @@ static void jb_get_and_deliver(struct ast_channel *chan)
ast_assert("JB type unknown" == NULL);
break;
}
jb->next = jbimpl->next(jbobj);
}
}
@ -462,10 +463,10 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr)
ast_log(LOG_WARNING, "Failed to create jitterbuffer on channel '%s'\n", chan->name);
return -1;
}
now = get_now(jb, NULL);
res = jbimpl->put_first(jbobj, frr, now);
/* The result of putting the first frame should not differ from OK. However, its possible
some implementations (i.e. adaptive's when resynch_threshold is specified) to drop it. */
if (res != JB_IMPL_OK) {
@ -475,30 +476,30 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr)
return -1;
*/
}
/* Init next */
jb->next = jbimpl->next(jbobj);
/* Init last format for a first time. */
jb->last_format = frr->subclass;
/* Create a frame log file */
if (ast_test_flag(jbconf, AST_JB_LOG)) {
char safe_logfile[30] = "/tmp/logfile-XXXXXX";
int safe_fd;
snprintf(name2, sizeof(name2), "%s", chan->name);
tmp = strchr(name2, '/');
if (tmp)
if ((tmp = strchr(name2, '/'))) {
*tmp = '#';
}
bridged = ast_bridged_channel(chan);
/* We should always have bridged chan if a jitterbuffer is in use */
ast_assert(bridged != NULL);
snprintf(name1, sizeof(name1), "%s", bridged->name);
tmp = strchr(name1, '/');
if (tmp)
if ((tmp = strchr(name1, '/'))) {
*tmp = '#';
}
snprintf(logfile_pathname, sizeof(logfile_pathname),
"/tmp/ast_%s_jb_%s--%s.log", jbimpl->name, name1, name2);
@ -510,20 +511,22 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr)
ast_log(LOG_ERROR, "Failed to create frame log file with pathname '%s': %s\n", logfile_pathname, strerror(errno));
}
if (res == JB_IMPL_OK)
if (res == JB_IMPL_OK) {
jb_framelog("JB_PUT_FIRST {now=%ld}: Queued frame with ts=%ld and len=%ld\n",
now, frr->ts, frr->len);
else
} else {
jb_framelog("JB_PUT_FIRST {now=%ld}: Dropped frame with ts=%ld and len=%ld\n",
now, frr->ts, frr->len);
}
}
ast_verb(3, "%s jitterbuffer created on channel %s\n", jbimpl->name, chan->name);
/* Free the frame if it has not been queued in the jb */
if (res != JB_IMPL_OK)
if (res != JB_IMPL_OK) {
ast_frfree(frr);
}
return 0;
}
@ -539,16 +542,16 @@ void ast_jb_destroy(struct ast_channel *chan)
fclose(jb->logfile);
jb->logfile = NULL;
}
if (ast_test_flag(jb, JB_CREATED)) {
/* Remove and free all frames still queued in jb */
while (jbimpl->remove(jbobj, &f) == JB_IMPL_OK) {
ast_frfree(f);
}
jbimpl->destroy(jbobj);
jb->jbobj = NULL;
ast_clear_flag(jb, JB_CREATED);
ast_verb(3, "%s jitterbuffer destroyed on channel %s\n", jbimpl->name, chan->name);
@ -574,12 +577,13 @@ int ast_jb_read_conf(struct ast_jb_conf *conf, const char *varname, const char *
int prefixlen = sizeof(AST_JB_CONF_PREFIX) - 1;
const char *name;
int tmp;
if (strncasecmp(AST_JB_CONF_PREFIX, varname, prefixlen))
if (strncasecmp(AST_JB_CONF_PREFIX, varname, prefixlen)) {
return -1;
}
name = varname + prefixlen;
if (!strcasecmp(name, AST_JB_CONF_ENABLE)) {
ast_set2_flag(conf, ast_true(value), AST_JB_ENABLED);
} else if (!strcasecmp(name, AST_JB_CONF_FORCE)) {
@ -598,7 +602,7 @@ int ast_jb_read_conf(struct ast_jb_conf *conf, const char *varname, const char *
} else {
return -1;
}
return 0;
}
@ -648,7 +652,7 @@ static void * jb_create_fixed(struct ast_jb_conf *general_config, long resynch_t
static void jb_destroy_fixed(void *jb)
{
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
/* destroy the jb */
fixed_jb_destroy(fixedjb);
}
@ -658,9 +662,9 @@ static int jb_put_first_fixed(void *jb, struct ast_frame *fin, long now)
{
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
int res;
res = fixed_jb_put_first(fixedjb, fin, fin->len, fin->ts, now);
return fixed_to_abstract_code[res];
}
@ -669,9 +673,9 @@ static int jb_put_fixed(void *jb, struct ast_frame *fin, long now)
{
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
int res;
res = fixed_jb_put(fixedjb, fin, fin->len, fin->ts, now);
return fixed_to_abstract_code[res];
}
@ -681,10 +685,10 @@ static int jb_get_fixed(void *jb, struct ast_frame **fout, long now, long interp
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
struct fixed_jb_frame frame;
int res;
res = fixed_jb_get(fixedjb, &frame, now, interpl);
*fout = frame.data;
return fixed_to_abstract_code[res];
}
@ -692,7 +696,7 @@ static int jb_get_fixed(void *jb, struct ast_frame **fout, long now, long interp
static long jb_next_fixed(void *jb)
{
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
return fixed_jb_next(fixedjb);
}
@ -702,10 +706,10 @@ static int jb_remove_fixed(void *jb, struct ast_frame **fout)
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
struct fixed_jb_frame frame;
int res;
res = fixed_jb_remove(fixedjb, &frame);
*fout = frame.data;
return fixed_to_abstract_code[res];
}
@ -713,7 +717,7 @@ static int jb_remove_fixed(void *jb, struct ast_frame **fout)
static void jb_force_resynch_fixed(void *jb)
{
struct fixed_jb *fixedjb = (struct fixed_jb *) jb;
fixed_jb_set_force_resynch(fixedjb);
}
@ -741,7 +745,7 @@ static void *jb_create_adaptive(struct ast_jb_conf *general_config, long resynch
jbconf.max_contig_interp = 10;
jb_setconf(adaptivejb, &jbconf);
}
return adaptivejb;
}
@ -749,7 +753,7 @@ static void *jb_create_adaptive(struct ast_jb_conf *general_config, long resynch
static void jb_destroy_adaptive(void *jb)
{
jitterbuf *adaptivejb = (jitterbuf *) jb;
jb_destroy(adaptivejb);
}
@ -764,9 +768,9 @@ static int jb_put_adaptive(void *jb, struct ast_frame *fin, long now)
{
jitterbuf *adaptivejb = (jitterbuf *) jb;
int res;
res = jb_put(adaptivejb, fin, JB_TYPE_VOICE, fin->len, fin->ts, now);
return adaptive_to_abstract_code[res];
}
@ -776,10 +780,10 @@ static int jb_get_adaptive(void *jb, struct ast_frame **fout, long now, long int
jitterbuf *adaptivejb = (jitterbuf *) jb;
jb_frame frame;
int res;
res = jb_get(adaptivejb, &frame, now, interpl);
*fout = frame.data;
return adaptive_to_abstract_code[res];
}
@ -787,7 +791,7 @@ static int jb_get_adaptive(void *jb, struct ast_frame **fout, long now, long int
static long jb_next_adaptive(void *jb)
{
jitterbuf *adaptivejb = (jitterbuf *) jb;
return jb_next(adaptivejb);
}
@ -797,10 +801,10 @@ static int jb_remove_adaptive(void *jb, struct ast_frame **fout)
jitterbuf *adaptivejb = (jitterbuf *) jb;
jb_frame frame;
int res;
res = jb_getall(adaptivejb, &frame);
*fout = frame.data;
return adaptive_to_abstract_code[res];
}

View File

@ -61,36 +61,37 @@ static void score_address(const struct sockaddr_in *sin, struct in_addr *best_ad
address = ast_inet_ntoa(sin->sin_addr);
/* RFC 1700 alias for the local network */
if (address[0] == '0')
if (address[0] == '0') {
score = -25;
/* RFC 1700 localnet */
else if (strncmp(address, "127", 3) == 0)
} else if (strncmp(address, "127", 3) == 0) {
score = -20;
/* RFC 1918 non-public address space */
else if (strncmp(address, "10.", 3) == 0)
} else if (strncmp(address, "10.", 3) == 0) {
score = -5;
/* RFC 1918 non-public address space */
else if (strncmp(address, "172", 3) == 0) {
} else if (strncmp(address, "172", 3) == 0) {
/* 172.16.0.0 - 172.19.255.255, but not 172.160.0.0 - 172.169.255.255 */
if (address[4] == '1' && address[5] >= '6' && address[6] == '.')
if (address[4] == '1' && address[5] >= '6' && address[6] == '.') {
score = -5;
/* 172.20.0.0 - 172.29.255.255, but not 172.200.0.0 - 172.255.255.255 nor 172.2.0.0 - 172.2.255.255 */
else if (address[4] == '2' && address[6] == '.')
} else if (address[4] == '2' && address[6] == '.') {
score = -5;
/* 172.30.0.0 - 172.31.255.255 */
else if (address[4] == '3' && address[5] <= '1')
} else if (address[4] == '3' && address[5] <= '1') {
score = -5;
/* All other 172 addresses are public */
else
} else {
score = 0;
/* RFC 2544 Benchmark test range */
} else if (strncmp(address, "198.1", 5) == 0 && address[5] >= '8' && address[6] == '.')
}
/* RFC 2544 Benchmark test range (198.18.0.0 - 198.19.255.255, but not 198.180.0.0 - 198.199.255.255) */
} else if (strncmp(address, "198.1", 5) == 0 && address[5] >= '8' && address[6] == '.') {
score = -10;
/* RFC 1918 non-public address space */
else if (strncmp(address, "192.168", 7) == 0)
} else if (strncmp(address, "192.168", 7) == 0) {
score = -5;
/* RFC 3330 Zeroconf network */
else if (strncmp(address, "169.254", 7) == 0)
} else if (strncmp(address, "169.254", 7) == 0) {
/*!\note Better score than a test network, but not quite as good as RFC 1918
* address space. The reason is that some Linux distributions automatically
* configure a Zeroconf address before trying DHCP, so we want to prefer a
@ -98,11 +99,12 @@ static void score_address(const struct sockaddr_in *sin, struct in_addr *best_ad
*/
score = -10;
/* RFC 3330 Test network */
else if (strncmp(address, "192.0.2.", 8) == 0)
} else if (strncmp(address, "192.0.2.", 8) == 0) {
score = -15;
/* Every other address should be publically routable */
else
} else {
score = 0;
}
if (score > *best_score) {
*best_score = score;
@ -149,8 +151,9 @@ static int get_local_address(struct in_addr *ourip)
score_address(sin, &best_addr, &best_score);
res = 0;
if (best_score == 0)
if (best_score == 0) {
break;
}
}
}
#endif /* BSD_OR_LINUX */
@ -189,21 +192,23 @@ static int get_local_address(struct in_addr *ourip)
score_address(sa, &best_addr, &best_score);
res = 0;
if (best_score == 0)
if (best_score == 0) {
break;
}
}
free(buf);
#endif /* SOLARIS */
close(s);
}
#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__) || defined(__Darwin__)
freeifaddrs(ifaphead);
#endif /* BSD_OR_LINUX */
if (res == 0 && ourip)
if (res == 0 && ourip) {
memcpy(ourip, &best_addr, sizeof(*ourip));
}
return res;
}
#endif /* HAVE_GETIFADDRS */
@ -250,16 +255,18 @@ struct ast_ha *ast_duplicate_ha_list(struct ast_ha *original)
while (start) {
current = ast_duplicate_ha(start); /* Create copy of this object */
if (prev)
prev->next = current; /* Link previous to this object */
if (prev) {
prev->next = current; /* Link previous to this object */
}
if (!ret)
ret = current; /* Save starting point */
if (!ret) {
ret = current; /* Save starting point */
}
start = start->next; /* Go to next object */
prev = current; /* Save pointer to this object */
start = start->next; /* Go to next object */
prev = current; /* Save pointer to this object */
}
return ret; /* Return start of list */
return ret; /* Return start of list */
}
struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha *path, int *error)
@ -277,12 +284,11 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
path = path->next;
}
ha = ast_malloc(sizeof(*ha));
if (!ha)
if (!(ha = ast_malloc(sizeof(*ha)))) {
return ret;
}
nm = strchr(tmp, '/');
if (!nm) {
if (!(nm = strchr(tmp, '/'))) {
/* assume /32. Yes, htonl does not do anything for this particular mask
but we better use it to show we remember about byte order */
ha->netmask.s_addr = htonl(0xFFFFFFFF);
@ -291,20 +297,22 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
nm++;
if (!strchr(nm, '.')) {
if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32))
if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32)) {
ha->netmask.s_addr = htonl(0xFFFFFFFF << (32 - x));
else {
} else {
ast_log(LOG_WARNING, "Invalid CIDR in %s\n", stuff);
ast_free(ha);
if (error)
if (error) {
*error = 1;
}
return ret;
}
} else if (!inet_aton(nm, &ha->netmask)) {
ast_log(LOG_WARNING, "Invalid mask in %s\n", stuff);
ast_free(ha);
if (error)
if (error) {
*error = 1;
}
return ret;
}
}
@ -312,8 +320,9 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
if (!inet_aton(tmp, &ha->netaddr)) {
ast_log(LOG_WARNING, "Invalid IP address in %s\n", stuff);
ast_free(ha);
if (error)
if (error) {
*error = 1;
}
return ret;
}
@ -348,8 +357,9 @@ int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
#endif
/* For each rule, if this address and the netmask = the net address
apply the current rule */
if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == ha->netaddr.s_addr)
if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == ha->netaddr.s_addr) {
res = ha->sense;
}
ha = ha->next;
}
return res;
@ -369,8 +379,7 @@ int ast_get_ip_or_srv(struct sockaddr_in *sin, const char *value, const char *se
value = host;
}
}
hp = ast_gethostbyname(value, &ahp);
if (hp) {
if ((hp = ast_gethostbyname(value, &ahp))) {
memcpy(&sin->sin_addr, hp->h_addr, sizeof(sin->sin_addr));
} else {
ast_log(LOG_WARNING, "Unable to lookup '%s'\n", value);
@ -410,17 +419,17 @@ static const struct dscp_codepoint dscp_pool1[] = {
{ "EF", 0x2E },
};
int ast_str2cos(const char *value, unsigned int *cos)
int ast_str2cos(const char *value, unsigned int *cos)
{
int fval;
if (sscanf(value, "%d", &fval) == 1) {
if (fval < 8) {
*cos = fval;
*cos = fval;
return 0;
}
}
return -1;
}
@ -449,8 +458,9 @@ const char *ast_tos2str(unsigned int tos)
unsigned int x;
for (x = 0; x < ARRAY_LEN(dscp_pool1); x++) {
if (dscp_pool1[x].space == (tos >> 2))
if (dscp_pool1[x].space == (tos >> 2)) {
return dscp_pool1[x].name;
}
}
return "unknown";
@ -467,8 +477,7 @@ int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
struct sockaddr_in sin;
socklen_t slen;
s = socket(PF_INET, SOCK_DGRAM, 0);
if (s < 0) {
if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
ast_log(LOG_ERROR, "Cannot create socket\n");
return -1;
}
@ -509,8 +518,7 @@ int ast_find_ourip(struct in_addr *ourip, struct sockaddr_in bindaddr)
if (gethostname(ourhost, sizeof(ourhost) - 1)) {
ast_log(LOG_WARNING, "Unable to get hostname\n");
} else {
hp = ast_gethostbyname(ourhost, &ahp);
if (hp) {
if ((hp = ast_gethostbyname(ourhost, &ahp))) {
memcpy(ourip, hp->h_addr, sizeof(*ourip));
ast_debug(3, "Found one IP address based on local hostname %s.\n", ourhost);
return 0;
@ -518,8 +526,9 @@ int ast_find_ourip(struct in_addr *ourip, struct sockaddr_in bindaddr)
}
ast_debug(3, "Trying to check A.ROOT-SERVERS.NET and get our IP address for that connection\n");
/* A.ROOT-SERVERS.NET. */
if (inet_aton("198.41.0.4", &saddr) && !ast_ouraddrfor(&saddr, ourip))
if (inet_aton("198.41.0.4", &saddr) && !ast_ouraddrfor(&saddr, ourip)) {
return 0;
}
return get_local_address(ourip);
}

View File

@ -122,7 +122,7 @@ aes_rval aes_encrypt(const void *in_blk, void *out_blk, const aes_encrypt_ctx cx
aes_32t nr = (kp[45] ^ kp[52] ^ kp[53] ? kp[52] : 14);
#ifdef AES_ERR_CHK
if( (nr != 10 || !(kp[0] | kp[3] | kp[4]))
if( (nr != 10 || !(kp[0] | kp[3] | kp[4]))
&& (nr != 12 || !(kp[0] | kp[5] | kp[6]))
&& (nr != 14 || !(kp[0] | kp[7] | kp[8])) )
return aes_error;
@ -246,7 +246,7 @@ aes_rval aes_decrypt(const void *in_blk, void *out_blk, const aes_decrypt_ctx cx
const aes_32t *kp = cx->ks + nr * N_COLS;
#ifdef AES_ERR_CHK
if( (nr != 10 || !(cx->ks[0] | cx->ks[3] | cx->ks[4]))
if( (nr != 10 || !(cx->ks[0] | cx->ks[3] | cx->ks[4]))
&& (nr != 12 || !(cx->ks[0] | cx->ks[5] | cx->ks[6]))
&& (nr != 14 || !(cx->ks[0] | cx->ks[7] | cx->ks[8])) )
return aes_error;

View File

@ -20,7 +20,7 @@
*
* \brief a-Law to Signed linear conversion
*
* \author Mark Spencer <markster@digium.com>
* \author Mark Spencer <markster@digium.com>
*/
#include "asterisk.h"
@ -83,16 +83,16 @@ static unsigned char linear2alaw(short sample, int full_coding)
7,7,7,7,7,7,7,7 };
unsigned sign, exponent, mantissa, mag;
unsigned char alawbyte;
ast_alaw_get_sign_mag(sample, &sign, &mag);
if (mag > 32767)
mag = 32767; /* clip the magnitude for -32768 */
exponent = exp_lut[(mag >> 8) & 0x7f];
mantissa = (mag >> (exponent + 3)) & 0x0f;
if (mag < 0x100)
exponent = 0;
if (full_coding) {
/* full encoding, with sign and xform */
alawbyte = (unsigned char)(sign | (exponent << 4) | mantissa);
@ -124,7 +124,7 @@ static inline short alaw2linear(unsigned char alawbyte)
{
unsigned exponent, mantissa;
short sample;
alawbyte ^= AST_ALAW_AMI_MASK;
exponent = (alawbyte & 0x70) >> 4;
mantissa = alawbyte & 0x0f;
@ -149,9 +149,9 @@ short __ast_alaw[256];
void ast_alaw_init(void)
{
int i;
/*
/*
* Set up mu-law conversion table
*/
*/
#ifndef G711_NEW_ALGORITHM
for (i = 0; i < 256; i++) {
__ast_alaw[i] = alaw2linear(i);
@ -169,7 +169,7 @@ void ast_alaw_init(void)
AST_LIN2A_LOOKUP(i) = linear2alaw(i, 0 /* half-cooked */);
}
#endif
#ifdef TEST_CODING_TABLES
for (i = -32768; i < 32768; ++i) {
#ifndef G711_NEW_ALGORITHM
@ -181,7 +181,7 @@ void ast_alaw_init(void)
unsigned char e2 = AST_LIN2A(i);
short d2 = alaw2linear(e2);
short d3 = AST_ALAW(e1);
if (e1 != e2 || d1 != d3 || d2 != d3) {
ast_log(LOG_WARNING, "a-Law coding tables test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d\n",
i, (unsigned)e1, (unsigned)e2, (int)d1, (int)d2);
@ -189,7 +189,7 @@ void ast_alaw_init(void)
}
ast_log(LOG_NOTICE, "a-Law coding tables test complete.\n");
#endif /* TEST_CODING_TABLES */
#ifdef TEST_TANDEM_TRANSCODING
/* tandem transcoding test */
for (i = -32768; i < 32768; ++i) {
@ -199,7 +199,7 @@ void ast_alaw_init(void)
short d2 = AST_ALAW(e2);
unsigned char e3 = AST_LIN2A(d2);
short d3 = AST_ALAW(e3);
if (e1 != e2 || e2 != e3 || d1 != d2 || d2 != d3) {
ast_log(LOG_WARNING, "a-Law tandem transcoding test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d, d3=%d\n",
i, (unsigned)e1, (unsigned)e2, (int)d1, (int)d2, (int)d3);
@ -207,6 +207,6 @@ void ast_alaw_init(void)
}
ast_log(LOG_NOTICE, "a-Law tandem transcoding test complete.\n");
#endif /* TEST_TANDEM_TRANSCODING */
}

File diff suppressed because it is too large Load Diff