각기 다른 출력을 내보낼때, 세팅을 해주어야 할 것들을 정리했다. 언젠가 꼭 도움이 될 것이다. 현재 상용되고 있는 STB 를 보면, 제품 뒷면에 많은 출력포트들이 있는 것을 알 수 있다. 그 수가 많을 수록 좀더 많은 입출력을 지원한다고 보면 된다.
현재 우리가 개발 중인 STB 의 경우, Video 출력으로는 HD(RGB, Y/CB/CR) 과 SD(CVBS) 을 지원한다. 이것은 모두 아날로그 신호들이다. 디지털로는 DVI 가 있다. 아직 현재 구현이 안되었다. -_-;
또한 Audio 출력으로는 SPDIF(디지털) 와 PCM(아날로그)이 있다.
나중에 궁극적인 목표는 어떤 케이블이라도 튜너에 꽂으면, 원하는 출력포트로 나오게 하는 것이다. 하지만, 지금은 S/W 와 H/W 적으로 미흡한 상태다. 그래서 소스 프로그램을 각각의 원하는 출력에 따라 수정을 해주어야 한다.
Video 출력 세팅
현재 RGB, Y/CB/CR, CVBS 출력을 지원한다.
RGB 모드로 세팅시 수정해야 할 것들
system/sysinit.c
ST_ErrorCode_t VOUT_Inital( void ) { VOUTInitParams.CPUPartition_p = system_partition; VOUTInitParams.MaxOpen = 3; VOUTInitParams.DeviceType = STVOUT_DEVICE_TYPE_7020; VOUTInitParams.OutputType = STVOUT_OUTPUT_HD_ANALOG_RGB; ... ... //ErrCode = STVOUT_SetOutputParams(VOUTHndl, &VOUTOutputParams); 주석처리 ... }
system/vtg.c
static ST_ErrorCode_t VTG_SetMode(void) { ... STVTG_TimingMode = STVTG_TIMING_MODE_1080I60000_74250; ... //STVTG_SetOptionalConfiguration(VTG_Handle, &opt); 주석처리 ... }
Y/CB/CR 모드로 세팅시 수정해야 할 것들
system/sysinit.c
ST_ErrorCode_t VOUT_Inital( void ) { VOUTInitParams.CPUPartition_p = system_partition; VOUTInitParams.MaxOpen = 3; VOUTInitParams.DeviceType = STVOUT_DEVICE_TYPE_7020; VOUTInitParams.OutputType = STVOUT_OUTPUT_HD_ANALOG_YUV; ... ... ErrCode = STVOUT_SetOutputParams(VOUTHndl, &VOUTOutputParams); // 주석제거 ... }
system/vtg.c
static ST_ErrorCode_t VTG_SetMode(void) { ... STVTG_TimingMode = STVTG_TIMING_MODE_1080I60000_74250; ... STVTG_SetOptionalConfiguration(VTG_Handle, &opt); // 주석제거 ... }
CVBS 모드로 세팅시 수정해야 할 것들
system/sysinit.c
ST_ErrorCode_t VOUT_Inital( void ) { VOUTInitParams.CPUPartition_p = system_partition; VOUTInitParams.MaxOpen = 3; VOUTInitParams.DeviceType = STVOUT_DEVICE_TYPE_7020; VOUTInitParams.OutputType = STVOUT_OUTPUT_ANALOG_CVBS; // CVBS 로 수정 strcpy( VOUTInitParams.Target.GenericCell.DencName,DENC_DeviceName); // 주석 제거 //strcpy(VOUTInitParams.Target.DencName,""); // CBCR 이나 RGB 일 경우에는 주석을 제거한다 VOUTInitParams.Target.GenericCell.DeviceBaseAddress_p = (void*)(STI7020_BASE_ADDRESS); VOUTInitParams.Target.GenericCell.BaseAddress_p = (void *)(ST7020_DSPCFG_OFFSET); ... ... //ErrCode = STVOUT_SetOutputParams(VOUTHndl, &VOUTOutputParams); 주석처리 ... }
system/vtg.c
static ST_ErrorCode_t VTG_SetMode(void) { ... STVTG_TimingMode = STVTG_TIMING_MODE_480I59940_13500; ... //STVTG_SetOptionalConfiguration(VTG_Handle, &opt); 주석처리 ... }
system/vid.c
ST_ErrorCode_t VID_Setup(void) { ... STVID_MemoryProfile.MaxWidth = 720; ... } </coded> ====== Audio 출력 세팅 ====== 현재 PCM, SPDIF 출력을 지원한다. ===== PCM 모드로 세팅시 수정해야 할 것들 ===== ==== system/aud.c ==== <code text> ST_ErrorCode_t AUD_Initial() { ... //ST_ErrorCode = STAUD_DRSetBroadcastProfile(AUD_Handle, STAUD_OBJECT_OUTPUT_SPDIF1, STAUD_BroadcastProfile); 주석처리 ST_ErrorCode = STAUD_DRSetBroadcastProfile(AUD_Handle, STAUD_OBJECT_DECODER_COMPRESSED1, STAUD_BroadcastProfile); // 주석제거 ... //ST_ErrorCode = STAUD_OPSetSpeakerEnable(AUD_Handle, STAUD_OBJECT_OUTPUT_SPDIF1, &STAUD_SpeakerEnable); 주석처리 ST_ErrorCode = STAUD_OPSetSpeakerEnable(AUD_Handle, STAUD_OBJECT_OUTPUT_MULTIPCM1, &STAUD_SpeakerEnable); // 주석제거 ... }
src/ui/ui.c
void UiEvent() { ... STAUD_Mute(AUD_Handle, FALSE, TRUE); ... }
SPDIF 모드로 세팅시 수정해야 할 것들
system/aud.c
ST_ErrorCode_t AUD_Initial() { ... ST_ErrorCode = STAUD_DRSetBroadcastProfile(AUD_Handle, STAUD_OBJECT_OUTPUT_SPDIF1, STAUD_BroadcastProfile); // 주석제거 //ST_ErrorCode = STAUD_DRSetBroadcastProfile(AUD_Handle, STAUD_OBJECT_DECODER_COMPRESSED1, STAUD_BroadcastProfile); 주석처리 ... ST_ErrorCode = STAUD_OPSetSpeakerEnable(AUD_Handle, STAUD_OBJECT_OUTPUT_SPDIF1, &STAUD_SpeakerEnable); // 주석제거 //ST_ErrorCode = STAUD_OPSetSpeakerEnable(AUD_Handle, STAUD_OBJECT_OUTPUT_MULTIPCM1, &STAUD_SpeakerEnable); 주석처리 ... }
src/ui/ui.c
void UiEvent() { ... STAUD_Mute(AUD_Handle, TRUE, FALSE); ... }