MadVR

From wiki.mikejung.biz
Jump to: navigation, search

madVR Overview

MadVR, also known as Madshi Video Renderer is much more than a simple video renderer. It uses your GPU to perform resolution upscaling, chroma upscaling, and all kinds of other video enhancements that can significantly improve video quality. MadVR can be used with a few different video players such as MPC-HC and PotPlayer. When you install MadVR a Windows registry entry is added which allows media players to utilize MadVR as a video renderer. MadVR is a DirectShow Filter and there are lots of other filters out there, so keep that in mind when you start changing a bunch of settings.

As of December 17 2016 the latest version of madVR is v0.91.4, you can download the latest version of madVR here.

MadVR is the last stop before the video is displayed on screen. Prior to madVR the video and audio stream get separated by a Source / Splitter Filter, like FFmpeg. From there the video stream will pass through a Video Codec or transform filter, like CUDA or DXVA2 which can take advantage of your GPU to speed along the playback process. If you are not sure if you should use CUDA (CUVID) or DXVA2, I've created a quick video quality comparison page that shows the difference in quality between DXVA2 and CUDA.

You can see this in action with some mediaplayers, like PotPlayer, which will tell you what filters are being used, and in what order while you play a video. If you want more information on exactly how madVR renders and improves video quality, you should view this madVR flow chart which is found on the Doom9 forums.

(1) Built-in FFmpeg MP4 Source
(2) Built-in Video Codec/Transform
(3) Madshi Video Renderer
(4) Built-in Audio Codec/Transform
(5) DirectSound Audio Renderer

There are many different ways you can configure madVR, so at first it can be difficult to figure out what settings are doing what, let alone how much each settings "costs" in terms of GPU and CPU usage.

That's pretty much why I made this page in the first place. I needed a place to store all my notes and test results. I'm still in the process of updating and cleaning up this wiki so I apologize if the layout drives you crazy, it'll improve, eventually. Anyway, check out my suggestions below if you are looking for PCMASTERRACE video quality, but aren't sure where to start.

If you are curious about the performance of madVR Chroma Upscaling, Image Doubling, or Hardware Decoder benchmarks, you can find lots of numbers a few scrolls down, and then a few more after that.

Recently I did finished up some 720p Image Upscaling screenshot comparisons. I used PotPlayer this time instead of MPC-HC. Instead of focusing on Chroma Upscaling I focused on Image Upscaling and used these PotPlayer advanced settings.

madVR Settings for Low End - Mid Range PCs

If you are looking for a TL;DR (quick look at the table below) section that suggests some settings to use with a relatively high end PC, then welcome sir / mam. I'm using these settings with PotPlayer / MPC-HC and I am at around 30ms per frame render times which means that I use one set of MadVR options for 480p, 720p, and 1080p videos. I am using an Intel i7-4790k and a Nvidia GTX 970 on Windows 8.1 Pro with GeForce Driver: 347.09. The date is January 16th if you really wanna get specific and MadVR 0.87.13 is in use.

I went ahead and took a bunch of 720p Chroma Upscaling screenshot comparisons so you can compare image quality between various Chroma Upscaling algorithms like Jinc, or NNEDI3. I will eventually get around to doing image upscaling and resolution doubling comparisons when I get the time.

If you are using a Nvidia GPU, make sure you are enabling Noise Reduction and Edge Enhancement in the Nvidia Control Panel.

DXVA2 Focused

MadVR Settings Mid Range PC DXVA2 Configuration
Chroma Upscaling BiCubic 75 anti-ringing checked
Image Doubling Always use NNEDI3 to Double Luma Resolution 64 neurons
Image Upscaling DXVA2
Image Downscaling DXVA2
Smooth Motion Enable Smooth Motion only if judder without
dithering random
Video Decoders CUVID and DXVA2, enabled hardware deinterlacing

Lanczos Focused

The configuration below is the original configuration that I added to this section. Since then I've tested out using DXVA2 whenever possible and cranking up Image Doubling to high amounts of Neurons. I find that both configurations offer good video quality, but by using DXVA2 you can reduce the performance cost by a lot, so if you are using a laptop or weaker PC, use the settings above first.

MadVR Settings Mid Range PC using MadVR Algorithms only
Chroma Upscaling BiCubic 75 anti-ringing checked
Image Doubling Always use NNEDI3 to Double Luma Resolution 32 neurons
Image Upscaling Lanczos 3 Taps with anti-ringing checked
Image Downscaling Lanczos 3 Taps with anti-ringing filter checked
Smooth Motion Enable Smooth Motion only if judder without
dithering random
Video Decoders CUVID and DXVA2, enabled hardware deinterlacing

MadVR Settings for High End PCs with GTX 970/980

The latest version of MadVR includes a lot of new and powerful options. Specifically Image Doubling and NNEDI3. These are very powerful enhancements for overall image quality, however they make the average PC die in a fire if you try and crank up the settings. The images below show my current configuration, which I find to be a pretty good balance between quality and performance. The idea is to mess around with the various settings until you are able to achieve render times of under 40ms, preferably 30ms for most video types. I took some screenshots of 720p and 1080p videos using different options for Chroma Upscaling to get an idea of what options looked the best.

My current PC is not an average PC. If you are searching for MadVR settings, you probably don't have an average PC either. So without rambling on too much, here are my specs

  • Intel i7-4790k
  • 16GB RAM
  • 4 SSDs of various models and 2 1TB HDDs (movies stored on spinning disks)
  • GTX 970

