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

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

?? mixerdrv.cpp

?? SMDK2440 s3c2440 WINCE 5.00 bsp 編譯通過
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
                DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineInfo: invalid source line %d\r\n"), pQuery->dwSource));
                return MIXERR_INVALLINE;
            }
            usLineID = pLine->pSources[pQuery->dwSource];
        }
        break;
    case MIXER_GETLINEINFOF_COMPONENTTYPE:
		DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineInfo COMPONENT\r\n")));
        break;

    case MIXER_GETLINEINFOF_TARGETTYPE:
		DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineInfo TARGET\r\n")));
        // valid query, but we're not going to form usLineID
        break;
    default:
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineInfo: invalid query %08x\r\n"), dwFlags & MIXER_GETLINEINFOF_QUERYMASK));
        return MMSYSERR_INVALPARAM;
    }

    switch (dwFlags & MIXER_GETLINEINFOF_QUERYMASK) {
    case MIXER_GETLINEINFOF_COMPONENTTYPE:
        // scan for line of proper type
        for (i = 0; i < nlines; i++) {
            if (g_mixerline[i].dwComponentType == pQuery->dwComponentType) {
                pFound = &g_mixerline[i];
                break;
            }
        }
#ifdef DEBUG
        if (pFound == NULL) {
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineInfo: no line of component type %08x\r\n"), pQuery->dwComponentType));
        }
#endif
        break;
    case MIXER_GETLINEINFOF_TARGETTYPE:
        // scan for target type
        for (i = 0; i < nlines; i++) {
            if (g_mixerline[i].dwTargetType == pQuery->Target.dwType) {
                pFound = &g_mixerline[i];
                break;
            }
        }
#ifdef DEBUG
        if (pFound == NULL) {
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineInfo: no line of target type %08x\r\n"), pQuery->Target.dwType));
        }
#endif
        break;

    case MIXER_GETLINEINFOF_DESTINATION:
    case MIXER_GETLINEINFOF_LINEID:
    case MIXER_GETLINEINFOF_SOURCE:
        pFound = LookupMxLine(usLineID);
        if (pFound == NULL) {
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineInfo: invalid line ID %08x\r\n"), usLineID));
            return MMSYSERR_ERROR;
        }
        break;
    default:
        // should never happen - we filter for this in the first switch()
        break;

    }

    if (pFound != NULL) {
        pQuery->cChannels = pFound->ucChannels;
        pQuery->cConnections = pFound->ucConnections;
        pQuery->cControls = pFound->ucControls;
        pQuery->dwComponentType = pFound->dwComponentType;
        pQuery->dwLineID = pFound->usLineID;
        pQuery->dwDestination = pFound->ucDstIndex;
        pQuery->dwSource = pFound->ucSrcIndex;
        pQuery->fdwLine = pFound->ucFlags;
        pQuery->Target.dwDeviceID = 0;
        pQuery->Target.dwType = pFound->dwTargetType;
        pQuery->Target.vDriverVersion = DRIVER_VERSION;
        pQuery->Target.wMid = MM_MICROSOFT;
        pQuery->Target.wPid = MM_MSFT_WSS_MIXER;
        wcscpy(pQuery->szName, pFound->szName);
        wcscpy(pQuery->szShortName, pFound->szShortName);
        wcscpy(pQuery->Target.szPname, DEVICE_NAME);
        mmRet = MMSYSERR_NOERROR;

		DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineInfo: \"%s\" %08x\r\n"), pFound->szName, pFound->ucFlags));
    
	}

    return mmRet;
}

