Mercurial > hg > xemacs-beta
comparison src/miscplay.c @ 444:576fb035e263 r21-2-37
Import from CVS: tag r21-2-37
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:36:19 +0200 |
parents | abe6d1db359e |
children | 3d3049ae1304 |
comparison
equal
deleted
inserted
replaced
443:a8296e22da4e | 444:576fb035e263 |
---|---|
379 rc = count; | 379 rc = count; |
380 src = (unsigned char *) *data; | 380 src = (unsigned char *) *data; |
381 *outbuf = | 381 *outbuf = |
382 dest = miscplay_sndbuf; | 382 dest = miscplay_sndbuf; |
383 while (count--) | 383 while (count--) |
384 *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + | 384 { |
385 (int)*((signed char *)(src++))) / 2); | 385 *dest++ = (unsigned char)(((int)*((signed char *)(src)) + |
386 (int)*((signed char *)(src+1))) / 2); | |
387 src += 2; | |
388 } | |
386 *data = src; | 389 *data = src; |
387 return(rc); | 390 return(rc); |
388 } | 391 } |
389 | 392 |
390 /* Convert 8 bit signed stereo data to 8 bit unsigned mono data */ | 393 /* Convert 8 bit signed stereo data to 8 bit unsigned mono data */ |
400 rc = count; | 403 rc = count; |
401 src = (unsigned char *) *data; | 404 src = (unsigned char *) *data; |
402 *outbuf = | 405 *outbuf = |
403 dest = miscplay_sndbuf; | 406 dest = miscplay_sndbuf; |
404 while (count--) | 407 while (count--) |
405 *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + | 408 { |
406 (int)*((signed char *)(src++))) / 2) ^ 0x80; | 409 *dest++ = (unsigned char)(((int)*((signed char *)(src)) + |
410 (int)*((signed char *)(src+1))) / 2) ^ 0x80; | |
411 src += 2; | |
412 } | |
407 *data = src; | 413 *data = src; |
408 return(rc); | 414 return(rc); |
409 } | 415 } |
410 | 416 |
411 /* Convert 8 bit signed mono data to 8 bit unsigned mono data */ | 417 /* Convert 8 bit signed mono data to 8 bit unsigned mono data */ |
491 }; | 497 }; |
492 unsigned char *p=(unsigned char *)*data; | 498 unsigned char *p=(unsigned char *)*data; |
493 | 499 |
494 *outbuf = *data; | 500 *outbuf = *data; |
495 while ((*sz)--) | 501 while ((*sz)--) |
496 *p++ = ulaw_dsp[*p]; | 502 { |
503 *p = ulaw_dsp[*p]; | |
504 p++; | |
505 } | |
497 *sz = 0; | 506 *sz = 0; |
498 *data = p; | 507 *data = p; |
499 return p - (unsigned char *)*outbuf; | 508 return p - (unsigned char *)*outbuf; |
500 } | 509 } |
501 | 510 |
548 rc = count; | 557 rc = count; |
549 src = (unsigned char *) *data; | 558 src = (unsigned char *) *data; |
550 *outbuf = | 559 *outbuf = |
551 dest = miscplay_sndbuf; | 560 dest = miscplay_sndbuf; |
552 while (count--) | 561 while (count--) |
553 /* it is not possible to directly interpolate between two ulaw encoded | 562 { |
554 data bytes, thus we need to convert to linear format first and later | 563 /* it is not possible to directly interpolate between two ulaw encoded |
555 we convert back to ulaw format */ | 564 data bytes, thus we need to convert to linear format first and later |
556 *dest++ = int2ulaw(ulaw2int[*(src)++] + | 565 we convert back to ulaw format */ |
557 ulaw2int[*(src)++]); | 566 *dest++ = int2ulaw(ulaw2int[*src] + |
567 ulaw2int[*(src+1)]); | |
568 src += 2; | |
569 } | |
558 *data = src; | 570 *data = src; |
559 return(rc); | 571 return(rc); |
560 } | 572 } |
561 | 573 |
562 size_t sndcnv16swap(void **data,size_t *sz,void **outbuf) | 574 size_t sndcnv16swap(void **data,size_t *sz,void **outbuf) |
564 size_t cnt = *sz / 2; | 576 size_t cnt = *sz / 2; |
565 unsigned short *p; | 577 unsigned short *p; |
566 | 578 |
567 *outbuf = *data; | 579 *outbuf = *data; |
568 p = (unsigned short *) *outbuf; | 580 p = (unsigned short *) *outbuf; |
569 while (cnt--) { | 581 while (cnt--) |
570 *p++ = ((*p & 0x00ff) << 8) | (*p >> 8); | 582 { |
571 } | 583 *p = ((*p & 0x00ff) << 8) | (*p >> 8); |
584 p++; | |
585 } | |
572 *data = p; | 586 *data = p; |
573 cnt = *sz; | 587 cnt = *sz; |
574 *sz = 0; | 588 *sz = 0; |
575 return cnt; | 589 return cnt; |
576 } | 590 } |