If you have a high end GTX 700 series GPU or higher these settings should net you around 12ms render time per frame for 720p video, thanks to CUDA. Render times for 1080p videos will typically be better than 720p since less upscaling / image doubling is going on. If you watch a mix of 1080p and 720p videos, these settings should work for both. If you only watch 1080p video then you should be able to use 128 neurons for chroma upscaling and image doubling. You can edit madvr settings by right clicking on the madvr icon while playing a video with either mpc-hc or PotPlayer. Just like in the image below. If you do not have a verbose list like I do, then you should right click on the Windows taskbar, click on properties, then click on customize notifications area, finally click on always show all icons and notifications. That should work for Windows 7 and Windows 8.

If you are using a Nvidia GPU, make sure you are enabling Noise Reduction and Edge Enhancement in the Nvidia Control Panel.

DXVA2 Focused

I've been playing around with an alternative configuration to see if it's better to stick with DXVA2 for most of madVR's algorithms and jack up Chroma Upscaling and Image Doubling to high neuron values. Personally I kind of like this configuration over the original one I put in this section.

MadVR Option High End PC DXVA2 Alternative Configuration
chroma upscaling NNEDI3 128 Neurons
Image Doubling Always use NNEDI3 to Double Luma and Chroma Resolution using 128 neurons
Image Upscaling DXVA2
Image Downscaling DXVA2
smooth motion Enable Smooth Motion only if judder without
dithering Error Diffusion Option 1
Video Codec CUVID with hardware deinterlacing

Lanczos Focused

This is the original configuration, still works just fine, but you may have more success using the settings listed directly above this.

MadVR Option High End PC Starting Points
chroma upscaling Lanczos 3 Taps with anti-ringing filter
Image Doubling Always use NNEDI3 to Double Luma Resolution using 64 neurons
Image Upscaling Lanczos 3 Taps with anti-ringing filter
Image Downscaling Lanczos 3 Taps with anti-ringing filter
smooth motion Enable Smooth Motion only if judder without
dithering Error Diffusion Option 2
Video Codec CUVID with hardware deinterlacing

How to use Nvidia DSR to resize video to 2715x1527 and higher

You can utilize DSR factors with PotPlayer (probably MPC-HC as well but PotPlayer is WAY easier to configure) and force it to resize videos to 2715x1527 before madVR renders the video. This does seem to improve video quality by a noticeable amount. For details on how to do this and some screenshot comparisons check out the page below.

MadVR Scaling Algorithms

MadVR Chroma Upscaling

  • High End GPU suggestion: Space Heater Config -- NNEDI3 128 (GTX 970)
  • High End GPU suggestion: Summer Config -- Lanczos 4 Tap with anti ringing filter
  • Everything Else: -- BiCubic 75 AR

BiCubic 75 is the default setting for madVR, and for the most part that is totally fine. Some forums and guides mention that Jinc 3 taps can provide better video quality for Chroma Upscaling, I don't think it's worth all the extra strain on your GPU unless it's winter in Michigan and your house is cold, then use NNEDI3 :D. Personally I don't notice much of a difference in terms of video quality, so I use the default setting most of the time, but if I want to warm up my room I'll use NNEDI3.

Chroma Upscaling can have a significant impact on performance, especially if you use NNEDI3, even using Jinc can result in dropped frames. I've run some benchmarks with each option, check out this page for the full results. You can also find madvr image comparison screenshots by checking out that link right there.

The image below is what I am using with my GTX 970. This is not necessarily the best option, so start with BiCubic and use NNEDI3 only if you have GPU to spare.

Mad vr chroma upscale.jpg

MadVR Image Doubling

Chroma Resolution Doubling doesn't seem to improve quality all that much, at least compared to Luma Resolution Doubling on it's own. Also, only select Quadruple Luma Resolution if you can already play 1080p AND 720p videos without getting dropped frames. If you try to play 480p videos without testing these settings you might be in for a surprise. The lower the video resolution, the more the GPU must work to upscale and double the image.

I decided to Always Double Luma Resolution and use 64 neurons because idk, it sounds like science and looks pretty damn good. I recommend staying away from Chroma Resolution doubling as it is pretty expensive in terms of render time (often times well over 10ms - 30ms additional render time).

These settings seemed to work well. I did not see any dropped frames, and rendering time was under 30ms in most cases, so that was good enough for me. I did notice that SLI really sucks at doing MadVR. In some cases disabling SLI with my GTX 770s seemed to actually improve performance while enabling higher resolution doubling with NNEDI3. That's probably more to do with the new options than it is to do with Nvidia.

Currently I have a single GTX 970, but I did have SLI 770s, I found that in general, any GPU that's comparable to a GTX 770, or a mid range, latest generation Nvidia GTX 960 should be able to at least double the Luma Resolution using 64 neurons. You might be able to pull off 128 neurons, but I found that some 720p videos end up just over the 41ms per frame mark and I have to dial things down again.

MadVR image double nnedi3 gtx 970.png

MadVR Image Upscaling

MadVR Image Upscaling can be very resource intensive if you choose some of the more demanding options like Spline or Jinc. You can check out some Image Upscaling 720p screenshots to see for yourself how the image quality changes between the options.

