Jump to content

GPU transcoding problems, downloads, hdr


LeshaShklar

Recommended Posts

LeshaShklar

1 android tv
emby doesn't use GPU transcoding
Is this normal? 50PUS8507/60 Android TV 2.0.83g

in androidtv application resolution isnt specified, only the bitrate ((( why? 

2 download
why does it use CPU encoding when choosing a bitrate for downloading? 
it's okay?

and why are there so few options when loading?
why not make a choice as in online viewing?
resolution-bitrate

3 and another interesting question
what about hdr? nvidia supports hdr encoding

server unable to transcode while preserving the hdr during online viewing, ok
but what about downloads?

Link to comment
Share on other sites

GrimReaper
13 minutes ago, LeshaShklar said:

1 android tv
emby doesn't use GPU transcoding
Is this normal? 50PUS8507/60 Android TV 2.0.83g

What exactly do you mean by that? 

Link to comment
Share on other sites

LeshaShklar
5 hours ago, GrimReaper said:

What exactly do you mean by that? 

start movie on the phone (android) - transcoding on GPU

start movie on the androidTV - transcodes on CPU

Link to comment
Share on other sites

GrimReaper
Quote

&TranscodeReasons=VideoProfileNotSupported

Quote

{"Codec":"h264","Language":"eng","TimeBase":"1/1000","VideoRange":"SDR","DisplayTitle":"1080p H264","DisplayLanguage":"English","NalLengthSize":"4","IsInterlaced":false,"BitRate":3970637,"BitDepth":10,"RefFrames":1,"IsDefault":true,"IsForced":false,"Height":800,"Width":1920,"AverageFrameRate":23.976025,"RealFrameRate":23.976025,"Profile":"High 4:4:4 Predictive","Type":"Video","AspectRatio":"2.40:1","Index":0,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Protocol":"File","PixelFormat":"yuv444p10le","Level":41,"IsAnamorphic":false,"AttachmentSize":0}

That's an AVC Hi10p profile and 4:4:4 chroma - AFAIK no device supports that in HW even separately, let alone combined, not even your Ampere RTX (and don't think Ada Lovelace does either), so you're getting decode in software and encode in hardware, meaning your HWA is working as expected and nothing more you can do there save re-encode your video file. 

Quote

>>>>>>  FindVideoEncoder - MediaType: h264, UseHardwareCodecs: True, HWA-Mode: Advanced
Info    Checking: 'NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)'
Info    Check successful - selecting 'NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)'

>>>>>>  FindVideoDecoder - MediaType: h264, UseHardwareCodecs: True, HWA-Mode: Advanced
Info    Checking: 'NVDEC NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch The color format (yuv444p10) is not supported)
Info    Decoder does not match
Info    Checking: 'DX11VA NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch Encoder is not compatible with 'D3d11va' decoders
Info    Checking: 'CUVID NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch The color format (yuv444p10) is not supported)
Info    Decoder does not match
Info    Checking: 'Automatic software decoder'
Info    Check successful - selecting 'Automatic software decoder'

Warning: GetSwPixelFormatInHwContext: Unable to map video color format 'yuv444p10' to codec format

>>>>>>  Processing Plan
        Name                                        CanDoInHW  WillDoInHW  Reason                                                 
        Automatic software decoder               >> False      False       Software Codec                                          
        VideoInput                               >> False      False       Not a hardware decoder                                  
        ColorConversion                          >> True       True                                                                
        VideoOutput                              >> True       True        Hardware encoder                                        
        NVENC NVIDIA GeForce RTX 3080 - H.264... >> True       True        Hardware Codec                                          

>>>>>>  Video Processing Steps for [0:0]: H.264 (AVC)
        Step                    HW-Context   Format       SW-Format           Size   Next
        H264                 >> -            yuv444p10    yuv444p10       1920x800 >> hwupload_cuda
        hwupload_cuda        >> CUDA         cuda         nv12            1920x800 >> superscale_cuda
        superscale_cuda      >> CUDA         cuda         yuv420p         1920x800 >> setsar
        setsar               >> CUDA         cuda         yuv420p         1920x800

 

Edited by GrimReaper
Link to comment
Share on other sites

LeshaShklar
18 minutes ago, GrimReaper said:

AVC Hi10p  4: 4: 4 

 

1 3080 supports 4:4:4

 

2 emby doesnt always transcode 4:4:4 on CPU, it often transcodes on GPU))))

