Virtual Home Theater

Virtual Home Theater

nsf Jan 4, 2022 @ 6:11am
Trying to solve AMD radeon video stutter problem.
Looking for help, trying to resolve a problem with HW decoding.

My videocard: amd radeon 6900 xt.
My CPU: ryzen 9 5950x.

For whatever reason HEVC HW decoding sutters horribly in all VR video players I tried. Starting from 4k@60fps and above. I can even play some of 5k@60fps videos with hardware decoding disabled smoothly in VHT demo, but I get horrible stutter if HW decoding is enabled.

What's interesting, same videos work fine in MPC-HC (using EVR or VMR9). I can even play 7k@60fps HEVC videos just fine with 2% CPU load (definitely HW decoded via LAV). But.. not in VR.

Tried different players:

- Whirligig (uses some unity plugin) - tried it in Media Foundation and DirectShow modes and actually other modes too, same thing.
- HereSphere (written in UE4, seems to be using Media Foundation only) - same thing.
- VHT demo (we're here, looks like some raw C++ app, not sure what it uses, VA-API/VDPAU or some DX stuff directly?) - same thing.
- Few other unity-based ones - same thing.

Also, interesting observation. MPC-HC offers some renderers to pick from. Here's the test. I try to play 7k@60fps HEVC video restarting the player after changing the renderer. Results are:

- (---) MPC Video Renderer: video stutters
- (---) madVR: video stutters
- (---) EVR custom presenter: video stutters
- (+++) EVR: smooth 60 FPS
- (---) Sync Renderer: video stutters
- (+++) Video Mixing Renderer 9 (renderless): smooth 60 FPS
- (+++) Video Mixing Renderer 9 (windowed): smooth 60 FPS
- (---) Video Mixing Renderer 7: no video

The MPC-HC is open source, here are the renderers: https://github.com/mpc-hc/mpc-hc/tree/develop/src/filters/renderer/VideoRenderers.

I have no clue what causes this though. Never did any DX and/or video programming.

Any ideas?

Please don't suggest installing HEVC MS extension (it's for media foundation) or LAV filters. I tried it all. Media Foundation based players stutter, LAV-based (DirectShow) MPC-HC works, but DirectShow VR players stutter as well. Feels like the issue is somewhere else, not with the lack of HW decoding per se. Some unique AMD driver quirk maybe.
Originally posted by aurel.constantinescu:
>>> IMPORTANT to read for current or future AMD video card owners interested in 8K video decoding. <<<

AMD Radeon 6900 XT is not capable to decode 6K, 7K or 8K at 60 fps no matter what you do, what codec pack you will use or what VR or non-VR video player will play the video file.
Your video card can decode a 6K, 7K or 8K video only at 24 fps maximum.

There is no AMD video card up to this date that can decode 6K, 7K or 8K at 60 fps.
Only NVIDIA video cards (starting from 1080 series) can do this.
On the VHT’s website there is a list with video cards with their video decoding capability:
https://virtualhometheater.com/help/

There is no major difference in video decoding capability between RX 5700 XT and the latest Radeon 6900 XT. The only improvement is in gaming performance.


AMD Radeon 6900 XT is using Radeon Multimedia Engine with the following maximum 8-bit codecs capability:
- H.264
4K150 decode, 4K90 encode

- H.265 (HVEC)
4K90 and 8K24 decode, 4K60 encode (theoretical)
(in reality when decoding in VR the 4K90 is 4K80, and 6K60 is 6K45, 8K24 is 8K18)
- notice that decoding performance (max 90 fps) for 4K is low compared with NVIDIA 200+ fps)

- VP9
4K90 and 8K24 decode


Here are some specs:
https://www.amd.com/en/products/specifications/graphics

https://www.amd.com/en/products/graphics/amd-radeon-rx-6900-xt#product-specs

https://www.notebookcheck.net/AMD-Radeon-RX-6900-XT-GPU-Benchmarks-and-Specs.519338.0.html


You can check your video card decoding capability by using DXVA Checker app:
https://bluesky-soft.com/en/DXVAChecker.html


Only NVIDIA users can play true 6K, 7K or 8K (8-bit) videos at 60 fps in VR.

If your videos are in 10-bit format then this is harder in VR even for some NVIDIA video cards especial for the high bitrate videos.


A desktop video player may look that it can decode and play an 8K video at 60 fps smoothly, but in reality what you get (what you see) is not 8K but a 1K at 60 fps if you have a 1920x1080 monitor or max 4K at 60 fps if you have a 4K monitor.
HVEC can be decoded at lower resolution.
On the other side, a VR video player will try to decode the full 8K resolution because it is needed in VR if you play an 180/360 VR video.
A 1K or 4K 180/360 video doesn't look nice in VR.
Note that the VR add another strain on the GPU, so if it is harder for a desktop app to decode and render a video, it will be even harder for the GPU to do it in VR.