There can be a massive performance hit if you have already set the Chroma Upscaling option to use NNEDI3, or Jinc. Also, if you configure really high Image Doubling settings (like doubling and quadrupling @ 128 Neurons), you will really want to try and use DXVA2 for Image Upscaling. However, using DXVA2 for image upscaling can reduce video quality in some ways, like blocky looking images, or noisy video. This is somewhat subjective, but I like to use Lanczos for image upscaling because it's not as choppy looking as DXVA2, at least to me. If you are strapped for performance and are looking for ways to speed up playback, using DXVA2 is a good option, or you could use something like Bicubic which is a little better quality than DXVA2.

I guess it makes sense thatDXVA2 seems to handle things very efficiently by using the GPU Video Logic, GPUs are good at doing lots of things at once, but for whatever reason it seems less smooth than Lanczos or Jinc and the video quality was not quite as good.

I'm not entirely sure why DXVA2 is faster than using Bilinear or Nearest Neighbor, which are also taking advantage of the GPU. I do know that as soon as I enabled either of the GPU Texture Units, render times went up well above a reasonable level, at least 2 or 3 times higher than with DXVA2.

GPU Texture Units

  • Nearest Neighbor -- Performance wasn't great, quality wasn't great. Plus I don't like neighbors, or one near me.
  • Bilinear -- Similar to Nearest Neighbor in terms of performance.

GPU Video Logic

  • DXVA2 -- Performance was amazing, and quality was still decent, not as good as Jinc or Spline, but good enough.

Custom Pixel Shader Code

  • Mitchell-Netravali -- What a not cool name for an algorithm. Even with this performance wasn't good enough, resulted in dropped frames.
  • Catmull-Rom -- Cooler name, I like cats, but not this algorithm.
  • Bicubic 75 -- Awesome name, the madvr default, usually a good option to go with when in doubt.
  • SoftCubic -- Good option, alternative to Bicubic, for those of us who prefer soft things.
  • Lanczos 4 AR -- Step up from SoftCubic, using 4 taps results in very Jinc like quality and performance, in some cases it's a little sharper, but I like the combo with image doubling.
  • Spline 3 -- Sounds like a sci fi movie, I'm happy with Lanczos, but I'll test out spline at some point.
  • Jinc 3 -- Provides very good quality, but the most expensive in terms of GPU utilization, not a lot of information about Jinc.
  • High End GPU: -- Lanczos 4 Tap AR
  • Mid Range GPU: -- Bicubic 75 AR
  • Fastest Option: -- DXVA2

Mad vr image upscaling.jpg


MadVR Image Downscaling

You can use catmull-rom for downscaling, but if you can I suggest using BiCubic 75 or DXVA2 if you really need the performance.

Mad vr image downscaling.jpg


MadVR Artifact Removal

This section removes banding artifacts from the video. I noticed a small performance loss when default debanding strength is set to high, but that only seemed to result in maybe an additional 2 or 3ms for render time. I also set strength during fade in/out to high as well. I didn't notice a massive difference with image quality between high and low, so if you run into issues, set this to mid or low, otherwise leave both at high. Generally speaking you will want to leave this enabled and set to high unless you really need to lose a few ms to get render time to a point where it's not dropping frames.

Mad vr artifact settings.jpg


MadVR Smooth Motion

MadVR's new smooth motion option is pretty cool. It can help to improve overall video quality by providing smoother video playback. Enabling this option will add about 3ms - 4ms to render time. This is not very expensive on it's own but it is something to consider before you enable this. If you choose to enable smooth motion frame rate conversion only if there would be motion judder without it, or always you will see a performance hit either way. So if you are going to enable this setting you might as well select "always" unless you notice ghosting effects or get annoyed. Personally I always leave this on. If you are using a GTX 970 or better, go ahead and enable this.

GTX 970 MadVR Smooth Motion.png


MadVR Dithering and Error Diffusion

MadVR has added a few new dithering options. Error Diffusion Option 1 and Error Diffusion Option 2. Both of these new options are very demanding, and require a DX11 GPU to use. If you stick with the ordered or random options you will save yourself about 4ms of render time. If you have a GTX 970 or better then I highly recommend enabling Error Diffusion Option 1. I would expect the upcoming GTX 960 to perform on the same level as the GTX 970 because of the Maxwell architecture.

I tested both of the options under the main dither choices and there is very little performance gain / loss if you enable or disable the options. From what I could tell there was maybe a 1ms gain / loss for render time if you check the options so only enable them if you feel like the video looks better. I have use colored noise and change dither for every frame enabled.

MadVR Processing Settings

madVR Chroma Upscaling Performance Results

Chroma Upscaling involves upscaling the "color" part of the video, Luma is the black and white parts of the video, at least that's what the internet says. These results measure the performance impact of Chroma Upscaling. In general I've found that Chroma Upscaling can be pretty taxing on your GPU and in return you don't really get much in video quality improvement. At least I personally didn't much much gain compared to changing other options. I took a bunch of screen shots using a 720p and 1080p video to see if I could notice any changes in quality. These have been compressed so I recommend you also test for yourself, there is no one perfect configuration for MadVR.

