C4 Color Range 문의

Post Reply
heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

C4 Color Range 문의

Post by heavyman »

MIPI LCD를 MIPI to HDMI board에 연결하여 ODROID-C4에 연결해서 사용합니다.
White가 White로 안나오고 Black이 Black으로 안나오는 문제가 있어 Color Range가 달라서 발생하는 것으로 추정하고 있습니다.
일반 Monitor를 C4에 연결하여 Monitor의 OSD 메뉴에서 확인해보니 C4에서 Limited RGB로 내보내고 있는 것으로 보입니다.
C4에서 Full RGB로 출력할 수 있는 방법이 있나요?
hdmitx=forcergb는 해봤는데 안됩니다.
OD는 ubuntu-20.04-4.9-mate-odroid-c4-hc4-20201214.img.xz 사용하고 있습니다.

User avatar
odroid
Site Admin
Posts: 37281
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean
ODROIDs: ODROID
Has thanked: 1747 times
Been thanked: 1127 times
Contact:

Re: C4 Color Range 문의

Post by odroid »

일반 Monitor에서도 Black/While 색상이 실제와 다르게 표시되나요?

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

일반 모니터에서는 제대로 표현됩니다.
일반 모니터를 연결한 뒤에 모니터의 OSD 메뉴에서 Input Color Format을 보면 YPbPr로 되어 있습니다.

User avatar
odroid
Site Admin
Posts: 37281
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean
ODROIDs: ODROID
Has thanked: 1747 times
Been thanked: 1127 times
Contact:

Re: C4 Color Range 문의

Post by odroid »

저희가 잘 모르는 분야의 문제인것 같습니다.

사용하시는 MIPI LCD 및 AD 보드의 사양서를 볼 수 있는 링크가 있을까요?

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

추가 정보가 늦었습니다.
ODROID보드의 적용 제품은 LCD를 사용한 3D Printer 입니다.
LCD의 백라이트 대신에 UV를 사용합니다.
그래서 LCD를 통과한 UV 양을 측정합니다.
White(255) 이미지 상태에서 UV 통과양이 C2를 연결했을 때는 3.43이 나오고, C4를 연결했을 때는 2.465가 나옵니다.
Black(0) 이미지 상태에서 UV 통과양은 C2를 연결했을 때는 0.017이 나오고, C4를 연결했을 때는 0.585가 나옵니다.

LCD를 C2에 연결했을 때는 아래와 같이 선명하게 나옵니다.
Image

LCD를 C4에 연결했을 때는 아래와 같이 노이즈가 낀 것처럼 나옵니다.
Image

LCD를 C2에 연결하고 boot.ini에서 forcergb를 끈 상태에서는 아래와 같이 나옵니다.
C4 처럼 노이즈가 끼지는 않고 forcergb를 켰을 때보다 밝게 나옵니다.
Image

C2의 boot.ini는 아래와 같습니다.

Code: Select all

ODROIDC2-UBOOT-CONFIG

setenv display_autodetect "true"

setenv hdmi_forcergb "1"        # Enabled

setenv m_bpp "32"

setenv hpd "true"

setenv monitor_onoff "false" # true or false

setenv nographics "0"

setenv mesontimer "1"

setenv disableuhs "false"

setenv mmc_removable "true"

setenv usbmulticam "false"

setenv disable_vu7 "true"

setenv condev "console=ttyS0,115200n8 console=tty0"   # on both

setenv maxcpus "4"

setenv max_freq "1536"  # 1.536GHz

###########################################

# Boot Arguments
if test "${display_autodetect}" = "true"; then usb pwren; hdmitx edid; fi
if test "${m}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
if test "${disable_vu7}" = "false"; then setenv hid_quirks "usbhid.quirks=0x0eef:0x0005:0x0004"; fi
if test "${hdmi_forcergb}" = "1"; then setenv hdmitx "hdmitx=forcergb"; fi

setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro ${condev} no_console_suspend hdmimode=${m} ${cmode} ${hdmitx} m_bpp=${m_bpp} vout=${vout} fsck.repair=yes net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam} ${hid_quirks}"

# Booting

setenv loadaddr "0x11000000"
setenv dtb_loadaddr "0x1000000"
setenv initrd_loadaddr "0x13000000"

fatload mmc 0:1 ${initrd_loadaddr} uInitrd
fatload mmc 0:1 ${loadaddr} Image
fatload mmc 0:1 ${dtb_loadaddr} meson64_odroidc2.dtb
fdt addr ${dtb_loadaddr}

if test "${mesontimer}" = "0"; then fdt rm /meson_timer; fdt rm /cpus/cpu@0/timer; fdt rm /cpus/cpu@1/timer; fdt rm /cpus/cpu@2/timer; fdt rm /cpus/cpu@3/timer; fi
if test "${mesontimer}" = "1"; then fdt rm /timer; fi

if test "${nographics}" = "1"; then fdt rm /reserved-memory; fdt rm /aocec; fi
if test "${nographics}" = "1"; then fdt rm /meson-fb; fdt rm /amhdmitx; fdt rm /picdec; fdt rm /ppmgr; fi
if test "${nographics}" = "1"; then fdt rm /meson-vout; fdt rm /mesonstream; fdt rm /meson-fb; fi
if test "${nographics}" = "1"; then fdt rm /deinterlace; fdt rm /codec_mm; fi

booti ${loadaddr} ${initrd_loadaddr} ${dtb_loadaddr}
C4의 boot.ini는 아래와 같습니다.

Code: Select all

ODROIDC4-UBOOT-CONFIG

setenv bootlabel "Hardkernel Ubuntu 20.04"

setenv board "odroidc4"
setenv display_autodetect "true"
setenv hdmimode "1080p60hz"
setenv monitor_onoff "false" # true or false
setenv overscan "100"
setenv sdrmode "auto" 
setenv voutmode "hdmi"
setenv disablehpd "false"
setenv cec "true"
setenv disable_vu7 "true"
setenv max_freq_a55 "1908"    # 1.908 GHz, default value
setenv maxcpus "4"
setenv enable_wol "0"

setenv hdmi_forcergb "1"        # Enabled          


# Set load addresses
setenv dtb_loadaddr "0x10000000"
setenv dtbo_addr_r "0x11000000"
setenv k_addr "0x1100000"
setenv loadaddr "0x1B00000"
setenv initrd_loadaddr "0x3700000"

if test "${variant}" = "hc4"; then
       setenv max_freq_a55 "1800"
fi

load mmc ${devno}:1 ${loadaddr} config.ini \
    && ini generic ${loadaddr}
if test "x${overlay_profile}" != "x"; then
    ini overlay_${overlay_profile} ${loadaddr}
fi

setenv condev "console=ttyS0,115200n8"   # on both


### Normal HDMI Monitors
if test "${display_autodetect}" = "true"; then hdmitx edid; fi
if test "${hdmimode}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
if test "${cec}" = "true"; then setenv cec_enable "hdmitx=cec3f"; fi
if test "${disable_vu7}" = "false"; then setenv hid_quirks "usbhid.quirks=0x0eef:0x0005:0x0004"; fi


