Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ directShow中出现死锁,多个视频调整大小_C++_Video_Directshow - Fatal编程技术网

C++ directShow中出现死锁,多个视频调整大小

C++ directShow中出现死锁,多个视频调整大小,c++,video,directshow,C++,Video,Directshow,我想同时播放9个视频。 2、我有一个主线程,它创建所有窗口并处理WM_*消息,还负责:a、init vmrvideorender9、MediaControl B、connect filter C、停止并释放MediaControl。等等。 3、对于每个视频,还有一个用于发送样本的渲染线程 现在,我有很多死锁,它们挂在不同的地方,CPU非常高。 死锁通常发生在调整窗口大小时。 例如:当我调用下面的函数时,有时它会占用40秒,有时它只是挂在函数内部 Void GetVMR9VideoRender()

我想同时播放9个视频。 2、我有一个主线程,它创建所有窗口并处理WM_*消息,还负责:a、init vmrvideorender9、MediaControl B、connect filter C、停止并释放MediaControl。等等。 3、对于每个视频,还有一个用于发送样本的渲染线程

现在,我有很多死锁,它们挂在不同的地方,CPU非常高。 死锁通常发生在调整窗口大小时。 例如:当我调用下面的函数时,有时它会占用40秒,有时它只是挂在函数内部

Void GetVMR9VideoRender()
{

    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC,
        IID_IBaseFilter, (LPVOID *)&pRender.p);
    if (FAILED(hr)) 
    {
        return NULL;
    }
    CComPtr <IVMRFilterConfig9> pConfig;

    hr =pRender->QueryInterface(IID_IVMRFilterConfig9, (void**)&pConfig);
    if (FAILED(hr))
        return NULL;

    pConfig->SetRenderingMode(VMRMode_Windowless);
    pConfig->SetNumberOfStreams(1);

    CComPtr<IVMRWindowlessControl9> lpDefWC;
    hr = pRender->QueryInterface(IID_IVMRWindowlessControl9, (LPVOID*)&lpDefWC.p);

    if (FAILED(hr))
    {
        return NULL;
    }

    m_lpDefWC = (IVMRWindowlessControl*)lpDefWC.p ;

    CComPtr<IVMRAspectRatioControl9> lpARC; 
    hr = pRender->QueryInterface(IID_IVMRWindowlessControl9, (LPVOID*)&lpARC.p);

    if (FAILED(hr))
    {
        return NULL;
    }
    m_lpARC = (IVMRAspectRatioControl*)lpARC.p ;

    return pRender;
}

代码片段与死锁无关。一旦它锁定死锁,您需要使用调试器进入并检查堆栈,以确定死锁发生的确切位置。您使用什么源过滤器?您是否将自己的自定义筛选器添加到filtergraph?我在filtergraph中有两个筛选器,源筛选器由我自己定义,并从CBaseFilter继承。另一个是渲染过滤器。而我打印的时间,最消耗时间的句子是SetRenderingMode函数。