VHT is written in C++ and High-level shader language (HLSL) and it use DirectX Video Acceleration version 2 (DXVA 2.0) API for decoding.
VHT is not using DirectShow or Media Foundation for video rendering.
< >
Showing 1-15 of 22 comments
Gamyr Jan 4, 2022 @ 6:39am 
I'm not saying you haven't tried as much as you could, but have you tried K-Lite? It has tons of codecs, and I have it installed on my main PC. Please disregard this message if you think it would be of no use, I just wanted to throw my hat in the ring, now, I'll take my hat, and be on my way. Good luck on finding a working solution.
nsf Jan 4, 2022 @ 9:26am 
Originally posted by Gamyr:
I'm not saying you haven't tried as much as you could, but have you tried K-Lite? It has tons of codecs, and I have it installed on my main PC. Please disregard this message if you think it would be of no use, I just wanted to throw my hat in the ring, now, I'll take my hat, and be on my way. Good luck on finding a working solution.
Yeah, that's where I got LAV and MPC-HC from. It's from K-Lite codec pack. As I mentioned, it's not about the codecs. HW decoding works in MPC-HC, but only in some renderers and doesn't work as desired in VR players.
The author of this thread has indicated that this post answers the original topic.
aurel.constantinescu  [developer] Jan 4, 2022 @ 7:03pm 
>>> IMPORTANT to read for current or future AMD video card owners interested in 8K video decoding. <<<

AMD Radeon 6900 XT is not capable to decode 6K, 7K or 8K at 60 fps no matter what you do, what codec pack you will use or what VR or non-VR video player will play the video file.
Your video card can decode a 6K, 7K or 8K video only at 24 fps maximum.

There is no AMD video card up to this date that can decode 6K, 7K or 8K at 60 fps.
Only NVIDIA video cards (starting from 1080 series) can do this.
On the VHT’s website there is a list with video cards with their video decoding capability:
https://virtualhometheater.com/help/

There is no major difference in video decoding capability between RX 5700 XT and the latest Radeon 6900 XT. The only improvement is in gaming performance.


AMD Radeon 6900 XT is using Radeon Multimedia Engine with the following maximum 8-bit codecs capability:
- H.264
4K150 decode, 4K90 encode

- H.265 (HVEC)
4K90 and 8K24 decode, 4K60 encode (theoretical)
(in reality when decoding in VR the 4K90 is 4K80, and 6K60 is 6K45, 8K24 is 8K18)
- notice that decoding performance (max 90 fps) for 4K is low compared with NVIDIA 200+ fps)

- VP9
4K90 and 8K24 decode


Here are some specs:
https://www.amd.com/en/products/specifications/graphics

https://www.amd.com/en/products/graphics/amd-radeon-rx-6900-xt#product-specs

https://www.notebookcheck.net/AMD-Radeon-RX-6900-XT-GPU-Benchmarks-and-Specs.519338.0.html


You can check your video card decoding capability by using DXVA Checker app:
https://bluesky-soft.com/en/DXVAChecker.html


Only NVIDIA users can play true 6K, 7K or 8K (8-bit) videos at 60 fps in VR.

If your videos are in 10-bit format then this is harder in VR even for some NVIDIA video cards especial for the high bitrate videos.


A desktop video player may look that it can decode and play an 8K video at 60 fps smoothly, but in reality what you get (what you see) is not 8K but a 1K at 60 fps if you have a 1920x1080 monitor or max 4K at 60 fps if you have a 4K monitor.
HVEC can be decoded at lower resolution.
On the other side, a VR video player will try to decode the full 8K resolution because it is needed in VR if you play an 180/360 VR video.
A 1K or 4K 180/360 video doesn't look nice in VR.
Note that the VR add another strain on the GPU, so if it is harder for a desktop app to decode and render a video, it will be even harder for the GPU to do it in VR.


VHT is written in C++ and High-level shader language (HLSL) and it use DirectX Video Acceleration version 2 (DXVA 2.0) API for decoding.
VHT is not using DirectShow or Media Foundation for video rendering.
Last edited by aurel.constantinescu; Jan 4, 2022 @ 8:03pm
nsf Jan 4, 2022 @ 8:25pm 
ok, thanks for the info, this is sad
Gamyr Jan 4, 2022 @ 10:15pm 
Thanks from me as well. Good to know.
Ginxchan Apr 23, 2022 @ 7:38am 
Thanks for this threat, I have been able to compromise with 8k24,30 or 6k45. Too bad I have to re-encode each video I download if it's at 60fps on high resolutions, now to spread the knowledge so people don't commit the same mistake if they want High Res VR content.
aurel.constantinescu  [developer] Apr 24, 2022 @ 5:39pm 
On paper the maximum decoding performance for AMD is 8K at 24 fps, but in reality when VR graphics and video decoder are used together the performance might be even lower to 8K at 20 fps.