# Boot Args
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait rw ${condev} ${amlogic} no_console_suspend fsck.repair=yes net.ifnames=0 elevator=noop hdmimode=${hdmimode} cvbsmode=576cvbs max_freq_a55=${max_freq_a55} maxcpus=${maxcpus} voutmode=${voutmode} ${cmode} disablehpd=${disablehpd} cvbscable=${cvbscable} overscan=${overscan} ${hid_quirks} monitor_onoff=${monitor_onoff} logo=osd0,loaded ${cec_enable} sdrmode=${sdrmode} enable_wol=${enable_wol}"

# Load kernel, dtb and initrd
load mmc ${devno}:1 ${k_addr} Image.gz
load mmc ${devno}:1 ${dtb_loadaddr} amlogic/meson64_odroid${variant}.dtb
load mmc ${devno}:1 ${initrd_loadaddr} uInitrd
fdt addr ${dtb_loadaddr}

if test "x{overlays}" != "x"; then
    fdt resize ${overlay_resize}
    for overlay in ${overlays}; do
        load mmc ${devno}:1 ${dtbo_addr_r} amlogic/overlays/${board}/${overlay}.dtbo \
            && fdt apply ${dtbo_addr_r}
    done
fi

# unzip the kernel
unzip ${k_addr} ${loadaddr}

# boot
booti ${loadaddr} ${initrd_loadaddr} ${dtb_loadaddr}
C2, C4 모두 detect된 modeline은 아래와 동일합니다.

Code: Select all

modeline=1080,1920,121710,99599,50,1080,1156,1166,1222,1920,1970,1972,1992,0,0,1
C2의 OS 버전은

Code: Select all

Linux odroid64-ram600 3.16.63+ #1 SMP PREEMPT Tue Apr 9 11:18:28 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
C4의 OS 버전은

Code: Select all

Linux odroidc4 4.9.236+ #1 SMP PREEMPT Tue Dec 22 18:41:19 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
AD 보드는
https://www.digitalview.com/controllers ... oller.html

LCD는
https://drive.google.com/file/d/1YD1bFU ... sp=sharing

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

안녕하세요.

C4에 현재 hdmitx=forcergb 기능이 없는 것으로 보입니다.
좀 더 상세하게 내용을 확인하고 기능을 확인한 후, 진행사항을 공유해 드리겠습니다.
이 후, C4에서도 원하시는 화면이 나오는지 다시 테스트를 부탁 드리겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

안녕하세요.

C4에 hdmi color space를 강제로 RGB444로 설정할 수 있는 기능을 추가하였습니다.

정식 버전에 포함하기 전에 테스트 커널 이미지를 공유해 드리오니, 시간이 괜찮으실 때 테스트를 해봐 주시겠습니까?

1. 테스트 Image.gz 다운로드
아래 링크에서 Image.gz를 받으실 수 있습니다.
https://drive.google.com/drive/folders/ ... sp=sharing

2. 기존 Image.gz 백업 후, 테스트용 Image.gz 복사
카드의 BOOT 폴더에 있는 기존 Image.gz을 따로 백업해 두시고,
이 후 테스트용 Image.gz를 BOOT 폴더에 복사해 주세요.

3. boot.ini에 아래 라인 추가
BOOT 폴더에 있는 boot.ini에 아래 라인을 추가.

Code: Select all

# Boot Args
setenv bootargs "root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait rw ${condev} ${amlogic} no_console_suspend
 fsck.repair=yes net.ifnames=0 elevator=noop hdmimode=${hdmimode} cvbsmode=576cvbs max_freq_a55=${max_freq_a55} max
cpus=${maxcpus} voutmode=${voutmode} ${cmode} disablehpd=${disablehpd} cvbscable=${cvbscable} overscan=${overscan} 
${hid_quirks} monitor_onoff=${monitor_onoff} logo=osd0,loaded ${cec_enable} sdrmode=${sdrmode} enable_wol=${enable_
wol}"

### Boot Args 아래 부분에 추가
setenv bootargs ${bootargs} hdmitx=forcergb
4. 재부팅 후 테스트
참고로, 커널 이미지만 공유해 드렸기 때문에 모듈 드라이버들은 정상적으로 동작하지 않을 것입니다.
USB WIFI 등 기타 동작은 안될 수 있으므로 이 테스트 이미지는 forcergb 테스트용으로만 사용하세요.

이상입니다.

color space가 YUV444 default에서 RGB444로 변경된 것은 아래 sysfs node에서 확인하였습니다만,
저희 쪽에 RGB only로 동작하는 모니터가 없어서 사용하고 계신 모니터에서 어떻게 동작하는지 확인해주시면 도움이 될 것 같습니다.

forcergb 적용 전/후에 변경 내용은 아래 sysfs에서 확인 가능합니다.
ssh connection이나 desktop 화면 terminal을 사용하시면 됩니다.

1. forcergb 적용 전
(updated : 2021/03/25)
cs = 2 (COLORSPACE_YUV444)

Code: Select all

root@odroid:~# cat /sys/class/amhdmitx/amhdmitx0/config 
cur_VIC: 116
cur_video_param->VIC=116
cd = 4
cs = 2
audio config: on
audio on/off: on
audio source: SPDIF
audio type: L-PCM
audio channel num: 2 channels
audio sample rate: 44.1kHz
audio sample size: 16bit
3D config: off

2. forcergb 적용 후
cs = 0 (COLORSPACE_RGB444)

Code: Select all

root@odroid:~# cat /sys/class/amhdmitx/amhdmitx0/config 
cur_VIC: 116
cur_video_param->VIC=116
cd = 4
cs = 0
audio config: on
audio on/off: on
audio source: SPDIF
audio type: L-PCM
audio channel num: 2 channels
audio sample rate: 44.1kHz
audio sample size: 16bit
3D config: off
Last edited by joy on Thu Mar 25, 2021 6:35 pm, edited 1 time in total.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

테스트 해보았지만 결과는 동일합니다.
Image

/sys/class/amhdmitx/amhdmitx0/config의 cs값이 제가 테스트하는 보드에서는 forcergb 적용 전이 2이고 적용 후가 0으로 나옵니다.
dmesg에서 kernel command line은

Code: Select all

[    0.000000] Kernel command line: root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait rw console=ttyS0,115200n8 no_console_suspend fsck.repair=yes net.ifnames=0 elevator=noop hdmimode=custombuilt cvbsmode=576cvbs max_freq_a55=1908 maxcpus=4 voutmode=hdmi modeline=1080,1920,121710,99599,50,1080,1156,1166,1222,1920,1970,1972,1992,0,0,1 disablehpd=false cvbscable= overscan=100 monitor_onoff=false logo=osd0,loaded hdmitx=cec3f sdrmode=auto enable_wol=0 hdmitx=forcergb
와 같습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

확인 감사합니다.

1080x1920 모드인 경우에만 발생하는 노이즈일수도 있을 것 같습니다.
해당 해상도로 문제를 재현해보고 다시 내용 공유해드리겠습니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

올려주신 커널 이미지를 올려서 일반 모니터에 연결해서 Input Color Format을 봤을 때 여전히 YPbPr로 나옵니다.
Last edited by heavyman on Thu Feb 25, 2021 3:29 pm, edited 2 times in total.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