here is a log from another movie, it is also 4:4:4, and... gpu transcoding

 

2023-03-11_214330.png

2023-03-11_215227.png

new.txt

Edited by LeshaShklar
Link to comment
Share on other sites

GrimReaper
2 minutes ago, LeshaShklar said:

1 3080 supports 4:4:4

Incorrect. You're looking at the wrong table, that's NVENC - encoder, not decoder.

3 minutes ago, LeshaShklar said:

2 emby doesnt always transcode 4:4:4 on CPU, it often transcodes on the video card))))

here is a log from another movie, it is also 4:4:4, and... gpu transcoding

Incorrect again, your getting same: SW decode/HW encode. 

Quote
>>>>>>  Hardware Decoders for h264
        [X] NVDEC NVIDIA GeForce RTX 3080 - H.264 (AVC)
        [X] DX11VA NVIDIA GeForce RTX 3080 - H.264 (AVC)
        [X] CUVID NVIDIA GeForce RTX 3080 - H.264 (AVC)

>>>>>>  Hardware Encoders for h264
        [X] NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)

>>>>>>  Selected Codecs
Decoder Automatic software decoder


Encoder NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)
        Adapter #0: 'NVIDIA GeForce RTX 3080' ComputeCapability: 8.6
        Max Bitrate: 781 Mbit/s - Frame Sizes: max 4096x4096 - Width Alignment: 2 - Height Alignment: 2
        Color Formats: NV12, P010, P016 - Bit Depths: 8, 10, 12, 14, 16
        Profiles: Baseline Profile (Level 6.2), Main Profile (Level 6.2), High Profile (Level 6.2), High 4:4:4 Predictive Profile (Level 6.2)


>>>>>>  FindVideoEncoder - MediaType: h264, UseHardwareCodecs: True, HWA-Mode: Advanced
Info    Checking: 'NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)'
Info    Check successful - selecting 'NVENC NVIDIA GeForce RTX 3080 - H.264 (AVC)'

>>>>>>  FindVideoDecoder - MediaType: h264, UseHardwareCodecs: True, HWA-Mode: Advanced
Info    Checking: 'NVDEC NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch The color format (yuv444p10) is not supported)
Info    Decoder does not match
Info    Checking: 'DX11VA NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch Encoder is not compatible with 'D3d11va' decoders
Info    Checking: 'CUVID NVIDIA GeForce RTX 3080 - H.264 (AVC)'
NoMatch The color format (yuv444p10) is not supported)
Info    Decoder does not match
Info    Checking: 'Automatic software decoder'
Info    Check successful - selecting 'Automatic software decoder'

Warning: Hardware-accelerated subtitle-overlay is disabled due to diagnostic option

>>>>>>  Subtitle Processing Steps for [0:2]: HDMV PGS subtitles
        Step                    Format             Target Size 
        HDMV_PGS_SUBTITLE    >> Subs: Bitmap                   
        scale                >> Video: UNKNOWN     720x390     

>>>>>>  Processing Plan
        Name                                        CanDoInHW  WillDoInHW  Reason                                                 
        Automatic software decoder               >> False      False       Software Codec                                          
        VideoInput                               >> False      False       Not a hardware decoder                                  
        Scaling                                  >> True       False                                                               
        ColorConversion                          >> True       False                                                               
        SubtitleOverlay                          >> False      False                                                               
        VideoOutput                              >> True       True        Hardware encoder                                        
        NVENC NVIDIA GeForce RTX 3080 - H.264... >> True       True        Hardware Codec                                          

>>>>>>  Video Processing Steps for [0:0]: H.264 (AVC)
        Step                    HW-Context   Format       SW-Format           Size   Next
        H264                 >> -            yuv444p10    yuv444p10      1920x1040 >> scale
        scale                >> -            yuv444p10    yuv444p10        720x390 >> format
        format               >> -            yuv420p      yuv420p          720x390 >> overlay
        overlay              >> -            yuv420p      yuv420p          720x390 >> 

 

