[Libva] How to detect the type of memory returned...

Jean-Yves Avenard jyavenard at gmail.com
Sun Jun 15 04:43:58 PDT 2014


Hello

I'm trying to speed up some common memory routines, such as frame copy
and conversion.

Like NV12->YV12 and YV12->YV12.

While this question isn't directly related to the use of libva per
say, the only place I will make use of it is in relation to the image
returned by libva. And I'm guessing that if anyone knows, it will be
someone here!

The image returned using vaDeriveImage is obvious USWC memory
(Uncacheable Speculative Write Combining)

Implementing the tricks describe there:
https://software.intel.com/en-us/articles/copying-accelerated-video-decode-frame-buffers

we do see a massive speed increase over the more simple use of memcpy.

However, those improvements aren't seen when using vaGetImage, and the
use of 4kB memory buffer and movntdqa, yields a severe performance
hit: almost 3 times as slow as using no buffer.

So that begs the question:
is there a way to detect why type of memory we are getting from libva,
or any other routine for that matter (so this method could also be
used with DXVA)

That way, depending on the type of memory we're working on, we could
select on the fly the best algorithm to use.

I don't want to assume that vaGetImage will always yield a buffer
mapped to a particular type of memory, as this is likely to change in
the future, or vary depending on the drivers used.

Is that possible?
Thank you in advance
Jean-Yves


More information about the Libva mailing list