Chroma Upscaling is a MadVR setting which can be used with MPC-HC or with a newish video player called PotPlayer. I've come to like PotPlayer, and am almost ready to switch over from using MadVR with MPC-HC to exclusively using PotPlayer. Both media players share some of the same libraries and UI elements like the Fullscreen UI and MadVR configuration. PotPlayer seems to be slightly faster than MPC-HC and I found that PotPlayer's configuration settings allowed for more customization than MPC-HC did. There is no right media player to use, but if you have not already tried out PotPlayer, I suggest installing it and using this PotPlayer Guide to configure it for HD video.

I took screenshots of 720p and 1080p video, each time I used a different MadVR Chroma Upscaling Algorithm to see what one provided the best quality. This is pretty subjective, so you can judge for yourselves.


MadVR NNEDI3

If you have a GPU that is DX11 compatible you can enable the use of NNEDI3 for Chroma upscaling and to double or quadruple the resolution of Luma or Chroma. Keep in mind that Chroma Upscaling and Chroma resolution doubling are not the same setting. These two options are seperate sections / functions within MadVR. This upscaling / resizing process can be very GPU intensive, so if you notice choppy video playback you might have lots of dropped frames. To see if you have lots of dropped frames, use (CTRL + J) to view statistics while playing a video and lower the settings for Chroma Upscaling if you are above 40ms per frame render time. Since the MadVR statistics are updated on the fly, be sure to play the video for at least 1 minute or more if you are going to use MadVR's stats during video, otherwise you will get averages that are way too high, as the initial 10 seconds of playback can be a bit more intensive than the rest of the video simply because your PC has to figure out what to do with playback and after the first few seconds performance starts to become consistent.

If you own a GTX 970 or GTX 980 and have a decent CPU then you should be able to utilize NNEDI3 in the following areas:

Chroma Upscaling: NNEDI3 @ 64 Neurons Image Doubling: Always upscale Luma if needed @ 64 Neurons

Please keep in mind that if you watch 480p or 720p video, you will be using a lot more resources than watching a 1080p video, so test out all video sizes before you finalize your configuration.


madVR NNEDI3 Chroma and Luma Resolution Doubling Performance

If you plan on using NNEDI3 to double Chroma or Luma resolution you will want to keep a few things in mind before you start cranking up the settings:

  • 720p Video takes significantly more resources than 1080p if resolution doubling is enabled. Most of the time 1080p videos will not get doubled, so you won't see a performance impact until you try to play a 720p video. Don't assume that just because 1080p videos play ok, all your other videos will play fine as well. The lower the resolution the more processing must be done to increase image quality.
  • Use CTRL + J to view stats while playing a video, if you noticed dropped frames try to reduce the amount of NNEDI3 Neurons to either 32 or 64 for resolution doubling. There is a large performance hit after 64 Neurons so unless you have a GTX 970 or faster you will more than likely have to stay under 64 Neurons.
  • Stay away from using NNEDI3 to double Chroma resolution unless you have a pretty powerful GPU. It's pretty expensive in terms of GPU utilization so stick with using NNEDI3 to double Luma resolution and measure how your PC handles the video, if you are well under 30ms render time you might be able to use NNEDI3 to quadruple Luma resolution at lower neuron levels like 32, or 64.
  • Using NNEDI3 to double Luma resolution will improve video quality and doesn't hurt as much as NNEDI3 to double Chroma resolution.

1080p NNEDI3 Resolution Doubling (Luma and Chroma)

1080p Videos will generally not be double or quadrupled if you are viewing them on a 1080p screen

If you leave MadVR at the default settings and only enable NNEDI3 LUMA resolution doubling, you will see almost no performance difference, at least if you are viewing a close to 1080p video. I found that for the most part, average render time per frame was about 1.33ms. Even if I enabled Luma and Chroma to always be doubled and quadrupled using 256 Neurons, I still got about 1.33ms for render times. GPU and CPU utilization did not move past 4% each.

Again, using the settings in the image below I noticed no performance difference between not using resolution doubling / quadrupling, and enabling everything with 256 Neurons. This is more than likely because 1080p videos are not going to get doubled when viewing on a 1080p monitor. If you have 4K monitor then odds are the image will get doubled. I found that enabling NNEDI3 Luma resolution doubling at 64 Neurons was the best option for compatibility and overall smoothness. It still looks good and will play 720p and 480p videos without issue. If you set this to 256 Neurons and / or enable quadrupling or Chroma resolution doubling you will experience higher render times and more than likely dropped frames. If your render times per frame go much past 40ms the video will become choppy. This is not a bug, it's your weak GPU not keeping up with demand.

GTX 970 MadVR Image Double Settings.png

720p NNEDI3 Resolution Doubling Luma Only

Using NNEDI3 Resolution Doubling and Quadrupling with a 720p video is a different story than with 1080p. Because the video resolution is smaller, MadVR actually needs to double the image unlike with 1080p. As you can see, even just using 32 Neurons will increase the render time by 10 times. I found that using NNEDI3 to quadruple the Luma resolution did not help as much in terms of improving video quality, I guess maybe there is only so much you can put back into a once compressed file. If you are going to watch a lot of 720p video you will want to Use NNEDI3 to double Luma resolution using 64 neurons. You can use NNEDI3 for Luma and Chroma resolution doubling with mpc-hc or with PotPlayer, but until you get familiar with either player's settings and your computer's performance you should only enable Luma resolution doubling, and leave the Chroma resolution doubling alone because it's pretty resource intensive and Chroma isn't as noticeable as Luma in terms of video quality, at least that's what the general consensus seems to be on the internet.

