Mercurial > hg > xemacs-beta
comparison src/linuxplay.c @ 203:850242ba4a81 r20-3b28
Import from CVS: tag r20-3b28
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:02:21 +0200 |
parents | 538048ae2ab8 |
children | 41ff10fd062f |
comparison
equal
deleted
inserted
replaced
202:61eefc8fc970 | 203:850242ba4a81 |
---|---|
405 } | 405 } |
406 | 406 |
407 /* Convert 8 bit unsigned stereo data to 8 bit unsigned mono data */ | 407 /* Convert 8 bit unsigned stereo data to 8 bit unsigned mono data */ |
408 static size_t sndcnv8U_2mono(void **data,size_t *sz,void **outbuf) | 408 static size_t sndcnv8U_2mono(void **data,size_t *sz,void **outbuf) |
409 { | 409 { |
410 register unsigned char *src; | 410 REGISTER unsigned char *src; |
411 register unsigned char *dest; | 411 REGISTER unsigned char *dest; |
412 int rc,count; | 412 int rc,count; |
413 | 413 |
414 count = *sz / 2; | 414 count = *sz / 2; |
415 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 415 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
416 else *sz = 0; | 416 else *sz = 0; |
426 } | 426 } |
427 | 427 |
428 /* Convert 8 bit signed stereo data to 8 bit signed mono data */ | 428 /* Convert 8 bit signed stereo data to 8 bit signed mono data */ |
429 static size_t sndcnv8S_2mono(void **data,size_t *sz,void **outbuf) | 429 static size_t sndcnv8S_2mono(void **data,size_t *sz,void **outbuf) |
430 { | 430 { |
431 register unsigned char *src; | 431 REGISTER unsigned char *src; |
432 register unsigned char *dest; | 432 REGISTER unsigned char *dest; |
433 int rc,count; | 433 int rc,count; |
434 | 434 |
435 count = *sz / 2; | 435 count = *sz / 2; |
436 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 436 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
437 else *sz = 0; | 437 else *sz = 0; |
447 } | 447 } |
448 | 448 |
449 /* Convert 8 bit signed stereo data to 8 bit unsigned mono data */ | 449 /* Convert 8 bit signed stereo data to 8 bit unsigned mono data */ |
450 static size_t sndcnv2monounsigned(void **data,size_t *sz,void **outbuf) | 450 static size_t sndcnv2monounsigned(void **data,size_t *sz,void **outbuf) |
451 { | 451 { |
452 register unsigned char *src; | 452 REGISTER unsigned char *src; |
453 register unsigned char *dest; | 453 REGISTER unsigned char *dest; |
454 int rc,count; | 454 int rc,count; |
455 | 455 |
456 count = *sz / 2; | 456 count = *sz / 2; |
457 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 457 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
458 else *sz = 0; | 458 else *sz = 0; |
468 } | 468 } |
469 | 469 |
470 /* Convert 8 bit signed mono data to 8 bit unsigned mono data */ | 470 /* Convert 8 bit signed mono data to 8 bit unsigned mono data */ |
471 static size_t sndcnv2unsigned(void **data,size_t *sz,void **outbuf) | 471 static size_t sndcnv2unsigned(void **data,size_t *sz,void **outbuf) |
472 { | 472 { |
473 register unsigned char *src; | 473 REGISTER unsigned char *src; |
474 register unsigned char *dest; | 474 REGISTER unsigned char *dest; |
475 int rc,count; | 475 int rc,count; |
476 | 476 |
477 count = *sz; | 477 count = *sz; |
478 if (count > SNDBUFSZ) { *sz -= SNDBUFSZ; count = SNDBUFSZ; } | 478 if (count > SNDBUFSZ) { *sz -= SNDBUFSZ; count = SNDBUFSZ; } |
479 else *sz = 0; | 479 else *sz = 0; |
495 static short int t_bits[128] = { | 495 static short int t_bits[128] = { |
496 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, | 496 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, |
497 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, | 497 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, |
498 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, | 498 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, |
499 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7}; | 499 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7}; |
500 register int bits,logi; | 500 REGISTER int bits,logi; |
501 | 501 |
502 /* unrolling this condition (hopefully) improves execution speed */ | 502 /* unrolling this condition (hopefully) improves execution speed */ |
503 if (i < 0) { | 503 if (i < 0) { |
504 if ((i = (132-i)) > 0x7FFF) i = 0x7FFF; | 504 if ((i = (132-i)) > 0x7FFF) i = 0x7FFF; |
505 logi = (i >> ((bits = t_bits[i/256])+4)); | 505 logi = (i >> ((bits = t_bits[i/256])+4)); |
547 +186, +178, +170, +162, +154, +146, +138, +130, | 547 +186, +178, +170, +162, +154, +146, +138, +130, |
548 +122, +114, +106, +98, +90, +82, +74, +66, | 548 +122, +114, +106, +98, +90, +82, +74, +66, |
549 +60, +56, +52, +48, +44, +40, +36, +32, | 549 +60, +56, +52, +48, +44, +40, +36, +32, |
550 +28, +24, +20, +16, +12, +8, +4, +0}; | 550 +28, +24, +20, +16, +12, +8, +4, +0}; |
551 | 551 |
552 register unsigned char *src; | 552 REGISTER unsigned char *src; |
553 register unsigned char *dest; | 553 REGISTER unsigned char *dest; |
554 int rc,count; | 554 int rc,count; |
555 | 555 |
556 count = *sz / 2; | 556 count = *sz / 2; |
557 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 557 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
558 else *sz = 0; | 558 else *sz = 0; |
572 | 572 |
573 /* Convert 16 bit little endian signed stereo data to 16 bit little endian | 573 /* Convert 16 bit little endian signed stereo data to 16 bit little endian |
574 signed mono data */ | 574 signed mono data */ |
575 static size_t sndcnv16_2monoLE(void **data,size_t *sz,void **outbuf) | 575 static size_t sndcnv16_2monoLE(void **data,size_t *sz,void **outbuf) |
576 { | 576 { |
577 register unsigned char *src; | 577 REGISTER unsigned char *src; |
578 register unsigned char *dest; | 578 REGISTER unsigned char *dest; |
579 int rc,count; | 579 int rc,count; |
580 signed short i; | 580 signed short i; |
581 | 581 |
582 count = *sz / 2; | 582 count = *sz / 2; |
583 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 583 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
600 | 600 |
601 /* Convert 16 bit big endian signed stereo data to 16 bit big endian | 601 /* Convert 16 bit big endian signed stereo data to 16 bit big endian |
602 signed mono data */ | 602 signed mono data */ |
603 static size_t sndcnv16_2monoBE(void **data,size_t *sz,void **outbuf) | 603 static size_t sndcnv16_2monoBE(void **data,size_t *sz,void **outbuf) |
604 { | 604 { |
605 register unsigned char *src; | 605 REGISTER unsigned char *src; |
606 register unsigned char *dest; | 606 REGISTER unsigned char *dest; |
607 int rc,count; | 607 int rc,count; |
608 signed short i; | 608 signed short i; |
609 | 609 |
610 count = *sz / 2; | 610 count = *sz / 2; |
611 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 611 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
627 } | 627 } |
628 | 628 |
629 /* Convert 16 bit little endian signed data to 8 bit unsigned data */ | 629 /* Convert 16 bit little endian signed data to 8 bit unsigned data */ |
630 static size_t sndcnv2byteLE(void **data,size_t *sz,void **outbuf) | 630 static size_t sndcnv2byteLE(void **data,size_t *sz,void **outbuf) |
631 { | 631 { |
632 register unsigned char *src; | 632 REGISTER unsigned char *src; |
633 register unsigned char *dest; | 633 REGISTER unsigned char *dest; |
634 int rc,count; | 634 int rc,count; |
635 | 635 |
636 count = *sz / 2; | 636 count = *sz / 2; |
637 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 637 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
638 else *sz = 0; | 638 else *sz = 0; |
648 } | 648 } |
649 | 649 |
650 /* Convert 16 bit big endian signed data to 8 bit unsigned data */ | 650 /* Convert 16 bit big endian signed data to 8 bit unsigned data */ |
651 static size_t sndcnv2byteBE(void **data,size_t *sz,void **outbuf) | 651 static size_t sndcnv2byteBE(void **data,size_t *sz,void **outbuf) |
652 { | 652 { |
653 register unsigned char *src; | 653 REGISTER unsigned char *src; |
654 register unsigned char *dest; | 654 REGISTER unsigned char *dest; |
655 int rc,count; | 655 int rc,count; |
656 | 656 |
657 count = *sz / 2; | 657 count = *sz / 2; |
658 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } | 658 if (count > SNDBUFSZ) { *sz -= 2*SNDBUFSZ; count = SNDBUFSZ; } |
659 else *sz = 0; | 659 else *sz = 0; |
670 | 670 |
671 /* Convert 16 bit little endian signed stereo data to 8 bit unsigned | 671 /* Convert 16 bit little endian signed stereo data to 8 bit unsigned |
672 mono data */ | 672 mono data */ |
673 static size_t sndcnv2monobyteLE(void **data,size_t *sz,void **outbuf) | 673 static size_t sndcnv2monobyteLE(void **data,size_t *sz,void **outbuf) |
674 { | 674 { |
675 register unsigned char *src; | 675 REGISTER unsigned char *src; |
676 register unsigned char *dest; | 676 REGISTER unsigned char *dest; |
677 int rc,count; | 677 int rc,count; |
678 | 678 |
679 count = *sz / 4; | 679 count = *sz / 4; |
680 if (count > SNDBUFSZ) { *sz -= 4*SNDBUFSZ; count = SNDBUFSZ; } | 680 if (count > SNDBUFSZ) { *sz -= 4*SNDBUFSZ; count = SNDBUFSZ; } |
681 else *sz = 0; | 681 else *sz = 0; |
693 | 693 |
694 /* Convert 16 bit big endian signed stereo data to 8 bit unsigned | 694 /* Convert 16 bit big endian signed stereo data to 8 bit unsigned |
695 mono data */ | 695 mono data */ |
696 static size_t sndcnv2monobyteBE(void **data,size_t *sz,void **outbuf) | 696 static size_t sndcnv2monobyteBE(void **data,size_t *sz,void **outbuf) |
697 { | 697 { |
698 register unsigned char *src; | 698 REGISTER unsigned char *src; |
699 register unsigned char *dest; | 699 REGISTER unsigned char *dest; |
700 int rc,count; | 700 int rc,count; |
701 | 701 |
702 count = *sz / 4; | 702 count = *sz / 4; |
703 if (count > SNDBUFSZ) { *sz -= 4*SNDBUFSZ; count = SNDBUFSZ; } | 703 if (count > SNDBUFSZ) { *sz -= 4*SNDBUFSZ; count = SNDBUFSZ; } |
704 else *sz = 0; | 704 else *sz = 0; |