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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hspalsadevice.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統(tǒng)中運(yùn)行的音頻播放器軟件。 經(jīng)過兩年開發(fā)后
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
                    period_time, period_time_out);#endif          period_time = period_time_out;       }    }        /* Apply parameters */    err = snd_pcm_hw_params(m_pAlsaPCMHandle, hwparams);    if (err < 0)     {#ifdef HX_LOG_SUBSYSTEM       HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hw_params: %s",                  snd_strerror(err));#endif       m_wLastError = RA_AOE_NOTENABLED;    }        /* read buffer & period sizes */    snd_pcm_uframes_t buffer_size = 0;    snd_pcm_uframes_t period_size = 0;        if (err == 0)    {       err = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hw_params_get_buffer_size: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }       else       {          HX_ASSERT (buffer_size > 0);       }    }        if (err == 0)    {       err = snd_pcm_hw_params_get_period_size(hwparams, &period_size, 0);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hw_params_get_period_size: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        /* Get hardware pause */    if (err == 0)    {       int can_pause = 0;       int can_resume = 0;              can_pause = snd_pcm_hw_params_can_pause(hwparams);       can_resume = snd_pcm_hw_params_can_resume(hwparams);              // could we really have one without the other?       m_bHasHardwarePauseAndResume = (can_pause && can_resume);        m_Player->print2stderr("########## can_pause %d can_resume %d\n", can_pause, can_resume);    }        /* Software parameters */    if (err == 0)    {       err = snd_pcm_sw_params_current(m_pAlsaPCMHandle, swparams);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_current: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }            snd_pcm_uframes_t start_threshold = ((buffer_size - 1) / period_size) * period_size;        if (err == 0)    {       err = snd_pcm_sw_params_set_start_threshold(m_pAlsaPCMHandle, swparams, start_threshold);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_set_start_threshold: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        if (err == 0)    {       err = snd_pcm_sw_params_set_avail_min(m_pAlsaPCMHandle, swparams, period_size);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_set_avail_min: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        if (err == 0)    {       err = snd_pcm_sw_params_set_xfer_align(m_pAlsaPCMHandle, swparams, 1);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_set_xfer_align: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        if (err == 0)    {       err = snd_pcm_sw_params_set_tstamp_mode(m_pAlsaPCMHandle, swparams, SND_PCM_TSTAMP_MMAP);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_set_xfer_align: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        if (err == 0)    {       err = snd_pcm_sw_params_set_stop_threshold(m_pAlsaPCMHandle, swparams, ~0U);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params_set_stop_threshold: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        if (err == 0)    {       err = snd_pcm_sw_params(m_pAlsaPCMHandle, swparams);       if (err < 0)        {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "snd_pcm_sw_params: %s",                     snd_strerror(err));#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        /* If all the calls to this point have succeeded, move to the PREPARE state.        We will enter the RUNNING state when we've buffered enough for our start theshold. */    if (err == 0)    {       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_NOTENABLED;       }    }        /* Sanity check: See if we're now in the PREPARE state */    if (err == 0)    {       snd_pcm_state_t state;       state = snd_pcm_state (m_pAlsaPCMHandle);       if (state != SND_PCM_STATE_PREPARED)       {#ifdef HX_LOG_SUBSYSTEM          HXLOGL1 ( HXLOG_ADEV, "Expected to be in PREPARE state, actually in state %d",                     (int) state);#endif          m_wLastError = RA_AOE_NOTENABLED;       }    }        /* Use avail to get the alsa buffer size, which is distinct from the hardware buffer        size. This will match what GetRoomOnDevice uses. */    int alsa_buffer_size = 0;    err = snd_pcm_avail_update(m_pAlsaPCMHandle);    if(err < 0)    {#ifdef HX_LOG_SUBSYSTEM       HXLOGL1 ( HXLOG_ADEV, "snd_pcm_avail_update: %s", snd_strerror(err));#endif    }    else    {       alsa_buffer_size = snd_pcm_frames_to_bytes(m_pAlsaPCMHandle, err);       err = 0;    }        if (err == 0)    {       m_wLastError = RA_AOE_NOERR;              m_unSampleRate  = sample_rate;       m_unNumChannels = channels;       m_wBlockSize    = m_ulBytesPerGran;       m_ulDeviceBufferSize = alsa_buffer_size;       m_uSampFrameSize = snd_pcm_frames_to_bytes(m_pAlsaPCMHandle, 1) / channels;       #ifdef HX_LOG_SUBSYSTEM       HXLOGL2 ( HXLOG_ADEV,  "Device Configured:\n");       HXLOGL2 ( HXLOG_ADEV,  "         Sample Rate: %d",  m_unSampleRate);       HXLOGL2 ( HXLOG_ADEV,  "        Sample Width: %d",  m_uSampFrameSize);       HXLOGL2 ( HXLOG_ADEV,  "        Num channels: %d",  m_unNumChannels);       HXLOGL2 ( HXLOG_ADEV,  "          Block size: %d",  m_wBlockSize);       HXLOGL2 ( HXLOG_ADEV,  "  Device buffer size: %lu", m_ulDeviceBufferSize);       HXLOGL2 ( HXLOG_ADEV,  "   Supports HW Pause: %d",  m_bHasHardwarePauseAndResume);       HXLOGL2 ( HXLOG_ADEV,  "     Start threshold: %d",  start_threshold);#endif           }    else    {       m_unSampleRate = 0;       m_unNumChannels = 0;              if (m_pAlsaPCMHandle)       {          _CloseAudio();                   }    }        return m_wLastError;}//Device specific method to write bytes out to the audiodevice and return a//count of bytes written.HX_RESULT HSPAudioDevice::WriteBytes( UCHAR* buffer, ULONG32 ulBuffLength, LONG32& lCount ){    int err = 0, count = 0;    unsigned int frames_written = 0;    snd_pcm_sframes_t num_frames = 0;    ULONG32 ulBytesToWrite = ulBuffLength;    ULONG32 ulBytesWrote = 0;    lCount = 0;    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        m_wLastError = RA_AOE_DEVNOTOPEN;        return m_wLastError;    }    m_wLastError = RA_AOE_NOERR;    if (ulBuffLength == 0)    {        lCount = ulBuffLength;        return m_wLastError;    }    do    {       pthread_mutex_lock(&m_m);       if (!m_closed)       {          if (!m_SWPause)          {             num_frames = snd_pcm_bytes_to_frames(m_pAlsaPCMHandle, ulBytesToWrite);             err = snd_pcm_writei( m_pAlsaPCMHandle, buffer, num_frames );          }          else             err = -EAGAIN;       }       else       {          pthread_mutex_unlock(&m_m);          return 0;       }       pthread_mutex_unlock(&m_m);       count++;       if (err >= 0)       {          frames_written = err;                    pthread_mutex_lock(&m_m);          if (!m_closed)             ulBytesWrote = snd_pcm_frames_to_bytes (m_pAlsaPCMHandle, frames_written);          pthread_mutex_unlock(&m_m);          buffer += ulBytesWrote;          ulBytesToWrite -= ulBytesWrote;          lCount += ulBytesWrote;          m_ulTotalWritten += ulBytesWrote;       }       else       {          switch (err)          {             case -EAGAIN:                usleep(10000);                break;                             case -EPIPE:                HandleXRun();                lCount = (LONG32) ulBuffLength;                break;                             case -ESTRPIPE:                HandleSuspend();                lCount = (LONG32) ulBuffLength;                break;                             default:                m_Player->print2stderr("########### snd_pcm_writei: %s  num_frames=%ld\n", snd_strerror(err), num_frames);#ifdef HX_LOG_SUBSYSTEM                HXLOGL1 ( HXLOG_ADEV, "snd_pcm_writei: %s", snd_strerror(err));#endif                m_wLastError = RA_AOE_DEVBUSY;          }       }    } while (err == -EAGAIN || (err>0 && ulBytesToWrite>0));        //m_Player->print2stderr("############## count = %d\n", count);        return m_wLastError;}/* Subtract the `struct timeval' values X and Y,   storing the result in RESULT.   Return 1 if the difference is negative, otherwise 0.  */inttimeval_subtract (struct timeval *result,                   const struct timeval *x,                   const struct timeval *y_orig){    struct timeval y = *y_orig;        /* Perform the carry for the later subtraction by updating Y. */    if (x->tv_usec < y.tv_usec)     {        int nsec = (y.tv_usec - x->tv_usec) / 1000000 + 1;        y.tv_usec -= 1000000 * nsec;        y.tv_sec += nsec;    }    if ((x->tv_usec - y.tv_usec) > 1000000)     {        int nsec = (x->tv_usec - y.tv_usec) / 1000000;        y.tv_usec += 1000000 * nsec;        y.tv_sec -= nsec;    }    /* Compute the time remaining to wait.       `tv_usec' is certainly positive. */    result->tv_sec = x->tv_sec - y.tv_sec;    result->tv_usec = x->tv_usec - y.tv_usec;    /* Return 1 if result is negative. */    return x->tv_sec < y.tv_sec;}HX_RESULT HSPAudioDevice::GetBytesActuallyPlayedUsingTStamps(UINT64 &nBytesPlayed) const{    HX_RESULT retVal = HXR_FAIL;    int err = 0;    snd_timestamp_t trigger_tstamp, now_tstamp, diff_tstamp;    snd_pcm_status_t* status;    snd_pcm_status_alloca(&status);        err = snd_pcm_status(m_pAlsaPCMHandle, status);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_status: %s", snd_strerror(err));#endif    }    if (err == 0)    {        snd_pcm_status_get_tstamp(status, &now_tstamp);        snd_pcm_status_get_trigger_tstamp(status, &trigger_tstamp);        if(!m_bGotInitialTrigger && now_tstamp.tv_sec == 0 && now_tstamp.tv_usec == 0)        {            /* Our first "now" timestamp appears to be invalid (or the user is very unlucky, and               happened to start playback as the timestamp rolls over). Fall back to using                snd_pcm_delay.                              XXXRGG: Is there a better way to figure out if the driver supports mmap'd                timestamps? */            m_bUseMMAPTStamps = FALSE;        }        else        {            /* Timestamp seems to be valid */            if(!m_bGotInitialTrigger)            {                m_bGotInitialTrigger = TRUE;                memcpy(&m_tstampLastTrigger, &trigger_tstamp, sizeof(m_tstampLastTrigger));            }            else            {                if(memcmp(&m_tstampLastTrigger, &trigger_tstamp, sizeof(m_tstampLastTrigger)) != 0)                {                    /* There's been a trigger since last time -- restart the timestamp counter                       XXXRGG: What if there's been multiple triggers? */                    m_nBytesPlayedBeforeLastTrigger = m_nLastBytesPlayed;                    memcpy(&m_tstampLastTrigger, &trigger_tstamp, sizeof(m_tstampLastTrigger));#ifdef HX_LOG_SUBSYSTEM                    HXLOGL1 ( HXLOG_ADEV, "Retriggered...");#endif                }            }            timeval_subtract (&diff_tstamp, &now_tstamp, &m_tstampLastTrigger);            double fTimePlayed = (double) diff_tstamp.tv_sec +                 ((double) diff_tstamp.tv_usec / 1e6);                        nBytesPlayed = (UINT64) ((fTimePlayed * (double) m_unSampleRate * m_uSampFrameSize * m_unNumChannels) + m_nBytesPlayedBeforeLastTrigger);            retVal = HXR_OK;        }        }    return retVal;}HX_RESULT HSPAudioDevice::GetBytesActuallyPlayedUsingDelay (UINT64 &nBytesPlayed) const{    HX_RESULT retVal = HXR_FAIL;    int err = 0;    snd_pcm_sframes_t frame_delay = 0;    err = snd_pcm_delay (m_pAlsaPCMHandle, &frame_delay);    if (err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_status: %s", snd_strerror(err));        #endif    }    else    {        int bytes_delay;        bytes_delay = snd_pcm_frames_to_bytes (m_pAlsaPCMHandle, frame_delay);        nBytesPlayed = m_ulTotalWritten - bytes_delay;        retVal = HXR_OK;    }#ifdef HX_LOG_SUBSYSTEM//    HXLOGL4 ( HXLOG_ADEV, "nBytesPlayed: %llu, m_ulTotalWritten: %llu\n", nBytesPlayed, m_ulTotalWritten);#endif    return retVal;}HX_RESULT HSPAudioDevice::GetBytesActuallyPlayedUsingAvail(UINT64 &nBytesPlayed) const{    /* Try this the hwsync way. This method seems to crash & burn with dmix,       as avail seems to come from the device, and varies depending on what other       dmix clients are writing to the slave device. Currently not used for that reason. */    HX_RESULT retVal = HXR_FAIL;    int err = 0;    err = snd_pcm_hwsync(m_pAlsaPCMHandle);    if(err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_hwsync: %s", snd_strerror(err));        #endif    }    err = snd_pcm_avail_update(m_pAlsaPCMHandle);    if(err < 0)    {#ifdef HX_LOG_SUBSYSTEM        HXLOGL1 ( HXLOG_ADEV, "snd_pcm_avail_update: %s", snd_strerror(err));        #endif    }    else    {        snd_pcm_sframes_t avail = err;        int bytes_avail;        bytes_avail = snd_pcm_frames_to_bytes (m_pAlsaPCMHandle, avail);        nBytesPlayed = m_ulTotalWritten - (m_ulDeviceBufferSize - bytes_avail);        retVal = HXR_OK;    }    return retVal;}HX_RESULT HSPAudioDevice::GetBytesActuallyPlayedUsingTimer(UINT64 &/*nBytesPlayed*/) const{    /* Look at the alsa timer api, and how we can lock onto it as a timer source. */    return HXR_FAIL;}UINT64 HSPAudioDevice::GetBytesActualyPlayed(void) const{    HX_ASSERT(m_pAlsaPCMHandle);    if (!m_pAlsaPCMHandle)    {        return 0;    }    HX_RESULT retVal = HXR_OK;    UINT64 nBytesPlayed = 0;    snd_pcm_state_t state;    for(;;)    {        state = snd_pcm_state(m_pAlsaPCMHandle);        switch(state)        {        case SND_PCM_STATE_OPEN:        case SND_PCM_STATE_SETUP:        case SND_PCM_STATE_PREPARED:            /* If we're in one of these states, written and played should match. */            m_nLastBytesPlayed = m_ulTotalWritten;            return m_nLastBytesPlayed;        case SND_PCM_STATE_XRUN:            HandleXRun();            continue;             case SND_PCM_STATE_RUNNING:            break;        case SND_PCM_STATE_PAUSED:            // return m_nLastBytesPlayed;            break;        case SND_PCM_STATE_DRAINING:        case SND_PCM_STATE_SUSPENDED:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲gay无套男同| 国产精品电影院| 欧美日本在线看| 在线免费av一区| 欧美性一二三区| 欧美日韩精品一区二区三区| 欧美日韩久久久一区| 欧美午夜精品久久久久久超碰 | 亚洲综合免费观看高清完整版在线| 亚洲精品在线观看网站| 日韩一区二区三区观看| 精品99一区二区| 国产女主播视频一区二区| 国产精品久久三| 亚洲精选在线视频| 蜜臀久久久久久久| 韩国v欧美v亚洲v日本v| 不卡免费追剧大全电视剧网站| 成人一区在线看| 在线观看三级视频欧美| 欧美乱熟臀69xxxxxx| 精品久久久久久久久久久久包黑料| 久久久久久久久久久久久夜| 亚洲人成网站影音先锋播放| 三级欧美在线一区| 全部av―极品视觉盛宴亚洲| 国产一区二区在线观看视频| caoporn国产精品| 欧美精品日韩一区| 久久久国产午夜精品 | 不卡的av中国片| 欧美三区在线观看| 久久一二三国产| 亚洲激情校园春色| 国产一区在线精品| 欧美日韩你懂得| 欧美国产成人精品| 日韩国产欧美在线视频| 成人精品一区二区三区四区| 欧美在线综合视频| 国产欧美精品区一区二区三区 | 精品一区二区三区久久| 成人黄色免费短视频| 欧美一区二区三区在线观看视频| 国产亚洲综合av| 日韩影院免费视频| av在线免费不卡| 欧美成人在线直播| 一区二区三区精密机械公司| 国模冰冰炮一区二区| 欧美理论在线播放| 最新国产精品久久精品| 中文字幕亚洲区| 蜜臀va亚洲va欧美va天堂| 色婷婷香蕉在线一区二区| 欧美精品一区二区三区在线| 亚洲午夜免费电影| 91视频在线观看| 中文文精品字幕一区二区| 美女任你摸久久 | 国产成人av一区二区三区在线| 欧美亚洲一区二区在线观看| 中文字幕av一区 二区| 激情图片小说一区| 欧美一二区视频| 免费在线观看一区二区三区| 在线观看成人免费视频| 亚洲色图色小说| 不卡视频一二三| 国产精品人人做人人爽人人添| 久久激情五月婷婷| 欧美一卡二卡在线| 蜜桃传媒麻豆第一区在线观看| 欧美日韩成人在线一区| 午夜精品福利一区二区蜜股av | 亚洲欧美激情一区二区| 成人18精品视频| 亚洲欧洲无码一区二区三区| 国产超碰在线一区| 国产精品天美传媒| av网站免费线看精品| 国产精品免费看片| 91蜜桃网址入口| 亚洲激情五月婷婷| 欧美日韩国产经典色站一区二区三区| 亚洲精品日产精品乱码不卡| 欧美婷婷六月丁香综合色| 亚洲123区在线观看| 91精品在线麻豆| 蜜臀久久99精品久久久久宅男| 538prom精品视频线放| 麻豆成人久久精品二区三区小说| 欧美成人一区二区三区在线观看| 久久97超碰色| 久久精品亚洲乱码伦伦中文| 99久久精品免费看国产免费软件| 亚洲欧洲日本在线| 欧美日韩小视频| 极品少妇xxxx精品少妇| 亚洲欧洲另类国产综合| 欧美精品乱码久久久久久| 九色porny丨国产精品| 国产精品私人影院| 欧美日韩一区高清| 国产馆精品极品| 亚洲午夜影视影院在线观看| 日韩视频一区二区在线观看| 国产高清一区日本| 香蕉成人啪国产精品视频综合网 | 欧美亚洲国产一卡| 国产精品99久久久久久似苏梦涵| 中文字幕一区二区三区不卡| 3751色影院一区二区三区| 国产乱子伦一区二区三区国色天香| 国产欧美日韩在线看| 欧美少妇xxx| hitomi一区二区三区精品| 热久久国产精品| 亚洲欧美偷拍另类a∨色屁股| 日韩免费观看2025年上映的电影| 成人午夜在线播放| 日韩精品欧美成人高清一区二区| 国产精品欧美精品| 日韩美女一区二区三区四区| 色先锋久久av资源部| 国产麻豆精品在线观看| 亚洲va韩国va欧美va精品 | 日一区二区三区| 日韩伦理电影网| 久久久久国产成人精品亚洲午夜| 欧美精品一级二级| 在线观看网站黄不卡| 成人动漫中文字幕| 久久97超碰色| 久久激情五月激情| 日韩黄色免费电影| 亚洲一区二区偷拍精品| 中文字幕中文字幕一区| 日本一区二区三区电影| 欧美精品一区二区在线播放| 91麻豆精品国产91久久久 | 久久精品一级爱片| 精品国产123| 欧美大片在线观看| 日韩小视频在线观看专区| 欧美日高清视频| 欧美一区二区三区色| 在线综合视频播放| 91精品国产丝袜白色高跟鞋| 欧美日免费三级在线| 欧美日韩国产影片| 日韩一区二区麻豆国产| 91精品国产乱码| 日韩精品一区二区三区中文不卡 | 亚洲国产精品一区二区www在线| 中文字幕成人网| 日本一区二区久久| 国产精品美女久久久久av爽李琼| 欧美激情资源网| 中文字幕亚洲一区二区av在线| 亚洲国产精品精华液2区45| 久久蜜臀中文字幕| 国产精品久久三| 亚洲一区在线观看网站| 亚洲成人黄色影院| 美美哒免费高清在线观看视频一区二区| 日本中文一区二区三区| 久热成人在线视频| 国产乱一区二区| 91视视频在线直接观看在线看网页在线看 | 91久久免费观看| 欧美情侣在线播放| 日韩一区二区三区免费看| 精品国产91洋老外米糕| 国产精品系列在线| 玉米视频成人免费看| 石原莉奈一区二区三区在线观看| 久久99精品久久只有精品| 国产99久久久国产精品潘金网站| 91在线免费播放| 欧美成人艳星乳罩| 中文乱码免费一区二区| 婷婷成人激情在线网| 色婷婷久久一区二区三区麻豆| 欧美在线三级电影| 久久久午夜精品理论片中文字幕| 国产欧美一区二区精品婷婷| 亚洲一区二区三区三| 国产乱人伦偷精品视频免下载| 色天天综合久久久久综合片| 日韩欧美视频在线| 亚洲乱码国产乱码精品精98午夜| 奇米在线7777在线精品| av在线综合网| 精品国产伦一区二区三区免费| 1024亚洲合集| 国产乱码一区二区三区| 欧美一卡2卡三卡4卡5免费| 亚洲视频在线观看三级| 国产伦理精品不卡|