Page 1 of 1

DirectX - Support for hardware acceleration

Posted: 02 Jun 2005 14:52
by Momotte
Hi guys,

I saw some threads (either requests or questions) about eventual support for DXVA. Is it going somewhere? I mean is there anyone working on that?

My main problem is that playing HDTV content(MPEG2, MPEG4) using VLC now is almost impossible except if one have an incredibly fast system. I was just wondering if anyone experience the same as me.

Thanks,

Posted: 02 Jun 2005 18:07
by The DJ
No one is working on it. It is registered as a requested feature in our tracking system though. https://trac.videolan.org/vlc/ticket/151

There is no timetable for it, it will probably be implemented by a user like you who really wants it and is tired waiting any longer :D.

Posted: 03 Jun 2005 15:21
by Momotte
There is an easy way to do it but I am not aware of the internal structure of vlc. Basically it would consist of this:

- New output module called DirectX graph:
-> Create a IFilterGraph instance
-> Create a universal push source instance
-> Set the media types of the output pins to the desired format depending on what is streamed from vlc
-> Render the push source output pins

- Required:
-> New output module DLL
-> A way to get VLC's video window handle to be able to render it within its main frame

This would allow users to use all system's installed codecs(where most of them support DXVA). On the other hand, this module would probably not be cross platform and work only for Win32 :(

I might give it a try but it could take me a while to understand the plugin architecture...

Hardware acceleration Support options

Posted: 27 Dec 2008 15:32
by patch
From viewtopic.php?f=2&t=42328&start=15#p152183
My graphics card has on board video decoding, does VideoLan support, or will it support this?
This post suggests it doesn't and isn't likely to in the foreseeable future viewtopic.php?f=14&t=44499&p=140451&hilit=Avivo#p140451

If so is not this increasingly going to be a problem for users with ATI® Avivo™ and NVIDIA® PureVideo™ and Intel Clear Video technology cards
From viewtopic.php?f=2&t=42328&start=15#p152304
Give us the specs to decode with the graphic cards, and we might do it.
SInce AVIVO® and other CRAP® (PureVideo®) are not open source and don't provide any open access to it, it is a NO GO.
Not sure how they have done it but Media Player classic supports EVR renderer and DirectX Video Acceleration (DXVA) with H.264 and VC-1 codecs resulting in video card hardware acceleration of H.264 and VC-1 decoding on ATI Radeon HD series, H.264 on nVidia series 8(9)xxx http://mpc-hc.sourceforge.net/DXVASupport.html This makes a dramatic difference to my ability to play higher definition movies on older hardware (Intel Pentium D 930 with ATI 4650 512M, and a Celeron 2.6GHz with Radeon HD 2600 XT both running windows XP)

It would be wonderful if similar functionality could be added to VLC

Not sure how similar it is to the Linix nvidia binary interface, but perhaps interfacing to both would preserve cross platform functionality http://www.phoronix.com/scan.php?page=a ... _180_vdpau

Re: DirectX - Support for hardware acceleration

Posted: 28 Dec 2008 06:54
by heffeque
Well... actually some of the support could be done via CUDA, ¿no?

