현재 개발중인 HD(DAC5000) 와 SD(DACS1000) 에서의 밝기 조절을 위한 내용을 담고 있다.
처음 보기에는 아주 간단한 일인 듯 보이지만, 생각많큼 쉽지는 않았다.
일단 HD 부터 보기로 하자!
HD 일때
자체 데모를 한 결과 화면이 밝게 나온다는 의견이 상대적으로 많았다. 또한 저번에 퀄리티 테스트를 했음에도 적용이 안된 듯 보였다.
내가 볼 때는 확실히 퀄리티 테스트가 적용되어 있었다.
void video_quality (void) { STSYS_WriteRegDev32LE((0x62000000 + 0x002c), 0x26601f7); STSYS_WriteRegDev32LE((0x62000000 + 0x0034), 0x65); STSYS_WriteRegDev32LE((0x62000000 + 0x0038), 0x0); STSYS_WriteRegDev32LE((0x62000000 + 0x003c), 0x50); STSYS_WriteRegDev32LE((0x62000000 + 0x0044), 0x100); }
또한 위의 video_quality() 함수는 VOUT_Inital() 함수에서 호출하였다.
하지만, 이 두가지 모두가 잘못되었다는 것을 알았다.
video_quality() 함수의 레지스터 주소 오류
레지스터 주소가 0x62000000 가 아닌, 0x600062000 으로 수정되어야 했다. 다음과 같이 말이다.
void video_quality (void) { STSYS_WriteRegDev32LE((0x60006200 + 0x002c), 0x26601f7); STSYS_WriteRegDev32LE((0x60006200 + 0x0034), 0x65); STSYS_WriteRegDev32LE((0x60006200 + 0x0038), 0x0); STSYS_WriteRegDev32LE((0x60006200 + 0x003c), 0x50); STSYS_WriteRegDev32LE((0x60006200 + 0x0044), 0x100); }
video_quality() 를 호출해주는 위치 오류
앞에서와 같이 VOUT_Inital() 함수에서 호출을 했더니, 퀄리티 테스트 결과가 적용이 안되는 문제가 있었다. 그래서 AV 가 나오기 직전 호출을 해주었더니, 적용이 되어 나왔다. 함수를 호출해 준 부분은 다음과 같다. 'ui/ui.c' 의 'UiEvent()' 함수에 추가해주었다.
if(mMsg.msgId == TUNING_SUCCESS) { printf("Recv TUNING_SUCCESS\n"); // ARENA_Print(("===== TUNING_SUCCESS====\n")); CheckFrame=TRUE; bChangeChannel=FALSE; /* if(CurrentAudioType!=FrevAudioType); { AUDStartParams.StreamID = STAUD_IGNORE_ID; FrevAudioType=CurrentAudioType; STAUD_Start(AUD_Handle, &AUDStartParams); } */ // printf("STAUD_Mute\n"); // setTimer(UI_TIMEOUT,EndUi,NULL); printf("Change %d\n",++countChange); // CONFIRM_CHANNEL(3); // task_delay(15600*3); // sendkeyToUI(UP_KEY); SetVideoCheckState(TRUE); #ifdef ATSC_MODULE_MODE message=(U8*)malloc(4); message[0]=3; message[1]=0x51; message[2]=1; message[3]=0x20; SendMessageToLCD(message,4); #endif video_quality(); // 추가해 준 부분 }
유의 할 점
반드시 화면 밝기를 확인할 때는 출력을 'YUV(YCBCR)' 로 세팅한다. RGB 에서는 전혀 적용이 안됐다.
SD 일때
DACS1000 의 경우에는 오직 CVBS 출력 밖에 지원을 안하기 때문에 CVBS 출력의 밝기를 조절해야 한다. 또한 DENC 를 사용하기 때문에, 5517 reference 문서(Page 477~478)에서 DENC 관련 레지스터의 밝기 조절 레지스터를 조정해봤다.
하지만 결과는 전혀 변화가 없었다.
처음에는 출력이 잘못 세팅되어서 그런 줄 알았다. 왜냐 하면, 현재 DACS1000 소스에서는 RGB 로 세팅해야만, CVBS 출력이 나오기 때문이다. 더 이상한 것은 CVBS 로 세팅하면, CVBS 출력이 안됐다.
결론 부터 말하자면, 5517 reference 문서의 468 페이지에 있는 'DEN_DAC6C' 레지스터를 조절함으로서 밝기를 조절할 수 있었다.
이 레지스터를 보면, 크게 두 부분으로 나뉘어져 있는 데, 두 개를 모두 0 으로 세팅하면, 화면이 어두워 졌다. 반대로 모두 1 로 세팅하면, 화면이 밝아 졌다.
void test_color(void) { U32 task_i, value; printf("\nSTART TEST_TASK!!!\n"); STSYS_WriteRegDev32LE((0x00001800 + 0x013), 0x00); }
이 함수 역시 AV 가 나오기 직전에 추가를 해주었다. 위치는 'ui/ui.c' 의 UiEvent() 함수이다.
if(mMsg.msgId == TUNING_SUCCESS) { ARENA_Print(("===== TUNING_SUCCESS====\n")); cmGetCurrentVchInfo(NULL, &Vch, NULL, NULL, &chCurNumber, NULL,NULL, NULL, NULL, NULL); memset(chnum, 0, 10); sprintf(chnum, "CH %d", Vch); SendChannel(Vch); if(!GetActiveUiState) PrintText(SCREEN_WIDTH-FONTWIDTH*strlen(chnum)-30, ChPosY, chnum, FONTFCOLOR, FONTBCOLOR); setTimer(UI_TIMEOUT,EndUi,NULL); test_color(); // 추가해 준 부분 }