heavyman wrote:
Thu Feb 25, 2021 3:10 pm
올려주신 커널 이미지를 올려서 일반 모니터에 연결해서 Input Color Format을 봤을 때 여전히 YPbPr로 나옵니다.
아. 그렇군요.
확인 감사합니다.
저희쪽에서 칩 내부 설정말고 실제로 출력 color format을 확인할 수 방법도 다시 찾아보겠습니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

ODROID-C2에서 forcergb 옵션을 껐을 때는 일반 모니터에서 Input Color Format이 YPbPr로 잡히고 아래 사진의 표시한 부분과 같이 노이즈들이 떠다닙니다.
Image

ODROID-C2에서 forcergb 옵션을 켰을 때는 일반 모니터에서 Input Color Format이 RGB로 잡히고 노이즈가 없습니다.
Image

ODROID-C4에서는 올려주신 커널 이미지를 적용했을 때나 적용하지 않았을 때나 모두 일반 모니터에 연결했을 때 Input Color Format이 YPbPr로 나오고 작은 노이즈들이 떠다닙니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

그리고 제가 테스트하고 있는 일반 모니터는 DELL의 1920x1200 해상도 모니터인데 C2에 연결하면 1920x1200으로 잡히는데 C4에 연결하면 1920x1080으로 잡히네요.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

저희가 사용하고 있는 다른 종류의 1440x2560 LCD를 C2에 연결했을 때는 제대로 나와서 현재 제품에 사용하고 있습니다.

C2에서 forcergb 옵션을 켰을 때
Image

C2에서 forcergb 옵션을 껐을 때
Image

그런데 해당 LCD를 C4에 연결하면 화면이 계속 떨립니다.
https://drive.google.com/file/d/1CWIwZb ... sp=sharing

C2와 C4에서 modeline은 동일하게 아래와 같이 나옵니다.

Code: Select all

modeline=1440,2560,204790,128798,50,1440,1510,1545,1590,2560,2572,2574,2576,0,0,1

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

@heavyman,
상세한 테스트 내용 공유해주셔서 감사합니다.

관련 증상은 두 가지 문제점을 수정해야 하는 부분입니다.

(1) 1080x1920 portrait 비정상 화면
C2에서는 정상적으로 동작하는 일부 Portrait 해상도가 C4에서는 노이즈가 생기면서 화면이 좌우로 떨리는 증상이 있습니다.
저희쪽에서도 재현이 되는 문제이며 현재 가장 높은 우선 순위로 문제점 파악을 진행하고 있습니다.
알려주신 1440x2560 모드도 같이 확인하겠습니다.

(2) forcergb 기능 추가
이 부분 역시 C2와 동일하게 기능을 추가하겠습니다.

내용이 업데이트되는 대로 바로 공유해 드리겠습니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@joy
업데이트된 내용 있을까요?

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

@heavyman,
업데이트가 늦어져서 죄송합니다.

1080x1920 모드에서 발생하는 화면 노이즈는 osd driver쪽 수정이 필요한 것으로 보이는데 아직 문제를 완전히 해결하지 못했습니다.
안드로이드 상에서는 정상적으로 화면이 나오도록 해결했는데 우분투에서는 여전히 발생하여 계속 해결책을 공유해드리지 못하고 있습니다.

이번 주 말쯤 다시 진행사항 공유해 드리겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

@heavyman,

아래 2가지 내용 업데이트된 부분 우선 공유해 드립니다.

1. 1080x1920 portrait mode에서 발생하는 화면 노이즈
아래 Patch를 적용하여 화면 전체에 끼어있는 노이즈 문제는 해결되었습니다.
diff 파일로 첨부하였습니다.
아직 다른 세로 해상도나 기존 해상도에서 테스트를 완료하지 못해 HK github에는 merge되지 않은 상태입니다.

Code: Select all

From 999a027ee1f4c030b58765d4f6e0a198e2bed53f Mon Sep 17 00:00:00 2001
From: Joy Cho <joy.cho@hardkernel.com>
Date: Tue, 02 Mar 2021 16:49:38 +0900
Subject: [PATCH] ODROID-COMMON: osd: Update osd for portrait modes

Change-Id: Ibc0ba560d9db8875e9d676dee8511fc29cd09a51
---

diff --git a/drivers/amlogic/media/osd/osd_fb.c b/drivers/amlogic/media/osd/osd_fb.c
index 850090f..e9fba58 100644
--- a/drivers/amlogic/media/osd/osd_fb.c
+++ b/drivers/amlogic/media/osd/osd_fb.c
@@ -665,7 +665,8 @@
 		    var->transp.length, var->transp.offset);
 	fix->visual = color_format_pt->color_type;
 	/* adjust memory length. */
-	fix->line_length = var->xres_virtual * var->bits_per_pixel / 8;
+	fix->line_length =
+		CANVAS_ALIGNED(var->xres_virtual * var->bits_per_pixel / 8);
 	osd_log_dbg(MODULE_BASE, "xvirtual=%d, bpp:%d, line_length=%d\n",
 		var->xres_virtual, var->bits_per_pixel, fix->line_length);
 
@@ -4473,7 +4474,7 @@
 				(fbdev->color->color_index > 16 ?
 				(fbdev->color->color_index > 24 ?
 				 4 : 3) : 2) : 1);
-		fix->line_length = var->xres_virtual * bpp;
+		fix->line_length = CANVAS_ALIGNED(var->xres_virtual * bpp);
 		fix->smem_start = fbdev->fb_mem_paddr;
 		fix->smem_len = fbdev->fb_len;
 		if (fb_alloc_cmap(&fbi->cmap, 16, 0) != 0) {
diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c
index 88c53af..0c58173 100644
--- a/drivers/amlogic/media/osd/osd_hw.c
+++ b/drivers/amlogic/media/osd/osd_hw.c
@@ -585,7 +585,6 @@
 s64 timestamp[VIU_COUNT];
 
 static unsigned int osd_h_filter_mode = 1;
-#define CANVAS_ALIGNED(x)	(((x) + 31) & ~31)
 #define BYTE_32_ALIGNED(x)	(((x) + 31) & ~31)
 #define BYTE_16_ALIGNED(x)	(((x) + 15) & ~15)
 #define BYTE_8_ALIGNED(x)	(((x) + 7) & ~7)
@@ -2892,7 +2891,7 @@
 		else {
 			canvas_config(osd_hw.fb_gem[index].canvas_idx,
 				osd_hw.fb_gem[index].addr,
-				osd_hw.fb_gem[index].width,
+				CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 				osd_hw.fb_gem[index].height,
 				CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 		}
@@ -4330,7 +4329,7 @@
 	if (!osd_hw.osd_afbcd[index].enable) {
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			ext_addr,
-			fence_map->byte_stride,
+			CANVAS_ALIGNED(fence_map->byte_stride),
 			fence_map->height,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 		osd_hw.screen_base[index] = ext_addr;
@@ -4683,7 +4682,8 @@
 
 				canvas_config(osd_hw.fb_gem[index].canvas_idx,
 					osd_hw.fb_gem[index].addr,
-					osd_hw.fb_gem[index].width,
+					CANVAS_ALIGNED(
+						osd_hw.fb_gem[index].width),
 					osd_hw.fb_gem[index].height,
 					CANVAS_ADDR_NOWRAP,
 					CANVAS_BLKMODE_LINEAR);
@@ -8796,7 +8796,7 @@
 	if (!osd_hw.osd_afbcd[index].enable)
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			osd_hw.fb_gem[index].addr,
-			osd_hw.fb_gem[index].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 			osd_hw.fb_gem[index].height,
 			CANVAS_ADDR_NOWRAP,
 			CANVAS_BLKMODE_LINEAR);
@@ -8838,7 +8838,7 @@
 	if (!osd_hw.osd_afbcd[index].enable)
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			osd_hw.fb_gem[index].addr,
-			osd_hw.fb_gem[index].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 			osd_hw.fb_gem[index].height,
 			CANVAS_ADDR_NOWRAP,
 			CANVAS_BLKMODE_LINEAR);
@@ -10323,7 +10323,7 @@
 		for (i = 0; i < osd_hw.osd_meson_dev.osd_count; i++)
 		canvas_config(osd_hw.fb_gem[i].canvas_idx,
 			osd_hw.fb_gem[i].addr,
-			osd_hw.fb_gem[i].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[i].width),
 			osd_hw.fb_gem[i].height,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 	}
