Scaler won't downscale
-
- Top Contributor
- Posts: 1311
- Joined: Mon Jul 06, 2020 9:37 pm
- Has thanked: 634 times
- Been thanked: 308 times
Scaler won't downscale
I noticed this several months ago when the scaler code changed. If you try to display something that has more vertical resolution than your display, it won't downscale it. Instead, you get the top rows of pixels and the bottom rows are cut off. Any chance this can be fixed? It used to downscale correctly. This affects at least most arcade cores and ao486. I know you would lose horizontal lines in your image but at least you can see the whole screen instead of the top half. Specifically, I am using a 240p mode on my CRT TV and can't see the bottom half of anything higher than 240 vertical resolution.
Also, since I am on the subject of the scaler, it would be amazing if 480i support was added.
Thanks for your consideration to whomever can implement these features.
Also, since I am on the subject of the scaler, it would be amazing if 480i support was added.
Thanks for your consideration to whomever can implement these features.
Re: Scaler won't downscale
I think the template project may be the place to report this.
https://github.com/MiSTer-devel/Template_MiSTer/issues
https://github.com/MiSTer-devel/Template_MiSTer/issues
-
- Top Contributor
- Posts: 1019
- Joined: Thu Dec 10, 2020 5:44 pm
- Has thanked: 315 times
- Been thanked: 238 times
Re: Scaler won't downscale
This weirdly does not match my own experience with ao486. While some stuff is cut off in 720x400 DOS using a 240p resolution, its not half the screen like your description would suggest. Maybe there is something else going on or something different about AO486 or even your setup. Like using direct video would be pretty different from relying on the scaler.
-
- Top Contributor
- Posts: 1311
- Joined: Mon Jul 06, 2020 9:37 pm
- Has thanked: 634 times
- Been thanked: 308 times
Re: Scaler won't downscale
DOS is fine, but playing the 7th guest from the flynnsbit collection seems to be cut off.FoxbatStargazer wrote: ↑Mon Jun 28, 2021 3:35 pm This weirdly does not match my own experience with ao486. While some stuff is cut off in 720x400 DOS using a 240p resolution, its not half the screen like your description would suggest. Maybe there is something else going on or something different about AO486 or even your setup. Like using direct video would be pretty different from relying on the scaler.
-
- Top Contributor
- Posts: 1019
- Joined: Thu Dec 10, 2020 5:44 pm
- Has thanked: 315 times
- Been thanked: 238 times
Re: Scaler won't downscale
Interesting then that DOS and game are treated differently? Is this a general scaler problem then or something specific to AO486?
I also wonder what arcades you have in mind that go above 240p/480i? Its normal to lose important stuff to overscan. Or is this happening when you use rotation?
I also wonder what arcades you have in mind that go above 240p/480i? Its normal to lose important stuff to overscan. Or is this happening when you use rotation?
- Grabulosaure
- Core Developer
- Posts: 79
- Joined: Sun May 24, 2020 7:41 pm
- Location: Mesozoic
- Has thanked: 3 times
- Been thanked: 92 times
- Contact:
Re: Scaler won't downscale
This is a known problem. Actually a design limitation.
- The scaler can be used to resize the video from the core (usually standard 220- 240 lines PAL/NTSC) to any resolution on the HDMI output (can be upscaled with polyphase or downscaled with linear).
- The scaler has a "framebuffer" mode where pixels are directly written to DRAM by the cores and then the scaler generates on-the-fly the high resolution image on the HDMI port.
This framebuffer mode is used by AO486 for superVGA, by MiniMig for RTG, for the Linux console, by some arcade cores when rotating the image, by the double resolution mode on GBA, etc... But, this framebuffer mode cannot downscale, just upscale (or same resolution).
How is it so?
The scaler output pipeline runs at the output pixel frequency (up to around 200MHz).
When upscaling, there are fewer pixels read from memory than pixels on the output, so the scaler only need to read at most one pixel per cycle. Simple.
When downscaling an image in RAM, more than one pixel per cycle must be read for correct interpolation. And that's not easy, particularly for horizontal downscaling.
Vertical downscaling could be a bit more manageable than horizontal, at least for showing an image, maybe not correctly interpolated.
(Lack of interlaced output is somewhat related to that limitation. Interlaced means skipping lines, which is similar to vertical downscale constraints)
- The scaler can be used to resize the video from the core (usually standard 220- 240 lines PAL/NTSC) to any resolution on the HDMI output (can be upscaled with polyphase or downscaled with linear).
- The scaler has a "framebuffer" mode where pixels are directly written to DRAM by the cores and then the scaler generates on-the-fly the high resolution image on the HDMI port.
This framebuffer mode is used by AO486 for superVGA, by MiniMig for RTG, for the Linux console, by some arcade cores when rotating the image, by the double resolution mode on GBA, etc... But, this framebuffer mode cannot downscale, just upscale (or same resolution).
How is it so?
The scaler output pipeline runs at the output pixel frequency (up to around 200MHz).
When upscaling, there are fewer pixels read from memory than pixels on the output, so the scaler only need to read at most one pixel per cycle. Simple.
When downscaling an image in RAM, more than one pixel per cycle must be read for correct interpolation. And that's not easy, particularly for horizontal downscaling.
Vertical downscaling could be a bit more manageable than horizontal, at least for showing an image, maybe not correctly interpolated.
(Lack of interlaced output is somewhat related to that limitation. Interlaced means skipping lines, which is similar to vertical downscale constraints)
-
- Top Contributor
- Posts: 1311
- Joined: Mon Jul 06, 2020 9:37 pm
- Has thanked: 634 times
- Been thanked: 308 times
Re: Scaler won't downscale
Thank you very much for the explanation. The vertical direction is the only thing I care about actually. I have plenty of horizontal resolution. I run the scaler at 1280x240p. I could live with simply throwing away lines (show every other line for 480p sources scaled onto 240p, etc.), or maybe every other frame alternate which lines are shown in the 240 lines (that might look terrible though). For 480i, it is the same concept as my second idea just mentioned - show every other line, then every other in between line. If 480i was available, when needed I would choose that over 240p to get the extra resolution. I run my PC at 480i with emulators and it looks beautiful. I am hoping it can be added to the MiSTer. Thanks again!Grabulosaure wrote: ↑Mon Jun 28, 2021 10:45 pm The scaler output pipeline runs at the output pixel frequency (up to around 200MHz).
When upscaling, there are fewer pixels read from memory than pixels on the output, so the scaler only need to read at most one pixel per cycle. Simple.
When downscaling an image in RAM, more than one pixel per cycle must be read for correct interpolation. And that's not easy, particularly for horizontal downscaling.
Vertical downscaling could be a bit more manageable than horizontal, at least for showing an image, maybe not correctly interpolated.
(Lack of interlaced output is somewhat related to that limitation. Interlaced means skipping lines, which is similar to vertical downscale constraints)
-
- Top Contributor
- Posts: 1311
- Joined: Mon Jul 06, 2020 9:37 pm
- Has thanked: 634 times
- Been thanked: 308 times
Re: Scaler won't downscale
I see it when rotating arcade games. For DOS, a very easy one to see it on is Sim City 2000.FoxbatStargazer wrote: ↑Mon Jun 28, 2021 10:00 pm Interesting then that DOS and game are treated differently? Is this a general scaler problem then or something specific to AO486?
I also wonder what arcades you have in mind that go above 240p/480i? Its normal to lose important stuff to overscan. Or is this happening when you use rotation?
Re: Scaler won't downscale
Instead of interpolation, wouldn’t it be just ok to skip pixels? Surely this would mean you would be able to read one pixel per cycle, and even skip vertical lines?