DWORD 
wdev_MXDM_GETLINECONTROLS (PMIXERLINECONTROLS pQuery, DWORD dwFlags)
{
 UINT i;

    PMIXERCONTROL pDstControl = pQuery->pamxctrl;
    USHORT usLineID = (USHORT) pQuery->dwLineID;
    DWORD dwCount = pQuery->cControls;

    switch (dwFlags & MIXER_GETLINECONTROLSF_QUERYMASK) {
    case MIXER_GETLINECONTROLSF_ALL:
		DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineControls: ALL %x\r\n"), usLineID));
        // retrieve all controls for the line pQuery->dwLineID
        {
            PMXLINEDESC pFound = LookupMxLine(usLineID);
            if (pFound == NULL) {
                DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: invalid line ID %04x\r\n"), usLineID));
                return MIXERR_INVALLINE;
            }
            if (pFound->ucControls != dwCount) {
                DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: incorrect number of controls. Expect %d, found %d.\r\n"),dwCount,pFound->ucControls));
                return MMSYSERR_INVALPARAM;
            }
            for (i = 0; i < ncontrols && dwCount > 0; i++) {
                PMXCONTROLDESC pSrcControl = &g_controls[i];
                if (pSrcControl->usLineID == usLineID) {
                    CopyMixerControl(pDstControl, pSrcControl, i);
                    pDstControl++;
                    dwCount--;
                }
            }
        }
        break;

    case MIXER_GETLINECONTROLSF_ONEBYID: 
		DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineControls: ONEBYID %x\r\n"), pQuery->dwControlID));
        // retrieve the control specified by pQuery->dwControlID
        if (pQuery->dwControlID >= ncontrols) {
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: invalid control ID %d (max %d)\r\n"), pQuery->dwControlID, ncontrols));
            return MIXERR_INVALCONTROL;
        }
        if (dwCount < 1) {
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: control count must be nonzero\r\n")));
            return MMSYSERR_INVALPARAM;
        }
        CopyMixerControl(pDstControl, &g_controls[pQuery->dwControlID], pQuery->dwControlID);
        pQuery->dwLineID = g_controls[pQuery->dwControlID].usLineID;
        break;

    case MIXER_GETLINECONTROLSF_ONEBYTYPE: 
        // retrieve the control specified by pQuery->dwLineID and pQuery->dwControlType
        {
            UINT index;
            PMXLINEDESC pFound = LookupMxLine(usLineID);
            if (pFound == NULL) {
                DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: invalid line ID %04x\r\n"), usLineID));
                return MIXERR_INVALLINE;
            }
			DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineControls: ONEBYTYPE %x \"%s\"\r\n"), usLineID, pFound->szName));
            if (dwCount < 1) {
                DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: control count must be non zero\r\n")));
                return MMSYSERR_INVALPARAM;
            }
            index = LookupMxControl(usLineID, pQuery->dwControlType);
            if (index >= ncontrols) {
                // not to be alarmed: SndVol32 queries for LOTS of control types we don't have
                DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerLineControls: line %04x (%s) has no control of type %s (%08x)\r\n"), usLineID, pFound->szName, COMPTYPE(pQuery->dwControlType), pQuery->dwControlType));
                return MMSYSERR_INVALPARAM;
            }
            
            CopyMixerControl(pDstControl, &g_controls[index], index);
            return MMSYSERR_NOERROR;
            // if we fall out of the search loop, we return failure
        }
        break;
    default:
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerLineControls: invalid query %08x\r\n"), dwFlags & MIXER_GETLINECONTROLSF_QUERYMASK));
        break;

    }
    return MMSYSERR_NOERROR;
}

