HRESULT hr;    VMR9ProcAmpControlRange controlRange;
    memset(&controlRange, 0, sizeof(VMR9ProcAmpControlRange));    controlRange.dwSize = sizeof(VMR9ProcAmpControlRange);
    controlRange.dwProperty = ProcAmpControl9_Brightness;    hr = m_pVMRMixerControl->GetProcAmpControlRange(0, &controlRange);
执行到这时hr=80004005,而MSDN提供的返回值参考只有
E_INVALIDARG:         Invalid argument. Possible causes of this error include: 
                      The stream number is invalid 
                      The value of dwSize or dwProperty in the VMR9ProcAmpControl structure is invalid. E_POINTER NULL:       pointer argument. 
S_OK:                 Success. 
VFW_E_NOT_CONNECTED:  The pin is not connected. 
VFW_E_VMR_NO_PROCAMP_HW: The graphics hardware does not support ProcAmp controls.
 
这些值没有一个是80004005(16进制),而且VMR9ProcAmpControlRange 的其他方法(GetAlpha)一些参数类似(第一个参数相同)
的函数执行并没有什么问题啊,以前也有人问过这样的问题,中文的有英文的也有,可问题没有解决的到底什么原因?拜托用过
GetProcAmpControlRange给看看。

解决方案 »

  1.   

    m_pVMRMixerControl调用其它的函数是否正确呢?
      

  2.   

    hr=0x80004005."未指定的错误"
    你的调用方法等有问题
      

  3.   

    This structure is used with the Video Mixing Renderer 9 Filter (VMR-9).
    你确定满足这个条件?
      

  4.   


    hr = pGB_area0->AddFilter( m_pVMR, L"VMR9");
    这个成功了是不是就满足条件了?详细看下面的代码
    IGraphBuilder *pGB_area0;
    IBaseFilter             *m_pVMR;
    void cVideo::InitInterfaceVmr9(BSTR mFileToPlay)
    {
     // create and add VMR9
        long hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC//成功
    ,IID_IGraphBuilder,(LPVOID *)&pGB_area0);    hr = CoCreateInstance( CLSID_VideoMixingRenderer9,  NULL,CLSCTX_INPROC_SERVER,//成功
             IID_IBaseFilter, (void**)&(m_pVMR) );    hr = pGB_area0->AddFilter( m_pVMR, L"VMR9");//成功
        if( FAILED(hr))
        {
            MessageBox(NULL, TEXT("Failed to add VMR9 to the graph"), TEXT("Error"), MB_OK);
      
        }
        long hrpGB_area1 = pGB_area0->RenderFile(mFileToPlay, NULL);//成功
         
         if(FAILED(hrpGB_area1)){  exit(0);
    }
     
    Cvideo_Vmr9 CV;

    BOOL Vmr9Init = CV.QueryInterfaceConfig9(m_pVMR);}IVMRMixerControl9 *Config9;
    IBaseFilter       *m_pVMR;
    BOOL Cvideo_Vmr9::QueryInterfaceConfig9(IBaseFilter* m_pVMR1){     
          m_pVMR = m_pVMR1;
          LONG hr =m_pVMR->QueryInterface( IID_IVMRMixerControl9, (void**)&Config9);//成功
     
           if(FAILED(hr))
           {
           return FALSE;             
           }        VMR9ProcAmpControlRange controlRange;
    memset(&controlRange, 0, sizeof(VMR9ProcAmpControlRange)); controlRange.dwSize = sizeof(VMR9ProcAmpControlRange);
    controlRange.dwProperty = ProcAmpControl9_Brightness; hr = Config9->GetProcAmpControlRange(0, &controlRange);//失败...80004005(16进制)
    if (hr ==S_OK)
    {
    AfxMessageBox("ok"); }
    else
            AfxMessageBox("else");
    float fAlpha=0;
            hr = Config9->GetAlpha(0, &fAlpha);//成功 DWORD dwZOrder = 0;
    hr = Config9->GetZOrder(0, &dwZOrder);//成功
            return TRUE;
    }
      

  5.   

    我又实验了下GetProcAmpControl方法,
            VMR9ProcAmpControl controlRange;
    memset(&controlRange, 0, sizeof(VMR9ProcAmpControl)); controlRange.dwSize = sizeof(VMR9ProcAmpControl);
    controlRange.dwFlags = ProcAmpControl9_Brightness; hr = Config9->GetProcAmpControl(0, &controlRange);
    奇怪的是这个方法返回的错误是 VFW_E_VMR_NO_PROCAMP_HW:The graphics hardware does not support ProcAmp controls.
    竟然和GetProcAmpControlRange方法返回的错误类型不同,我的显卡是radeno X300,足够支持的了,疑惑中
      

  6.   

    media player 是不是用IVMRMixerControl9 来控制播放亮度的?它能行我这个为什么不行?
      

  7.   

    到底哪个牌子的显卡能够支持vrm9,这个就不知道咯
      

  8.   

    我用media player播放AVI是可以调亮度的,不知道他是不是用IVMRMixerControl9 来实现的