Commit 4787c71d179ae9b67b0e682a2a95b6ceca4e68c4
1 parent
541e0844
debug fix (malc)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1619 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
34 additions
and
31 deletions
audio/alsaaudio.c
@@ -570,36 +570,39 @@ static int alsa_run_out (HWVoiceOut *hw) | @@ -570,36 +570,39 @@ static int alsa_run_out (HWVoiceOut *hw) | ||
570 | 570 | ||
571 | hw->clip (dst, src, convert_samples); | 571 | hw->clip (dst, src, convert_samples); |
572 | 572 | ||
573 | - again: | ||
574 | - written = snd_pcm_writei (alsa->handle, dst, convert_samples); | ||
575 | - | ||
576 | - if (written < 0) { | ||
577 | - switch (written) { | ||
578 | - case -EPIPE: | ||
579 | - if (!alsa_recover (alsa->handle)) { | ||
580 | - goto again; | ||
581 | - } | ||
582 | - dolog ( | ||
583 | - "Failed to write %d frames to %p, handle %p not prepared\n", | ||
584 | - convert_samples, | ||
585 | - dst, | ||
586 | - alsa->handle | ||
587 | - ); | ||
588 | - goto exit; | 573 | + while (convert_samples) { |
574 | + written = snd_pcm_writei (alsa->handle, dst, convert_samples); | ||
589 | 575 | ||
590 | - case -EAGAIN: | ||
591 | - goto again; | 576 | + if (written < 0) { |
577 | + switch (written) { | ||
578 | + case -EPIPE: | ||
579 | + if (!alsa_recover (alsa->handle)) { | ||
580 | + continue; | ||
581 | + } | ||
582 | + dolog ("Failed to write %d frames to %p, " | ||
583 | + "handle %p not prepared\n", | ||
584 | + convert_samples, | ||
585 | + dst, | ||
586 | + alsa->handle); | ||
587 | + goto exit; | ||
592 | 588 | ||
593 | - default: | ||
594 | - alsa_logerr (written, "Failed to write %d frames to %p\n", | ||
595 | - convert_samples, dst); | ||
596 | - goto exit; | 589 | + case -EAGAIN: |
590 | + continue; | ||
591 | + | ||
592 | + default: | ||
593 | + alsa_logerr (written, "Failed to write %d frames to %p\n", | ||
594 | + convert_samples, dst); | ||
595 | + goto exit; | ||
596 | + } | ||
597 | } | 597 | } |
598 | - } | ||
599 | 598 | ||
600 | - mixeng_clear (src, written); | ||
601 | - rpos = (rpos + written) % hw->samples; | ||
602 | - samples -= written; | 599 | + mixeng_clear (src, written); |
600 | + rpos = (rpos + written) % hw->samples; | ||
601 | + samples -= written; | ||
602 | + convert_samples -= written; | ||
603 | + dst = advance (dst, written << hw->info.shift); | ||
604 | + src += written; | ||
605 | + } | ||
603 | } | 606 | } |
604 | 607 | ||
605 | exit: | 608 | exit: |
@@ -661,8 +664,8 @@ static int alsa_init_out (HWVoiceOut *hw, audsettings_t *as) | @@ -661,8 +664,8 @@ static int alsa_init_out (HWVoiceOut *hw, audsettings_t *as) | ||
661 | 664 | ||
662 | alsa->pcm_buf = audio_calloc (AUDIO_FUNC, obt.samples, 1 << hw->info.shift); | 665 | alsa->pcm_buf = audio_calloc (AUDIO_FUNC, obt.samples, 1 << hw->info.shift); |
663 | if (!alsa->pcm_buf) { | 666 | if (!alsa->pcm_buf) { |
664 | - dolog ("Could not allocate DAC buffer (%d bytes)\n", | ||
665 | - hw->samples << hw->info.shift); | 667 | + dolog ("Could not allocate DAC buffer (%d samples, each %d bytes)\n", |
668 | + hw->samples, 1 << hw->info.shift); | ||
666 | alsa_anal_close (&handle); | 669 | alsa_anal_close (&handle); |
667 | return -1; | 670 | return -1; |
668 | } | 671 | } |
@@ -751,8 +754,8 @@ static int alsa_init_in (HWVoiceIn *hw, audsettings_t *as) | @@ -751,8 +754,8 @@ static int alsa_init_in (HWVoiceIn *hw, audsettings_t *as) | ||
751 | 754 | ||
752 | alsa->pcm_buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift); | 755 | alsa->pcm_buf = audio_calloc (AUDIO_FUNC, hw->samples, 1 << hw->info.shift); |
753 | if (!alsa->pcm_buf) { | 756 | if (!alsa->pcm_buf) { |
754 | - dolog ("Could not allocate ADC buffer (%d bytes)\n", | ||
755 | - hw->samples << hw->info.shift); | 757 | + dolog ("Could not allocate ADC buffer (%d samples, each %d bytes)\n", |
758 | + hw->samples, 1 << hw->info.shift); | ||
756 | alsa_anal_close (&handle); | 759 | alsa_anal_close (&handle); |
757 | return -1; | 760 | return -1; |
758 | } | 761 | } |
audio/audio_int.h
@@ -216,7 +216,7 @@ static inline int audio_need_to_swap_endian (int endianness) | @@ -216,7 +216,7 @@ static inline int audio_need_to_swap_endian (int endianness) | ||
216 | #if defined __GNUC__ | 216 | #if defined __GNUC__ |
217 | #define GCC_ATTR __attribute__ ((__unused__, __format__ (__printf__, 1, 2))) | 217 | #define GCC_ATTR __attribute__ ((__unused__, __format__ (__printf__, 1, 2))) |
218 | #define INIT_FIELD(f) . f | 218 | #define INIT_FIELD(f) . f |
219 | -#define GCC_FMT_ATTR(n, m) __attribute__ ((__format__ (printf, n, m))) | 219 | +#define GCC_FMT_ATTR(n, m) __attribute__ ((__format__ (__printf__, n, m))) |
220 | #else | 220 | #else |
221 | #define GCC_ATTR /**/ | 221 | #define GCC_ATTR /**/ |
222 | #define INIT_FIELD(f) /**/ | 222 | #define INIT_FIELD(f) /**/ |