⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propset.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 5 页
字号:
        }    } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {        ULONG wid;        unsigned int widn;        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");        widn = waveInGetNumDevs();        for (wid = 0; wid < widn; wid++) {            WAVEINCAPSA capsA;            MMRESULT res;            res = waveInGetDevCapsA(wid, &capsA, sizeof(capsA));            if (res == MMSYSERR_NOERROR) {                if (lstrcmpA(capsA.szPname, ppd->DeviceName) == 0) {                    ppd->DeviceId = DSOUND_capture_guids[wid];                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),                          ppd->DeviceName);                    hr = DS_OK;                    break;                }            }        }    }    if (pcbReturned)	*pcbReturned = cbPropData;    return hr;}static HRESULT WINAPI DSPROPERTY_WaveDeviceMappingW(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    HRESULT hr = DSERR_INVALIDPARAM;    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd;    TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",	  debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);    ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA) pPropData;    if (!ppd) {	WARN("invalid parameter: pPropData\n");	return DSERR_INVALIDPARAM;    }    if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {        ULONG wod;        unsigned int wodn;        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");        wodn = waveOutGetNumDevs();        for (wod = 0; wod < wodn; wod++) {            WAVEOUTCAPSW capsW;            MMRESULT res;            res = waveOutGetDevCapsW(wod, &capsW, sizeof(capsW));            if (res == MMSYSERR_NOERROR) {                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {                    ppd->DeviceId = DSOUND_renderer_guids[wod];                    hr = DS_OK;                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),                          debugstr_w(ppd->DeviceName));                    break;                }            }        }    } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {        ULONG wid;        unsigned int widn;        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");        widn = waveInGetNumDevs();        for (wid = 0; wid < widn; wid++) {            WAVEINCAPSW capsW;            MMRESULT res;            res = waveInGetDevCapsW(wid, &capsW, sizeof(capsW));            if (res == MMSYSERR_NOERROR) {                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {                    ppd->DeviceId = DSOUND_capture_guids[wid];                    hr = DS_OK;                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),                          debugstr_w(ppd->DeviceName));                    break;                }            }        }    }    if (pcbReturned)        *pcbReturned = cbPropData;    return hr;}static HRESULT WINAPI DSPROPERTY_Description1(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    HRESULT err;    GUID guid, dev_guid;    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA ppd;    TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",	debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);    ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA) pPropData;    if (!ppd) {	WARN("invalid parameter: pPropData\n");	return DSERR_INVALIDPARAM;    }    TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId));    if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) {	/* default device of type specified by ppd->DataFlow */	if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");	} else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");	} else {	    TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow);	}	FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n",	    debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);	return E_PROP_ID_UNSUPPORTED;    }    ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;    GetDeviceID(&ppd->DeviceId, &dev_guid);    if ( IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultPlayback) ||	 IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultVoicePlayback) ) {	ULONG wod;	unsigned int wodn;	TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;	wodn = waveOutGetNumDevs();	for (wod = 0; wod < wodn; wod++) {            if (IsEqualGUID( &dev_guid, &DSOUND_renderer_guids[wod] ) ) {                DSDRIVERDESC desc;                ppd->WaveDeviceId = wod;                ppd->Devnode = wod;                err = mmErr(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0));                if (err == DS_OK) {                    PIDSDRIVER drv = NULL;                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );                    err = mmErr(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));                    if (err == DS_OK && drv)                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                    else                        WARN("WineWaveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");                    break;                } else {                    WARN("WineWaveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");                    return E_PROP_ID_UNSUPPORTED;                }            }	}    } else if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) ||	        IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) {	ULONG wid;	unsigned int widn;	TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");	ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;	widn = waveInGetNumDevs();	for (wid = 0; wid < widn; wid++) {            if (IsEqualGUID( &dev_guid, &guid) ) {                DSDRIVERDESC desc;                ppd->WaveDeviceId = wid;                ppd->Devnode = wid;                err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0));                if (err == DS_OK) {                    PIDSCDRIVER drv;                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );                    err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0));                    if (err == DS_OK && drv)                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                    else                        WARN("WineWaveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");                    break;                } else {                    WARN("WineWaveInMessage(DRV_QUERYDSOUNDDESC) failed\n");                    return E_PROP_ID_UNSUPPORTED;                }            }	}    } else {	BOOL found = FALSE;	ULONG wod;	unsigned int wodn;	/* given specific device so try the render devices first */	wodn = waveOutGetNumDevs();	for (wod = 0; wod < wodn; wod++) {            if (IsEqualGUID( &ppd->DeviceId, &DSOUND_renderer_guids[wod] ) ) {                DSDRIVERDESC desc;                TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");                ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;                ppd->WaveDeviceId = wod;                ppd->Devnode = wod;                err = mmErr(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0));                if (err == DS_OK) {                    PIDSDRIVER drv = NULL;                    lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));                    lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));                    MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );                    MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );                    err = mmErr(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));                    if (err == DS_OK && drv)                        ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                    else                        WARN("WineWaveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");                    found = TRUE;                    break;                } else {                    WARN("WineWaveOutMessage(DRV_QUERYDSOUNDDESC) failed\n");                    return E_PROP_ID_UNSUPPORTED;                }            }	}	if (found == FALSE) {            ULONG wid;            unsigned int widn;            /* given specific device so try the capture devices next */            widn = waveInGetNumDevs();            for (wid = 0; wid < widn; wid++) {                if (IsEqualGUID( &ppd->DeviceId, &DSOUND_capture_guids[wid] ) ) {                    DSDRIVERDESC desc;                    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");                    ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;                    ppd->WaveDeviceId = wid;                    ppd->Devnode = wid;                    err = mmErr(WineWaveInMessage((HWAVEIN)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0));                    if (err == DS_OK) {                        PIDSDRIVER drv = NULL;                        lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA));                        lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA));                        MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) );                        MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) );                        err = mmErr(WineWaveInMessage((HWAVEIN)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0));                        if (err == DS_OK && drv)                            ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD;                        else                            WARN("WineWaveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");                        found = TRUE;                        break;                    } else {                        WARN("WineWaveInMessage(DRV_QUERYDSOUNDDESC) failed\n");                        return E_PROP_ID_UNSUPPORTED;                    }                }            }            if (found == FALSE) {                WARN("device not found\n");                return E_PROP_ID_UNSUPPORTED;            }	}    }    if (pcbReturned) {	*pcbReturned = cbPropData;	TRACE("*pcbReturned=%ld\n", *pcbReturned);    }    return S_OK;}static HRESULT WINAPI DSPROPERTY_DescriptionA(    REFGUID guidPropSet,    LPVOID pPropData,    ULONG cbPropData,    PULONG pcbReturned ){    PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA) pPropData;    HRESULT err;    GUID dev_guid;    TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",	debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);    TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId));    if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) {	/* default device of type specified by ppd->DataFlow */	if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");	} else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {	    TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");	} else {	    TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow);	}	FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n",	    debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);	return E_PROP_ID_UNSUPPORTED;    }    ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;    GetDeviceID(&ppd->DeviceId, &dev_guid);    if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) ||

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -