View Full Version : madVR - high quality video renderer (GPU assisted)
huhn
3rd January 2021, 07:42
on a UHD screen quadruple isn't used for 1080 sources.
after reading the profiles more there is no profile for 720p try the HD profiles.
odd sorting for me but it should work perfectly.
Ceppo
3rd January 2021, 14:21
I have a question.
Is madVR best upscaling method better than nnedi3/eedi3 upscaling?
Edit: Another question: is madVr deinterlacing method better than QTGMC?
huhn
3rd January 2021, 19:00
NGU aa replaced nnedi3.
deint depends on your hardware and is generally not better than QTGMC when high settings are used.
tp4tissue
4th January 2021, 06:51
I'm not against NGU, but I truly feel it's using way too much electricity to do what it does. At 30* fov, I can barely barely make out the difference between Nearest neighbor and NGU-VeryHigh Sharp, I guessed wrong 50% of the time NGU vs Lanczos. If I wasn't looking for the difference I don't think I'd see it on anything except animated shows. I've tested this on multiple full bitrate blurays.
If anyone's Green Conscious, I highly recommend sticking with Lanczos for Earth's sake. For anyone' that's been near the Oregan fires. sigh.. it's important.
ryrynz
4th January 2021, 07:53
It's not much power really if you're watching a couple of hours every night which I would guess most probably are not..
You're doing it wrong if you're blindly setting things without looking at the results, I've said this many times to those wanting to know "best settings"
Many are limited by what their cards can push anyway and the rest.. they don't care.. they plonk $1500 on a card and set everything to max 'cos they can.
As long as you're happy we're happy, people really shouldn't judge others choices. Lanczos is a solid resizing algo.
My own choices are based on power usage/noise and visual results. Very high settings are overkill, we all know it.
cork_OS
4th January 2021, 12:58
Another question: is madVr deinterlacing method better than QTGMC?
I've compared QTGMC with default settings and CUVID deinterlacing. To my taste, QTGMC flattens the image too much. Also, my Ryzen 3800X could run QTGMC in realtime for SD videos only.
I can barely barely make out the difference between Nearest neighbor and NGU-VeryHigh Sharp, I guessed wrong 50% of the time NGU vs Lanczos.
Edge-directed upscaling methods like NGU have their limitations. There will no much difference between NGU Sharp vs Lanczos when upscaling soft SD videos or upscaling with a small coefficient. However, I always use NGU Sharp because it also provides RCA for free.
crossclass
4th January 2021, 18:18
May I have the present link to the latest madVR beta; I mean I found through search that "madVRhdrMeasure115.zip" is the latest but on avs forums there's some buzz about a hotfix or something. I would like to apologize beforehand if I am not being clear about the same enough. Also, if I may I would like to ask: "madVRhdrMeasure115.zip" file is almost half the size of "madVRhdrMeasure114.zip", is the installation same as beta 114 (install madVR0.92.17 then overwrite with files inside "madVRhdrMeasure114.zip") or (for beta 115) install madVR0.92.17 then overwrite with files inside "madVRhdrMeasure114.zip" and again overwrite with "madVRhdrMeasure115.zip"?
Thank you.
tp4tissue
4th January 2021, 18:33
It's not much power really if you're watching a couple of hours every night which I would guess most probably are not..
You're doing it wrong if you're blindly setting things without looking at the results, I've said this many times to those wanting to know "best settings"
Many are limited by what their cards can push anyway and the rest.. they don't care.. they plonk $1500 on a card and set everything to max 'cos they can.
As long as you're happy we're happy, people really shouldn't judge others choices. Lanczos is a solid resizing algo.
My own choices are based on power usage/noise and visual results. Very high settings are overkill, we all know it.
It's easy to rationalize personal use, drop in the ocean, but there are alot of drops, and it makes for a sizable chunk of the ocean.
I'm not against people turning it up, I'm just saying we have to be careful in using these rationalizations.
If you've got half a can of soda left, you can drink it later, you don't just pour it out. It works the same with electricity in the current situation, but it's hard to visualize it that way, because the cost is perceptually distant from point of use.
chros
4th January 2021, 18:59
Tell this to GPU manufacturers who call innovation by putting as many sms into the GPU not caring about power usage, let alone miners with their 24/7 usage... And I could keep continue on-and-on...
tp4tissue
4th January 2021, 19:11
Tell this to GPU manufacturers who call innovation by putting as many sms into the GPU not caring about power usage, let alone miners with their 24/7 usage... And I could keep continue on-and-on...
Again, just because there exist worse bad guys, is not justification or exemption for our own personal choices.
VBB
4th January 2021, 19:19
May I have the present link to the latest madVR beta
http://madshi.net/madVRhdrMeasure118.zip
Just extract into the existing madVR folder. Make sure LAV filters are also updated to at least 0.74.1 https://files.1f0.de/lavf/nightly/?C=M;O=A
HillieSan
4th January 2021, 22:11
What does 118 improve or fix?
VBB
4th January 2021, 22:36
Nothing, unless you're tone-mapping. All the betas are basically for testing and improving this particular feature.
crossclass
5th January 2021, 07:29
Thank you.
But I have to ask:
You said "...extract into the existing madVR folder", but my existing madVR folder is composed of madVR 0.92.17 + Beta 114, extract into it or fresh install madVR 0.92.17 then overwrite with Beta 118?
Thanks again.
huhn
5th January 2021, 07:49
doesn't matter. all beta releases replace the same files. just make sure it is 0.92.17 or a beta version where you update over just to be save.
masodes
5th January 2021, 18:51
Hi and happy new year!
How does madvr detect hdr and where does it get the essential information?
I want to render a not tone mapped 4k hdr stream from a capture card, but madvr does not detect the video stream as hdr. For matrix, primaries and color range it only does a "(best guess)" with bt.709 and limited. When looking at the pin info, there is only VIDEOINFOHEADER set, but no VIDEOINFOHEADER2 with DWCONTROLFLAGS.
Is it possible to inject this information upstream of madvr or force madvr to do a "best guess" with bt.2020?
Pin info for the capture stream from the capture card:
Filter : Smart Tee - CLSID : {CC58E280-8AA1-11D1-B3F1-00AA003761C5}
Module : C:\Windows\System32\qcap.dll
- Connected to:
CLSID: {17CCA71B-ECD7-11D0-B908-00A0C9223196}
Filter: Game Capture 4K60 Pro MK.2 Video
Pin: Video Capture
- Connection media type:
Video: YUY2 3840x2160 60fps 3667 mbit/s
AM_MEDIA_TYPE:
majortype: MEDIATYPE_Video {73646976-0000-0010-8000-00AA00389B71}
subtype: MEDIASUBTYPE_YUY2 {32595559-0000-0010-8000-00AA00389B71}
formattype: FORMAT_VideoInfo {05589F80-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 16588800
cbFormat: 88
VIDEOINFOHEADER:
rcSource: (0,0)-(0,0)
rcTarget: (0,0)-(0,0)
dwBitRate: 3667656704
dwBitErrorRate: 0
AvgTimePerFrame: 166666 (60.000 fps)
BITMAPINFOHEADER:
biSize: 40
biWidth: 3840
biHeight: 2160
biPlanes: 1
biBitCount: 16
biCompression: YUY2
biSizeImage: 16588800
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0
Pin info from a recorded clip of the capture card stream where hdr detection is working:
Filter : madVR - CLSID : {E1A8B82A-32CE-4B0D-BE0D-AA68C772E423}
Module : C:\madVR\madVR64.ax
- Connected to:
CLSID: {EE30215D-164F-4A92-A4EB-9D4C13390F9F}
Filter: LAV Video Decoder
Pin: Output
- Connection media type:
Video: dxva 3840x2160 59.96fps
AM_MEDIA_TYPE:
majortype: MEDIATYPE_Video {73646976-0000-0010-8000-00AA00389B71}
subtype: MEDIASUBTYPE_P010 {30313050-0000-0010-8000-00AA00389B71}
formattype: FORMAT_VideoInfo2 {F72A76A0-EB0A-11D0-ACE4-0000C0CC16BA}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 24883200
cbFormat: 112
VIDEOINFOHEADER:
rcSource: (0,0)-(3840,2160)
rcTarget: (0,0)-(3840,2160)
dwBitRate: 0
dwBitErrorRate: 0
AvgTimePerFrame: 166778 (59.960 fps)
VIDEOINFOHEADER2:
dwInterlaceFlags: 0x00000000
dwCopyProtectFlags: 0x00000000
dwPictAspectRatioX: 16
dwPictAspectRatioY: 9
dwControlFlags: 0x7a421581
- VideoChromaSubsampling: 5 (MPEG-2)
- NominalRange : 1 (0-255)
- VideoTransferMatrix : 4 (BT.2020)
- VideoLighting : 0
- VideoPrimaries : 9 (BT.2020)
- VideoTransferFunction : 15 (SMPTE ST 2084 (PQ))
dwReserved2: 0x00000000
BITMAPINFOHEADER:
biSize: 40
biWidth: 3840
biHeight: 2160
biPlanes: 1
biBitCount: 24
biCompression: dxva
biSizeImage: 24883200
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0
I hope anybody has an idea. Thank you!
Tsukinyan
6th January 2021, 09:14
My monitor isn't wanting to exactly hit 23.976hz, even though it supposedly supports it. Whether I change the refresh rate in Nvidia control panel or add a display mode in madVR for 2560x1440p144, the display settles in around 23.938hz, causing a dropped frame ever 25-26 seconds. Is there a way I can get my refresh closer to 23.976? Or is this just the result of my display being a GAMER(tm) display and not a TV? In the past, I've always used Reclock to get better syncing, but I recently did a full reinstall and am starting from scratch.
For reference:
Monitor - Acer Predator XB271HU (1440p, 144hz)
GPU - RTX 3090
RAM - 32GB
Windows - 2004
el Filou
6th January 2021, 14:34
I want to render a not tone mapped 4k hdr stream from a capture card, but madvr does not detect the video stream as hdr. For matrix, primaries and color range it only does a "(best guess)" with bt.709 and limited.
Is it possible to inject this information upstream of madvrEDIT: ah, snap, I missed that it's a live stream and not a file. The shortcuts for the matrix and primaries will work but I don't know how to force HDR without the filename trick. :(
You can add parameters to the file name itself to force them. "<filename> primaries=bt2020 matrix=bt2020 transfer=hdr.<extension>" will force what you want.
For matrix and primaries you can also use Ctrl+Alt+Shift+M and Ctrl+Alt+Shift+P shortcuts to toggle them.Nothing, unless you're tone-mapping. All the betas are basically for testing and improving this particular feature.Not 100% true, AFAIK it's the only one but test build 113 enhanced rendering efficiency to better use the GPU (IIRC "allow a higher percentage of GPU usage before frames start to drop").
Siso
6th January 2021, 14:47
Not 100% true, AFAIK it's the only one but test build 113 enhanced rendering efficiency to better use the GPU (IIRC "allow a higher percentage of GPU usage before frames start to drop").
So beta build 113 is better than the latest 0.92.17?
masodes
6th January 2021, 15:14
EDIT: ah, snap, I missed that it's a live stream and not a file. The shortcuts for the matrix and primaries will work but I don't know how to force HDR without the filename trick. :(
You can add parameters to the file name itself to force them. "<filename> primaries=bt2020 matrix=bt2020 transfer=hdr.<extension>" will force what you want.
For matrix and primaries you can also use Ctrl+Alt+Shift+M and Ctrl+Alt+Shift+P shortcuts to toggle them.
The filename parameters work perfect for files. Didn't know that.
Unfortunately i need something that works for the live stream. Is there also a shortcut equivalent to the "transfer=hdr" parameter? Matrix and Primaries toggle don't force the stream to hdr.
el Filou
6th January 2021, 18:46
So beta build 113 is better than the latest 0.92.17?Rendering is more efficient. Reported rendering times won't change but GPU use will be lower for the same ms, and you can get rendering time closer to frame time before it starts dropping frames. OTOH, 113 crashes when using smooth motion so if you use that it's best not to use that build. 114 caused crashes on some systems, 115 fixed that but it has other caveats. I didn't have time to keep up with the tread recently so I don't know what's changed.
VBB
6th January 2021, 19:54
Not 100% true, AFAIK it's the only one but test build 113 enhanced rendering efficiency to better use the GPU (IIRC "allow a higher percentage of GPU usage before frames start to drop").
You are correct, but I replied to a guy asking what's 'improved or fixed' in 118, specifically ;)
If someone decides to use the betas instead of the last official version from now almost 2.5 years ago, you might as well go with the latest (119 (http://madshi.net/madVRhdrMeasure119.zip) as of 1/6).
VBB
6th January 2021, 20:06
My monitor isn't wanting to exactly hit 23.976hz, even though it supposedly supports it.
First off, are you sure your monitor is capable of switching to a lower than native refresh rate? If so, you should enter 1440p23 in madVR and see if it works.
If the monitor only does a fixed 144Hz, simply set madVR to NOT switch at all and use smooth motion. At such a high refresh rate SM does not blur noticeably, and you won't have any dropped/repeated frames.
A third option is to enter 1440p143 in madVR and check if the monitor will switch to that. If it does, there's no need for SM, because 23.976 will go evenly into 143.856.
Tsukinyan
7th January 2021, 04:56
If the monitor only does a fixed 144Hz, simply set madVR to NOT switch at all and use smooth motion. At such a high refresh rate SM does not blur noticeably, and you won't have any dropped/repeated frames.
Thanks for the reply. The monitor supports other refresh rates, but I went with this option as setting to 1440p23 would instead have the display at 23.938. For 1440p144 and SM on, the OSD mentioned there would be a dropped frame every 2 minutes or so. However the dropped frame count didn't actually increase while watching a 90 minute movie. I think all of my content is 23.976, so I'll call this setup good. Glad I could move away from an x86 installation and finally switch to x64. Appreciate the help.
senzaparole
7th January 2021, 10:50
Hello everyone!
I have a problem with MPC-BE and madVR.
If from windows I set the audio output "topping" to send the audio to the DAC / AMP Topping to listen to headphones, madvr goes crazy: I lose many frames.
If instead from windows I set the optical output of the motherboard to send the audio to the DAC / AMP for listening in headphones, madvr works as well as ever.
This problem is only with MPC-BE. With MPC-HC no problem both if the audio output is "topping" and if the audio output is "optical"
In MPC-BE I added LAV video and audio filters to MPC-BE.
And they are the same as MPC-HC.
Once madVR is set up, shouldn't it work fine on every player and any windows audio output?
maxkolonko123
7th January 2021, 14:44
how to check what beta version im running?
toniash
7th January 2021, 19:04
What does it mean and how it can be lowered?
masodes
8th January 2021, 08:01
The filename parameters work perfect for files. Didn't know that.
Unfortunately i need something that works for the live stream. Is there also a shortcut equivalent to the "transfer=hdr" parameter? Matrix and Primaries toggle don't force the stream to hdr.
Where does madvr get the necessary hdr info data from?
Is it the VIDEOINFOHEADER2 block with DWCONTROLFLAGS?
huhn
8th January 2021, 08:26
how to check what beta version im running?
there is no version in madVR betas so there is no clear identifier.
the HDR page options could be used to identify the version to some version but...
What does it mean and how it can be lowered?
final steps is doing level conversation, dithering and calibration and may some other stuff we don't know.
3D LUT is well known to be able to increase this by a lot.
some bugs like bad power settings from the GPU can make it look like it takes a long time which isn't true. the same for the first renderstep which isn't the same in all cases.
Where does madvr get the necessary hdr info data from?
Is it the VIDEOINFOHEADER2 block with DWCONTROLFLAGS?
some of the HDR metadata is coming from videoinfoheader2.
HDR has wuite a lot of metadata but the most important metadata is clearly in there.
VideoChromaSubsampling
- NominalRange
- VideoTransferMatrix
- VideoLighting
- VideoPrimaries
- VideoTransferFunction
el Filou
8th January 2021, 14:41
I have a problem with MPC-BE and madVR. If from windows I set the audio output "topping" to send the audio to the DAC / AMP Topping to listen to headphones, madvr goes crazy: I lose many frames. [...]
In MPC-BE I added LAV video and audio filters to MPC-BE.
And they are the same as MPC-HC.Are the two players also using the same audio renderer? Is the "clock deviation" reported by madVR OSD different with the two players?
masodes
8th January 2021, 19:19
some of the HDR metadata is coming from videoinfoheader2.
HDR has wuite a lot of metadata but the most important metadata is clearly in there.
VideoChromaSubsampling
- NominalRange
- VideoTransferMatrix
- VideoLighting
- VideoPrimaries
- VideoTransferFunction
Thank you for the information. So, if a videoinfoheader2 block is present madvr will detect the source as hdr?
Polopretress
8th January 2021, 22:11
Hello.
With a UHD HDR10 VP or TV, is it better to output a video source FullHD SDR 8 bits in "8 bits" or select "10 bits and higher" in madvr device/properties ?
TY
VBB
8th January 2021, 22:21
That depends entirely on how your display handles 10-bit. In a lot of cases, setting the entire video chain to 8-bit and letting madVR dither is the best option for both SDR and HDR media.
huhn
9th January 2021, 00:43
Thank you for the information. So, if a videoinfoheader2 block is present madvr will detect the source as hdr?
no but i'm not really the person to talk about it.
to understand a file as HDR it needs a correct value in VideoTransferFunction i don't even know the value.
masodes
9th January 2021, 09:01
to understand a file as HDR it needs a correct value in VideoTransferFunction i don't even know the value.
Perfect, that's what I wanted to know.
My question was not precise enough. With videoinfoheader2 I also had these values (videotransferfunction) in mind.
senzaparole
9th January 2021, 12:06
Are the two players also using the same audio renderer? Is the "clock deviation" reported by madVR OSD different with the two players?
Thanks for the reply. You've been very good. You wrote a few words but I think they have fully hit the problem.
I attach some pictures. I apologize for some words in Italian but I think you understand the same.
below the audio render of MPC-BE:
https://i.ibb.co/mz9ZdfC/mpc-be.jpg (https://ibb.co/DK9cm0D)
below the audio render of MPC-HC:
https://i.ibb.co/19x3PzF/mpc-hc.jpg (https://ibb.co/xMQyBFx)
MadVR OSD using MPC-BE:
https://i.ibb.co/fXtWDyY/mpc-be-OSD.jpg (https://ibb.co/yN5C4Zn)
MadVR OSD using MPC-HC:
https://i.ibb.co/v322dCy/mpc-hc-osd.jpg (https://ibb.co/gSssWbq)
In windows I set the "topping" audio output to send the audio to the DAC / AMP Topping E30 / L30.
Why does madVR work like this?
Polopretress
9th January 2021, 17:31
That depends entirely on how your display handles 10-bit. In a lot of cases, setting the entire video chain to 8-bit and letting madVR dither is the best option for both SDR and HDR media.
Yes i know, it is sometime depending on the TV/VP behaviour.
Then 10 bits source can be output in 8 bits.
Dithering is also active on 10 bits output, i guess.
My question was more on 8 bits source. I feel it is better to output in 8 bits but i have a doubt that using 10 bits could be better on some VP/TV.
VBB
10th January 2021, 00:12
Well, setting madVR to output in 10-bit doesn't magically "upgrade" your 8-bit file, if that's what you mean. At the same time, I see no harm in doing so, and it saves you from having to create additional profiles. So, in short, if your video chain is all 10-bit, set madVR to "10-bit or higher", and if your chain is all 8-bit, set it to "8-bit". You could also use "Auto" to have madVR switch between 8 and 10 (I've seen it work like this, but not sure if it's meant to do it that way). In the end, it doesn't matter unless your media is 10-bit or higher.
Someone (huhn) will correct me, if I'm totally off here ;)
tp4tissue
10th January 2021, 04:04
10Bit , you HAVE TO TEST IT. you can't just assume it works. because much of the time, it' doesn't work even if your TV box says it's suppose to .
https://forum.doom9.org/showthread.php?p=1928929#post1928929
huhn
10th January 2021, 05:31
Someone (huhn) will correct me, if I'm totally off here ;)
if you ask me so nicely.
10 bit is always better in theory the source bit deep doesn't matter for this it's always float point math and having lower dither noise is objectively better.
practice is sadly something else.
VBB
10th January 2021, 08:53
10Bit , you HAVE TO TEST IT.
That's exactly what I said in my first reply two posts up ;)
OK, maybe a few more than two...
HillieSan
10th January 2021, 10:07
I have put a RTX 3060 Ti in my HTPC and sadly the frame rate is bad.
What should I do?
Using CRU? Is there a good tutorial?
Installing NVidia Studio drivers instead of the Game drivers?
Other tips?
In what way are the Studio drivers different from the Game drivers?
Klaus1189
10th January 2021, 10:46
sadly the frame rate is bad
What is "bad"? I assume 23 Hz refresh rate for 24/1.001 which is ~23.976?
What driver version do you use? There are only 6 to choose from.
How is the TV/Projector/Monitor and Sound System connected?
This all comes into play with refresh rates.
HillieSan
10th January 2021, 11:09
“Bad” means stuttering at 23Hz. I use the latest NVidia drivers.
I use a JVC X5000 projector. The issue is the graphics card. I come from AMD RX 480 and it plays nicely, but gets too hot. I used a GTX 660 a very long time ago and I had to use cru to improve it. Nvidia drivers were unstable at the time. I wonder if Nvidia improved things.
Klaus1189
10th January 2021, 11:52
Stuttering, like dropped frames? Perhaps you mean judder, like 3:2 pulldown? I have a RX480 still laying around here and this one didn't force PC mode on one of my TVs and 24p playback was fine on this specific TV.
But my RX 5700 XT and also my new RTX30 card force PC mode and this TV does not play 24p native it produces 3:2 judder, despite reporting 24p in OSD info. This OSD info only reports the input signal, not what the TV does.
So PC mode will do perfect 4:4:4 resolution, but not good 24 playback. In NOT pc mode I do not get 4:4:4 color, but I get perfect 24p. This was the reason that user could point me in the direction which manufacturer supports both.
My Q9FN does both - perfect 4:4:4 and perfect 24p, but you have to enable custom settings, which is also available in rtings site of the Q9FN.
But if the TV is in PC mode most TVs do not support native 24p mode, instead it will produce 3:2 judder. This is the reason why I created this thread:
https://forum.doom9.org/showthread.php?t=180421
Anyway there is a workaround for the possible occurence of stutter with Nvidia cards: See second note in the driver thread:
https://forum.doom9.org/showpost.php?p=1862365&postcount=2
EDIT: I forgot to mention, that I can set PC mode manually in this TV when using the RX480, but after restart the pc mode is off. I tried soy many things. All newer TVs I have, including the Q9FN have the possibibly to set PC mode and they keep it even after shutdown and restart of the PC regardless of RX480 or RX 5700 XT or Nvidia RTX30.
HillieSan
10th January 2021, 12:21
You are right it is judder. I will check your links.
Another problem is that the resolution jumps from 3840x2160 to 1920x1080 using MPC BE and Madvr on the TV (Samsung). I never had this before.
In madvr I am using:
- display modes: switch to matching display mode...
- list of all display modes: 2160p60, 2160p59, 2160p24, 2160p23, 2160p50
Some how the resolution is not in the list.
BTW I am testing using a movie on 24Hz.
Klaus1189
10th January 2021, 12:40
Perhaps refresh rate switching is set in MPC-BE itself. Use only one of the those two for refresh rate switching, for madVR I personally use madVR itself, but for everything else you can also use refresh rate switching in MPC-BE.
I am a huge fan of the developers of MPC-BE and MPC Video Renderer. Did you know also MPC Video Renderer does support HDR now?
Siso
10th January 2021, 12:49
MPC video renderer is not as good as madvr.
Klaus1189
10th January 2021, 13:02
Not to replace madVR but to be happy to have also another Video Renderer which supports HDR. I am happy with MPC Video Renderer.
HillieSan
10th January 2021, 13:12
Perhaps refresh rate switching is set in MPC-BE itself. Use only one of the those two for refresh rate switching, for madVR I personally use madVR itself, but for everything else you can also use refresh rate switching in MPC-BE.
I am a huge fan of the developers of MPC-BE and MPC Video Renderer. Did you know also MPC Video Renderer does support HDR now?
I only use the madvr rate switch. I just tried the game mode on the TV and the judder is more. This is what I have expected because the video motion processing of the TV is turned off. The motion option in the TV setup are disabled. I think the game mode is a good mode to tune the graphics card.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.