@@ -10665,7 +10665,7 @@
 	} else {
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			phy_addr,
-			plane_map->byte_stride,
+			CANVAS_ALIGNED(plane_map->byte_stride),
 			plane_map->src_h,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 	}
@@ -10914,7 +10914,7 @@
 		plane_map->byte_stride * plane_map->src_h;
 	canvas_config(osd_hw.fb_gem[index].canvas_idx,
 		phy_addr,
-		plane_map->byte_stride,
+		CANVAS_ALIGNED(plane_map->byte_stride),
 		plane_map->src_h,
 		CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 
diff --git a/drivers/amlogic/media/osd/osd_hw.h b/drivers/amlogic/media/osd/osd_hw.h
index b043cef..d4ec6a0 100644
--- a/drivers/amlogic/media/osd/osd_hw.h
+++ b/drivers/amlogic/media/osd/osd_hw.h
@@ -23,6 +23,7 @@
 #include "osd_sync.h"
 #include "osd_drm.h"
 
+#define CANVAS_ALIGNED(x) (((x) + 63) & ~63)
 #define MAX_HOLD_LINE     0x1f
 #define MIN_HOLD_LINE     0x04
 #define VIU1_DEFAULT_HOLD_LINE  0x08

2. 1080x1920 portrait mode에서 발생하는 화면 좌우 흔들림
아래의 custombuilt 모드로 안정된 화면이 나옵니다.
Timing을 조정하였는데 화면 하단에 2~3pixel line이 깨진 화면으로 출력됩니다.
osd driver sync 관련 문제인 것 같은데 여전히 완벽한 해결책을 찾지 못하였습니다.
테스트는 config.ini를 아래와 같이 수정하여 해보시면 됩니다.

Code: Select all

; Auto Detection of Monitor settings based on your Screen information
display_autodetect=false

hdmimode=custombuilt
modeline="1080,1920,137520,117137,59,1080,1112,1144,1174,1920,1928,1932,1946,0,0,1"

; voutmode : hdmi or dvi
; hdmi / dvi
voutmode=hdmi
3. forcergb
이 부분 업데이트되는 대로 내용 공유해 드리겠습니다.
Attachments
0001_c4_fix_crashed_osd_portraitmodes.diff.zip
(1.52 KiB) Downloaded 5 times

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

제가 올렸던 테스트 결과는 LCD 3종에 대한 테스트 결과였습니다.

1. 1080x1920 LCD (MIPI to HDMI LCD)
화면 전체에 노이즈가 껴서 뿌옇게 나왔었는데, 올려주신 커널 패치를 적용하고 정상으로 돌아와서 저희 제품에 C4를 적용할 수 있는 상태가 되었습니다.
이 LCD에서는 화면 떨림은 없었습니다.

Before
Image

After
Image

2. 1440x2560 LCD (MIPI to HDMI LCD)
화면 떨림이 있었습니다.

3. 1920x1200 LCD (DELL DELL UltraSharp U2415)
해상도가 1920x1080으로 인식됩니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

@heavyman,
확인 감사드립니다.

1440x2560과 1920x1200 모니터의 증상을 저희 쪽에서 확인하기 위해 아래와 같이 실행하시어 모니터 정보를 저희 쪽에 전달 부탁 드립니다.

1. 각각 1440x2560 / 1920x1200 모니터를 연결
2. C4 보드 부팅 실행
3. ssh로 접속 또는 usb-to-uart module로 아래와 같이 실행하여 각각의 파일을 첨부

Code: Select all

odroid@odroid:~$ cat /sys/class/amhdmitx/amhdmitx0/rawedid  > /media/boot/1440x2560-edid.bin

Code: Select all

odroid@odroid:~$ cat /sys/class/amhdmitx/amhdmitx0/rawedid  > /media/boot/1920x1200_dell-edid.bin
위 2개의 파일을 첨부하여 주시기 바랍니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

1920x1200 모니터에 연결하던 HDMI 케이블을 1080x1920 LCD에 연결하던 HDMI 케이블로 교체하니 해상도 인식이 제대로 됩니다.
MIPI LCD 테스트하던 HDMI 케이블과 DELL 모니터 연결하던 HDMI 케이블을 다른 것을 사용하고 있었습니다.
DELL 모니터 연결하던 HDMI 케이블이 망가진것 같습니다.

1440x2560 LCD의 edid 정보는 첨부하였습니다.
Attachments
1440x2560-edid.zip
(311 Bytes) Downloaded 8 times

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

아. 그렇군요.
1920x1200은 정상적으로 사용하실 수 있다니 다행입니다.

1440x2560은 저희쪽에서 증상을 재현해보도록 하겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

안녕하세요.

Input Color Format을 확인할 수 있는 모니터를 구하여 (DELL P2815Q)
C2와 C4에서 forcergb 옵션을 on/off 하여 테스트를 진행해 보았습니다.
전에 전달해 드린 forcergb patch를 적용한 후 hdmitx=forcergb를 추가하면 input color format이 RGB로 변경되는 것을 확인하였습니다.
적용 전에는 YPbPr로 나오고 color format에 따라 색감도 변하는 것을 확인할 수 있었습니다.

forcergb 적용 전 : cs = 2
forcergb 적용 후 : cs = 0
(제가 내용 공유해 드리면서 위 옵션을 잘못 기재했습니다. 확인해 주신 값이 맞습니다.)

혹시 증상의 차이가 있는 것이 해상도에 따라 영향이 있는지 확인하기 위해 input color format을 확인하고 계시는 모니터의 정보를 얻을 수 있을까요?
일전에 부탁 드린대로 edid 정보를 확인하여 전달을 부탁 드리겠습니다.

Code: Select all

odroid@odroid:~$ cat /sys/class/amhdmitx/amhdmitx0/rawedid  > /media/boot/edid.bin

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

모니터는 Dell U2415 1920x1200 모니터 입니다.
테스트 했던 방법은 모니터 연결하여 OODROID 부팅 후 HDMI 케이블을 뺐다가 다시 꼽는 방법으로 테스트 했습니다.
모니터에서 HDMI 케이블을 뺐다 다시 꼽을 때 Input Color Format을 다시 재인식하더군요.
올려주셨던 커널 이미지가 현재 다운로드가 안되네요.
커널 이미지 다시 올려주실 때 1080x1920에서 노이즈 문제 해결된 패치가 적용된 이미지로 다시 올려주시거나, forcergb 적용할 수 있는 패치를 올려주세요.
오늘은 외부에 나와서 테스트는 못하고, 커널 이미지 다시 올려주시면 월요일에 다시 테스트 후에 결과 알려드리겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

저희측에서도 hdmi케이블 연결을 해제->재연결하여 테스트해보도록 하겠습니다.

그리고, 1080x1920 노이즈 패치와 forcergb가 적용된 테스트 이미지를 빌드하여 아래 링크에 공유해 드립니다.
https://drive.google.com/file/d/1rO-h22 ... sp=sharing

관련 patch들을 첨부파일을 참고해 주십시오.
0001_c4_update_osd_portaitmode.diff.zip
0002_c4_enable_forcedrgb.diff.zip

Code: Select all

From 999a027ee1f4c030b58765d4f6e0a198e2bed53f Mon Sep 17 00:00:00 2001
From: Joy Cho <joy.cho@hardkernel.com>
Date: Tue, 02 Mar 2021 16:49:38 +0900
Subject: [PATCH] ODROID-COMMON: osd: Update osd for portrait modes

Change-Id: Ibc0ba560d9db8875e9d676dee8511fc29cd09a51
---

diff --git a/drivers/amlogic/media/osd/osd_fb.c b/drivers/amlogic/media/osd/osd_fb.c
index 850090f..e9fba58 100644
--- a/drivers/amlogic/media/osd/osd_fb.c
+++ b/drivers/amlogic/media/osd/osd_fb.c
@@ -665,7 +665,8 @@
 		    var->transp.length, var->transp.offset);
 	fix->visual = color_format_pt->color_type;
 	/* adjust memory length. */
