-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
Describe the bug
For a long time it was recommended to enable 240p output over composite video by adding video=Composite-1:720x480@60e to cmdline.txt. On previous kernel verions 5.10 and earlier, this resulted in the following output from modetest -M vc4:
Connectors:
55 54 connected composite-1 0x0 3 54
modes:
index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
#0 720x480 (scaled) 60.05 720 734 798 858 480 486 492 524 27000 flags: ; type: preferred, driver
#1 720x480i 29.97 720 734 798 858 480 487 493 525 13500 flags: interlace; type: userdef, driver
#2 720x240 60.05 720 734 798 858 240 243 246 262 13500 flags: ; type: driver
This worked perfectly as the device was outputting a progressive 240p signal as expected, but according to KMS/DRM the system was running at 720x480. From what I have gathered, this is achieved by vertically scaling the image to double it's height, but since it's still outputting at 240p it's technically a "fake" resolution. However, this is perfect because GUI apps can display properly in 4:3 while still maintaining a sharp progressive output.
When adding the same option to the cmdline on 6.6, the result is quite different:
Connectors:
id encoder status name size (mm) modes encoders
45 44 connected Composite-1 0x0 4 44
modes:
index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
#0 720x480i 59.94 720 736 800 858 480 486 492 525 13500 flags: nhsync, nvsync, interlace; type: preferred, userdef, driver
#1 720x576i 50.00 720 732 796 864 576 581 587 625 13500 flags: nhsync, nvsync, interlace; type: driver
#2 720x288 50.08 720 740 804 864 288 290 293 312 13500 flags: ; type: driver
#3 720x240 60.05 720 734 798 858 240 243 246 262 13500 flags: ; type: driver
Only 480i and 240p modes are present and when switching mode to 720x240 and starting an application, the video is stretched or fails to scale properly due to the unusual aspect ratio.
Steps to reproduce the behaviour
Boot up Raspberry Pi 4 with latest kernel after adding video=Composite-1:720x480@60e to cmdline.txt and connect to a CRT display.
Device (s)
Raspberry Pi 4 Mod. B
System
May 24 2024 15:30:43
Copyright (c) 2012 Broadcom
version 4942b7633c0ff1af1ee95a51a33b56a9dae47529 (clean) (release) (start_x)
Linux Lakka 6.6.33 #1 SMP Wed Jun 26 07:50:27 CEST 2024 aarch64 GNU/Linux
Logs
No response
Additional context
I realize that the composite output and vc4 driver code have been improved recently to better adhere to broadcast standards. At the same time, this pull request was merged giving the RP1 on the Raspberry Pi 5 much more flexibility with a new custom mode option. #6105
In the case of Lakka there is now a build for dedicated composite output thanks to this very helpful custom mode option. A custom mode that matches the missing one can now easily be defined on the RPi 5. However, for the RPi 3/4 the 6.6 kernel could not be used due to this issue so they are forced to stay with 5.10, which means a unified build is not possible. Similar distros focused around gaming on CRT TVs have had to take steps to fix this issue in other ways as well. It doesn't make sense that the RPi 5 can output in this mode while the previous models used to be able to and are now unable.
That being said, having a complete custom mode option for RPi 3/4 doesn't make sense as the encoder is too strict to allow for just anything. However, the aforementioned "720x480 (scaled)" mode has been present and functional for years it seems. Ultimately, I was wondering if this functionality could be introduced back into the kernel somehow. My proposition is to add a new option for the vc4 driver such as vc4.vdouble that could be added to the cmdline to recreate the scaled mode how it was previously and enable it. If it is possible to restore this functionality it would help many users get the most out of their CRT displays without being relegated to an older kernel version.