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