Revision 38cc9b60

b/audio/alsaaudio.c
843 843
    return 0;
844 844
}
845 845

  
846
static int alsa_voice_ctl (snd_pcm_t *handle, const char *typ, int pause)
846
#define VOICE_CTL_PAUSE 0
847
#define VOICE_CTL_PREPARE 1
848
#define VOICE_CTL_START 2
849

  
850
static int alsa_voice_ctl (snd_pcm_t *handle, const char *typ, int ctl)
847 851
{
848 852
    int err;
849 853

  
850
    if (pause) {
854
    if (ctl == VOICE_CTL_PAUSE) {
851 855
        err = snd_pcm_drop (handle);
852 856
        if (err < 0) {
853 857
            alsa_logerr (err, "Could not stop %s\n", typ);
......
860 864
            alsa_logerr (err, "Could not prepare handle for %s\n", typ);
861 865
            return -1;
862 866
        }
867
        if (ctl == VOICE_CTL_START) {
868
            err = snd_pcm_start(handle);
869
            if (err < 0) {
870
                alsa_logerr (err, "Could not start handle for %s\n", typ);
871
                return -1;
872
            }
873
        }
863 874
    }
864 875

  
865 876
    return 0;
......
884 895
                poll_mode = 0;
885 896
            }
886 897
            hw->poll_mode = poll_mode;
887
            return alsa_voice_ctl (alsa->handle, "playback", 0);
898
            return alsa_voice_ctl (alsa->handle, "playback", VOICE_CTL_PREPARE);
888 899
        }
889 900

  
890 901
    case VOICE_DISABLE:
......
893 904
            hw->poll_mode = 0;
894 905
            alsa_fini_poll (&alsa->pollhlp);
895 906
        }
896
        return alsa_voice_ctl (alsa->handle, "playback", 1);
907
        return alsa_voice_ctl (alsa->handle, "playback", VOICE_CTL_PAUSE);
897 908
    }
898 909

  
899 910
    return -1;
......
1106 1117
            }
1107 1118
            hw->poll_mode = poll_mode;
1108 1119

  
1109
            return alsa_voice_ctl (alsa->handle, "capture", 0);
1120
            return alsa_voice_ctl (alsa->handle, "capture", VOICE_CTL_START);
1110 1121
        }
1111 1122

  
1112 1123
    case VOICE_DISABLE:
......
1115 1126
            hw->poll_mode = 0;
1116 1127
            alsa_fini_poll (&alsa->pollhlp);
1117 1128
        }
1118
        return alsa_voice_ctl (alsa->handle, "capture", 1);
1129
        return alsa_voice_ctl (alsa->handle, "capture", VOICE_CTL_PAUSE);
1119 1130
    }
1120 1131

  
1121 1132
    return -1;

Also available in: Unified diff