9 Replies Latest reply on Dec 30, 2015 4:58 AM by NikosD

    Using NV12 video output during video decoding, drops performance a lot with Intel's GPUs



      I've recently found out a big performance drop when using NV12 video output with EVR/EVR-CP renderers and Intel's GPUs.


      I have done some performance tests using DXVA Checker v3.9.0 on a Win 10 x64 system using Core i7-4790 and Intel's iGPU HD4600 with latest drivers v.4279.

      As video decoder, I used LAV filters 0.66.31, which is the default video decoder for many Video Players, like MPC-HC.


      The test clip is here, a small video sample from YouTube:



      It's a 4K60fps VP9 clip.




      Decode - Renderless mode (No renderer)


      Video output  min fps/ average fps/ max fps

      NV12/YV12 83 fps/112 fps/175 fps CPU usage 72%


      Both NV12 and YV12 have the same performance.



      Playback - Vanilla EVR (scale to 1280 x 720)


      Video output  min fps/ average fps/ max fps

      YV12 79 fps/100 fps/139 fps CPU usage 73%

      NV12 65 fps/74 fps/86 fps CPU usage 52%


      The numbers represent min fps/average fps/max fps of the whole decoding process.


      It is clear that using a renderless mode, in pure decoding, NV12 and YV12 have exactly the same performance.


      BUT during real playback, using EVR renderer, the performance drop of NV12 is more than clear compared to YV12 along with the CPU usage.


      There is a bottleneck somewhere in the driver that prevents GPU and CPU to reach maximum speed.


      And because NV12 is the default, quality video output format for many video decoders like LAV filters and the preferred output even for HW acceleration of Microsoft's DXVA, I think is urgent to do something about it and increase the performance of that video output.


      Waiting for your feedback.