Link to comment
Share on other sites

LeshaShklar
1 minute ago, GrimReaper said:

Incorrect. You're looking at the wrong table, that's NVENC - encoder, not decoder.

Incorrect again, your getting same: SW decode/HW encode. 

 

1 you didnt understand ))

on TV, transcoding on CPU
CPU usage 100%  + ffmpeg.exe in "processess"   - film 444


in the latter case with another film, transcoding on GPU
CPU usage 5%..  but film 444  .....

what is the difference? )))
Why is the 1st movie 444 transcoding on CPU, but the 2nd movie 444  transcoding on GPU?

 

2 why transcoding with "download" is also on CPU?

I tried on 420, but emby transcodes on the processor  :(

Link to comment
Share on other sites

GrimReaper
4 minutes ago, LeshaShklar said:

Why is the 1st movie 444 transcoding on CPU, but the 2nd movie 444  transcoding on GPU?

I have no idea why are you under the impression that second movie is GPU transcoded as both sessions are literally the same: decode in SW (your CPU), encode in HW (your GPU). 

As for why CPU usage differs, Dev would have to comment. @softworkz

7 minutes ago, LeshaShklar said:

I tried on 420, but emby transcodes on the processor

If you're using AVC Hi10p, yes, as no device can decode 10-bit h264 in HW, as stated before:

42 minutes ago, GrimReaper said:

AFAIK no device supports that in HW

 

Link to comment
Share on other sites

LeshaShklar
3 minutes ago, GrimReaper said:

I have no idea why are you under the impression that second movie is GPU transcoded as both sessions are literally the same: decode in SW (your CPU), encode in HW (your GPU). 

As for why CPU usage differs, Dev would have to comment. @softworkz

If you're using AVC Hi10p, yes, as no device can decode 10-bit h264 in HW, as stated before:

 

I dont understand too)))
2 films, both 444 - see screenshots

As far as I understand, Nvidia doesnt support 444 decoding.
but supports 444 encoding, right?
but emby encodes without gpu 1 of 2 movies...

but what about downloading and transcoding?
i'm trying to download a tvshow, emby encodes it WITHOUT gpu

Video
ID                          : 1
Format                      : HEVC
Format/Info                 : High Efficiency Video Coding
Format profile              : Main 10@L4@Main
HDR format                  : SMPTE ST 2086, HDR10 compatible
Codec ID                    : V_MPEGH/ISO/HEVC
Duration                    : 41 min 46 s
Bit rate                    : 2 794 kb/s
Width                       : 1 920 pixels
Height                      : 800 pixels
Display aspect ratio        : 2.40:1
Frame rate mode             : Constant
Frame rate                  : 24.000 FPS
Color space                 : YUV
Chroma subsampling          : 4:2:0 (Type 2)
Bit depth                   : 10 bits
Bits/(Pixel*Frame)          : 0.076
Stream size                 : 835 MiB (62%)
Writing library             : x265 3.5+20-4c4aee0bc:[DJATOM's Mod][Windows][GCC 10.3.0][64 bit] 10bit

 

but if i watch this series online
then transcoding and decoding on gpu
wtf? )))

2023-03-11_223158.png

2023-03-11_223050.png

Link to comment
Share on other sites

GrimReaper
11 minutes ago, LeshaShklar said:

2 films, both 444 - see screenshots

Screenshots are irrelevant (and occasionally incorrect in certain scenarios), that's why logs are there. And it's not chroma only that defines process, its codec AVC vs HEVC and color 8-bit of 10-bit and lot of other parameters. AVCHD HW support goes up to 8-bit 4:2:0 - anything above is decoded in SW. 

14 minutes ago, LeshaShklar said:

As far as I understand, Nvidia doesnt support 444 decoding.
but supports 444 encoding, right?

For AVC - correct. 

https://developer.nvidia.com/nvidia-video-codec-sdk#collapse-2

But you ain't getting that 4:4:4 as during transcoding process it is compressed to 4:2:0:

Quote

