무엇이 문제인가?

현재 내가 해결해야 하는 문제는 A/V 쪽이다. 까다롭게 보자면, 한 두개의 문제가 아니지만 그래도 현재 일반적으로 봤을 때는 A/V 동작은 되고 있는 상태이다. 내가 해결해야 하는 문제는 아래와 같다.

  1. Video → Contrast, Brightness, Saturation 조절
  2. Audio → Audio 의 떨림 문제

위 두개의 문제를 각각 나누어서 분석하겠다.

Video 문제

현재 STB 에서 나오는 영상은 다른 STB(삼성)보다 다소 밝게 나온다. 일반인들이 보기에는 문제가 없지만, 삼성 STB 에 비교했을 때는 밝게 나온다. 때문에 우리 STB 에서 밝기나 명암을 조절가능하게 하려고 한다.

'이 문제에 대한 나의 생각'

나는 크게 두가지로 해결가능하다고 본다. 하나는 TV 에서 조절하는 방법, 하나는 STB 에서 조절하는 방법이다.
알다시피 TV 에서는 기본적으로 밝기나 명암조절이 가능하다. 개인적으로는 이 방법이 더 적절하다고 본다.
어짜피 최종단에서 출력되어지는 것은 TV 이기때문이다. 아무리 STB 에서 제대로 된 신호를 보낸다고해도 출력하는 TV 에서의 밝기 설정이 제대로 맞지 않다면 소용이 없기 때문이다.
일례를 들어 삼성 STB 의 경우 메뉴중에 밝기나 명암을 조절하는 메뉴는 없었다. 다른 STB 는 어떤지 몰라도, TV와 STB 에 같은 기능을 넣는 것은 아무래도 적절치 않은 것 같다.
암튼 나에게 맡겨진 일은 STB 입장에서 조절하는 것이기 때문에 개인적인 나의 생각은 이쯤에서 마치도록 하겠다.

위의 기능은 S/W 적으로 충분히 가능하다고 판단, 현재 프로그램 소스에서 세팅 해주는 부분을 찾았다.
바로 src/system/sysinit.c 의 VOUT_Inital() 이다.

	VOUTOutputParams.Analog.StateBCSLevel=STVOUT_PARAMS_AFFECTED;
	VOUTOutputParams.Analog.BCSLevel.Brightness=0;    // 바로 여기
	VOUTOutputParams.Analog.BCSLevel.Contrast=0;      // 여기
	VOUTOutputParams.Analog.BCSLevel.Saturation=0;    // 여기
	VOUTOutputParams.Analog.EmbeddedType        = TRUE;
	VOUTOutputParams.Analog.SyncroInChroma  = FALSE;     
 
	VOUTOutputParams.Analog.ColorSpace=2;
 
	ErrCode = STVOUT_Open(VOUTDeviceName, &OpenParams,&VOUTHndl);
	if (ErrCode != ST_NO_ERROR)
	{
	    STTBX_Print(("STVOUT_Init %s\n", GetErrorText(ErrCode) ));
	}

위의 소스중에 주석 처리 해준 부분을 보면, 값을 넣어주면, STVOUT 을 open 할 때 세팅된 값들을 적용한다는 내용이다. 하지만, 직접 값을 넣어주고나서 돌려보면 전혀 화면상에 변화가 없다.

내 눈이 둔해서 못 볼 수도 있겠지만, 내가 생각하기에 가장 최소값과 최대값을 넣었을 때는 최소한의 차이점을 발견할 수 있어야 한다는 생각이다. 7020 API 중 stvout 에 관한 데이터 시트를 봤다.

Users can used the three fields StateAnalogLevel StateBCSLevel and StateChrLumLevel to configure by default (middle values) or not changed the previous values 
if they don’t know how configure their application.

말인 즉은 설정을 바꿀 줄 모르면, 기본 값이나, 바꾸지 말라는 얘기다. 내가 이해한 것은 굳이 바꾸지 않아도 된다라는 의미였다. 이 것들 말고 더 특이할 만한 사항은 없었다.

