2023-09-21, 08:45 AM
Thanks for taking the time!
In other words: When the client is configured for "external scaling", the stream built by the server should target the display mode closest to the content's original resolution, based on the EDID provided by the client.
All my media is on a TrueNAS SCALE server, in unchanged, original quality (SD, HD, UHD). The media is shared via SMB. On the Dune HD Pro Vision 4K Solo, Kodi is managing the library. Kodi is using Dune's internal player for playback. This player is configured for rate & resolution matching. It does output 480p for a 480i *.mkv. It also outputs 2160p for a UHD *.mkv. The "display" device connected to the Dune player is a Lumagen Radiance Pro video processor, providing the corresponding EDID (which is configurable). Connected to the video processor output is the real display device. The video processor does all the upscaling and DTM etc. This is working nicely, with great image quality for upscaled SD content (to 4K). So, in the home theater world, where video processors are usually found, playback at content's original resolution is something really sought after (often called "source direct" mode), because only then can a video processor show it's true potential (i.e. getting a video signal which has been deteriorated as little as possible by bad upscaling attempts). The output for video processor upscaled SD is definitely not "compute trash" (pretty much the opposite), but one could say that the current output of the AppleTV/Swiftfin/Jellyfin combo is, euphemistically speaking, subpar, compared to that. And unnecessarily so, because if one could configure it for external scaling, it should reach the same image quality as my Dune/Kodi combo (which has, by itself, unacceptably bad upscaling, especially for SD content).
I'm just trying to "push" for this, because I feel this is a missing feature and would really benefit the Jellyfin ecosystem (although my use case is obviously niche). I always choose open source when possible, and would love to use Jellyfin. This would allow me to have all media accessible via one source device (preferrably the AppleTV, as the Dune is not good for streaming provider platforms) instead of two (Dune + AppleTV). And Jellyfin is almost there, the import worked, all the not scrapable stuff with *.nfo files has been found, I really like what I see so far. It's just the actual playback that falls short, for me (again, niche, I know). No matter how much I'd like to use Jellyfin, no matter that it has checked all the boxes, it "disqualifies" itself when it compromises image quality, which it does currently. But maybe it is possible to implement full resolution + rate matching or "external scaling" (whatever we want to call it).
(2023-09-20, 11:30 PM)bitmap Wrote: So my understanding, based on previous threads, is this:I'd say that this is pretty much exactly in line with what I described. It's just that my steps 1-4 are your step 1. It's all in there. The client checking with the OS, and based on EDID information, reporting back the capabilities, that's what I'd assume is in the client information. The client information would "just" need to specifiy that the planned output mode is e.g. 480p, if that part is decided by the client based on media information. If it is the server deciding, then it needs to realize that the client has a display mode matching the content's original resolution. And then the server would build the stream accordingly, i.e. no luma scaling, just chroma, and potentially deinterlacing. And there we are, resolution + rate matching.
1. Client requests media and provides a) user and b) client information to the server.
2. Server decides how to handle the request based on a) user policies and b) device profile.
3. Server builds stream and delivers media playback information to client.
Nowhere in there do you have the option to disable upscaling, enable only de-interlacing, etc...
In other words: When the client is configured for "external scaling", the stream built by the server should target the display mode closest to the content's original resolution, based on the EDID provided by the client.
(2023-09-20, 11:30 PM)bitmap Wrote: You can always check your logs to see what Jellyfin itself is doing as well as what ffmpeg is doing. Because it might be the case that you can utilize Jellyfin with an app + external player that will play media at original resolution (but tiny) without any upscaling. I highly doubt you will find anything that will offer to play back SD content on an HD monitor without dynamic/hardware upscaling...it's just not really a thing that displays do since it generally looks like complete trash. Here's an example from my logs of the entire process of media playback request...it's pretty underwhelming...I think it didn't become clear how this currently works in my video chain. Nobody wants to watch SD material unscaled. I just want it to be sent "upstream" unscaled (well, at least not luma). It will be upscaled, upstream, by a device way more capable than the AppleTV/Swiftfin/Jellyfin combo.
All my media is on a TrueNAS SCALE server, in unchanged, original quality (SD, HD, UHD). The media is shared via SMB. On the Dune HD Pro Vision 4K Solo, Kodi is managing the library. Kodi is using Dune's internal player for playback. This player is configured for rate & resolution matching. It does output 480p for a 480i *.mkv. It also outputs 2160p for a UHD *.mkv. The "display" device connected to the Dune player is a Lumagen Radiance Pro video processor, providing the corresponding EDID (which is configurable). Connected to the video processor output is the real display device. The video processor does all the upscaling and DTM etc. This is working nicely, with great image quality for upscaled SD content (to 4K). So, in the home theater world, where video processors are usually found, playback at content's original resolution is something really sought after (often called "source direct" mode), because only then can a video processor show it's true potential (i.e. getting a video signal which has been deteriorated as little as possible by bad upscaling attempts). The output for video processor upscaled SD is definitely not "compute trash" (pretty much the opposite), but one could say that the current output of the AppleTV/Swiftfin/Jellyfin combo is, euphemistically speaking, subpar, compared to that. And unnecessarily so, because if one could configure it for external scaling, it should reach the same image quality as my Dune/Kodi combo (which has, by itself, unacceptably bad upscaling, especially for SD content).
I'm just trying to "push" for this, because I feel this is a missing feature and would really benefit the Jellyfin ecosystem (although my use case is obviously niche). I always choose open source when possible, and would love to use Jellyfin. This would allow me to have all media accessible via one source device (preferrably the AppleTV, as the Dune is not good for streaming provider platforms) instead of two (Dune + AppleTV). And Jellyfin is almost there, the import worked, all the not scrapable stuff with *.nfo files has been found, I really like what I see so far. It's just the actual playback that falls short, for me (again, niche, I know). No matter how much I'd like to use Jellyfin, no matter that it has checked all the boxes, it "disqualifies" itself when it compromises image quality, which it does currently. But maybe it is possible to implement full resolution + rate matching or "external scaling" (whatever we want to call it).
END OF LINE.