在分量和 svideo 之间切换 Radeon 3450 电视输出模式

在分量和 svideo 之间切换 Radeon 3450 电视输出模式

更新:请参阅下面的评论,在分量和 svideo 之间切换 Radeon 3450 电视输出模式

我的这张卡可以在 Windows 中工作,在 Grub 中它有颜色并且看起来不错,但在 xorg 中我只是从组件 (RGB) 电缆中获得黑色和白色。我尝试使用 xrandr 更改电视格式,但没有任何变化。不过我可以改变分辨率。

我怀疑它可能处于复合模式而不是组件模式。该卡有一个 DVI 和一个 DIN 插头,适用于 svideo 或分量 (rgb)

这些是一些命令的输出:

lspci

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV620 LE [Radeon HD 3450] (prog-if 00 [VGA controller])
    Subsystem: Dell OptiPlex 980
    Flags: bus master, fast devsel, latency 0, IRQ 31
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at f7d20000 (64-bit, non-prefetchable) [size=64K]
    I/O ports at e000 [size=256]
    Expansion ROM at 000c0000 [disabled] [size=128K]
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Kernel driver in use: radeon
    Kernel modules: radeon

xrandr --verbose

 Screen 0: minimum 320 x 200, current 1024 x 768, maximum 8192 x 8192
DIN connected primary 1024x768+0+0 (0x55) normal (normal left inverted right x axis y axis) 0mm x 0mm
    Identifier: 0x51
    Timestamp:  29475
    Subpixel:   no subpixels
    Gamma:      1.0:1.0:1.0
    Brightness: 1.0
    Clones:    
    CRTC:       0
    CRTCs:      0 1
    Transform:  1.000000 0.000000 0.000000
                0.000000 1.000000 0.000000
                0.000000 0.000000 1.000000
               filter: 
    _MUTTER_PRESENTATION_OUTPUT: 0 
    tv standard: ntsc 
        supported: ntsc, pal, pal-m, pal-60, ntsc-j, scart-pal, pal-cn, secam
    load detection: 1 
        range: (0, 1)
  1024x768 (0x55) 63.500MHz -HSync +VSync *current
        h: width  1024 start 1072 end 1176 total 1328 skew    0 clock  47.82KHz
        v: height  768 start  771 end  775 total  798           clock  59.92Hz
  800x600 (0x56) 38.250MHz -HSync +VSync
        h: width   800 start  832 end  912 total 1024 skew    0 clock  37.35KHz
        v: height  600 start  603 end  607 total  624           clock  59.86Hz
  848x480 (0x57) 31.500MHz -HSync +VSync
        h: width   848 start  872 end  952 total 1056 skew    0 clock  29.83KHz
        v: height  480 start  483 end  493 total  500           clock  59.66Hz
  720x480 (0x58) 26.750MHz -HSync +VSync
        h: width   720 start  744 end  808 total  896 skew    0 clock  29.85KHz
        v: height  480 start  483 end  493 total  500           clock  59.71Hz
  640x480 (0x59) 23.750MHz -HSync +VSync
        h: width   640 start  664 end  720 total  800 skew    0 clock  29.69KHz
        v: height  480 start  483 end  487 total  500           clock  59.38Hz

答案1

部分答案:

Radeon 可以具有内部(GPU 的一部分)或外部(额外芯片)解码器。它们通常具有寄存器,您可以在其中设置哪些信号在哪个 DAC(数字/模拟转换器)上输出。由于编码器适用于模拟电视,因此通常在一个通道上设置“复合”(亮度和色度),在其他两个通道上设置“亮度”(Y) 和“色度”(C)。通过这种方式,您可以连接 SVideo (Y/C) 和复合电缆。大多数外部编码器还可以选择输出 RGB(在欧洲您需要 SCART 连接器)。

看着源代码,内部(“传统”)编码器设置为 Y 为红色、C 为绿色、Composite 为蓝色:

WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, (RADEON_Y_RED_EN |
                    RADEON_C_GRN_EN |
                    RADEON_CMP_BLU_EN |
                    RADEON_DAC_DITHER_EN));

还有某种自动检测这可能会以不同的方式分配信号。

这就是您从 DIN 插头得到的结果。但是,对于您的特定卡,该顺序可能是错误的。对于外部编码芯片可能会有所不同。

假设您通过 SVideo(而不是通过 SCART/RGB)连接它,如果它在 grub 中“有颜色”,则意味着 BIOS 已将 C 和 Y 正确分配给正确的 DAC。驱动程序可能会出于各种原因以不同的方式分配这些值,因此一旦驱动程序处于活动状态,您最终可能根本没有色度(因此没有颜色)。

我找不到任何方法来覆盖代码中的此分配。如果load detection是一个位字段而不仅仅是一个布尔值,这可能意味着您的 SVideo 电缆色度终端电阻器未正确检测到(但这是猜测)。

因此,选择是 (1) 更改驱动程序代码以允许手动覆盖 DAC 分配/启用,或者 (2) 修补电缆,这样如果色度信号位于错误的 DAC 上,您就可以获取色度信号,或者这样使检测工作正常进行。

两者都不容易。

相关内容