Revision d929eba5 audio/audio.c
b/audio/audio.c | ||
---|---|---|
510 | 510 |
AUD_log (NULL, "invalid(%d)", as->fmt); |
511 | 511 |
break; |
512 | 512 |
} |
513 |
AUD_log (NULL, "endianness="); |
|
514 |
switch (as->endianness) { |
|
515 |
case 0: |
|
516 |
AUD_log (NULL, "little"); |
|
517 |
break; |
|
518 |
case 1: |
|
519 |
AUD_log (NULL, "big"); |
|
520 |
break; |
|
521 |
default: |
|
522 |
AUD_log (NULL, "invalid"); |
|
523 |
break; |
|
524 |
} |
|
513 | 525 |
AUD_log (NULL, "\n"); |
514 | 526 |
} |
515 | 527 |
|
... | ... | |
518 | 530 |
int invalid; |
519 | 531 |
|
520 | 532 |
invalid = as->nchannels != 1 && as->nchannels != 2; |
533 |
invalid |= as->endianness != 0 && as->endianness != 1; |
|
521 | 534 |
|
522 | 535 |
switch (as->fmt) { |
523 | 536 |
case AUD_FMT_S8: |
... | ... | |
531 | 544 |
} |
532 | 545 |
|
533 | 546 |
invalid |= as->freq <= 0; |
534 |
|
|
535 |
if (invalid) { |
|
536 |
return -1; |
|
537 |
} |
|
538 |
return 0; |
|
547 |
return invalid ? -1 : 0; |
|
539 | 548 |
} |
540 | 549 |
|
541 | 550 |
static int audio_pcm_info_eq (struct audio_pcm_info *info, audsettings_t *as) |
... | ... | |
557 | 566 |
return info->freq == as->freq |
558 | 567 |
&& info->nchannels == as->nchannels |
559 | 568 |
&& info->sign == sign |
560 |
&& info->bits == bits; |
|
569 |
&& info->bits == bits |
|
570 |
&& info->swap_endianness == (as->endianness != AUDIO_HOST_ENDIANNESS); |
|
561 | 571 |
} |
562 | 572 |
|
563 |
void audio_pcm_init_info ( |
|
564 |
struct audio_pcm_info *info, |
|
565 |
audsettings_t *as, |
|
566 |
int swap_endian |
|
567 |
) |
|
573 |
void audio_pcm_init_info (struct audio_pcm_info *info, audsettings_t *as) |
|
568 | 574 |
{ |
569 | 575 |
int bits = 8, sign = 0; |
570 | 576 |
|
... | ... | |
588 | 594 |
info->shift = (as->nchannels == 2) + (bits == 16); |
589 | 595 |
info->align = (1 << info->shift) - 1; |
590 | 596 |
info->bytes_per_second = info->freq << info->shift; |
591 |
info->swap_endian = swap_endian;
|
|
597 |
info->swap_endianness = (as->endianness != AUDIO_HOST_ENDIANNESS);
|
|
592 | 598 |
} |
593 | 599 |
|
594 | 600 |
void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len) |
... | ... | |
610 | 616 |
int shift = info->nchannels - 1; |
611 | 617 |
short s = INT16_MAX; |
612 | 618 |
|
613 |
if (info->swap_endian) { |
|
619 |
if (info->swap_endianness) {
|
|
614 | 620 |
s = bswap16 (s); |
615 | 621 |
} |
616 | 622 |
|
... | ... | |
635 | 641 |
|
636 | 642 |
static CaptureVoiceOut *audio_pcm_capture_find_specific ( |
637 | 643 |
AudioState *s, |
638 |
audsettings_t *as, |
|
639 |
int endian |
|
644 |
audsettings_t *as |
|
640 | 645 |
) |
641 | 646 |
{ |
642 | 647 |
CaptureVoiceOut *cap; |
643 |
int swap_endian = audio_need_to_swap_endian (endian); |
|
644 | 648 |
|
645 | 649 |
for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) { |
646 |
if ((cap->hw.info.swap_endian == swap_endian) |
|
647 |
&& audio_pcm_info_eq (&cap->hw.info, as)) { |
|
650 |
if (audio_pcm_info_eq (&cap->hw.info, as)) { |
|
648 | 651 |
return cap; |
649 | 652 |
} |
650 | 653 |
} |
... | ... | |
1697 | 1700 |
int AUD_add_capture ( |
1698 | 1701 |
AudioState *s, |
1699 | 1702 |
audsettings_t *as, |
1700 |
int endian, |
|
1701 | 1703 |
struct audio_capture_ops *ops, |
1702 | 1704 |
void *cb_opaque |
1703 | 1705 |
) |
... | ... | |
1725 | 1727 |
cb->ops = *ops; |
1726 | 1728 |
cb->opaque = cb_opaque; |
1727 | 1729 |
|
1728 |
cap = audio_pcm_capture_find_specific (s, as, endian);
|
|
1730 |
cap = audio_pcm_capture_find_specific (s, as); |
|
1729 | 1731 |
if (cap) { |
1730 | 1732 |
LIST_INSERT_HEAD (&cap->cb_head, cb, entries); |
1731 | 1733 |
return 0; |
... | ... | |
1755 | 1757 |
goto err2; |
1756 | 1758 |
} |
1757 | 1759 |
|
1758 |
audio_pcm_init_info (&hw->info, as, endian);
|
|
1760 |
audio_pcm_init_info (&hw->info, as); |
|
1759 | 1761 |
|
1760 | 1762 |
cap->buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift); |
1761 | 1763 |
if (!cap->buf) { |
... | ... | |
1768 | 1770 |
hw->clip = mixeng_clip |
1769 | 1771 |
[hw->info.nchannels == 2] |
1770 | 1772 |
[hw->info.sign] |
1771 |
[hw->info.swap_endian] |
|
1773 |
[hw->info.swap_endianness]
|
|
1772 | 1774 |
[hw->info.bits == 16]; |
1773 | 1775 |
|
1774 | 1776 |
LIST_INSERT_HEAD (&s->cap_head, cap, entries); |
Also available in: Unified diff