收集Fine-Tuning資訊

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

雖然纜線頻率通常是確切的,但廣播站可能會相應增加或減少數 kHz 的廣播頻率,以減少鄰近通道的潛在干擾。

當電視微調器篩選到頻道時,它會掃描最精確的訊號。 若要將這項資訊儲存在登錄中以供後續微調作業使用,請執行下列動作:

  1. 呼叫 IAMTuner::ChannelMinMax 以判斷目前頻率資料表中的頻率專案範圍。
  2. 針對範圍中的每個頻率索引 呼叫 IAMTuner::p ut_Channel 方法一次。
  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();
}

使用舊版的電視微調器篩選器時,建議 使用 IAMTVTuner::AutoTune 方法來微調。 不過,此方法會忽略任何頻率覆寫,因此不再建議使用。 下列程式碼相當於 AutoTune 方法,但可正確地使用頻率覆寫:

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);
        return hr;
}

透過廣播接收,雖然圖片是可檢視的,但不一定可以取得水準鎖定。 在這些情況下,微調器硬體會有頻率鎖定,但解碼器不會有水準鎖定。 使用 put_ChannelAutoTune 時,可以藉由檢查傳回碼來偵測此條件。

描述
S_OK 微調作業成功,而微調器收到頻率鎖定。
S_FALSE 微調作業期間沒有錯誤,但微調器無法取得頻率鎖定。 這項作業不太可能有可檢視的通道。

 

任何其他傳回碼都表示發生某些錯誤。

S_OK的傳回值不保證解碼器具有水準鎖定。 AutoTune方法會更新FoundSignal參數,以指出是否達到水準鎖定。 IAMTuner::SignalPresent方法會傳回相同的資訊。

不過,當傳回值S_OK時,應用程式可以選擇忽略 FoundSignal 參數,因為微調器會報告頻率鎖定。 有頻率鎖定雜訊的可能性,但這個可能性應該根據略過可檢視通道的可能性來衡量。

登錄轉換

為了支援頻率覆寫,保存微調資訊之登錄機碼的內部格式已變更。 原始格式仍支援回溯相容性,但不支援頻率覆寫。

每當呼叫 IAMTVTuner::StoreAutoTune 方法時,舊的登錄格式會轉換成新的格式。 如果您的應用程式新增頻率覆寫,它應該呼叫 StoreAutoTune 方法,以轉換成新的登錄格式。 呼叫 StoreAutoTune之前,不需要收集任何微調資訊。

國際類比電視微調