I know that OpenCL support will be relatively easy to implement (it'll be in Mac OS X 10.6 Snow Leopard), but I'm not sure that CUDA is that easy.

Could anybody be so kind to enlighten us with some info about it?

Hardware acceleration Support options

Posted: 29 Dec 2008 15:30
by patch
Well... actually some of the support could be done via CUDA, ¿no?
Sounds like it is more aimed at non graphical use of graphics processors to me, so it may not be the ideal starting point http://en.wikipedia.org/wiki/CUDA
I know that OpenCL support will be relatively easy to implement (it'll be in Mac OS X 10.6 Snow Leopard), but I'm not sure that CUDA is that easy.
Sounds more general purpose, but the reference to DirectX 11 makes me suspect limited support for existing operating systems and graphics cards http://en.wikipedia.org/wiki/OpenCL

Re: DirectX - Support for hardware acceleration

Posted: 29 Dec 2008 15:42
by heffeque
Well yes... they're both for general purpose code, but taking into consideration that there's a lot of CPU usage on x264 at 1080p (for example) then it would be nice to be able to offload some of that to the GPU, even if it's non video specific stuff.

Re: DirectX - Support for hardware acceleration

Posted: 30 Dec 2008 17:50
by Jean-Baptiste Kempf
DxVA is very DirectShow oriented and VLC isn't. But any good idea is welcomed.

Re: DirectX - Support for hardware acceleration

Posted: 01 Jan 2009 17:28
by heffeque

Hardware acceleration Support options

Posted: 05 Jan 2009 13:35
by patch
DxVA is very DirectShow oriented and VLC isn't. But any good idea is welcomed.
Thank you for the insight, I appreciate knowing where VLC is and is not heading.

However the knowledge also saddens me.
VLC under XP on my old hardware results in 100% cpu usage and choppy HD video
Media Player classic with DXVA on the same hardware results in <20% cpu usage and smooth video.

As such I am forced to run Media Player classic for my high def movies.
Not my first choice, but hay life is full of compromises.

From viewtopic.php?f=2&t=42328&start=15#p153716
I found that VLC 0.8.6* does achieve hardware acceleration of x264-encoded streams on my Nvidia GeForce Go7300, in WindowsXP SP2.

Nvidia users will recall that series 6- and 7- GPUs provide partial H.264 acceleration, while series 8- and over provide acceleration of all H.264 functions (notice I explicitly avoid the highly confusing "PureVideo" term).

Well, I encode my SD videos with x264 and VLC plays it back with hardware acceleration.
How do I know ? I get near-zero CPU usage, as opposed to 10-30% CPU usage when not accelerated.
My statement needs some qualification however :
  • 1. VLC accelerates playback if the "Output Module" is explicitly set to "DirectX", not to "Default"
    2. I have found no acceleration if it is set to "Direct3D" (or any other module)
    3. hardware acceleration is sporadic :
    • 3.1 boot my laptom, play a video with VLC -- GPU-acceleration is ON (near-zero CPU)
      3.2 play it with another player (MPC-HC for instance) -- no GPU acceleration (CPU > 20%)
      3.3 close other player and play again with VLC -- no GPU acceleration (CPU > 20%)
      3.4 reboot or go to standby & back -- -- GPU-acceleration is ON
I have only tried this with SD (720x576/PAL) content because that's all I have.
I would like the community to confirm my findings :
  • 1. with 720p content or higher
    2. with NVidia 8-series CPUs
always using WinXP SP2 of course.
My guess is that when VLC is forced to use DirectX, then it accesses the DXVA function (v1 under XP does provide hardware acceleration).

To conclude, I think the PureVideo label (if not the technology) has contributed so much fudge to this topic that people have been thrown off-track. I've been trying to achieve x264 hardware acceleration ever since I got my laptop last year, have tested dozens of players, and VLC would systematically yield the best playback results.
I figure this is why.

Any & all comments are welcome.
enkidu
Has anyone got this working with 0.9.8a? Doesn't work for me.

Re: DirectX - Support for hardware acceleration

Posted: 05 Jan 2009 13:40
by Jean-Baptiste Kempf
Well, DxVA is not impossible in VLC, but quite difficult, that's it.

Hardware acceleration Support options

Posted: 05 Jan 2009 14:59
by patch
Well, DxVA is not impossible in VLC, but quite difficult, that's it.
NP
I really appreciate the effort you put into VLC and believe it is an excellent product.
I'm just trying to see how best I can use it.
Thanks for the reference
Makes me wonder if openGL & openCL might not be a better way for VLC to go given it's cross platform and open development focus. Apparently supporting nvidia, ATIcards and windows, linix, Apple's Snow Leopard.

Any one worked out if openGL or openCL has support for hardware video decoding?
I have never worked with openCL but openmax sounds as it knows about H264, MJPEG, WMV, MPEG4, H263, MPEG2 http://www.khronos.org/files/openmax_il_spec_1_1_2.pdf however I don't know if the support would include hardware acceleration on common graphics cards.

BTW
Is it possible for a mod to delete "DirectX" from the title of this thread. Maybe change it to "Hardware acceleration support" or something similar as a discussion in this forum should not be limited to DirectX / windows

Hardware acceleration Support options

Posted: 14 Jan 2009 14:21
by patch
Sad when you have to try & answer your own questions but here goes
Any one worked out if openGL or openCL has support for hardware video decoding?... openmax sounds as it knows about H264, ... don't know if the support would include hardware acceleration on common graphics cards.
Reading through http://www.khronos.org/files/openmax_il_spec_1_1_2.pdf I suspect the answers depends on what drivers nvidia & ATI choose to write.
Unfortunately from what I can see they have not yet written drivers to utilise their hardware via openMax http://felipec.wordpress.com/2008/12/12 ... agleboard/ Maybe that will change after openCL support is added for nvidia & ATI cards.

VLC doesn't yet use openmax http://www.celinux.org/elc08_presentati ... penmax.pdf but clearly supports openGL

Looks like it is awhile off yet :(

Hardware acceleration Support options

Posted: 31 Jan 2009 08:11
by patch
DxVA is very DirectShow oriented and VLC isn't.
True but AMD's X-Video Bitstream Acceleration (XvBA) can apparently be used with the binary ATI Linux driver and is very similar (if not identical) to DXVA. http://www.phoronix.com/scan.php?page=a ... xvba&num=1

This may make support of DxVA / XvBA more viable as it then covers 2/3 of the platforms VLC runs on.
Although openMax support by VLC & AMD would be better but this would involve 2 groups both implementing significant code.

By the way
From viewtopic.php?f=2&t=42328&start=15#p152304
Give us the specs to decode with the graphic cards, and we might do it.
I posted in the AMD Developers forum awhile ago & got no response from AMD http://forums.amd.com/forum/messageview ... &forumid=9

Re: DirectX - Support for hardware acceleration

Posted: 31 Jan 2009 21:34
by Rémi Denis-Courmont
OpenMAX is currently embedded-centric, and it is not clear that it would spread to desktops. And it looks rather nasty if we end up having to support both OpenCL and OpenMAX standards from the same consortium to do the exact same thing :(

If we look at the details, OpenMAX DL is targetted at codecs implementors. VLC does not implement any non-trivial codec internally, it defers to libraries such as FFMPEG's libavcodec. The only part of DL that VLC could use directly is chroma conversion... but that would be silly as we already accelerate those via Direct3D or XVideo. On the other hand, VLC does have XvMC support(not sure if it still works), so there might be a way... ?

OpenMAX IL could be used, as a replacement for our traditional codecs, especially FFMPEG's libavcodec. But there's the typical problem that VLC insists on being the interface between the codec and the output (this is required for streaming and transcoding to work). I am not sure if we'd get much out of IL if used that way.

OpenMAX AL is not interesting. VLC, or rather LibVLC, could provide an implementation of OpenMAX AL, much like Phonon-VLC. AL is too high-level for us to use it.


Anyway, whether it is DirectX VA, VPDAU, VAAPI, XvBA, OpenCL or OpenMAX, the main constraint is developper time and motivation. Or salary, but it seems like all professionnal OSS contribution are targetted at GStreamer or as proof-of-concept for MPlayer. As usual patch welcome.

Hardware acceleration Support options

Posted: 01 Feb 2009 01:41
by patch
OpenMAX is currently embedded-centric, and it is not clear that it would spread to desktops. And it looks rather nasty if we end up having to support both OpenCL and OpenMAX standards from the same consortium to do the exact same thing :(
...
VLC does not implement any non-trivial codec internally, it defers to libraries such as FFMPEG's libavcodec.
...
Anyway, whether it is DirectX VA, VPDAU, VAAPI, XvBA, OpenCL or OpenMAX, the main constraint is developper time and motivation.
Thank you for your detailed response, I had not appreciated that openMax was targeted at the embedded market.
If I understand correctly, decoder performance changes +/- Graphics card hardware acceleration are most likely to result from ffmpeg modifications.

I had a look there and clearly there is lots of activity related to performance improvement by interfacing to graphics card hardware acceleration (unfortunately there appears to be a bias to unix interfaces without corresponding support for equivalent windows interfaces).
I couldn't find anything related to openCL, which surprised me as openGL + openCL should be an excellent combination supporting multiple operating systems, graphics card manufacturers, and flexible processing. Perhaps I need to wait till AMD & NIVIDA release driver support in 1H 2009
AMD http://forums.amd.com/devforum/messagev ... erthread=y
NIVIDA http://www.nvidia.com/object/io_1228825271885.html
OpenGL 3.0 overview http://www.khronos.org/developers/libra ... erview.pdf
OpenCL 1.0 overview http://www.khronos.org/developers/libra ... erview.pdf

BTW, some references I found in FFMPEG's developers forum
VDPAU support
(VDPAU is the Linux equivalent of the Microsoft's DirectX Video Acceleration (DxVA) API for Windows)
http://thread.gmane.org/gmane.comp.vide ... ocus=79768

VA API support to FFmpeg to support XvBA and VDPAU backends
(Video Acceleration API (VAAPI) is meant to some day replace XvMC, which is the UNIX equivalent of DxVA API)
(XvBA for ATI Radeon GPU is the Linux equivalent of the Microsoft's DirectX Video Acceleration (DxVA) API for Windows)
http://thread.gmane.org/gmane.comp.vide ... ocus=81763
http://thread.gmane.org/gmane.comp.vide ... evel/81624

MPEG1/2 patch for VDPAU HW acceleration round 9
http://thread.gmane.org/gmane.comp.vide ... evel/80380

Decoding AVCHD using multi-threaded code
http://thread.gmane.org/gmane.comp.vide ... evel/78944

Hardware assisted video decoding (from 2007)
http://thread.gmane.org/gmane.comp.vide ... ocus=53492

Media Player Classic - Homecinema with DXVA (DirectX Video Acceleration) via a FFmpeg development fork
http://thread.gmane.org/gmane.comp.vide ... ocus=63765

FFmpeg unlikely to support DirectX Video Acceleration (DXVA)
http://thread.gmane.org/gmane.comp.vide ... focus=4098

Re: Hardware acceleration Support options

Posted: 12 Mar 2009 11:28
by patch
I had a look there and clearly there is lots of activity related to performance improvement by interfacing to graphics card hardware acceleration (unfortunately there appears to be a bias to unix interfaces without corresponding support for equivalent windows interfaces).
Looks like we may have support for hardware acceleration at some stage in the future
http://thread.gmane.org/gmane.comp.vide ... ocus=84668
viewtopic.php?f=7&t=56258
or software viewtopic.php?f=7&t=56656
Lets hope so.

Re: Hardware acceleration Support options

Posted: 30 Dec 2009 06:45
by patch
DXVA support now has a status of closed. https://trac.videolan.org/vlc/ticket/151#comment:5

Does that mean VLC 1.1 supports it?
Or that support is no longer considered necessary as some other approach such as openCL is to be used?

Apparently DXVA is being ported from Media player classic - HC to ffdshow

Re: DirectX - Support for hardware acceleration

Posted: 09 Feb 2010 20:35
by omodecarton
anyone?

Re: DirectX - Support for hardware acceleration

Posted: 09 Feb 2010 21:17
by Lotesdelere