720p Video Luma Doubling Render Time.png

The image below is the GPU load while playing the 720p video. As you can see the GPU load increases as you increase the amount of neurons. Again, this is with a GTX 970, so if you have a weaker GPU then stick to under 64 Neurons.

720p Video Luma Doubling GPU Load (GTX 970).png

The image below shows CPU load while playing the 720p video. NNEDI3is much more GPU intensive than CPU intensive, however you can see that as you set higher amounts of Neurons, CPU load increases. I am using an Intel i7-4790K, if you have a much older CPU then you will more than likely be CPU bound in a hurry.

720p Video Luma Doubling CPU Load (Intel i7-4790k).png

720p NNEDI3 Resolution Doubling (Luma and Chroma)

As soon as you enable Chroma doubling along with Luma you take almost a 50% performance hit. You can see that you gain about 8ms render time at 32 Neurons, compared to just doubling Luma.

720p Video Luma and Chroma Doubling Render Time.png

My GTX 970 is basically capped out at 128 Neurons for doubling Luma and Chroma Resolutions. I did not bother trying to Quadruple resolutions since I was already getting dropped frames for 720p video. When playing 1080p video with these settings I had a render time of under 2ms. Because the video is within the scale factor it makes sense that a 720p video is more demanding than a 1080p video simply because MadVR is actually doubling the 720p resolution, but does not double the 1080p resolution because I'm not using a 4K monitor.

720p Video Luma and Chroma Doubling GPU Load (GTX 970).png

CPU load is a little higher, but you can see it caps at about 17% because my GPU is already maxed out there is nothing more for the CPU to do.

720p Video Luma and Chroma Doubling CPU Load (i7-4790k).png

Installing and enabling madVR with mpc-hc

To install MadVR on Windows 8.1 or Windows 7 please visit this link and download the file:

Once you have downloaded the file, create a new folder called "MadVR" under Program Files, or anywhere you want to, the location doesn't matter, but you will want to put it somewhere safe so you don't accidentally delete the folder. Placing the madvr folder on the desktop or somewhere that is easily forgotten about / cleaned out often is not a good idea.

Now it's time to install Media Player Home Classic, you can find the latest version of mpc-hc [here]. I recommend installing the x86 version otherwise you will run into compatibility issues, especially with MadVR. You don't need to install mpc-hc in the same folder as madvr, so just stick with the installation defaults for mpc-hc.

Now that MPC-HC is installed, navigate to the madvr folder where you extracted madvr-0.87.13.zip. Run install.bat, make sure you run as the admin user, this will add MadVR to the windows registry, so it can be used after the DirectShow transform filters are done processing the video stream. After the madVR.ax registry entry has been added to Windows you should be all set as far as installing madVR.

To configure MPC-HC to use madVR for video rendering, start up MPC-HC, right click anywhere in MPC-HC, go to options, then under playback go to the output section and select madVR to be used for the video renderer.

Mpc-hc enable madvr render.png

Make sure you save / apply any changes before you exit MPC-HC. To view and change madVR settings, play a video with MPC-HC. You will notice there is a new madvr icon in the lower left part of the windows taskbar. This is only available when a video is playing, if you stop a video madVR will not run. Right click on the madvr icon, at this point you should see something like this:

Madvr taskbar icon.png

Click on "Edit madVR Settings" to view all of the available madVR configuration settings. Continue reading the rest of this page to properly configure madVR.


MadVR Configuration for Nvidia GTX 770 SLI

I used to have 2 x GTX 770s in SLI mode, I found that I got better results by dropping my 770s out of SLI and using a single card to play videos. Maybe that has been fixed, but that was the case for me in midish 2014. If you are having stuttering or crazy flashing screens and are wondering wtf to do then I suggest doing as I just described. SLI was meant for gaming, not watching movies, so I wouldn't put the blame on any one party.

I was able to use NNEDI3 to always double the Luma resolution using 32 Neurons. Before my GTX 970 configuration I had to use DXVA2 for image upscaling, since any other madVR settings resulted in 50ms + render times with MPC-HC, which resulted in a lot of dropped video frames. Video quality looks good and these settings also work fine for 720p movies and below. You could argue that using NNEDI3 for Chroma Upscaling is not worth the extra GPU cost, and that Bicubic or Lanczos are better options, and I won't disagree. Everyone has their own preference, I'm just offering up some madvr starting points.

I also took some 720p video screenshots with various settings so you could judge for yourself.

Option Value
chroma upscaling NNEDI3 32 Neurons
image doubling Always double Luma resolution 64 neurons
image upscaling Lanczos 3 Taps with anti-ringing filter
image downscaling Lanczos 3 Taps with anti-ringing filter
smooth motion enable smooth motion only if...
dithering Error Diffusion Option 2

Using the configuration above, I get render times that are under 30ms for almost all content. In addition to these settings you might be able to get away with enabling "Smooth Motion" in addition to "Error Diffusion Dithering Option 1", but Smooth Motion doesn't seem to always have that much of an impact, where as dithering option 1 has a noticeable impact in quality.


MadVR Chroma Upscaling

  • High End GPU: Space Heater Config -- NNEDI3 64 (GTX 770 SLI)
  • High End GPU: Summer Config -- BiCubic 75 AR
  • Everything Else: -- BiCubic 75 AR