You may be lucky depending on what CPU do you have.
In most cases the latest generation CPUs from AMD are powerful enough to software decode an 8K at 30fps or even at 60 fps depending on bitrate and format.
Try a video that didn't work with the hardware decoder but instead use the software decoder, it might work.

For those interested there is this guide:
https://steamcommunity.com/sharedfiles/filedetails/?id=2796413294

It is unfortunate that AMD is not on par with NVIDIA when it come to video decoding performance.
Maybe the next AMD GPU generation will add support for 8K at 60 fps.
Hugo Nov 3, 2022 @ 7:16pm 
The new Radeon 7000 series wlll decode 6k+ in vr? or only up to 5k, thank you Dev.
Last edited by Hugo; Nov 3, 2022 @ 7:18pm
aurel.constantinescu  [developer] Nov 3, 2022 @ 9:07pm 
On the AMD web page
https://www.amd.com/en/products/graphics/amd-radeon-rx-7900xtx
it is specified only “H265/HEVC Decode: Yes”, no 8K60 keyword.

As you can see they didn't say anything about 8K H265 60 fps decoding capability.

The good news is that it has AV1 Decoder, which is better than H265 at the same bitrate.

The only 8K60 I saw in their product presentation is for AV1 at this time stamp:
https://youtu.be/kN_hDw7GrYA?t=974

This is good news because I think all VR videos from now one should use the AV1 instead of H265.

If RX 7000 will not do 8K60 H265 at least you can transcode the video to 8K60 AV1 and this should work on RX 7000 as they claim.
.banana Jan 18, 2023 @ 2:43am 
RDNA 3 (7900 xt & xtx) have:

encode:
H.264 (AVC) 4k330
H.265 (HEVC) 4K210 + 8K48
AV1 4K240 + 8K60
VP9 4K210 + 8K48

decode:
H.264 (AVC) 4k180
H.265 (HEVC) 4K180 + 8K48
AV1 4K240 + 8K60

Is with 8K48 a transcode to AV1 still necessary?
aurel.constantinescu  [developer] Jan 18, 2023 @ 12:18pm 
Yes, you need to transcode to HEVC_8K30/7K48/6K60 or AV1_8K60 (not tested), if you have an HEVC_8K60 video.
If you have an HEVC_8K30 video then in theory RDNA 3 could decode this and you don't need to transcode.

Unfortunately the new AMD RDNA 3 video cards have the same low performance for 8K H.265 (HEVC) video decoding like the previous RDNA 2 models.

Please let us know if the transcoded video to AV1_8K60 works on VHT+RDNA3.
boboweb Jan 24, 2023 @ 12:00pm 
How about this:
Radeon RX 7900 Series Graphics Cards
Supports simultaneous encode or decode streams up to 8K60 for HEVC

https://www.amd.com/en/press-releases/2022-11-03-amd-unveils-world-s-most-advanced-gaming-graphics-cards-built

so why are you talking for some 8K48 - where you get this info ?!?
aurel.constantinescu  [developer] Jan 24, 2023 @ 10:51pm 
@boboweb
Thanks for info and question.

What you found is the maximum (up to) advertised marketing number for a non-vr use case.
I am talking about what is possible in VR.

Most of VR videos people want to play are 7680x7680 at 60fps and if possible to use 10bit color depth.

Video playback in VR is more difficult (especially for 8K60) than when using a non-vr video player because GPU is already busy with VR graphics.
So, if a GPU decoding performance is up to 60, this mean that will be difficult to decode at 60 in VR.

VR HEVC 8K60 videos playback on 7900 GPU is a little bit better than on 6900 GPU but I will not say that 7900 is capable to decode 8Kx8K (7680x7680) VR videos at 60fps 8/10bit without issue.

It is “up to 60” and it is the only reference from AMD about this.
AMD is not very clear if rx7900 can play VR HEVC 8Kx8K AT 60fps.
Also, AMD is not saying anything about if is at 8bit or 10bit.

I think what you found it is either valid for low bitrate videos, valid only for encoding, valid only for 8K UHD (7680 × 4320) movies, a typo or you’ve discovered something that AMD is not willing to advertise on their official product specification page.
https://www.amd.com/en/products/graphics/amd-radeon-rx-7900xt

