Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Vulkan Video Decoding (lynne.ee)
89 points by zdw on Jan 11, 2023 | hide | past | favorite | 17 comments


This was a great read and finally explained why Vulkan Video is good being "just" a layer ontop of existing HW decode/encode. What's interesting, then, is that Nvidia and others are supporting it. As opposed to rendering where Intel, AMD and Nvidia have their own rendering backend in eg. blender. Nvidia has Optix and CUDA, AMD has HIP, Intel has oneAPI (ironic given this discussion) and Apple has Metal.[0] I guess there isn't much value in being unique for something that's anyways implementing an existing standard (in this case the codecs themselves like h.265).

[0]https://docs.blender.org/manual/en/latest/render/cycles/gpu_...


Video decoding is a massively simpler API surface than a GPU programming framework like CUDA or HIP. Exposing the APIs in Vulkan is not that much extra work.


All of these APIs are very low-level, that’s why the quirks. There’s one system-specific video acceleration API which is not on the list, supports all GPUs, and just works without quirks, that’s IMFMediaEngine interface https://learn.microsoft.com/en-us/windows/win32/api/mfmediae...

You give it a media file, and ask to play. The API delivers frames in DXGI surfaces, and you can do whatever you want with the data.

Ideally, that’s what I would want in all other OSes.


Do anything, just please get Video decoding working on Linux, it kills battery life immediately on laptops.


This is what I thought initially, but in my testing with a modern laptop I saw almost no difference with and without hardware decoding.

It is possible that my testing was flawed so I would be curious if anyone has investigated power consumption more thoroughly.


I just did some quick testing on my XPS 7390 2-in-1 (i7 1065G7) with Wayland:

  * Idle @ 50% brightness, WiFI on: 3.5W
  * mpv + hardware acceleration: 15W
  * Firefox + hardware acceleration: 19W
  * Firefox software decoding: 29W
The test video was https://www.youtube.com/watch?v=LXb3EKWsInQ - which is 4k 60 FPS and got scaled to 1920x1080 for display.


Huh, that's the video I use to test hardware acceleration too.

Good taste.


The difference is much more pronounced at lower resolutions. 4K60 is not handled efficiently by any hardware.


That's the opposite of my experience. Depending on the decoder, lower resolutions may be more efficiently handled by the CPU instead of the hardware decoder (which is a decent chunk of silicon and takes extra power to use). But once you hit a certain resolution, the hardware decoder is pretty much always way more efficient than a software CPU decoder. Some well-implemented hardware decoders even handle low resolutions more efficiently.

My experience is largely focused on battery-powered mobile devices (Android/iOS), though.


To give a concrete example, VAAPI Haswell integrated graphics, peak CPU usage:

  mpv hardware H.264 1080p60: 3% CPU usage
  mpv software H.264 1080p60: 20% CPU usage

  mpv hardware H.264 4K60: 96% CPU usage
  mpv software H.264 4K60: 80% CPU usage
There comes a point of diminishing (or in this case, negative) returns. A bit more subjectively, the H.264 software rendering at 4K60 also felt smoother.

I'm using H.264 as it is hardware accelerated on this platform.


I don't think all Haswell chips support 4k H.264. That's one downside of hardware decoders: they have limits on what they support. I suspect the decoder is actually falling back to a software implementation to handle the bitstream since the hardware can't.

For example: https://www.avsforum.com/threads/no-hardware-4k-h264-decode-...


"Offloaded decoding takes more CPU than non-offloaded decoding" doesn't make any sense - clearly something else is going awry here.


I have desktop product that among other things decodes 4K60P using MMF. The decoding part either decodes straight into DirectX texture if hardware based video decoding is supported or does it in software otherwise.

Software based path causes significant CPU load. Using hardware path keeps CPU at about 0%. Since hardware video decoding supported nearly on any modern Laptop, Desktop I would say 4K60 is handled very efficiently.


Low resolution videos (eg. 24 fps non-hd content) are very easy for a modern CPU to decode, so typically other parts of the laptop - ie. the screen, will dominate.

I foresee in the future, as CPU's get even faster, this kind of stuff being decoded by javascript, simply so that 'we can guarantee each platform decodes the video the same'.


Perhaps by wasm?


VAAPI does work; but some browsers are lagging their feet, so use Firefox instead.


Apps such zoom also desperately need hardware acceleration, I am not sure if zoom works on Firefox, I prefer Brave.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: