merge alaw and mulaw code

This commit is contained in:
Alexandre Ratchov 2014-12-30 19:36:15 +01:00
parent 3871e138eb
commit 7e4b5c54d9
3 changed files with 8 additions and 30 deletions

View File

@ -466,10 +466,10 @@ play_filt_dec(struct slot *s, void *in, void *out, int todo)
dec_do(&s->conv, in, tmp, todo);
break;
case ENC_ULAW:
dec_do_ulaw(&s->conv, in, tmp, todo);
dec_do_ulaw(&s->conv, in, tmp, todo, 0);
break;
case ENC_ALAW:
dec_do_alaw(&s->conv, in, tmp, todo);
dec_do_ulaw(&s->conv, in, tmp, todo, 1);
break;
case ENC_FLOAT:
dec_do_float(&s->conv, in, tmp, todo);

View File

@ -660,14 +660,15 @@ dec_do_float(struct conv *p, unsigned char *in, unsigned char *out, int todo)
}
/*
* convert samples from ulaw to adata_t
* convert samples from ulaw/alaw to adata_t
*/
void
dec_do_ulaw(struct conv *p, unsigned char *in, unsigned char *out, int todo)
dec_do_ulaw(struct conv *p, unsigned char *in, unsigned char *out, int todo, int is_alaw)
{
unsigned int f;
unsigned char *idata;
adata_t *odata;
short *map;
#ifdef DEBUG
if (log_level >= 4) {
@ -676,33 +677,11 @@ dec_do_ulaw(struct conv *p, unsigned char *in, unsigned char *out, int todo)
log_puts(" frames\n");
}
#endif
map = is_alaw ? wav_alawmap : wav_ulawmap;
idata = in;
odata = (adata_t *)out;
for (f = todo * p->nch; f > 0; f--)
*odata++ = wav_ulawmap[*idata++] << (ADATA_BITS - 16);
}
/*
* convert samples from alaw to adata_t
*/
void
dec_do_alaw(struct conv *p, unsigned char *in, unsigned char *out, int todo)
{
unsigned int f;
unsigned char *idata;
adata_t *odata;
#ifdef DEBUG
if (log_level >= 4) {
log_puts("dec_alaw: copying ");
log_putu(todo);
log_puts(" frames\n");
}
#endif
idata = in;
odata = (adata_t *)out;
for (f = todo * p->nch; f > 0; f--)
*odata++ = wav_alawmap[*idata++] << (ADATA_BITS - 16);
*odata++ = map[*idata++] << (ADATA_BITS - 16);
}
/*

View File

@ -154,8 +154,7 @@ void enc_sil_do(struct conv *, unsigned char *, int);
void enc_init(struct conv *, struct aparams *, int);
void dec_do(struct conv *, unsigned char *, unsigned char *, int);
void dec_do_float(struct conv *, unsigned char *, unsigned char *, int);
void dec_do_alaw(struct conv *, unsigned char *, unsigned char *, int);
void dec_do_ulaw(struct conv *, unsigned char *, unsigned char *, int);
void dec_do_ulaw(struct conv *, unsigned char *, unsigned char *, int, int);
void dec_init(struct conv *, struct aparams *, int);
void cmap_add(struct cmap *, void *, void *, int, int);
void cmap_copy(struct cmap *, void *, void *, int, int);