DirectShow 보유 국제 아날로그 TV의 튜닝 미조정 정보의 수집   [목차열람] [주소복사] [슬롯비우기]
미조정 정보의 수집
 
Microsoft DirectX 9.0

미조정 정보의 수집

케이블 텔레비전의 주파수는 일반적으로 정확해요에 대해서, 방송 주파수의 경우는, 인접 채널과의 간섭의 가능성을 경감시키기 (위해)때문에, 방송국이 수킬로헤르츠 단위로 올리거나 내리거나 하는 일이 있다.

TV 튜너 필터가 채널에 튜닝 하는 경우, 가장 정확한 신호를 스캔 한다. 이 정보를, 이후의 튜닝 조작으로 사용하기 위해서(때문에) 레지스트리에 보존하려면 , 다음과 같이 한다.

  1. IAMTuner::ChannelMinMax 를 호출해, 현재의 주파수 테이블내의 주파수 엔트리의 범위를 조사한다.
  2. 범위내의 각 주파수 인덱스에 대해,IAMTuner::put_Channel 메서드를 1 회 호출한다.
  3. IAMTVTuner::StoreAutoTune 를 호출해, 미조정 정보를 레지스트리에 보존한다. 이 정보는, 현재의 튜닝 공간의 레지스트리 키아래에 보존된다.

이하의 코드에 이러한 순서를 나타낸다.

long lMin = 0, lMax = 0;
hr = pTuner->ChannelMinMax(&lMin, &lMax);
if (SUCCEEDED(hr))
{
    for (long i = lMin; i <= lMax; i++)
    {
        pTuner->put_Channel(i, AMTUNER_SUBCHAN_DEFAULT,
            AMTUNER_SUBCHAN_DEFAULT)
    }
    pTuner->StoreAutoTune();
}

이전의 버전의 TV 튜너 필터에서는, 미조정에는 IAMTVTuner::AutoTune 메서드가 추천 되고 있었다. 다만, 이 메서드는 주파수 오버라이드(override)를 무시하므로, 현재는 이 메서드의 사용은 추천 하지 않는다. 다음 코드는 AutoTune 메서드와 같지만, 주파수 오버라이드(override)를 올바르게 처리한다.

HRESULT MyAutoTune(IAMTVTuner *pTuner, long lIndex, long *plFoundSignal)
{
    long SignalStrength = AMTUNER_NOSIGNAL;
    HRESULT hr;
    hr = pTuner->put_Channel(lIndex, AMTUNER_SUBCHAN_DEFAULT, AMTUNER_SUBCHAN_DEFAULT);
    if (NOERROR == hr)
        pTuner->SignalPresent(&SignalStrength);
    *plFoundSignal = (SignalStrength != AMTUNER_NOSIGNAL);
    // AMTUNER_HASNOSIGNALSTRENGTH 는 튜닝 되고 있는 것을 의미 하면 가정한다
    return hr;
}

방송의 수신에서는, 영상이 보이고 있어도, 수평 잠금을 취득할 수 없는 것이 있다. 그 경우, 튜너의 하드웨어는 주파수 잠금을 취득하고 있지만, 디코더는 수평 잠금을 취득하고 있지 않다. 이 상태는,put_Channel 또는 AutoTune 를 사용할 때에, 반환값을 조사하는 것에 의해 검출할 수 있다.

설명
S_OK 선국 조작이 성공해, 튜너가 주파수 잠금을 취득했다.
S_FALSE 선국 조작중에 에러는 발생하지 않았지만, 튜너는 주파수 잠금을 취득할 수 없었다. 이 조작에 의해 수신 가능 채널을 취득할 수 있을 가능성은 극히 낮다.

다른 모든 반환값은, 어떠한 에러가 발생한 것을 나타낸다.

반환값이 S_OK 의 경우에서도, 디코더가 수평 잠금을 취득하고 있는 것은 보증되지 않는다. AutoTune 메서드는,FoundSignal 파라미터를 갱신해, 수평 잠금이 취득되었는지 어떠했는지를 나타낸다. IAMTuner::SignalPresent 메서드도 같은 정보를 돌려준다.

다만, 반환값이 S_OK 의 경우, 튜너가 주파수 잠금을 보고하고 있으므로, 애플리케이션에서는 FoundSignal 파라미터를 무시할 수도 있다. 노이즈에 대해서 주파수가 잠그고 있을 가능성이 있지만, 그 가능성을 수신 가능 채널이 스킵 될 가능성이라고 비교 검토할 필요가 있다.

레지스트리의 변환

주파수 오버라이드(override)를 지원 하기 위해서, 미조정 정보를 보관 유지하는 레지스트리 키의 내부 포맷이 변경되었다. 하위 호환성을 유지하기 위해서(때문에) 원의 포맷도 지원 되고 있지만, 이 포맷은 주파수 오버라이드(override)를 지원 하고 있지 않다.

IAMTVTuner::StoreAutoTune 메서드가 불려 갈 때마다, 낡은 레지스트리 포맷은 새로운 포맷에 변환된다. 애플리케이션이 주파수 오버라이드(override)를 추가하는 경우는, 새로운 레지스트리 포맷으로 변환하기 위해서(때문에) StoreAutoTune 메서드를 호출할 필요가 있다. StoreAutoTune 메서드를 호출하기 전에 미조정 정보를 수집할 필요는 없다.

↑TOP