This is strange, because for such a jump in decoding performance for VR videos, AMD is not talking about on their live launch event.

It is possible that rx7900 is using completely different two hardware units for decoding videos:
- a new unit for AV1
- and for HEVC to use the old one from previous generation with some performance increase from the new architecture.
Because AMD is not talking about this, it is just a speculation from what info is shown on ‘Task Manager’ (Video Codec 0 for AV1 and Video Codec 1 for H264/HEVC).

From a video player app developer’s point of view the NVIDIA it is very specific on what their GPUs are capable in theory with clear performance numbers:
https://docs.nvidia.com/video-technologies/video-codec-sdk/nvdec-application-note/
These frames/second are indicative for FHD videos (1920x1080 YUV4:2:0 8bit).
A GTX1060 can play 8K HEVC at up to 803/16=50fps

So, as a developer I can say that GTX1060 can play 8K at 48fps when using a non-vr video player and 8K up to 48fps or 8K30 when using a vr video player.
For RTX4090 I can say it can play 8K at 60 when using a vr video player but I canot say the same for 7900.

From AMD, I don't have clear and official decoding performance figures, users and devs must try and see if the GPU can decode or not a specific video.

If anyone has been able to play without issue all the HEVC VR 8K(7680x7680) 60fps videos they have using a 7900 GPU, please let us know your experience.
Last edited by aurel.constantinescu; Jan 24, 2023 @ 11:12pm
boboweb Jan 26, 2023 @ 12:17am 
@aurel.constantinescu

thanks for the info. I am looking at this table now and wonder if all Ampere GPUs provide the same decode speed ? I mean for example could RTX 3060 provide the same HEVC decode fps as RTX 3090 as the both cards use the same NVDEC engine version and very similar GPUs clock speed ?

https://docs.nvidia.com/video-technologies/video-codec-sdk/nvdec-application-note/index.html#nvdec-performance__table_qwy_rds_3lb

p.s How do you measure the fps that your GPUs can do in VR or in 2D? I use the internal fps counter of DeoVR steam version player .The strange thing is that my old 1080 Ti could make more fps then my 3060 now (both can do much over 60fps indeed) And if DeoVR shows correct fps this doesnt correspond at all with the theory GPUs performance in the table above as Ampere should be almost twice as fast as Pascal and Pascal shouldn`t make even 60fps at 8K HEVC but i got easy 8K 120fps with my 1080 Ti ... ?! I guess the things are much more complicated then it seems ... Maybe i do mess video decoding fps with VR render fps ?

Last edited by boboweb; Jan 26, 2023 @ 1:52am
aurel.constantinescu  [developer] Jan 26, 2023 @ 4:40pm 
@boboweb

Q: all Ampere GPUs provide the same decode speed ?
A: yes (with small variations) for non-vr video players. But for a vr video player if it has complex 3D environment to render or the user use the HP Reverb G2 then a 3090 can outperform a 3060 in 8K60 video playback quality (effective video frame rates shown on the virtual screen).


Q: How do you measure the fps that your GPUs can do in VR or in 2D?
A: There is a lot of differences between these “fps” like: monitor refresh rate, capture rate, decoding frame rates, render frame rate or HMD fps.
When you play a video with VHT you can see decoded frame rate as a number or as a graph on the Video GUI frame, and the rendered frame rate to HMD on the HMD GUI frame.

If you use VHT in desktop mirror mode there is also the capture rate.
Capture rates can be from 0 up to the refresh rate of that mirrored display.
So, if you play a 24 fps video on YouTube on a 120Hz monitor then for optimization reasoning the capture rate will be 24 cps. Can be 120 cps if you play a game with 120fps on that monitor and the GPU can handle it.

For example, some imaginary fps numbers for clarification.
Suppose a video card can decode a video at 60 fps, but if it can render only at 40fps and display the image on a HMD with a refresh rate of 10Hz then the end result fps of that video on your eye retina will be 10fps not 60fps.
For 120Hz HMD the end result fps of that video on your eye retina will be 40fps not 60fps.


Q: Maybe i do mess video decoding fps with VR render fps ?
A: yes
The refresh rate you read from other vr video players might be the HMD fps (most likely).
From what I know only VHT will show the actual decoding frame rate and also the skipped frames number.


* 1080 Ti decoding an 8K video at 120fps
I think you have a golden gem lottery GPU :-)
Most likely there is a bug in that fps counter or is referring to the HMD fps, not the actual video frames rate.
< >
Showing 1-15 of 22 comments
Per page: 1530 50