I have a Lenovo ThinkPad Tablet 2, with an intel Atom Z2760 processor, and I have downloaded the Intel Media SDK 2013.
I am trying to use a modified version of the sample_encode.exe with more exposed parameters (i.e. ratecontrol, qp, etc.) to try and encode a 1080p YUV file (2 GB) and I am getting performance of about 20 processed frames per second. Is this an expected result or should encoding 1080p videos be faster?
Also I noticed that when I am running the encoder that it says it is doing hw acceration but it version it is running is 1.5.
Yes, that platform supports MediaSDK API 1.5. The native YUV format for hardware is "NV12". If you are reading NV12 data from a file, a significant amount of time will be spent reading the file, and if you the file is another format, there will also be an performance impact converting the file to the native format supported by hardware.
Thank you for the suggestion. I tried converting my original YUV file into NV12 format using ffmpeg with this command:
$ ffmpeg -pix_fmt yuv420p -s 352x288 -i foreman_352x288.yuv -pix_fmt nv12 foreman_nv_12.yuv
and then tried to encode it on my tablet but I am still seeing the same performance. Do you have any other ideas/suggestions?
You may also make sure you are using D3D9 surfaces in video memory. You can capture a 'tracer' log (using <install dir>\tools\msdk_tracer) to see what is really occurring, but I suspect the platform is spending a lot of time reading the large amount of (uncompressed) data from the disk.
To achieve optimal performance, I highly recommend looking at the simple tutorials here" http://software.intel.com/en-us/articles/intel-media-sdk-tutorial
I have attached the tracer log that was generated when I ran the encoder.exe on a 1920x1088 file that was converted to NV12 format via ffmpeg.
I notice that I get similar performance even switching between -u quality to -u speed (range of 30-31 seconds for 2GB 1920x1088 YUV file for both targetusage settings) while if I am on a desktop with a 3rd gen processor and run the same file i see a definate increase in performance when using the speed setting.
Can you please try using D3D video memory surfaces (add the -d3d option to command line)? The workload you are testing is loading the large yuv surfaces into system memory and then the MSDK implementation needs internally copy the surface from system to video memory for accelerated encoding. This memory copy is a relatively slow process.
I added the -d3d option to the command line and still obtain the same performance as without the -d3d option ( 20 processed frames\second)
Do you have any estimates on what the average processed frames per second on this hardware for a 1080p file should be?