결국 7020 레지스터를 건드리기로 데이터 시트를 봤다. 여기서 잠깐 내가 이해한 7020 의 프로세싱 방식에 대해서 설명해 보겠다.

'Main and auxiliary-display processors'

7020 은 크게 두가지 이미지 프로세싱을 가진다. 그것이 main 과 auxiliary 이다. 또한 어떤 이미지에 대해서 자기만의 틀을 가지고 있어서 그것보다, 어둡거나 밝으면 자동으로 이미지 보정을 하는 기능(Picture-structure improvement)을 가진다. 실로 놀라웠다. 이 프로세싱을 할 때 각각 Luma 와 Chroma 프로세싱을 한다.

Luma processing peaking, coring, sin(x)/x correction, edge replacement, dynamic contrast improvement
Chroma processing autoflesh, greenboost, tint control, saturation control saturation compensation

위의 항목중에 dynamic contrast improvement 가 바로 그것이다. 하지만, 이에 관련한 레지스터를 직접 읽어본 결과 현재 프로그램에서는 이 프로세싱을 사용하지 않고 있었다.
나는 이 프로세싱을 사용해야만, contrast 를 조절할 수 있을 거라고 생각했다. 그래서 관련한 기능의 레지스터를 모두 세팅을 해주고 돌려봤다. 결과는 마찬가지였다.

테스트 방법

하나의 테스트 Task 를 만들어서 일정 시간 단위로 루프를 돌면서, 원하는 레지스터나 함수를 세팅하도록 만들었다.

Audio 문제

스피커에서 나오는 소리가 좀 찢어지는 소리 비슷하게 나는 현상이다. 아래의 그림은 전체적인 audio 의 processing 과정이다.

위의 그림에는 나오지 않았지만, 가장 먼저 RF신호(흔히 말하는 스트림)를 PSIP 에서 파싱하면서 각각의 video, audio 의 정보(pid)를 뽑아낸다. 그리고는 TS 스트림만을 골라낸다. 그중에 audio 스트림이 바로 그림에서 보이는 PES(MPEG2 Packetised Elementary Stream)가 바로 그것이다. 다시 parser 를 지나면서, ES 신호로 바뀐다. decoder 를 통해 decoding 된 후에, 가장 중요한 작업이라고 할 수 있는 post-processing 을 한다.

테스트 방법

STB 에 연결되어 출력되어 나오는 TV 의 볼륨을 조절해가면서, 소리를 들어보았다.
지금까지는 TV 쪽에서의 볼륨을 일정 크기로 해놓고, STB 에서 리모콘으로 조절하였다. 내가 생각해볼때, 찢어지는 소리가 나는 것은 소리가 스피커가 낼 수 있는 크기보다 크기 때문이라고 생각했다.
그래서 이와 반대로, STB 에서의 크기를 고정해두고 TV 볼륨을 조절해봤다. 예전까지와는 다른 결과를 보였다. 찢어지는 소리가 나지 않았다.

Audio 문제 결론

문제는 STB 에서의 볼륨이 너무 큰 까닭이었다. 이는 7020 에서 출력되어 나온 Audio 스트림이 마지막 출력단의 증폭회로에서 너무 커진 이유였다.
해결책은 다음과 같았다.

  1. STB 에서 볼륨을 조절할 수 있는 한도를 제한하는 방법(s/w)
  2. 증폭회로의 증폭률을 줄이는 방법(h/w)

두 가지 방법중에 우리는 두번째 방법을 택했다. 방법은 증폭회로에 붙어있는 저항값을 낮추면 되는 것이었다. 기존의 47 Ω 에서 1 Ω 으로 수정했다.
그리고 나서 소리를 들어보았다. 예전보다 볼륨조절이 좀더 세밀해졌다. 볼륨을 최대한으로 높여도, 전처럼 스피커에서 찢어지는 정도는 아니었다.

  • computer/digitalarena/contrast_와_audio_문제.txt
  • Last modified: 3 years ago
  • by likewind