1. I created
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
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?
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.
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
(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.
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.
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.
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,
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?
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.