亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hspalsadevice.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
        case SND_PCM_STATE_DISCONNECTED:            HX_ASSERT(!"Not reached");            break;                    }        break;    }    // XXXRGG: Always use the delay method for now.    m_bUseMMAPTStamps = FALSE;    if (m_bUseMMAPTStamps)    {        retVal = GetBytesActuallyPlayedUsingTStamps(nBytesPlayed);    }     if (!m_bUseMMAPTStamps || FAILED(retVal))    {        /* MMAP'd timestamps are fishy. Try using snd_pcm_delay. */        retVal = GetBytesActuallyPlayedUsingDelay(nBytesPlayed);                }    m_nLastBytesPlayed = nBytesPlayed;    return nBytesPlayed;}//this must return the number of bytes that can be written without blocking.HX_RESULT HSPAudioDevice::GetRoomOnDevice(ULONG32& ulBytes) const{    ulBytes = 0;    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    int err = 0;    err = snd_pcm_avail_update(m_pAlsaPCMHandle);    if(err > 0)    {        ulBytes = snd_pcm_frames_to_bytes(m_pAlsaPCMHandle, err);    }    else    {        switch (err)        {        case -EAGAIN:            break;        case -EPIPE:            HandleXRun();            break;                       case -ESTRPIPE:            HandleSuspend();            break;        default:#ifdef HX_LOG_SUBSYSTEM            HXLOGL1 ( HXLOG_ADEV, "snd_pcm_avail_update: %s", snd_strerror(err));#endif            m_wLastError = RA_AOE_DEVBUSY;        }    }#ifdef HX_LOG_SUBSYSTEM//    HXLOGL4 ( HXLOG_ADEV, "RoomOnDevice: %d", ulBytes);    #endif    return m_wLastError;}//Device specific method to get/set the devices current volume.UINT16 HSPAudioDevice::_GetVolume() const{    HX_ASSERT(m_pAlsaMixerElem);    if (!m_pAlsaMixerElem)    {        return 0;    }    UINT16 nRetVolume = 0;    snd_mixer_elem_type_t type;        int err = 0;    type = snd_mixer_elem_get_type(m_pAlsaMixerElem);                if (type == SND_MIXER_ELEM_SIMPLE)    {        long volume, min_volume, max_volume;         if(snd_mixer_selem_has_playback_volume(m_pAlsaMixerElem) ||            snd_mixer_selem_has_playback_volume_joined(m_pAlsaMixerElem))        {            err = snd_mixer_selem_get_playback_volume(m_pAlsaMixerElem,                                                      SND_MIXER_SCHN_MONO,                                                       &volume);            if (err < 0)            {#ifdef HX_LOG_SUBSYSTEM                HXLOGL1 ( HXLOG_ADEV, "snd_mixer_selem_get_playback_volume: %s",                          snd_strerror (err));#endif            }            if (err == 0)            {                snd_mixer_selem_get_playback_volume_range(m_pAlsaMixerElem,                                                          &min_volume,                                                          &max_volume);                if(max_volume > min_volume)                {                    nRetVolume = (UINT16) (100 * volume / (max_volume - min_volume));                }            }        }            }    return nRetVolume;}HX_RESULT HSPAudioDevice::_SetVolume(UINT16 unVolume){    m_wLastError = RA_AOE_NOERR;    HX_ASSERT(m_pAlsaMixerElem);    if (!m_pAlsaMixerElem)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    snd_mixer_elem_type_t type;        int err = 0;    type = snd_mixer_elem_get_type(m_pAlsaMixerElem);                if (type == SND_MIXER_ELEM_SIMPLE)    {        long volume, min_volume, max_volume, range;         if(snd_mixer_selem_has_playback_volume(m_pAlsaMixerElem) ||            snd_mixer_selem_has_playback_volume_joined(m_pAlsaMixerElem))        {            snd_mixer_selem_get_playback_volume_range(m_pAlsaMixerElem,                                                      &min_volume,                                                      &max_volume);            range = max_volume - min_volume;            volume = (long) ((unVolume / 100) * range + min_volume);            err = snd_mixer_selem_set_playback_volume( m_pAlsaMixerElem,                                                       SND_MIXER_SCHN_FRONT_LEFT,                                                        volume);                        if (err < 0)            {#ifdef HX_LOG_SUBSYSTEM                HXLOGL1 ( HXLOG_ADEV, "snd_mixer_selem_set_playback_volume: %s",                          snd_strerror (err));#endif                m_wLastError = RA_AOE_GENERAL;            }            if (!snd_mixer_selem_is_playback_mono (m_pAlsaMixerElem))            {                /* Set the right channel too */                err = snd_mixer_selem_set_playback_volume( m_pAlsaMixerElem,                                                           SND_MIXER_SCHN_FRONT_RIGHT,                                                            volume);                            if (err < 0)                {#ifdef HX_LOG_SUBSYSTEM                    HXLOGL1 ( HXLOG_ADEV, "snd_mixer_selem_set_playback_volume: %s",                              snd_strerror (err));#endif                    m_wLastError = RA_AOE_GENERAL;                }            }        }            }        return m_wLastError;}//Device specific method to drain a device. This should play the remaining//bytes in the devices buffer and then return.HX_RESULT HSPAudioDevice::_Drain(){    m_wLastError = RA_AOE_NOERR;    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    int err = 0;    err = snd_pcm_drain(m_pAlsaPCMHandle);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_drain: %s",                  snd_strerror (err));#endif        m_wLastError = RA_AOE_GENERAL;    }        err = snd_pcm_prepare(m_pAlsaPCMHandle);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_prepare: %s",                  snd_strerror (err));#endif        m_wLastError = RA_AOE_GENERAL;    }    return m_wLastError;}//Device specific method to reset device and return it to a state that it//can accept new sample rates, num channels, etc.HX_RESULT HSPAudioDevice::_Reset(){    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    m_wLastError = RA_AOE_NOERR;    m_nLastBytesPlayed = 0;    int err = 0;    err = snd_pcm_drop(m_pAlsaPCMHandle);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_drop: %s",                  snd_strerror (err));#endif        m_wLastError = RA_AOE_GENERAL;    }    err = snd_pcm_prepare(m_pAlsaPCMHandle);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_prepare: %s",                  snd_strerror (err));#endif        m_wLastError = RA_AOE_GENERAL;    }    return m_wLastError;}HX_RESULT HSPAudioDevice::_CheckFormat( const HXAudioFormat* pFormat ){    HX_ASSERT(m_pAlsaPCMHandle == NULL);    m_wLastError = _OpenAudio();    if(m_wLastError != RA_AOE_NOERR)    {        return m_wLastError;    }    m_wLastError = RA_AOE_NOERR;    snd_pcm_format_t fmt;    unsigned int sample_rate = 0;    unsigned int channels = 0;    switch (pFormat->uBitsPerSample)    {    case 8:        fmt = SND_PCM_FORMAT_S8;        break;    case 16:        fmt = SND_PCM_FORMAT_S16_LE;                break;    case 24:        fmt = SND_PCM_FORMAT_S24_LE;        break;    case 32:        fmt = SND_PCM_FORMAT_S32_LE;        break;    default:        fmt = SND_PCM_FORMAT_UNKNOWN;        break;            }        if (fmt == SND_PCM_FORMAT_UNKNOWN)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "Unknown bits per sample: %d", pFormat->uBitsPerSample);#endif        m_wLastError = RA_AOE_NOTENABLED;        return m_wLastError;    }    sample_rate = pFormat->ulSamplesPerSec;    channels = pFormat->uChannels;    /* Apply to ALSA */    int err = 0;	snd_pcm_hw_params_t *hwparams;	snd_pcm_hw_params_alloca(&hwparams);	err = snd_pcm_hw_params_any(m_pAlsaPCMHandle, hwparams);	if (err < 0)     {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hw_params_any: %s", snd_strerror(err));#endif        m_wLastError = RA_AOE_NOTENABLED;	}    if (err == 0)    {        err = snd_pcm_hw_params_test_rate (m_pAlsaPCMHandle, hwparams, sample_rate, 0);        if (err < 0)        {            m_wLastError = RA_AOE_BADFORMAT;        }    }    if (err == 0)    {        err = snd_pcm_hw_params_test_channels (m_pAlsaPCMHandle, hwparams, channels);        if (err < 0)        {            m_wLastError = RA_AOE_BADFORMAT;        }    }    if (err == 0)    {        err = snd_pcm_hw_params_test_format (m_pAlsaPCMHandle, hwparams, fmt);        if (err < 0)        {            m_wLastError = RA_AOE_BADFORMAT;        }    }    _CloseAudio();    return m_wLastError;}HX_RESULT HSPAudioDevice::CheckSampleRate( ULONG32 ulSampleRate ){    HX_ASSERT(m_pAlsaPCMHandle == NULL);    bool shouldclose = false;    if (!m_pAlsaPCMHandle)    {       m_wLastError = _OpenAudio();       if(m_wLastError != RA_AOE_NOERR)       {          return m_wLastError;       }       shouldclose = true;    }           int err = 0;    snd_pcm_hw_params_t *hwparams;           snd_pcm_hw_params_alloca(&hwparams);        m_wLastError = RA_AOE_NOERR;        err = snd_pcm_hw_params_any(m_pAlsaPCMHandle, hwparams);    if (err < 0)     {#ifdef HX_LOG_SUBSYSTEM       HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hw_params_any: %s", snd_strerror(err));#endif       m_wLastError = RA_AOE_NOTENABLED;    }        if (err == 0)    {       err = snd_pcm_hw_params_test_rate (m_pAlsaPCMHandle, hwparams, ulSampleRate, 0);       if (err < 0)       {          m_wLastError = RA_AOE_BADFORMAT;       }    }        if (shouldclose)       _CloseAudio();    return m_wLastError;}HX_RESULT HSPAudioDevice::_Pause(){    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    if (m_bHasHardwarePauseAndResume)    {        snd_pcm_state_t state;        state = snd_pcm_state(m_pAlsaPCMHandle);        if (state == SND_PCM_STATE_RUNNING)        {            int err = 0;            err = snd_pcm_pause(m_pAlsaPCMHandle, 1);            if (err < 0)            {#ifdef HX_LOG_SUBSYSTEM                HXLOGL1 ( HXLOG_ADEV, "snd_pcm_pause: %s",                          snd_strerror (err));#endif                            m_wLastError = RA_AOE_NOTSUPPORTED;            }        }    }    else    {       pthread_mutex_lock(&m_m);       m_SWPause = true;       _Drain();       _Reset();       pthread_mutex_unlock(&m_m);    }        return m_wLastError;}HX_RESULT HSPAudioDevice::_Resume(){    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    if (m_bHasHardwarePauseAndResume)    {        snd_pcm_state_t state;        state = snd_pcm_state(m_pAlsaPCMHandle);        if (state == SND_PCM_STATE_PAUSED)        {            int err = 0;            err = snd_pcm_pause(m_pAlsaPCMHandle, 0);            if (err < 0)            {#ifdef HX_LOG_SUBSYSTEM                HXLOGL1 ( HXLOG_ADEV, "snd_pcm_pause: %s",                          snd_strerror (err));#endif                            m_wLastError = RA_AOE_NOTSUPPORTED;            }        }    }    else    {       pthread_mutex_lock(&m_m);       m_SWPause = false;       _Reset();       pthread_mutex_unlock(&m_m);    }        return m_wLastError;}BOOL HSPAudioDevice::HardwarePauseSupported() const{    HX_ASSERT(m_pAlsaPCMHandle != NULL);    return m_bHasHardwarePauseAndResume;}void HSPAudioDevice::HandleXRun(void) const{    int err = 0;#ifdef HX_LOG_SUBSYSTEM    HXLOGL2 ( HXLOG_ADEV, "Handling XRun");#endif    err = snd_pcm_prepare(m_pAlsaPCMHandle);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_resume: %s (xrun)",                  snd_strerror (err));#endif    }    /* Catch up to the write position of the audio device so we get new data.       XXXRGG: Is there some way we, the device, can force a rewind? */    m_nLastBytesPlayed = m_ulTotalWritten;}void HSPAudioDevice::HandleSuspend(void) const{    int err = 0;    do    {        err = snd_pcm_resume(m_pAlsaPCMHandle);        if (err == 0)        {            break;        }        else if (err == -EAGAIN)        {            usleep(1000);        }    } while (err == -EAGAIN);    if (err < 0)     {        HandleXRun();    }}#endif // HELIX_USE_ALSA

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区观看| 欧美艳星brazzers| 日本电影亚洲天堂一区| 欧美一卡二卡三卡| 亚洲精选在线视频| 激情深爱一区二区| 欧美电影一区二区| 亚洲美女屁股眼交| 国产69精品久久99不卡| 日韩视频一区在线观看| 亚洲成av人片| 97久久精品人人爽人人爽蜜臀| 欧美一区二区高清| 婷婷成人综合网| 色综合久久久网| 国产精品久久久久一区二区三区| 美腿丝袜亚洲三区| 欧美乱熟臀69xxxxxx| 一区二区三区日韩在线观看| 韩国av一区二区三区| 欧美精品少妇一区二区三区| 亚洲精品视频在线看| av一区二区不卡| 久久久久国产一区二区三区四区| 美女看a上一区| 日韩欧美中文字幕一区| 亚洲一区二区欧美激情| 日本高清无吗v一区| 亚洲女与黑人做爰| 一本高清dvd不卡在线观看 | 亚洲女同一区二区| 国产盗摄一区二区| 国产欧美日韩久久| eeuss鲁片一区二区三区| 欧美极品另类videosde| www.日本不卡| 亚洲精品国产视频| 色婷婷av一区二区三区软件| 一区二区在线看| 欧洲日韩一区二区三区| 亚洲一卡二卡三卡四卡五卡| 色一区在线观看| 亚洲一区二区精品视频| 91精品国产乱码| 麻豆精品蜜桃视频网站| 久久影视一区二区| 成人手机电影网| 亚洲国产精品成人综合| 色丁香久综合在线久综合在线观看| 亚洲欧美国产三级| 欧美日本视频在线| 久久99精品网久久| 国产午夜精品久久久久久久| 不卡区在线中文字幕| 亚洲乱码国产乱码精品精可以看| 91九色最新地址| 全国精品久久少妇| 26uuu欧美| 99视频精品全部免费在线| 亚洲最新视频在线播放| 欧美成人一区二区三区片免费 | 欧美性生活影院| 毛片基地黄久久久久久天堂| 国产区在线观看成人精品 | 99国产精品国产精品毛片| 亚洲动漫第一页| 国产肉丝袜一区二区| 欧美少妇bbb| 国产精品亚洲人在线观看| 亚洲色图在线看| 精品国产免费久久| 日本韩国欧美三级| 国产精选一区二区三区| 亚洲激情成人在线| 成人午夜精品一区二区三区| 91精品国产入口| 97se亚洲国产综合自在线观| 一区二区三区久久久| 日韩女优制服丝袜电影| 成人精品国产免费网站| 亚洲一区二区成人在线观看| 精品成人一区二区| 91亚洲精品久久久蜜桃| 麻豆视频观看网址久久| 国产精品色婷婷| 欧美欧美欧美欧美| 国产成人免费视频一区| 亚洲精品久久久久久国产精华液| 欧美喷潮久久久xxxxx| 91视频xxxx| 九九国产精品视频| 亚洲综合av网| 中文字幕久久午夜不卡| 7777女厕盗摄久久久| av综合在线播放| 午夜久久久久久久久| 樱桃国产成人精品视频| 亚洲国产精华液网站w| 欧美一区二区三区在线观看 | 国产欧美精品一区二区三区四区 | 日本成人在线视频网站| 一区二区三区四区国产精品| 国产三级一区二区三区| 欧美日韩色综合| 成人激情电影免费在线观看| 极品销魂美女一区二区三区| 亚洲精品中文字幕乱码三区| 国产欧美一区二区三区鸳鸯浴 | 麻豆国产91在线播放| 免费一级片91| 亚洲国产精品久久久男人的天堂| 国产精品视频免费| 精品日韩一区二区| 日韩欧美专区在线| 8v天堂国产在线一区二区| 欧美日本国产一区| 欧美日韩黄色一区二区| 欧美日韩午夜在线| 欧美性三三影院| 日本精品裸体写真集在线观看| 99久久亚洲一区二区三区青草 | 欧美日韩国产中文| 欧美三级电影在线观看| 成人精品一区二区三区四区| 99九九99九九九视频精品| 国产91在线观看丝袜| 国产在线一区二区| 国产综合色在线视频区| 精品写真视频在线观看| 久久爱另类一区二区小说| 亚洲美女视频在线观看| 偷窥国产亚洲免费视频| 午夜电影一区二区| 日韩激情av在线| 免费成人在线影院| 精品午夜久久福利影院| 精品写真视频在线观看| 久久99久久精品欧美| 国产91精品露脸国语对白| 成人精品视频一区| jlzzjlzz国产精品久久| 色综合久久久久久久| 欧美三级一区二区| 欧美日韩国产系列| 777a∨成人精品桃花网| 国产日韩欧美一区二区三区综合| 亚洲国产精品精华液ab| 亚洲同性gay激情无套| 一级日本不卡的影视| 日韩在线一区二区| 精品一区二区免费视频| 国内精品国产成人| 色婷婷综合视频在线观看| 5858s免费视频成人| 精品嫩草影院久久| 中文字幕一区二区三中文字幕| 亚洲制服丝袜在线| 免费观看在线综合| 91在线免费播放| 欧美色爱综合网| 精品国产亚洲一区二区三区在线观看| 国产精品九色蝌蚪自拍| 日日夜夜免费精品视频| 国产91丝袜在线播放九色| 在线视频你懂得一区| 久久精品一二三| 亚洲综合免费观看高清完整版| 国产综合色产在线精品| 91国偷自产一区二区三区成为亚洲经典| 国产精品国产三级国产三级人妇| 亚洲蜜臀av乱码久久精品| 国产老女人精品毛片久久| 一本色道综合亚洲| 国产欧美日韩麻豆91| 首页国产欧美久久| 91亚洲精华国产精华精华液| 91精品国产入口| 亚洲电影在线免费观看| 成人免费视频app| 久久久精品国产免费观看同学| 一区二区三区在线视频免费观看| 久久99九九99精品| 欧美在线不卡视频| 136国产福利精品导航| 麻豆精品蜜桃视频网站| 欧美日韩在线播放| 亚洲欧美日韩精品久久久久| 国产综合色产在线精品| 精品国产乱码久久久久久老虎 | 欧美高清视频不卡网| 欧美国产日韩亚洲一区| 激情文学综合网| 欧美一区二区在线播放| 亚洲午夜久久久久久久久电影网 | 91亚洲精品一区二区乱码| 精品国产一区二区亚洲人成毛片| 午夜一区二区三区视频| 色综合天天视频在线观看| 国产午夜精品久久久久久免费视| 久久国产精品99精品国产|