DWORD 
wdev_MXDM_GETCONTROLDETAILS (PMIXERCONTROLDETAILS pQuery, DWORD dwFlags)
{
    PMXCONTROLDESC pSrcControlDesc;
    PMXLINEDESC pLine;
    ULONG ulControlValue = 0;

    // API guarantees that pQuery points to accessible, aligned, properly sized MIXERCONTROLDETAILS structure
    DEBUGMSG(ZONE_HWMIXER, (TEXT("GetMixerControlDetails(%d)\r\n"), pQuery->dwControlID));

    if (pQuery->dwControlID >= ncontrols) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerControlDetails: invalid control %d (max %d)\r\n"), pQuery->dwControlID, ncontrols));
        return MIXERR_INVALCONTROL;
    }

    pSrcControlDesc = &g_controls[pQuery->dwControlID];
    pLine = LookupMxLine(pSrcControlDesc->usLineID);
    if (pLine == NULL) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerControlDetails: inconsistent internal mixer line table\r\n")));
        return MMSYSERR_ERROR;
    }
 

    switch (dwFlags & MIXER_GETCONTROLDETAILSF_QUERYMASK) {
    case MIXER_GETCONTROLDETAILSF_VALUE:
        switch(pSrcControlDesc->dwType) {
            case MIXERCONTROL_CONTROLTYPE_VOLUME:
                {
                    switch (GET_MXLINE_DST(pSrcControlDesc->usLineID)) {
                        case LINE_OUT:
                            ulControlValue = g_pHWContext->GetOutputGain();
                            break;
                        case PCM_IN:
                            ulControlValue = g_pHWContext->GetInputGain();
                            break;
                        default:
                            DEBUGCHK(0);
                            break;
                    }


                    MIXERCONTROLDETAILS_UNSIGNED * pValue = (MIXERCONTROLDETAILS_UNSIGNED * ) pQuery->paDetails;
					ULONG ulVolR, ulVolL;
                    ulVolR = ulControlValue & 0xffff;
                    if (pLine->ucChannels == 2) {
                        ulVolL = (ulControlValue >> 16) & 0xffff;
                    }
					else {
						ulVolL = ulVolR;
					}

					if (pQuery->cChannels == 1) {
						pValue[0].dwValue = (ulVolR + ulVolL)/2;
					}
					else {
	                    pValue[0].dwValue = ulVolL;
	                    pValue[1].dwValue = ulVolR;
					}
                }
                break;
            case MIXERCONTROL_CONTROLTYPE_ONOFF:
            case MIXERCONTROL_CONTROLTYPE_MUTE:
                {
                    switch (GET_MXLINE_DST(pSrcControlDesc->usLineID)) {
                        case LINE_OUT:
                            ulControlValue = g_pHWContext->GetOutputMute();
                            break;
                        case PCM_IN:
                            ulControlValue = g_pHWContext->GetInputMute();
                            break;
                        default:
                            DEBUGCHK(0);
                            break;
                    }

                    MIXERCONTROLDETAILS_BOOLEAN * pValue = (MIXERCONTROLDETAILS_BOOLEAN *) pQuery->paDetails;
                    pValue[0].fValue = ulControlValue;
                }
                break;
            default:
                DEBUGCHK(0);
                break;
        }
        break;
    default:
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerControlDetails: invalid query %08x\r\n"), dwFlags & MIXER_GETCONTROLDETAILSF_QUERYMASK));
        break;
    }
    return MMSYSERR_NOERROR;
}