BiCubic 75 is the default setting for madvr, and for the most part that is totally fine. Some forums and guides mention that Jinc 3 taps can provide better video quality for Chroma Upscaling, I don't think it's worth all the extra strain on your GPU unless it's winter in Michigan and your house is cold, then use NNEDI3 :D. Personally I don't notice much of a difference in terms of video quality, so I use the default setting most of the time, but if I want to warm up my room I'll use NNEDI3.

I spent some time benchmarking each of the madVR Chroma Upscaling to see what ones were the most demanding. Take a look!

Mad vr chroma upscale.jpg

MadVR Image Doubling

I decided to Always Double Luma Resolution and use 64 neurons because idk, it sounds like science and looks pretty damn good. I recommend staying away from Chroma doubling as it is pretty expensive in terms of render time and doesn't seem to improve quality all that much, but then again, I'm not an expert, I just write wikis. Also, only select the ability to quadruple Luma and Chroma resolution if you can already play 1080p AND 720p videos without getting dropped frames. If you try to play 480p videos with these settings you may have to dial things back a bit.

I am not comfortable with giving my PC too many neurons because Skynet.

These settings seemed to work well. I did not see any dropped frames, and rendering time was under 30ms in most cases, so that was good enough for me. I did notice that SLI really sucks at doing MadVR. In some cases disabling SLI seemed to actually improve performance while using higher doubling settings. That's probably more to do with the new options than it is to do with Nvidia.

Currently I have a single GTX 970, but I did have SLI 770s, I found that in general the GTX 970 handled these settings pretty well.

MadVR image double nnedi3 gtx 970.png

MadVR Image Upscaling

This section seemed to make or break the entire configuration up until now. There can be a massive performance hit if you have already set Chroma Upscaling to use NNEDI3, or if you set really high Image Doubling settings, so if you want to really focus on image doubling then you will need to use DXVA2 here, but that can reduce video quality in some ways. I guess it makes sense, DXVA2 seems to handle things very efficiently by using the GPU Video Logic, but for whatever reason it seems less smooth than Lanczos or Jinc.

I'm not entirely sure why this is faster than using Bilinear or Nearest Neighbor, but I do know that as soon as I enabled either of the GPU Texture Units, render times went up well above a reasonable level, at least 2 or 3 times higher than with DXVA2.

GPU Texture Units

  • Nearest Neighbor -- Performance wasn't great, quality wasn't great. Plus I don't like neighbors, or one near me.
  • Bilinear -- Similar to Nearest Neighbor in terms of performance.

GPU Video Logic

  • DXVA2 -- Performance was amazing, and quality was still decent, not as good as Jinc or Spline, but good enough.

Custom Pixel Shader Code

  • Mitchell-Netravali -- I'm not sure why you would ever use this to be honest.
  • Catmull-Rom -- I like cats, but not this algorithm, there are better ones still ahead.
  • Bicubic -- This is the default option, and a pretty good one. With 75 AR bicubic does a good job at improving video quality, and is relatively fast which means shorter render times.
  • SoftCubic -- Good option, alternative to Bicubic, it's just "softer" I guess. Hey, is that Lanczos up a head?!
  • Lanczos 3 -- Lanczos is awesome. It provides sharp video, which I like. Not like too sharp, the "just right" sharp. It's a bit slower than bicubic but I think it provides better video quality.
  • Spline 3 -- Sounds like a sci fi movie. Spline's awesomeness resides in between Lanczos and Jinc.
  • Jinc 3 -- Provides very good quality, but the most expensive in terms of GPU utilization. Slightly better video quality than Lanczos.

I took a bunch of 720p video screenshots so I could compare the visual quality of each chroma upscaling algorithm to see who the winner was.

  • High End GPU: -- Lanczos 4 Tap AR
  • Mid Range GPU: -- Bicubic 75 AR
  • Fastest Option: -- DXVA2

Mad vr image upscaling.jpg

MadVR Image Downscaling

For most people, you won't ever really have to worry about this setting since most monitors are 1080p, and most content is 1080p or lower, you are not going to downscale that often, even when you do quality won't be a huge factor. I used catmull-rom here, but it really doesn't matter what you use here.

Mad vr image downscaling.jpg

MadVR Artifact Removal

This section removes banding artifacts from the video. I noticed a small performance loss when default debanding strength is set to high, but that only seemed to result in maybe an additional 2 or 3ms for render time. I also set strength during fade in/out to high as well. I didn't notice a massive difference with image quality between high and low, so if you run into issues, set this to mid or low, otherwise leave both at high. Generally speaking you will want to leave this enabled and set to high unless you really need to lose a few ms to get render time to a point where it's not dropping frames.

Mad vr artifact settings.jpg

MadVR Smooth Motion

MadVR's new smooth motion option is pretty cool. It can help to improve overall video quality by providing smoother video playback. Enabling this option will add about 3ms - 4ms to render time. This is not very expensive on it's own but it is something to consider before you enable this. If you choose to enable smooth motion frame rate conversion only if there would be motion judder without it, or always you will see a performance hit either way. So if you are going to enable this setting you might as well select "always" unless you notice ghosting effects or get annoyed. Personally I always leave this on. If you are using a GTX 970 or better, go ahead and enable this.

GTX 970 MadVR Smooth Motion.png

MadVR Dithering and Error Diffusion