-	fix->line_length = var->xres_virtual * var->bits_per_pixel / 8;
+	fix->line_length =
+		CANVAS_ALIGNED(var->xres_virtual * var->bits_per_pixel / 8);
 	osd_log_dbg(MODULE_BASE, "xvirtual=%d, bpp:%d, line_length=%d\n",
 		var->xres_virtual, var->bits_per_pixel, fix->line_length);
 
@@ -4473,7 +4474,7 @@
 				(fbdev->color->color_index > 16 ?
 				(fbdev->color->color_index > 24 ?
 				 4 : 3) : 2) : 1);
-		fix->line_length = var->xres_virtual * bpp;
+		fix->line_length = CANVAS_ALIGNED(var->xres_virtual * bpp);
 		fix->smem_start = fbdev->fb_mem_paddr;
 		fix->smem_len = fbdev->fb_len;
 		if (fb_alloc_cmap(&fbi->cmap, 16, 0) != 0) {
diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c
index 88c53af..0c58173 100644
--- a/drivers/amlogic/media/osd/osd_hw.c
+++ b/drivers/amlogic/media/osd/osd_hw.c
@@ -585,7 +585,6 @@
 s64 timestamp[VIU_COUNT];
 
 static unsigned int osd_h_filter_mode = 1;
-#define CANVAS_ALIGNED(x)	(((x) + 31) & ~31)
 #define BYTE_32_ALIGNED(x)	(((x) + 31) & ~31)
 #define BYTE_16_ALIGNED(x)	(((x) + 15) & ~15)
 #define BYTE_8_ALIGNED(x)	(((x) + 7) & ~7)
@@ -2892,7 +2891,7 @@
 		else {
 			canvas_config(osd_hw.fb_gem[index].canvas_idx,
 				osd_hw.fb_gem[index].addr,
-				osd_hw.fb_gem[index].width,
+				CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 				osd_hw.fb_gem[index].height,
 				CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 		}
@@ -4330,7 +4329,7 @@
 	if (!osd_hw.osd_afbcd[index].enable) {
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			ext_addr,
-			fence_map->byte_stride,
+			CANVAS_ALIGNED(fence_map->byte_stride),
 			fence_map->height,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 		osd_hw.screen_base[index] = ext_addr;
@@ -4683,7 +4682,8 @@
 
 				canvas_config(osd_hw.fb_gem[index].canvas_idx,
 					osd_hw.fb_gem[index].addr,
-					osd_hw.fb_gem[index].width,
+					CANVAS_ALIGNED(
+						osd_hw.fb_gem[index].width),
 					osd_hw.fb_gem[index].height,
 					CANVAS_ADDR_NOWRAP,
 					CANVAS_BLKMODE_LINEAR);
@@ -8796,7 +8796,7 @@
 	if (!osd_hw.osd_afbcd[index].enable)
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			osd_hw.fb_gem[index].addr,
-			osd_hw.fb_gem[index].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 			osd_hw.fb_gem[index].height,
 			CANVAS_ADDR_NOWRAP,
 			CANVAS_BLKMODE_LINEAR);
@@ -8838,7 +8838,7 @@
 	if (!osd_hw.osd_afbcd[index].enable)
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			osd_hw.fb_gem[index].addr,
-			osd_hw.fb_gem[index].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
 			osd_hw.fb_gem[index].height,
 			CANVAS_ADDR_NOWRAP,
 			CANVAS_BLKMODE_LINEAR);
@@ -10323,7 +10323,7 @@
 		for (i = 0; i < osd_hw.osd_meson_dev.osd_count; i++)
 		canvas_config(osd_hw.fb_gem[i].canvas_idx,
 			osd_hw.fb_gem[i].addr,
-			osd_hw.fb_gem[i].width,
+			CANVAS_ALIGNED(osd_hw.fb_gem[i].width),
 			osd_hw.fb_gem[i].height,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 	}
@@ -10665,7 +10665,7 @@
 	} else {
 		canvas_config(osd_hw.fb_gem[index].canvas_idx,
 			phy_addr,
-			plane_map->byte_stride,
+			CANVAS_ALIGNED(plane_map->byte_stride),
 			plane_map->src_h,
 			CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 	}
@@ -10914,7 +10914,7 @@
 		plane_map->byte_stride * plane_map->src_h;
 	canvas_config(osd_hw.fb_gem[index].canvas_idx,
 		phy_addr,
-		plane_map->byte_stride,
+		CANVAS_ALIGNED(plane_map->byte_stride),
 		plane_map->src_h,
 		CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
 
diff --git a/drivers/amlogic/media/osd/osd_hw.h b/drivers/amlogic/media/osd/osd_hw.h
index b043cef..d4ec6a0 100644
--- a/drivers/amlogic/media/osd/osd_hw.h
+++ b/drivers/amlogic/media/osd/osd_hw.h
@@ -23,6 +23,7 @@
 #include "osd_sync.h"
 #include "osd_drm.h"
 
+#define CANVAS_ALIGNED(x) (((x) + 63) & ~63)
 #define MAX_HOLD_LINE     0x1f
 #define MIN_HOLD_LINE     0x04
 #define VIU1_DEFAULT_HOLD_LINE  0x08

Code: Select all

From eb87171e446e424544e715148534929ab38f2792 Mon Sep 17 00:00:00 2001
From: Joy Cho <joy.cho@hardkernel.com>
Date: Thu, 25 Feb 2021 13:00:29 +0900
Subject: [PATCH] (progress) hdmitx: Enable forced RGB colorspace

Change-Id: I05cff725af3a75fba0dee7703adf8e02d380fd99
---

diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
index 4e6619f..9245639 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
@@ -550,7 +550,8 @@
 	else {
 	/* nothing */
 	}
-	if ((vic_ready != HDMI_Unknown) && (vic_ready == vic)) {
+	if ((vic_ready != HDMI_Unknown) && (vic_ready == vic)
+		&& (!hdmi_output_rgb)) {
 		pr_info(SYS "[%s] ALREADY init VIC = %d\n",
 			__func__, vic);
 #if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
@@ -5377,7 +5378,11 @@
 					hdmitx_device.cec_func_config = list;
 				pr_info("HDMI hdmi_cec_func_config:0x%x\n",
 					hdmitx_device.cec_func_config);
+			} else if (strcmp(token, "forcergb") == 0) {
+				hdmitx_output_rgb();
+				pr_info("HDMI Forced RGB colorspace output\n");
 			}
+
 			check_hdmiuboot_attr(token);
 		}
 		offset = token_offset;
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_video.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_video.c
index b561969..b05846d 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_video.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_video.c
@@ -34,6 +34,7 @@
 #include <linux/amlogic/media/vout/hdmi_tx/hdmi_tx_compliance.h>
 #include "hw/common.h"
 
+unsigned char hdmi_output_rgb = 0;
 static void hdmitx_set_spd_info(struct hdmitx_dev *hdmitx_device);
 static void hdmi_set_vend_spec_infofram(struct hdmitx_dev *hdev,
 	enum hdmi_vic VideoCode);
@@ -939,6 +940,11 @@
 		return 0;
 }
 
+void hdmitx_output_rgb(void)
+{
+	hdmi_output_rgb = 1;
+}
+
 int hdmitx_set_display(struct hdmitx_dev *hdev, enum hdmi_vic VideoCode)
 {
 	struct hdmitx_vidpara *param = NULL;
@@ -963,20 +969,26 @@
 	hdev->cur_video_param = param;
 	if (param) {
 		param->color = param->color_prefer;
-		/* HDMI CT 7-24 Pixel Encoding
-		 * YCbCr to YCbCr Sink
-		 */
-		switch (hdev->rxcap.native_Mode & 0x30) {
-		case 0x20:/*bit5==1, then support YCBCR444 + RGB*/
-		case 0x30:
-			param->color = COLORSPACE_YUV444;
-			break;
-		case 0x10:/*bit4==1, then support YCBCR422 + RGB*/
-			param->color = COLORSPACE_YUV422;
-			break;
-		default:
+		if (hdmi_output_rgb) {
 			param->color = COLORSPACE_RGB444;
+		} else {
+			/* HDMI CT 7-24 Pixel Encoding
+			 * YCbCr to YCbCr Sink
+			 */
+			switch (hdev->rxcap.native_Mode & 0x30) {
+			case 0x20:/*bit5==1, then support YCBCR444 + RGB*/
+			case 0x30:
+				param->color = COLORSPACE_YUV444;
+				break;
+			case 0x10:/*bit4==1, then support YCBCR422 + RGB*/
+				param->color = COLORSPACE_YUV422;
+				break;
+			default:
+				param->color = COLORSPACE_RGB444;
+			}
 		}
+		pr_info("[%s] output_rgb %d, cs %d\n", __func__,
+				hdmi_output_rgb, param->color);
 		/* For Y420 modes */
 		switch (VideoCode) {
 		case HDMI_3840x2160p50_16x9_Y420:
diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
index 58261d6..208e4b7 100644
--- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
+++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
@@ -775,6 +775,9 @@
 extern int get_hpd_state(void);
 extern void hdmitx_hdcp_do_work(struct hdmitx_dev *hdev);
 
+extern void hdmitx_output_rgb(void);
+extern unsigned char hdmi_output_rgb;
+
 /***********************************************************************
  *    hdmitx hardware level interface
  ***********************************************************************/
시간되실 때 테스트 부탁 드립니다.
Attachments
0002_c4_enable_forcedrgb.diff.zip
(1.58 KiB) Downloaded 5 times
0001_c4_update_osd_portaitmode.diff.zip
(1.51 KiB) Downloaded 4 times

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

HDMI 케이블을 연결<->해제하여 테스트를 진행해보았는데
forcergb=1로 설정한 경우는 Input Color Format이 RGB를 계속 유지합니다.

사용하고 계신 환경에서 동작이 잘 되는지 확인 부탁 드립니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

heavyman,

안녕하세요. 1440x2560 화면떨림 이슈를 재연하기 위해 저희가 보유중인 모니터들로 확인중입니다.
그런데, 1440x2560을 native로 지원하는 모니터가 없어, 4k모니터로 EDID를 수정하여 확인해 보았지만 화면이 나오지 않아, 해당증상을 확인할 수 없었습니다.

화면떨림 증상이 좌우로 흔들리나요? 혹시 환경이 되신다면, 영상으로 찍어서 올려주시면 감사하겠습니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

1440x2560화면떨림 증상 첨부하였습니다.
Attachments
IMG_3014.zip
(5.63 MiB) Downloaded 7 times

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@joy
Dell U2415 모니터에서 forcergb 옵션을 켜니 Input Color Format이 RGB로 잡히네요.
그러나 Full RGB Range (0-255)를 사용하지 않고 Limited RGB Range (16-235)를 사용하고 있는 것으로 보입니다.
1080x1920 LCD를 연결하여 White Image를 띄워놓고 UV 투과 광량을 측정하면
PC에 1080x1920 LCD를 연결하였을 때는 UV 광량이 4.0 정도가 나오는데
C4에 1080x1920 LCD를 연결하였을 때는 UV 광량이 3.43 정도가 나옵니다.
RGB Color Range를 조정할 수 있는 방법이 있을까요?

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

heavyman wrote:
Mon Mar 29, 2021 5:25 pm
@joy
Dell U2415 모니터에서 forcergb 옵션을 켜니 Input Color Format이 RGB로 잡히네요.
그러나 Full RGB Range (0-255)를 사용하지 않고 Limited RGB Range (16-235)를 사용하고 있는 것으로 보입니다.
1080x1920 LCD를 연결하여 White Image를 띄워놓고 UV 투과 광량을 측정하면
PC에 1080x1920 LCD를 연결하였을 때는 UV 광량이 4.0 정도가 나오는데
C4에 1080x1920 LCD를 연결하였을 때는 UV 광량이 3.43 정도가 나옵니다.
RGB Color Range를 조정할 수 있는 방법이 있을까요?
@heavyman,
RGB Range 관련 부분은 아직 파악하지 못한 부분이라 chipset IP에서 설정할 수 있는지 확인해보겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

@heavyman,
S905X3 HDMI register 중에 color range를 full / limited로 설정하는 레지스터가 있는데
YCbCr에만 국한된 것인지 RGB도 설정가능한 것인지는 datasheet에 내용이 빠져 있네요.

모니터의 edid를 parsing해서 설정하도록 되어 있는데 제 환경에서는 limit로 설정이 되어 있습니다.

이 레지스터로 RGB full range 설정이 가능한지 테스트용으로 patch를 작업해서 커널 이미지를 공유해봐 드리겠습니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

heavyman,

안녕하세요. 공유해주신 영상으로 보아 저희가 알고있는, 일부 portrait 해상도에서 발생하는 흔들림 증상과 동일해보입니다.
이번주까지 확인해보고 결과 말씀드리겠습니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

joy wrote:
Tue Mar 30, 2021 11:21 am
@heavyman,
S905X3 HDMI register 중에 color range를 full / limited로 설정하는 레지스터가 있는데
YCbCr에만 국한된 것인지 RGB도 설정가능한 것인지는 datasheet에 내용이 빠져 있네요.

모니터의 edid를 parsing해서 설정하도록 되어 있는데 제 환경에서는 limit로 설정이 되어 있습니다.

이 레지스터로 RGB full range 설정이 가능한지 테스트용으로 patch를 작업해서 커널 이미지를 공유해봐 드리겠습니다.
아래 링크에 RGB full range 테스트를 위한 커널 이미지를 올려두었습니다.
force rgb와 portait noise 기능이 포함된 버전입니다.
https://drive.google.com/file/d/1QkLq3o ... sp=sharing


테스트는 boot.ini의 bootargs에 "fullcolorrange=true"를 추가하신 후 재부팅 후 아래의 command로 확인하시면 됩니다.

Code: Select all

setenv bootargs ${bootargs} fullcolorrange=true
재부팅

Code: Select all

$ echo avi_info > /sys/class/amhdmitx/amhdmitx0/debug
$ dmesg | grep ycc_quantization_range
결과가 full 또는 limit로 표시됩니다.

Code: Select all

hdmitx: AVI.ycc_quantization_range: full
참고로, boot.ini에 fullcolorrange를 추가하지 않으시면 모니터 정보에서 parsing하여 full 또는 limit로 자동 설정하는 로직입니다.
기존 로직에 문제가 있어서 이 부분도 같이 수정하였습니다.

관련 커널 패치도 첨부하였습니다.

Code: Select all

From f43da5b4f112dcfd0c5979bb3e6c1ba27333561c Mon Sep 17 00:00:00 2001
From: Joy Cho <joy.cho@hardkernel.com>
Date: Tue, 30 Mar 2021 11:56:55 +0900
Subject: [PATCH] (test) ODROID-COMMON: hdmitx: Fix colorrange set-up

Change-Id: Id2e4a98c1cf0df2d69cf0293c39b9be619ac8cf7
---

diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
index 9245639..99a9aff 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
@@ -580,6 +580,11 @@
 				HDMI_MODE);
 			pr_info(SYS "change to HDMI mode\n");
 		}
+
+		if (odroid_colorrange() == COLORRANGE_FUL)
+			hdev->hwop.cntlconfig(hdev, CONF_AVI_YQ01,
+				YCC_RANGE_FUL);
+
 		hdev->cur_VIC = vic;
 		hdev->output_blank_flag = 1;
 		hdev->ready = 1;
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c
index 5302f75..a91009e 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c
@@ -140,6 +140,25 @@
 	return 0;
 }
 __setup("disablehpd=", disableHPD_setup);
+
+static char force_colorrange = COLORRANGE_RESERVED;
+static int __init colorrange_setup(char *s)
+{
+	if (!(strcmp(s, "true")))
+		force_colorrange = COLORRANGE_FUL;
+	else
+		force_colorrange = COLORRANGE_LIM;
+
+	return 0;
+
+}
+__setup("fullcolorrange=", colorrange_setup);
+
+int odroid_colorrange(void)
+{
+	return force_colorrange;
+}
+EXPORT_SYMBOL(odroid_colorrange);
 #endif
 
 int hdmitx_hpd_hw_op(enum hpd_op cmd)
@@ -6169,7 +6188,10 @@
 		hdev->hwop.cntlconfig(hdev, CONF_AVI_BT2020, SET_AVI_BT2020);
 
 	data32  = 0;
-	data32 |= (((0 == COLORRANGE_FUL) ? 1 : 0) << 2);
+	if (force_colorrange == COLORRANGE_FUL)
+		data32 |= (COLORRANGE_FUL << 2);
+	else
+		data32 |= (((COLORRANGE_FUL == para->cr) ? 1 : 0) << 2);
 	data32 |= (0 << 0);
 	hdmitx_wr_reg(HDMITX_DWC_FC_AVICONF3,   data32);
 
diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h
index 89b4042..dab0172 100644
--- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h
+++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h
@@ -313,6 +313,7 @@
 enum hdmi_color_range {
 	COLORRANGE_LIM,
 	COLORRANGE_FUL,
+	COLORRANGE_RESERVED,
 };
 
 enum hdmi_3d_type {
diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_info_global.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_info_global.h
index ca037ef..fa369fb 100644
--- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_info_global.h
+++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_info_global.h
@@ -330,6 +330,7 @@
 #define VOUTMODE_DVI		0x02
 
 int odroid_voutmode(void);
+int odroid_colorrange(void);
 #endif
 
 #endif  /* _HDMI_RX_GLOBAL_H */
앞서 말씀드린 바와 같이 datasheet에 HDMI DWC 레지스터들에 대한 세부 설명이 없어서
이 작업에 관련된 HDMI register가 출력 color range에 관련된 부분인지 확실치 않으나,
혹시 모르니 테스트를 부탁 드립니다.
Attachments
0003_c4_hdmi_colorrange_full.diff.zip
(1.29 KiB) Downloaded 6 times

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

올려주신 패치를 적용하고 boot.ini에 "setenv bootargs ${bootargs} fullcolorrange=true" 추가했습니다.
hdmitx: AVI.ycc_quantization_range: limited
로 나오네요.
이러면 저 옵션이 적용이 되지 않은 것인가요?

올려주신 Image.gz 파일을 넣으니 hdmitx: AVI.ycc_quantization_range: full 로 나오네요.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

올려주신 Image.gz 를 넣어서 hdmitx: AVI.ycc_quantization_range: full 로 나오는 상태에서도 UV 투과 광량은 변함이 없습니다.
실제로 full color range로 동작을 안하는 것으로 보입니다.

joy
Posts: 1584
Joined: Fri Oct 02, 2015 1:44 pm
languages_spoken: english
ODROIDs: ODROID-C1+, XU4, X
Has thanked: 179 times
Been thanked: 210 times
Contact:

Re: C4 Color Range 문의

Post by joy »

heavyman wrote:
Tue Mar 30, 2021 6:41 pm
올려주신 Image.gz 를 넣어서 hdmitx: AVI.ycc_quantization_range: full 로 나오는 상태에서도 UV 투과 광량은 변함이 없습니다.
실제로 full color range로 동작을 안하는 것으로 보입니다.
확인 감사합니다.
output full color range 설정과 관련된 레지스터가 아닌가 보네요.
지원이 가능할지 확인해 보겠습니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman

안녕하세요.

1440x2560의 경우 화면이 흔들리는 증상 관련하여, 아래 modeline값으로 확인 부탁드립니다.

Code: Select all

display_autodetect=false
hdmimode=custombuilt
modeline="1440,2560,241500,128798,50,1440,1510,1545,1875,2560,2572,2574,2576,0,0,1"
위 내용으로 해결이 안된다면 시간이 좀더 필요할 것 같습니다. 재연 가능한 1440x2560 모니터가 없어 테스트 또한 어려움이 있습니다.
These users thanked the author lsc1117 for the post:
joy (Fri Apr 02, 2021 9:55 am)

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

위 modeline으로 해보고 안되면 LCD를 보내드려도 될까요?

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman

네 보내주셔도 됩니다. 하지만 portrait LCD중 일부 특정 LCD에서 화면이 흔들리는 증상에 대해 root cause를 찾지 못한상황에서 저희가 해볼수 있는것은, modeline 값을 변경하여 최적값을 찾는것입니다.
보내주신다면 몇일정도 적절한 값으로 테스트를 해볼수는 있지만, 해결이 안된상태로 다시 LCD를 보내드릴수도 있습니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman

안녕하세요.

RGB full range 테스트를 위한 커널 이미지와 관련 패치를 아래 링크에 올려두었습니다.
https://dn.odroid.com/temp/forcergb_amlogic/

해당 이미지는 force rgb, portrait noise 기능 포함하여, hdmi의 fullcolorrange가 추가된 버전입니다.
그리고 추가적으로 osd의 RGB full range 업데이트가 포함되었습니다.

사용 방법은 기존과 같이 boot.ini에 "setenv bootargs ${bootargs} fullcolorrange=true" 추가하시면됩니다.

OSD의 RGB full range가 적용되었는지는 아래 과정으로 확인해보실 수 있습니다.

Code: Select all

cd /sys/devices/platform/meson-fb/graphics/fb0
echo r 0x1a2d > debug
dmesg | grep 1a2d
[ 1803.920840] fb: reg[0x1a2d]: 0x00837fca
fullcolorrange=true일경우, 4번 비트가 1로 변경되었음을 확인할 수 있습니다.
fullcolorrange=false일경우, 4번 비트가 0로 변경되었음을 확인할 수 있습니다.

관련 레지스터 내용은 아래 데이터시트의 page 612에 있습니다.(Table 9-1640 VIU_OSD1_CTRL_STAT2 0x1A2d)
https://dn.odroid.com/S905X3/ODROID-C4/ ... kernel.pdf

적용시 기존 kernel image를 백업후 확인 부탁드립니다.
These users thanked the author lsc1117 for the post:
joy (Fri Apr 02, 2021 9:55 am)

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@lsc1117
제공해주신 modeline을 적용하니 더이상 떨리지 않네요. 감사합니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@lsc1117
올려주신 Image.gz를 적용하여 0x1a2d 레지스터의 4번 비트가 1로 변경되는 것은 확인했습니다.
그럼에도 불구하고 LCD의 UV 투과 광량은 변하지 않네요.
LCD를 윈도우에 연결하여 색상을 RGB 16으로 했을 때와 C4에 연결하여 RGB 0으로 했을 때 동일한 UV 투과 광량이 나오고
LCD를 윈도우에 연결하여 색상을 RGB 235로 했을 때와 C4에 연결하여 RGB 255로 했을 때 동일한 UV 투과 광량이 나옵니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman,

1440x2560 떨리는 문제가 해결되셨다니 다행입니다.

Limted range RGB -> Full range RGB 관련해서는 레지스터외에 다른부분을 좀더 확인해봐야할 것 같습니다.
그런데, 혹시 UV 광량 확인을 위해 어떤 제품을 사용하시는지 알수있을까요?

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman,

그리고 보드에서 LCD를 연결하였을때 UV 광량이 현재 3.43정도 나오신다고 했는데,
아래 노드들을 수정하면서 광량변화가 있는지 확인 가능할까요?

Code: Select all

cd /sys/class/amvecm
echo 127 > contrast2
echo 255 > brightness2
echo 25 25 > saturation_hue_post
echo 25 25 > saturation_hue_pre
위와같이 변경을 해보면 밝기나 색감등이 변경이 되는데, 어떤값들이 UV output에 변화를 줄지 잘 모르겠습니다. 이와 관련해서는 저보다 더 잘 아실거라 생각됩니다.
amvecm폴더에 다양한 노드들이 존재하는데, 영향이 있다고 생각되시는 노드들에 값을 넣어보면서 확인해 보는것도 방법이 될것같습니다.

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@lsc1117
UV 투과 광량 확인은 자사의 3D Printer로 합니다.
LCD를 사용한 3D Printer이고, backlight가 없는 LCD를 공급받아서 UV LED를 광원으로 하여 LCD에 나오는 패턴대로 UV 광경화 레진을 굳히는 방식입니다.
UV LED를 켜놓고 LCD에 White 이미지를 띄워서 LCD를 투과하는 UV의 양을 계측기로 측정하고 있습니다.
Limited Range로 나오는 상태에서도 노이즈 문제가 해결되어서 제품에 적용은 가능하나, Full Range로 나오면 LCD의 Black Pixel에서는 UV가 더 차단되고, White Pixel에서는 UV가 더 투과되기 때문에, 3D Printer의 성능이 더 좋아집니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman,

안녕하세요. 자세한 설명 감사합니다.
관련해서 좀더 확인해보겠습니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman,

안녕하세요. RGB full color range 관련해서. 아래 내용을 업데이트 했습니다. 확인 부탁드립니다.
https://dn.odroid.com/temp/forcergb_aml ... fullrgb.gz

사용 방법은 기존과 같이 boot.ini에 "setenv bootargs ${bootargs} fullcolorrange=true" 추가하시면됩니다.
변경된 코드 : https://dn.odroid.com/temp/forcergb_aml ... t-up.patch

해당 업데이트는 기존에 YUV709_RGB matrix에서 YUV709F_RGB matrix로 변경해줍니다.
fullcolorrange=false 하시면 YUV709F_RGB가 아닌, YUV709_RGB로 설정됩니다.

확인 부탁드립니다.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

정확한 UV값 측정이 가능한 장비가 없어 확인에 어려움이 있지만,
간단하게 사진으로 찍어서 비교해본 결과 color range 변화가 느껴집니다.
관련사진 첨부했습니다.
Attachments
limited_rgb.jpg
limited_rgb.jpg (426.02 KiB) Viewed 299 times
full_rgb.jpg
full_rgb.jpg (363.07 KiB) Viewed 299 times

heavyman
Posts: 56
Joined: Thu Nov 24, 2016 1:18 pm
languages_spoken: korean
Has thanked: 0
Been thanked: 1 time
Contact:

Re: C4 Color Range 문의

Post by heavyman »

@lsc1117
올려주신 커널 이미지 적용해봤는데 UV 투과 광량에는 변화가 없네요.

lsc1117
Posts: 219
Joined: Thu Aug 22, 2013 12:46 am
languages_spoken: english
Location: South Korea
Has thanked: 3 times
Been thanked: 27 times
Contact:

Re: C4 Color Range 문의

Post by lsc1117 »

@heavyman,

안녕하세요. 확인 감사합니다.

/sys/class/amvecm 폴더에 contrast2, brightness2, saturation_hue_post 노드들이 있는데 해당값을 수정시 UV광량에 변화가 없는지 확인 가능한가요?
echo [-127~127] > contrast2
echo [-255~255] > brightness2
echo [-128~128] [-25~25] > saturation_hue_post
예)

Code: Select all

cd /sys/class/amvecm
echo -255 > brightness2
echo 127 > contrast2
echo -128 -25 > saturation_hue_post

Post Reply

Return to “C4/HC4”

Who is online

Users browsing this forum: No registered users and 1 guest