DWORD 
wdev_MXDM_SETCONTROLDETAILS (PMIXERCONTROLDETAILS pDetail, DWORD dwFlags)
{
    PMXCONTROLDESC pSrcControlDesc;
    PMXLINEDESC pLine;
    MIXERCONTROLDETAILS_UNSIGNED * pValue = (MIXERCONTROLDETAILS_UNSIGNED * ) pDetail->paDetails;
    DWORD dwSetting;

    // API guarantees that pDetail points to accessible, aligned, properly siezd MIXERCONTROLDETAILS structure
    DEBUGMSG(ZONE_HWMIXER, (TEXT("SetMixerControlDetails(%d)\r\n"), pDetail->dwControlID));

    if (pDetail->dwControlID >= ncontrols) {
        DEBUGMSG(ZONE_ERROR, (TEXT("SetMixerControlDetails: invalid control %d (max %d)\r\n"), pDetail->dwControlID, ncontrols));
        return MIXERR_INVALCONTROL;
    }

    pSrcControlDesc = &g_controls[pDetail->dwControlID];
    pLine = LookupMxLine(pSrcControlDesc->usLineID);
    if (pLine == NULL) {
        DEBUGMSG(ZONE_ERROR, (TEXT("SetMixerControlDetails: inconsistent internal mixer line table\r\n")));
        return MMSYSERR_ERROR;
    }

    switch(pSrcControlDesc->dwType) {
    case MIXERCONTROL_CONTROLTYPE_VOLUME:
        {
			DWORD dwSettingL, dwSettingR;
			dwSettingL = pValue[0].dwValue & 0xffff;
			// setting might be mono or stereo. For mono, apply same volume to both channels
			if (pDetail->cChannels == 2) {
                dwSettingR = pValue[1].dwValue & 0xffff;
			}
			else {
				dwSettingR = dwSettingL; 
			}

            if (pLine->ucChannels == 1) {
				dwSetting = (dwSettingL + dwSettingR) / 2;
			}
			else {
                dwSetting = (dwSettingL << 16) | dwSettingR;
			}
            // now apply the setting to the hardware
            switch (GET_MXLINE_DST(pSrcControlDesc->usLineID)) {
            case LINE_OUT:
                g_pHWContext->SetOutputGain(dwSetting);
                break;
            case PCM_IN:
                g_pHWContext->SetInputGain(dwSetting);
                break;
            default:
                DEBUGCHK(0);
                break;

            }
			DEBUGMSG(ZONE_VOLUME, (TEXT("wdev_MXDM_SETCONTROLDETAILS: %08x %08x %08x\r\n"), dwSettingL, dwSettingR, dwSetting));
        }
        break;
    case MIXERCONTROL_CONTROLTYPE_ONOFF:
    case MIXERCONTROL_CONTROLTYPE_MUTE:
        {
            // now apply the setting to the hardware
            switch (GET_MXLINE_DST(pSrcControlDesc->usLineID)) {
            case LINE_OUT:
                g_pHWContext->SetOutputMute(pValue[0].dwValue);
                break;
            case PCM_IN:
                g_pHWContext->SetInputMute(pValue[0].dwValue);
                break;
            default:
                DEBUGCHK(0);
                break;

            }
        }
        break;
    default:
        DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerControlDetails: unexpected control type %08x\r\n"), pSrcControlDesc->dwType));
        ASSERT(0);
        return MMSYSERR_ERROR;
    }


    PerformMixerCallbacks (MM_MIXM_CONTROL_CHANGE, GET_MXCONTROL_ID(pSrcControlDesc));

    return MMSYSERR_NOERROR;
}

BOOL HandleMixerMessage(PMMDRV_MESSAGE_PARAMS pParams, DWORD *pdwResult)
{
    MMRESULT dwRet;

    switch (pParams->uMsg) {
    case MXDM_GETNUMDEVS:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_GETNUMDEVS\r\n")));
        dwRet = 1;
        break;

    case MXDM_GETDEVCAPS:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_GETDEVCAPS\r\n")));
        dwRet = wdev_MXDM_GETDEVCAPS((PMIXERCAPS) pParams->dwParam1, pParams->dwParam2);
        break;

    case MXDM_OPEN:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_OPEN\r\n")));
        dwRet = wdev_MXDM_OPEN((PDWORD) pParams->dwUser, (PMIXEROPENDESC) pParams->dwParam1, pParams->dwParam2);
        break;

    case MXDM_CLOSE:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_CLOSE\r\n")));
        dwRet = wdev_MXDM_CLOSE(pParams->dwUser);
        break;

    case MXDM_GETLINEINFO:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_GETLINEINFO\r\n")));
        dwRet = wdev_MXDM_GETLINEINFO((PMIXERLINE) pParams->dwParam1, pParams->dwParam2); 
        break;

    case MXDM_GETLINECONTROLS:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_GETLINECONTROLS\r\n")));
        dwRet = wdev_MXDM_GETLINECONTROLS((PMIXERLINECONTROLS) pParams->dwParam1, pParams->dwParam2);
        break;

    case MXDM_GETCONTROLDETAILS:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_GETCONTROLDETAILS\r\n")));
        dwRet = wdev_MXDM_GETCONTROLDETAILS((PMIXERCONTROLDETAILS) pParams->dwParam1, pParams->dwParam2);
        break;

    case MXDM_SETCONTROLDETAILS:
        PRINTMSG(ZONE_WODM, (TEXT("MXDM_SETCONTROLDETAILS\r\n")));
        dwRet = wdev_MXDM_SETCONTROLDETAILS((PMIXERCONTROLDETAILS) pParams->dwParam1, pParams->dwParam2);
        break;

    default:
        ERRMSG("Unsupported mixer message");
        dwRet = MMSYSERR_NOTSUPPORTED;
        break;
    }      // switch (pParams->uMsg)


    *pdwResult = dwRet;
    return TRUE;
}