>>>>>>  Video Processing Steps for [0:0]: H.264 (AVC)
        Step                    HW-Context   Format       SW-Format           Size   Next
        H264                 >> -            yuv444p10    yuv444p10       1920x800 >> hwupload_cuda
        hwupload_cuda        >> CUDA         cuda         nv12            1920x800 >> superscale_cuda
        superscale_cuda      >> CUDA         cuda         yuv420p         1920x800 >> setsar
        setsar               >> CUDA         cuda         yuv420p         1920x800

 

Quote
>>>>>>  Video Processing Steps for [0:0]: H.264 (AVC)
        Step                    HW-Context   Format       SW-Format           Size   Next
        H264                 >> -            yuv444p10    yuv444p10      1920x1040 >> scale
        scale                >> -            yuv444p10    yuv444p10        720x390 >> format
        format               >> -            yuv420p      yuv420p          720x390 >> overlay
        overlay              >> -            yuv420p      yuv420p          720x390

 

20 minutes ago, LeshaShklar said:

but emby encodes without gpu 1 of 2 movies...

Example ffmpeg logs? 

Link to comment
Share on other sites

GrimReaper

Looking further into your 1st log (which is literally making my mobile device to a crawl) which I didn't do before, your HWA is failing and is falling back to SW, so it does end up as full SW transcode:

Quote

11:22:12.414 [superscale_cuda@f2 @ 000002554f9fa080] Unsupported input format: yuv444p16le
11:22:12.414 [superscale_cuda@f2 @ 000002554f9fa080] Failed to configure output pad on superscale_cuda@f2

Quote

Info    Previous transcoding attempt failed. Falling back to software transcoding.

>>>>>>  FindVideoEncoder - MediaType: h264, UseHardwareCodecs: False, HWA-Mode: Advanced
Info    Checking: 'x264 Software Encoder'
Info    Check successful - selecting 'x264 Software Encoder'

>>>>>>  FindVideoDecoder - MediaType: h264, UseHardwareCodecs: False, HWA-Mode: Advanced
Info    Checking: 'Automatic software decoder'
Info    Check successful - selecting 'Automatic software decoder'

>>>>>>  Processing Plan
        Name                                        CanDoInHW  WillDoInHW  Reason                                                 
        Automatic software decoder               >> False      False       Software Codec                                          
        VideoInput                               >> False      False       Not a hardware decoder                                  
        ColorConversion                          >> False      False                                                               
        VideoOutput                              >> False      False       Not a hardware encoder                                  
        x264 Software Encoder                    >> False      False       Software Codec

@softworkz

Where did yuv444p16le come from as video stream is yuv444p10le? 

Edited by GrimReaper
Link to comment
Share on other sites

51 minutes ago, GrimReaper said:

@softworkz

Where did yuv444p16le come from as video stream is yuv444p10le? 

CUDA doesn't support yuv444p10, hence the hwupload_cuda filter doesn't either:

image.png.7cb3caebb85e21dd80121f41ffefb733.png

 

ffmpeg uses filter negotiation, so it tried to insert a software conversion filter to yuv444p16 before hwupload_cuda. 

Next in the chain is superscale_cuda - which doesn't support yuv444p16.

superscale_cuda is a custom filter which we added, because at the time of the last release, the regular scale_cuda filter in ffmpeg wasn't able to do color conversion - which superscale_cuda can do (but not for this format).

Meanwhile, scale_cuda is able to do color conversions as well, so this issue is a great reminder to replace superscale_cuda with scale_cuda now - for the next beta and 4.8 release.

For the current release, we'll have to live with the automatic fallback to sw transcoding, though.

 

 

  • Thanks 1
Link to comment
Share on other sites

GrimReaper
8 minutes ago, softworkz said:

CUDA doesn't support yuv444p10, hence the hwupload_cuda filter doesn't either:

image.png.7cb3caebb85e21dd80121f41ffefb733.png

 

ffmpeg uses filter negotiation, so it tried to insert a software conversion filter to yuv444p16 before hwupload_cuda. 

Next in the chain is superscale_cuda - which doesn't support yuv444p16.

superscale_cuda is a custom filter which we added, because at the time of the last release, the regular scale_cuda filter in ffmpeg wasn't able to do color conversion - which superscale_cuda can do (but not for this format).

Meanwhile, scale_cuda is able to do color conversions as well, so this issue is a great reminder to replace superscale_cuda with scale_cuda now - for the next beta and 4.8 release.

