我用directshow通过请求IAMAudioInputMixer接口,控制麦克风音量,为啥函数put_MixLevel()老是返回E_NOTIMPL?哪位大哥知道,请教一下
附代码:
IPin *inPin;
IAMAudioInputMixer *AudioMixer;
IBaseFilter *pCap;//捕捉filter hr=GetInputPin(&inPin,"麦克风音量");//请求输入pin接口
if(SUCCEEDED(hr))
{
hr=inPin->QueryInterface(IID_IAMAudioInputMixer,(void **)&AudioMixer);
if(SUCCEEDED(hr))
AudioMixer->put_Enable(1);
}
hr=AudioMixer->put_MixLevel(0.5);//(出问题处)HRESULT CAudioCardSet::GetInputPin(IPin **ppPin,const char *str)
{
CComPtr< IEnumPins > pEnum;
*ppPin = NULL;
if (!pCap)
return E_POINTER; HRESULT hr = pCap->EnumPins(&pEnum);
if(FAILED(hr))
return hr;
ULONG ulFound;
int num;
char *achname;
IPin *pPin;
PIN_INFO pininfo;
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
{
pPin->QueryPinInfo(&pininfo);
num=WideCharToMultiByte(CP_OEMCP,NULL,pininfo.achName,-1,NULL,0,NULL,FALSE);
achname= new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,pininfo.achName,-1,achname,num,NULL,FALSE);
if(!strcmp(achname,str)&&pininfo.dir==PINDIR_INPUT)
{
*ppPin = pPin; // Return the pin's interface
hr = S_OK; // Found requested pin, so clear error
break;
} pPin->Release();
} return hr;
}
附代码:
IPin *inPin;
IAMAudioInputMixer *AudioMixer;
IBaseFilter *pCap;//捕捉filter hr=GetInputPin(&inPin,"麦克风音量");//请求输入pin接口
if(SUCCEEDED(hr))
{
hr=inPin->QueryInterface(IID_IAMAudioInputMixer,(void **)&AudioMixer);
if(SUCCEEDED(hr))
AudioMixer->put_Enable(1);
}
hr=AudioMixer->put_MixLevel(0.5);//(出问题处)HRESULT CAudioCardSet::GetInputPin(IPin **ppPin,const char *str)
{
CComPtr< IEnumPins > pEnum;
*ppPin = NULL;
if (!pCap)
return E_POINTER; HRESULT hr = pCap->EnumPins(&pEnum);
if(FAILED(hr))
return hr;
ULONG ulFound;
int num;
char *achname;
IPin *pPin;
PIN_INFO pininfo;
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
{
pPin->QueryPinInfo(&pininfo);
num=WideCharToMultiByte(CP_OEMCP,NULL,pininfo.achName,-1,NULL,0,NULL,FALSE);
achname= new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,pininfo.achName,-1,achname,num,NULL,FALSE);
if(!strcmp(achname,str)&&pininfo.dir==PINDIR_INPUT)
{
*ppPin = pPin; // Return the pin's interface
hr = S_OK; // Found requested pin, so clear error
break;
} pPin->Release();
} return hr;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货