Использование VMR9 для рендеринга видео в NPAPI

Я использую DirectShow для рендеринга видео в плагине NPAPI. Я написал исходный фильтр, который выталкивает сэмплы YUY2 вверх по течению, я пытался использовать VMR9 в режиме без окон для рендеринга видео в HWND плагина. В любом случае, фрейм действительно доставляется, но в окне плагина ничего не отображается. Я уверен в доставке кадров, потому что, если я использую VMR9 в оконном режиме, я действительно могу увидеть видео.

Этот кусок кода предназначен для построения и рендеринга графиков.

// init VMR9 filter
IBaseFilter *pVmr = NULL;
HRESULT hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0,
CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);

hr = _base->AddFilter(pVmr, L"VMR9");
pVmr->Release();

// set VMR9 windowless
IVMRFilterConfig9* pConfig;
hr = pVmr->QueryInterface(IID_IVMRFilterConfig9, (void**)&pConfig);

if (SUCCEEDED(hr))
{
pConfig->SetRenderingMode(VMRMode_Windowless);
pConfig->SetNumberOfStreams(1);
pConfig->Release();

}

// set VMR9 clipping window
IVMRWindowlessControl9* pWc = NULL;
hr = pVmr->QueryInterface(IID_IVMRWindowlessControl9, (void**)&pWc);
if (SUCCEEDED(hr))
{
hr = pWc->SetVideoClippingWindow((_outputWindow));

RECT r;
GetWindowRect(_outputWindow, &r);
pWc->SetVideoPosition(NULL, &r);

pWc->Release();

}

// init source filter
IBaseFilter *pSource = new NetReceiverFilter();
hr = _base->AddFilter(pSource, L"Net Receiver");

_capture->RenderStream(0, 0, pSource, 0, pVmr);long evCode;
_control->Run();
_event->WaitForCompletion(10000, &evCode);

где:

  • _outputWindow — это HWND плагина
  • _base is IGraphBuilder *
  • _build is ICaptureGraphBuilder2 *
  • _control is IMediaControl *
  • _event is IMediaEvent *

1

Решение

IVMRWindowlessControl9::SetVideoPosition принимает клиентские (относительные) координаты, тогда как GetWindowRect получает ваши экранные (абсолютные) координаты, вам нужно это решить, например, с помощью GetclientRect вместо этого, или используя дополнительные ScreenToClient вызов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]