For the current release, we'll have to live with the automatic fallback to sw transcoding, though.

 

 

Thanks for the detailed explanation, I'm also learning as we go, clear now. 👍 Hopefully OP's issue will get sorted with 4.8+ release. (I do sorely miss Support Vewer whilst on board, going through the logs on mobile is DOH! 🙄). 

  • Like 1
Link to comment
Share on other sites

5 minutes ago, GrimReaper said:

I do sorely miss Support Vewer whilst on board, going through the logs on mobile is DOH!

A Windows tablet would do it - it has a mode for touch UI 🙂 

  • Like 1
Link to comment
Share on other sites

GrimReaper
3 minutes ago, softworkz said:

A Windows tablet would do it - it has a mode for touch UI 🙂 

Nice. 🙂 Though Android fanboy through-and-through here, guess I'm out of luck then. 🤨

Link to comment
Share on other sites

12 minutes ago, GrimReaper said:

Nice. 🙂 Though Android fanboy through-and-through here, guess I'm out of luck then. 🤨

It's not portable. Remote Desktop to a win machine would work...

  • Thanks 1
Link to comment
Share on other sites

GrimReaper
24 minutes ago, softworkz said:

It's not portable. Remote Desktop to a win machine would work...

Which unfortunately ain't quite convenient due to my particular circumstances and networks, which are completely separate - not different subnets but completely different networks (my mobile - and my only means of getting online - connected to vessel's business network and going to the internet via satellite through dedicated app, and my Win PC hosting my server - connected to my private LAN, portable router and few APs). 90% of the time I'm out of range of my own LAN, and even if I weren't - I reckon constant switching networks on mobile just to RDP into my PC would get old pretty fast. 🙄

Edited by GrimReaper
Link to comment
Share on other sites

16 minutes ago, GrimReaper said:

Which unfortunately ain't quite convenient due to my particular circumstances and networks, which are completely separate - not different subnets but completely different networks (my mobile - and my only means of getting online - connected to vessel's business network and going to the internet via satellite through dedicated app, and my Win PC hosting my server - connected to my private LAN, portable router and few APs). 90% of the time I'm out of range of my own LAN, and even if I weren't - I reckon constant switching networks on mobile just to RDP into my PC would get old pretty fast. 🙄

Starlink or classic satellite connection? In the former case, a cloud desktop might be feasible, but surely not in the latter (latency).

I was about to suggest carrying a Windows laptop or putting it under your seat, share the sat connection to it and RDP into it - but that's a nonsense idea as you could also use the laptop directly then...

Link to comment
Share on other sites

GrimReaper
1 minute ago, softworkz said:

Starlink or classic satellite connection?

Neither. INMARSAT, marine satellites. I'm on board a merchant vessel, in case you forgot. 😉 And any hooking up laptop to vessel's business network is out of equation, as I cannot open any ports nor have any kind of network control, hence my server is unreachable by anyone - whole reason why I put up my own private LAN around the Vessel - and don't believe IT dept. in Head Office would be too thrilled if I started hacking their network (gotta think about my day job, you know 🤭). 

Link to comment
Share on other sites

28 minutes ago, GrimReaper said:

INMARSAT

I know INMARSAT for satellite telephony - and for being expensive... Probably that's why they're restrictive about devices to connect?
Anyway - I hope you'll be back soon and I'm happy to hear that you find it hard to live without the support app because that's how I felt even before I made it 🙂 

Link to comment
Share on other sites

GrimReaper
13 minutes ago, softworkz said:

and for being expensive...

Oh, you don't wanna know. Exorbitant prices. But as with any other monopolistic company, it's either that or no connection at all - so you just try to control yourself. 

13 minutes ago, softworkz said:

I hope you'll be back soon

Thanks, unfortunately not for a few months more, I reckon early-mid June. 🙄

13 minutes ago, softworkz said:

I'm happy to hear that you find it hard to live without the support app because that's how I felt even before I made it

It's an awesome tool - even though I didn't fully appreciate it until being forced to scroll through xy logs every day on mobile phone screen (server log is a story - or better phrased: torture - for itself 😩) - NOT an experience to recommend. 

Edited by GrimReaper
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...