Full Error Diffusion and Dithering Wiki

MadVR has added a few new dithering options. Error Diffusion Option 1 and Error Diffusion Option 2. Both of these new options are very demanding, and require a DX11 GPU to use. If you stick with the ordered or random options you will save yourself about 4ms of render time. If you have a GTX 970 or better then I highly recommend enabling Error Diffusion Option 1

I tested both of the options under the main dither choices and there is very little performance gain / loss if you enable or disable the options. From what I could tell there was maybe a 1ms gain / loss for render time if you check the options so only enable them if you feel like the video looks better. I have use colored noise and change dither for every frame enabled.

The GTX 970 can handle Error Diffusion Option 2 without any issues. Even combined with Smooth Motion the render times are under 15ms for 1080p content.


MadVR Processing Settings

Video Decoder Benchmarks

I decided to run some basic tests and compare the various video decoders you can use with mpc-hc. These tests include DXVA2 Native, DXVA2 Copy Back, CUVID, and software. I tested out some 1080p videos, as well as 720p to get an idea of what Video Decoder was faster, and what one provided the best visual quality.

The results were pretty cut and dry, at least in terms of performance. Using CUDA or DXVA Nativeis the best option in terms of performance and lower resource usage. Not only did CUDA have the fastest render times, but it also had the lowest usage in terms of GPU load. It did use slightly more RAM than the other decoders, but only by about 30 MB.

I've recently added a new page that provides screenshot comparisons between DXVA2 and CUVID

DXVA2 and CUVID

Tested using MPC-HC 1.7.6. Using MadVR with [these settings] I am using an Intel i7-4790k with a Nvidia GTX 970 and lots of other awesome components. These are the results when playing a 720p movie clip for a few minutes. I used GPU-Z to record the usage statistics.

Video decoder results.png

GPU Video Engine Load

These results are specifically for the Video Engine Load not the overall GPU usage, which is listed below. These results are pretty small, I would have thought the video engine would be used more than it is, but then again I was only testing a 720p video. As you can see, DXVA2 Copy Back had the highest usage here, with DXVA2 Native and CUDA in second place, and of course in last place is IDLE which is my desktop, and none, which means I did not select any hardware decoder to be used in media player classic. Video decoder engine usage.png

GPU Memory Usage

DXVA2 Native and Cuda both used slightly more RAM than the other decoders, which makes sense. Native and Cuda both keep the video in the GPU memory instead of copying it back to the CPU. As you can see playing a video does indeed use up RAM, but if you don't play a video, then you don't use the RAM. Not much else to say here.

Video decoder mem usage.png

GPU Load

These results confused me a bit, typically when I play a PC game I want my GPU usage to be as high as possible so I get the best possible performance. The thing is, playing a video is a little different than playing a game, or at least I assume that is the case, I'm really just guessing to be honest! Anyway, GPU usage was highest when using Copy Back and not using a decoder at all, which is really odd. It could be due to the fact that the CPU is doing the decoding, then sending it over to the GPU anyway since it's got to display it on your monitor. Basically I don't see a reason to select none.

Video decoder GPU load.png

720p Average Render Time

Cuda and DXVA2 had the best render times here. Lower is better and the results are in milliseconds.

Video decoder render time.png

Other madVR Wiki Articles

MadVR Main Page 720p Chroma Upscaling Screens PotPlayer MadVR DSR 720p Image Doubling madVR Dithering Chroma Upscaling Benchmarks Nvidia Noise Reduction
PotPlayer Main Page 1080p Chroma Upscaling Screens PotPlayer Decoder Comparison 720p Image Upscaling Processing Options NNEDI3 Main Page Nvidia Edge Enhancement

Jinc

Some people prefer to use the Jinc algorithm over others, such as BiCubic or Lanczos. There is no one correct choice, everyone has a preference but one thing is clear. Jinc is expensive in terms of GPU usage. It does offer nice video quality however, so it's worth testing out the various algoreithms and picking the one you like best.

To be honest, I haven't been able to find much information about Jinc.

MadVR Video Decoders

DXVA2

DXVA2 was designed to offload some of the decoding process from the CPU to a GPU. If you have a decent GPU chances are you will want to put it to work as much as possible.

You can use this setting for image upscaling if you have a GPU that is compatible with DXVA2. This is by far the fastest option for image upscaling, and seems to work well when you combine it with NNEDI3 image doubling. I've found that you must enable this if you plan on using image doubling, smooth motion and Error Diffusion Dithering options.

CUVID

CUVID is a video decoder that is developed by Nvidia. The CUVID decoder utilizes the CUDA Video Decoding API (CUVID) to decode video extremely fast. If you are using a Nvidia GPU that supports CUVID and are using a media player like MPC-HC or PotPlayer then I strongly suggest utilizing CUVID instead of DXVA2


LAV Filters

LAV Filters are based off FFmpeg's opensource libraries. The end goal of Lav Filters is to be used in place of closed source, or shitty Filters which are used to play all types of media. LAV Fliters can handle pretty much anything you try to play on your PC and it has some built in detection and decision making in terms of what filters / decoders to send streams too.

