DirectShow DirectShow 의 사용법 비디오 캡춰 아날로그 TV 아날로그 TV 의 튜닝   [목차열람] [주소복사] [슬롯비우기]
아날로그 TV 의 튜닝
 
Microsoft DirectX 9.0

아날로그 TV 의 튜닝

튜닝은 TV 튜너 필터에 의해 IAMTVTuner 인터페이스를 개입시켜 제어한다. IAMTVTuner 인터페이스는 IAMTuner 를 계승한다. 인터페이스의 포인터를 얻어오려면, 다음과 같이 ICaptureGraphBuilder2::FindInterface 메서드를 호출한다.

IAMTVTuner *pTuner = NULL;
hr = pBuild->FindInterface(
    &LOOK_UPSTREAM_ONLY,  // pCap 로부터 업 스트림 방향을 조사한다.
    NULL,                 // 미디어 타입을 특정하지 않는다.
    pCap,                 // 캡춰 필터의 포인터.
    IID_IAMTVTuner, (void**) &pTuner);
if (SUCCEEDED(hr))
{
    // pTuner 를 사용한다 ...
    pTuner->Release();
}

최초의 파라미터는 캡춰 필터로부터 업 스트림 방향으로 검색하는 것을 나타낸다.

주파수 테이블

TV 튜너 필터는 내부적으로 주파수 테이블의 일람을 보관 유지한다. 각 주파수 테이블은, 특정의 나라/지역의 방송 또는 케이블 텔레비전의 주파수에 대응한다. 또, 범용적인 "Unicable" 주파수 테이블도 있다. 이 테이블은, 나라/지역에 주파수 할당의 표준적인 세트가 없는 경우에 사용된다.

각 주파수 테이블은 튜닝 주파수의 일람을 포함한다. 일부의 나라/지역에서는, 테이블의 인덱스는 채널 번호에 직접 대응한다. 즉, 채널 n 는 테이블의 n 번째의 엔트리가 된다. 그러나, 일부의 나라/지역에서는, 채널 번호와 주파수의 사이에 직접적인 대응이 없다. 그 경우, 애플리케이션은 채널 번호 (보통은 사용자가 선택한다)를 주파수 테이블 엔트리에 맵핑 하는 일람을 보관 유지할 필요가 있다. 예를 들어, 사용자가 "채널 5" 로 보는 것은, 주파수 테이블에서는 엔트리 번호 12 가 된다.

더 자세한 정보는, 「국제 아날로그 TV의 튜닝」을 참조할것.

튜닝의 기본 조작

튜너가 텔레비전과 FM 라디오 등, 복수의 수신 모드를 지원 하고 있는 경우,IAMTuner::put_Mode 를 호출해 모드를 선택한다. IAMTuner::GetAvailableModes 메서드는, 튜너가 지원 하는 모든 모드를 돌려준다. 예를 들어, 다음 코드에서는, 튜너가 FM 라디오를 지원 하고 있을지 어떨지를 조사해 지원 하고 있는 경우는, 그 모드로 전환한다.

// 모드가 지원 되고 있는지를 조사한다.
long lModes = 0;
hr = m_pTuner->GetAvailableModes(&lModes);
if (SUCCEEDED(hr) && (lModes & AMTUNER_MODE_FM_RADIO))
{
    // 모드를 설정한다.
    hr = pTuner->put_Mode(AMTUNER_MODE_FM_RADIO);
}

나라/지역을 설정하려면 ,IAMTuner::put_CountryCode 메서드를 호출한다. 튜너는 이 값을 사용해 적절한 주파수 테이블을 선택한다. 더 자세한 정보는, 「나라/지역의 할당」을 참조할것.

채널을 설정하려면 ,IAMTuner::put_Channel 메서드를 호출한다. 이 메서드의 인수는 실제로는 채널 번호는 아니고, 현재의 주파수 테이블에의 인덱스이다. 전에 설명한 것처럼, 인덱스 번호는 채널 번호에 대응 하면 귀로 대응하지 않을 때가 있다. IAMTuner::ChannelMinMax 메서드는, 현재의 주파수 테이블의 최소와 최대의 인덱스값을 돌려준다.

주파수 엔트리의 오버라이드(override)

주파수 테이블의 엔트리는 부정확하기도 하고, 낡아지는 일이 있다. 따라서, 레지스트리 키를 사용해 각각의 엔트리를 오버라이드(override) 할 방법이 제공되고 있다.

더 자세한 정보는, 「국제 아날로그 TV의 튜닝」으로 설명하고 있다. 각 레지스트리 키는, 1 개 또는 복수의 서브 키를 가지는 "튜닝 공간" 을 정의한다. 각 서브 키는 1 개의 주파수 엔트리를 오버라이드(override) 한다. 현재의 튜닝 공간을 설정하려면 ,IAMTuner::put_TuningSpace 메서드를 사용한다. 튜닝 공간을 액티브하게 하면, 현재의 주파수 테이블의 주파수 엔트리가 오버라이드(override) 된다. 따라서, 튜닝 공간과 나라/지역의 사이의 대응을 유지하는 것은 애플리케이션측에서 실시한다. 나라/지역 식별자를 튜닝 공간명으로서 사용하는 것이 제일이야 있고 방법이다.

주파수 엔트리의 미조정

방송 주파수는, 인접 채널과의 간섭의 가능성을 경감시키기 (위해)때문에, 방송국이 수 kHz 단위로 올리거나 내리거나 하는 일이 있다. 보통의 주파수의 경우, 튜너 카드는 정확한 주파수를 스캔 할 수 있다. TV 튜너 필터는 조정필 보고 주파수를 레지스트리에 보존하는 기구를 갖추고 있다.

주파수 테이블의 엔트리 마다,put_Channel 메서드를 호출해, 그 주파수에 튜닝 한다. 튜너는 가장 정확한 주파수를 스캔 한다. IAMTuner::SignalPresent 를 호출하면, 튜너가 수평 잠금에 이르고 있는지를 확인할 수 있다. 또, TV 튜너 필터는 결과를 내부적으로 보존한다.

모든 주파수를 스캔 한 후,IAMTVTuner::StoreAutoTune 메서드를 호출해, 갱신된 값을 레지스트리에 기입한다. 갱신된 값은, 현재의 튜닝 공간용 레지스트리 엔트리아래에 저장 된다.

↑TOP