If you care at all about proper color and want to avoid color banding you must set your colorspace conversion chain correctly. Almost all TV’s operate in the RGB Limited (16-235) colorspace. Many TV’s will accept a RGB Full (0-255) signal but will internally convert it to RGB Limited. If you are unsure if your TV accepts RGB Full it is a safer bet to send it a RGB Limited signal, you won’t be missing out on any color information by doing this. PC monitors on the other hand accept RGB Full signals. If you are using a laptop or PC monitor you can output a RGB Full signal.
There are three points one must consider when outputting the best signal with the fewest conversions:
1. Converting the source video from Y'CbCr to RGB. This conversion is done by madVR and the output can be changed in the madVR control panel under devices-->properties.
2. The GPU outputting the signal to your display. I believe the Intel, Nvidia, and AMD all have selectable options on whether RGB Limited or Full is outputted.
3. What your display does with the signal once it receives. Most displays will convert the signal to it’s native colorspace. Almost all TV’s have a option in their menus to select what input signal they are expecting. It might be called “limited and full”, “low and normal”, “black level”, etc.
What does this mean? Depending how you intend to use your PC or Media Center there are a few options. I will list the three options that will give the best results without clipping the signal.
If you use your PC or Media Center for not only ET but other programs and games this is the best option for you. This will give you correct colors on your desktop and in other programs while still outputting video with minimal colorspace conversion that isn't clipped. In this scenario madVR expands the source video to RGB Full, the GPU the converts the signal back down to RGB Limited and the TV receives the expected RGB Limited Signal.
madVR – RGB Full (0-255)
GPU – RGB Limited (16-235)
Display – RGB Limited (16-235)
If you only use your PC or Media Center for ET or do not care about proper colors in other programs this is the best option as only one conversion is taking place. madVR expands the source video to RGB Limited, the GPU when set to RGB Full will pass the signal through as is without doing any conversion, and the display with receive a RGB Limited signal. Some displays can have issues with this scenario so it is best to compare it to option 1 and decide what looks better to you. When working properly option 2 should provide a better quality video with less color banding.
madVR – RGB Limited (16-235)
GPU – RGB Full (0-255)
Display – RGB Limited (16-235)
This option only works if your display accepts RGB Full signals and is the best option for PC monitors and laptops. The source video is expanded to RGB Full, the GPU is set to RGB Full and does not do any conversions, and the display is expecting a RGB Full signal.
madVR – RGB Full (0-255)
GPU – RGB Full (0-255)
Display – RGB Full (0-255)
1. In the madVR control panel select the “scaling algorithms” folder and select create profile group. Check all four boxes and create the new profile group.
2. A new subfolder will be created. You can click on it to bring up the settings. Give your profile group a name, I named mine “Emby Theater”.
3. Next we will enter the profile rules. These rules will determine what profile to use based on the resolution and frame rate of the video file. You do not need to add all the rules and can edit to suit your needs but for consistency sake I created rules based on the categories in my Recommended Settings section of this guide. Enter the following rules into the “profile auto select rules” field:
elseif (srcHeight < 481) and (deintFps < 26)"SD <25fps"
elseif (srcHeight < 481) and (deintFps > 26)"SD >25fps"
elseif (srcHeight < 721) and (deintFps < 26)"720p <25fps"
elseif (srcHeight < 721) and (deintFps > 26)"720p >25fps"
elseif (srcHeight < 1081) and (deintFps < 26)"1080p <25fps"
elseif (srcHeight < 1081) and (deintFps > 26)"1080p >25fps"
elseif (deintFps < 26)"2160p <25fps"
4. You will notice that after entering the rules there will be a warning to the top right of the “profile auto select rules” field. This is because the rules are referencing profiles that do not exist yet.
5. You will now need to create the profiles, in this case 8 of them, and name them all using the same name in the rule. Once you have created all the rules click apply. If everything is entered correctly the warning in the profile group folder should have changed to a green checkmark.
6. You are now free to configure each profile with your desired settings.
7. To see what profile is active bring up the madVR control panel while playing a video. The profile that is currently in use should be in bold.
***The exact same instructions can be used to setup profiles rules for the "Processing" and Rendering" menus***
Some of the more advanced scaling algorithms and dithering require lots of GPU processing powering to accomplishing the task. That doesn’t mean you need a high end GPU to run madVR as even most iGPU made in the last 5 years can run madVR with basic scaling algorithms. In order to determine what settings your hardware can handle there are a couple of things to consider.
- The resolution of the source material. The higher the resolution the greater the number of pixels that need to be processed. Going for SD-->1080p is less intensive than going from 720p-->1080p because there are more pixels in the 720p video. Makes sense right.
- The framerate of the source material. The greater the framerate the quicker the GPU must process each frame of video in order for it to be presented on time.
If the video frame is not processed quickly enough madVR will drop that frame and move onto the next one. Sometimes a couple frames will be dropped over the course of a movie and this usually occurs when the video is first started or after FF/RWing. This is just the queue filling and is normal. What is not normal is when you have dropped frames during normal playback which results in choppy video or out of sync audio.
To see if your GPU is capable of rendering the video effectively bring up the madVR OSD while playing a video by pressing “Ctrl-J” on your keyboard. You should see something similar to this:
The first thing you want to look at is the “movie frame interval”. This is the amount of time that each frame of the video is shown also meaning that the following frame needs to be ready in this time window. The higher the framerate of the video the lower the “movie frame interval” thus there is less time to process the following frame.
Next you will want to look at the “average and max stats”. This is the time it is currently taking the GPU to render and present the frame to the display. The names are self-explanatory, average being the average times since the start of playback and max being the maximum times in the last 5 seconds. The sum of the rending plus the presentation time MUST be less than the “movie frame interval time”. In order to have excellent playback with no dropped frames it is recommended to keep the sum or the rendering and present times well below the movie frame interval. I personally like to keep mine under 15ms.
Finally the “dropped frames”, “delayed frames”, and “presentation glitches” indicate if there have been any frames that were not rendered in time. Like I mentioned above it is common to have a few dropped after starting a video or FF/RWing. If you are experiencing dropped frames or glitches you must use a less intensive scaling algorithm to correct this.
The following tables are settings based on display resolution and GPU hardware. These settings are only meant to be used as a starting point and there is no guarantee that they will work on your hardware or that they will provide the best results. Scaling algorithms are subjective, you will need to make your own decision on what looks best to you. I will try to populate these tables and keep them updated. Any suggestions or verified results would be greatly appreciated.
Edited by Jdiesel, 26 January 2016 - 10:21 AM.