求教(附源代码):DXShow接收电视的几个问题:设置静音,利用IBasicVideo获取图象信息和自动搜台的功能。
1.设置静音的时候失败:
void CCoolPlayerDlg::OnMute()
{
if(m_pGraph!=NULL)
{
IBasicAudio* pBA;
HRESULT hr=m_pGraph->QueryInterface(IID_IBasicAudio, (void**)&pBA);
if(FAILED(hr))
return;
hr=pBA->put_Volume(-10000);//失败,hr=E_NOTIMPL
if(FAILED(hr))
{
TCHAR szBuf[255];
AMGetErrorText(hr, szBuf, 255);//szBuf="未指定的错误 "
return;
}
pBA->Release();
}
}
2.获取图象信息失败
void CCoolPlayerDlg::OnGetimage()
{
if(m_bPlaying)
OnPlay();
IBasicVideo* pBV;
HRESULT hr=m_pGraph->QueryInterface(IID_IBasicVideo,(void**)&pBV);
if(FAILED(hr))
return;
long lSize;
hr=pBV->GetCurrentImage(&lSize,NULL);//取得字节数
if(FAILED(hr))
return;
char* pBuffer=new char[lSize];
hr=pBV->GetCurrentImage(&lSize, (long*)pBuffer);//失败,有时还死机。
if(FAILED(hr))
{
TCHAR szBuf[255];
AMGetErrorText(hr, szBuf, 255);//szBuf=“没有加载DLL” 什么意思?
return;
}
。。。。。
delete []pBuffer;
pBV->Release();
}
3.
利用IAMTVTuner::StoreAutoTune()和IAMTVTuner::AutoTuner自动搜台的功能有何不同。我试了StoreAutoTune快一些,其他好像没什么不一样啊(文档上说AutoTuner忽略Frequency Overriden,什么意思?)。
另外如何手工调整某个频道的频率了,就像WinDVR那样的(是不是要获取某个PIN)。
还有如果我把视频窗口放大则每一贞每一贞就很不连贯,且图象不清晰,WinDVR则不。需要做什么处理吗。
多谢!