struct _global_volume
{
    ULONG   dwMasterVolume;
    BOOL    fMasterMute;
    ULONG   dwMicVolume;
    BOOL    fMicMute;
} g_VolumeSettings;

MMRESULT GetMixerValue(DWORD dwControl, PDWORD pdwSetting)
{

    switch (dwControl) {
        case WPDMX_MASTER_VOL:
            *pdwSetting = g_VolumeSettings.dwMasterVolume;
            break;
        case WPDMX_MASTER_MUTE:
            *pdwSetting = g_VolumeSettings.fMasterMute;
            break;
        case WPDMX_MIC_VOL:
            *pdwSetting = g_VolumeSettings.dwMicVolume;
            break;
        case WPDMX_MIC_MUTE:
            *pdwSetting = g_VolumeSettings.fMicMute;
            break;
        default:
            DEBUGMSG(ZONE_ERROR, (TEXT("GetMixerValue: unrecognized control")));
            return MMSYSERR_NOTSUPPORTED;
    }

    return MMSYSERR_NOERROR;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影免费一区| 国产精品免费网站在线观看| 337p亚洲精品色噜噜噜| 欧美一级淫片007| 欧美国产禁国产网站cc| 亚洲人成7777| 免费成人av资源网| 成人一二三区视频| 欧美日韩久久一区二区| 亚洲精品一区二区在线观看| 中文字幕一区二区视频| 视频一区二区国产| 成人免费福利片| 欧美精品在线一区二区| 国产精品私人自拍| 亚洲成人av一区二区三区| 国产在线精品不卡| 在线观看成人免费视频| 欧美成人欧美edvon| 亚洲精品中文在线| 韩国视频一区二区| 91福利精品第一导航| 久久色中文字幕| 亚洲一区二区av在线| 国产成人8x视频一区二区| 欧美伦理影视网| 国产精品色在线| 日本在线不卡一区| 91欧美一区二区| 久久精品亚洲麻豆av一区二区| 一区二区在线观看免费| 国产乱人伦偷精品视频免下载| 在线看日本不卡| 久久网这里都是精品| 午夜久久久影院| 99re成人精品视频| 久久综合九色综合欧美就去吻| 午夜亚洲国产au精品一区二区| 大美女一区二区三区| 91精品久久久久久久91蜜桃| 一区二区在线电影| 成人夜色视频网站在线观看| 精品区一区二区| 偷拍日韩校园综合在线| 91在线你懂得| 国产精品久久久久久久浪潮网站| 看电视剧不卡顿的网站| 欧美日韩一区二区三区视频| 中文字幕日韩欧美一区二区三区| 狠狠色综合日日| 日韩你懂的在线播放| 亚洲成人自拍网| 在线区一区二视频| 国产精品全国免费观看高清| 国产美女久久久久| 欧美高清视频一二三区| 香蕉久久夜色精品国产使用方法 | 亚洲欧洲精品一区二区三区| 精品一区二区三区的国产在线播放| 在线观看91精品国产麻豆| 亚洲一二三四在线观看| 色综合中文字幕| 亚洲欧美另类综合偷拍| 99久久精品免费观看| 国产精品不卡一区二区三区| 大尺度一区二区| 久久久av毛片精品| 国模无码大尺度一区二区三区| 日韩一区二区电影在线| 免费在线观看日韩欧美| 欧美一级片免费看| 日韩制服丝袜av| 69堂成人精品免费视频| 婷婷开心激情综合| 在线电影欧美成精品| 日本强好片久久久久久aaa| 欧美高清一级片在线| 奇米精品一区二区三区在线观看| 欧美乱妇15p| 日韩高清国产一区在线| 欧美一区二区三区在| 日本亚洲视频在线| 欧美成va人片在线观看| 国产一区二区导航在线播放| 国产亚洲综合在线| 成人精品亚洲人成在线| 亚洲欧美日韩电影| 欧日韩精品视频| 婷婷一区二区三区| 日韩一级片在线观看| 国产在线一区二区| 欧美国产综合色视频| 99精品黄色片免费大全| 亚洲在线中文字幕| 欧美日韩成人综合天天影院| 久久精品免费看| 国产色产综合产在线视频| av一区二区不卡| 亚洲一区二区成人在线观看| 日韩一级精品视频在线观看| 国产精品白丝jk黑袜喷水| 国产精品人妖ts系列视频| 色综合久久综合| 人禽交欧美网站| 国产偷国产偷精品高清尤物| 一本久道久久综合中文字幕| 午夜精品福利在线| 精品国产一区二区三区久久久蜜月| 国产一区欧美一区| 亚洲人精品午夜| 欧美日韩国产一二三| 国产剧情一区二区| 亚洲视频网在线直播| 538在线一区二区精品国产| 国产精品中文字幕一区二区三区| 亚洲免费三区一区二区| 日韩精品中文字幕在线不卡尤物| 国产91精品露脸国语对白| 亚洲国产中文字幕| 久久麻豆一区二区| 色94色欧美sute亚洲13| 久久成人免费网| 亚洲天堂福利av| 精品欧美黑人一区二区三区| 色综合久久88色综合天天免费| 免费精品视频在线| 国产精品久久久久影院| 欧美一区二区三区人| 99久久精品国产一区| 蜜桃在线一区二区三区| 亚洲日本在线观看| 精品福利二区三区| 欧美亚洲国产bt| 国产精品小仙女| 五月婷婷综合激情| 国产精品网站在线观看| 欧美一区二区大片| 91麻豆国产精品久久| 国产综合久久久久久久久久久久 | 69av一区二区三区| 成人一道本在线| 免费欧美日韩国产三级电影| 一区二区三区中文字幕精品精品 | 七七婷婷婷婷精品国产| 亚洲欧美日韩国产综合在线| 亚洲精品一区二区三区福利| 欧美日韩国产美| 91天堂素人约啪| 国产高清在线精品| 久久精品国产99国产| 亚洲电影你懂得| 17c精品麻豆一区二区免费| 欧美xingq一区二区| 精品婷婷伊人一区三区三| 成人免费三级在线| 激情综合色综合久久综合| 天天综合网 天天综合色| 综合中文字幕亚洲| 国产欧美日韩综合| 精品久久久久久久久久久久久久久久久 | av电影在线观看一区| 精品一区二区成人精品| 日韩福利电影在线观看| 亚洲高清视频中文字幕| 亚洲欧美中日韩| 国产精品美女一区二区在线观看| www国产精品av| 日韩你懂的在线播放| 91精品国产综合久久精品麻豆| 在线精品视频一区二区三四| 色偷偷一区二区三区| av电影天堂一区二区在线观看| 国产精品亚洲视频| 国产乱一区二区| 国产乱淫av一区二区三区| 国产在线视频一区二区| 九九国产精品视频| 久久国产人妖系列| 久久激情综合网| 精品一区中文字幕| 国内久久婷婷综合| 国产一区激情在线| 国产一区二区在线观看免费| 国产一区二区三区四区在线观看| 久草精品在线观看| 国产一区二区三区日韩| 国产精品影视在线| 粉嫩av一区二区三区粉嫩 | 国产精品女主播在线观看| 中文文精品字幕一区二区| 国产欧美中文在线| 国产精品天美传媒| 亚洲欧洲日韩av| 一区二区三区欧美久久| 一区二区三区欧美在线观看| 一区av在线播放| 日韩国产高清在线| 狠狠色丁香婷婷综合| 国产成人免费高清| 99视频一区二区|