The 3 general media filter types are:


  • Source Filter -- The source filter deals with the raw media file, it handles IO, so reading data from the file, or writing data to a file. This is the filter at then "beginning" or "end" of the processing chain. Source filters read data from a file, such as .mp4 or .mkv, decide what to do with the streams based on the file's metadata and ultimately pass the raw streams to the next filter, which is know as the "Transform Filter".
  • Transform Filter -- The transform filter modifies the data that came from the last filter's output. Essentially the transform filter gets data from the source filter, after that you start piping data between various amounts of filters which might be resizing the video resolution, or adding subtitles to the video. Media Stream splitter (parser) and decoder filters are examples of filters in the Transform group. You can have lots of transform filters that all work together to perform various tasks to the audio and video streams which get split up once it hits the transform group. If you are familiar with Linux and the concept of "Pipes" then you should understand what's going on here, essentially each transform filter runs an operation / command and then pipes it's output to be used as the next command / operation's input.
  • Renderer Filter-- The renderer filter sends the audio from the media file from the last transform filter to the soundcard to be heard by you. This filter can also write data to a file. The rendering filter plays the raw media samples . This is where the streams from the transform filters get ready for primetime, so to speak.

The latest filter to be introduced as a DirectShow Video Renderer is EVR, which is compatible with DXVA 2. Personally I find EVR to be not the best video renderer to use. I prefer to use MadVR which significantly improves video quality.

MadVR 0.90 Updates

Artifact Removal

There's a few new settings in madvr 0.90.20 that improve artifact removal. The new setting is called "reduce ringing artifacts", if enabled this setting will reduce ringing during video playback. You can also optionally enable "reduce dark halos around bright edges,too". If you are playing anime this may not be a setting that you want to enable. If you are using a current Nvidia GPU you should enable these settings.

Madvr artifact removal reduce ringing artifacts.jpg

Image Enhancements

MadVR recently added a new section under "processing", the new section is called "image enhancements". The settings here do just what they say, they enhance the image. By default "sharpen edges" and "enhance detail" are checked, so are "Activate anti-bloating filter" and "Activate anti-ringing filter". You can optionally enable the following image enhancements

  • Crispen Edges - If you prefer crispy images insted of sharp images, enable this setting. If you want crisp and sharp images, enable both settings!
  • Thin Edges - If you prefer thinner edges, enable this option for madvr.
  • LumaSharpen - If you enable this, the higher the strength, the sharper the image. Many PC games utilize this technology.
  • AdaptiveSharpen - This will sharpen up blurry edges if enabled, the higher the strength, the less blurry the image is. For more info, visit the AdaptiveSharpen GiHub page

The image below shows the default madvr settings for this section

Madvr image enhancement settings.jpg

Image Doubling Settings

There's some new settings under "Image Doubling" that allow you to utilize "super-xbr", with sharpness mode, and anti-bloating mode. You can choose to "Double Luma Resolution" or "Double Chroma Resolution" with super-xbr or NNEDI3.

In addition to doubling the image you can also choose to "Quadruple Luma Resolution" or "Quadruple Chroma Resolution", again, with super-xbr or NNEDI3. Super-XBR seems to be the best bang for your buck in terms of video quality and performance, but if you have a newer GTX 970 or GTX 1070 you should be able to utilize NNEDI3.

Finally, if you have enough GPU to spare you can choose to enable "Octuple Luma/Chroma Resolution".

There is one additional setting that was not in madvr previously, this is called "always - 2x supersampling". If enabled this will ALWAYS supersample the video by 2x.

Madvr image doubling settings.jpg

Image Upscaling Refinement Settings

This is a newer section to madvr. Similar to the "Image Enhancements" section under "processing", this section lets you configure the same options, this time for video upscaling. I believe you should match this up with what you set under "Image Enhancement" but you may want to do some playing around to determine the best settings for your hardware. The image below shows the madvr default settings for upscaling refinement.

Madvr upscaling refinement settings.jpg

FFmpeg Codec and Libraries Wiki

You can find out more information about the FFMPEG Codec packages, and the libraries it includes by visiting this [FFmpeg Wiki]

PotPlayer MadVR Support and compatibility

For information on how to configure PotPlayer to use madvr please visit this [PotPlayer Madvr Guide]

PotPlayer has supported the use of madvr since mid 2010 when PotPlayer 1.5.22204 was released.

----------------------------------------------------------
[1.5.22204]                                     2010/06/01
----------------------------------------------------------
* Re-configure the form design parameters
* Simplified main menu

+ Add subtitles Fade Effect
+ Add captions to the output surface mode features in the map
+ Add MadVR renderer

Positive / Negative Feedback? I'd love to hear it, please feel free to contact me. I'd like to make this page as useful as possible, if you have any suggestions, thoughts, questions, let me know!

For more information on configuring PotPlayer and MadVR check out the PotPlayer Wiki

MadVR Credits

MadVR was written by Mathias Rauen. Thanks Mathias! Some other fine people incldue the ones from the readme.txt.

CONTRIBUTIONS & THANKS
----------------------------------------------------------------------
 Thanks a lot to Nicolas Robidoux for his help during madVR scaling
 development, and for introducing the concept of doing linear 1-pass
 2D Jinc resampling.

 Thanks a bunch to SEt for creating a well optimized OpenCL NNEDI3
 kernel, and for making it available under LGPL, so I could use it
 in madVR. Here's SEt's OpenCL NNEDI3 doom9 thread:
 http://forum.doom9.org/showthread.php?t=169766

 Thanks to Shiandow for his dithering ideas (e.g. gamma correction).