Media (Intel® Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools like Intel® oneAPI Video Processing Library and Intel® Media SDK
Announcements
The Intel Media SDK project is no longer active. For continued support and access to new features, Intel Media SDK users are encouraged to read the transition guide on upgrading from Intel® Media SDK to Intel® Video Processing Library (VPL), and to move to VPL as soon as possible.
For more information, see the VPL website.

sample_dcode ,Mutliple-Monitor ,low performance

ll_v_
Beginner
1,467 Views

Hi

     I developed a h264 decoder by referring sample_decode module from media SDK samples 2016. I am running this decoder on a windows7 machine having Intel HD Graphics 4600 card.My requirement is to display decoding results on multiple monitors.My system supports display output to multiple monitors, all displays is connectedto the output of a graphics adapter. The graphics adapter supports multiple displays.

Now what I am observing is that using multiple monitors to display worse decoding and displaying performance than Multi-screen display on a monitor.

So my question is:

       Is it using multiple monitors to display will has a bad effect on decode and display by D3D9_MEMORY?

Thanks

0 Kudos
1 Solution
NikhilKuma_R_Intel
1,467 Views

Hi,

StretchRect can be slow or fast, depending on platform (depending on the D3D9 device used). The D3D9 device is responsible for the window (display) is used. If using 2 displays with Intel gfx, we highly recommend using the "Collage" mode that is available, which makes one desktop surface that displays to both screens. This allows the OS, drivers and HW to be more efficient. In this case, everything is seen as one surface, supported by one gfx device. Otherwise, your working with 2 devices, and D3D9 is not the best at that. D3D11 architecture was created to resolve many of surface sharing issues that D3D9 architecture has.

Collage mode can be selected from Intel Graphics Control Panel -> Display -> Multiple Displays -> Collage (Enable).

This should be able to help you if all monitors are attached to Intel gfx HW.

View solution in original post

0 Kudos
6 Replies
NikhilKuma_R_Intel
1,467 Views

Hi,

May I know what do you mean by multiscreen vs multiple-monitor? Can you elaborate your test setup?

are you decoding multiple streams and rendering them on individual displays?

OR are you decoding single stream and rendering them on multiple displays?

I need to also know which graphics driver is installed in your machine. For this, can you please send the system_analyzer log? This tool can be found “<install-folder>\tools\mediasdk_sys_analyzer\”. Run the exe and attach a copy of this log. Thanks!

0 Kudos
ll_v_
Beginner
1,467 Views

Hi Nikhil

Thanks for your reply. It's my test setup on attachment.

0 Kudos
NikhilKuma_R_Intel
1,467 Views

Hi,

Thanks for the detailed attachments.

I would like to also know specifics about your rendering pattern.

In split-screen mode, are you arranging all your rendering surfaces on the monitor? In a way to watch all of them in-parallel or just rendering them irrespective of the arrangement (surface over a surface)? I am trying to know how many active rendering surfaces you are displaying at once.

In multi-monitor mode, hope you are rendering individual streams in their respective monitors (may be or may not be full-screen but definitely larger rendering surface size than split-screen case)!

Need to make sure if we are comparing two similar use-cases or different ones!

Can you also let me know what kind of performance difference are you observing between these two use-cases? Do you have any numbers?

Thanks.

0 Kudos
ll_v_
Beginner
1,467 Views

Hi,Nikhil

Sorry for my poor English!

It's my response.

Rendering pattern:

Voide memory + Direct3d9

Render Code: surface to surface

DevInfo.pD3DD9->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);

// DevInfo.pD3DD9->BeginScene();

CComPtr<IDirect3DSurface9> pBackBuffer;

hr = DevInfo.pD3DD9->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);

//  directxMemId* dxMemId = (directxMemId*)pSurface->Data.MemId;

IDirect3DSurface9* pBackBuffer1= (IDirect3DSurface9*)pSurface->Data.MemId;

hr = DevInfo.pD3DD9->StretchRect(pBackBuffer1, NULL, pBackBuffer, NULL, D3DTEXF_LINEAR);

// DevInfo.pD3DD9->EndScene();

if (FAILED(hr))

{

  return MFX_ERR_UNKNOWN;

}

if (SUCCEEDED(hr))

{

     hr = DevInfo.pD3DD9->Present(NULL, NULL, NULL, NULL);

}

pBackBuffer.Release();

 

In split-screen mode

Active rendering surfaces displaying at once: 16

watch all of them in-parallel

 

In multi-monitor mode

 Display all my rendering surfaces on three monitors.

Detail is on attachment.

 

0 Kudos
NikhilKuma_R_Intel
1,468 Views

Hi,

StretchRect can be slow or fast, depending on platform (depending on the D3D9 device used). The D3D9 device is responsible for the window (display) is used. If using 2 displays with Intel gfx, we highly recommend using the "Collage" mode that is available, which makes one desktop surface that displays to both screens. This allows the OS, drivers and HW to be more efficient. In this case, everything is seen as one surface, supported by one gfx device. Otherwise, your working with 2 devices, and D3D9 is not the best at that. D3D11 architecture was created to resolve many of surface sharing issues that D3D9 architecture has.

Collage mode can be selected from Intel Graphics Control Panel -> Display -> Multiple Displays -> Collage (Enable).

This should be able to help you if all monitors are attached to Intel gfx HW.

0 Kudos
ll_v_
Beginner
1,467 Views

Hi,Nikhil

Thanks for your reply.I will attempt to Collage and d3d11.

0 Kudos
Reply