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.

can decode / transcode exist at the same time ?

l_k_1
Beginner
523 Views

1.  I created

MFXVideoSession *g_mfx_session_d3d9;
MFXFrameAllocator *g_pMFXAllocator_d3d9;

use d3d_allocator.cpp  for transcode 

and not release the session,
because if recreate (like restart ) by release session 20 to 30 times the IQS will crash ? WHY?

2. then I create  

MFXVideoSession *g_mfx_session;
MFXFrameAllocator *g_pMFXAllocator;

for not transcode mode use sysmem_allocator.cpp

and then weird thing happened,  If I start transcode first , I get best speed about 170fps 1080p

but then I use system memory mode the speed low to some about 10fps(but only run system memory mode it will be 70fps 1080p)

So, Can someone explain the phenomenon, what should I do?

Thanks 

0 Kudos
8 Replies
Petter_L_Intel
Employee
523 Views

Hi,

The information you provided does not provide enough detail to be able to give much guidance. Please share more details about your specific usage and the issues you are encountering.

Regards,
Petter 

0 Kudos
l_k_1
Beginner
523 Views

hi, Petter, Sorry for the later replay。

1. the restart issue

Something like I do job queue, or ripper DVD/ BD.  There may be 10 to 20 different files with different codecs. 

So I do create session , decode for one file; then, I deal with the second file , close the last session, create new one .

I understand this is a restart, IF do this 20 times , I may get fail create new session

2.  transcode then decode slow issue

I have two video card , First time I init session only MFX_IMPL_HARDWARE2 will create success,

transcode OK, but I init another session MFX_IMPL_HARDWARE will create success, but it run very slow, 

and I attached analyzer log, Please help, thanks

0 Kudos
Petter_L_Intel
Employee
523 Views

Hi,

(1): Can you please check to make sure you're not leaking memory. Lack of available memory may result in session init to fail.

(2): Seems you may be falling back on SW implementation thus the execution is slow.

What do you intend to achieve by setting the mfxImpl value to MFX_IMPL_HARDWARE2 and MFX_IMPL_HARDWARE on the same machine? HW acceleration only works on Intel Graphics device. I recommend using MFX_IMPL_HARDWARE_ANY instead, to let Media SDK find the device adapter associated with the Intel Graphics device automatically. Also, make sure you create your DirectX device on the adapter associated with the Intel Graphics device (as illustrated in the Media SDK sample code).

Could you also please share the output log from the mediasdk_sys_analyzer tool.

Regards,
Petter 

0 Kudos
l_k_1
Beginner
523 Views

Thanks , Petter

I  will use MFX_IMPL_HARDWARE_ANY as you suggested .

I borrowed intel_media_sdk_tutorial ->simple_5_transcode - d3d (changed a little) to show my problem:

 run_simple_decode_d3d(); will fail, 

If I do a job queue, run_simple_transcode-> run_simple_decode->run_simple_decode_d3d , and repeat this

what should I do to get better perfofamce.

Thanks

0 Kudos
Petter_L_Intel
Employee
523 Views

Hi,

I see a few issues with the code. The tutorial sample you based your code on was created with simplicity in mind. Direct reuse of the tutorial  code in multi workload scenarios will require encapsulation of shared resources such as the Direct device or sharing.

Looking at the code I see that you are calling CreateHWDevice() from two of your workloads. I also notice you do not free the resources for either the DirectX device or the surfaces,  thus causes some conflicts when executing the run_simple_decode_d3d() workload.

Instead I suggest, for this serial scenario, that you just create one DirectX context and reuse it for all serial workloads.

Regards,
Petter 

0 Kudos
l_k_1
Beginner
523 Views

Yes, Peter

Instead of " just create one DirectX context and reuse it for all serial workloads " ,

I create global session and allocator for d3d, and system memory.  Something like,

MFXVideoSession *g_mfx_session;
MFXFrameAllocator *g_pMFXAllocator;
MFXVideoSession *g_mfx_session_d3d9;
MFXFrameAllocator *g_pMFXAllocator_d3d9;

And not release session before close application, 
So, there will be situation like, have a system memory session and a d3d seesion on one device at the same time, 

does these two sessions will impact each other ?  Or, should I not do this global thing? 

Thanks 

0 Kudos
Petter_L_Intel
Employee
523 Views

Hi,

The sessions do not impact each other. But make sure you share the DirectX device and allocation resources correctly. As stated in earlier post, the Media SDK tutorial code was created with simplicity in mind. For your usage you may have to encapsulate the shared resources to avoid contention.

Regards,
Petter

0 Kudos
l_k_1
Beginner
523 Views

Thanks for the info  sessions do not impact each other, 

Regards,

LK

0 Kudos
Reply