收集Fine-Tuning資訊
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
雖然纜線頻率通常是確切的,但廣播站可能會相應增加或減少數 kHz 的廣播頻率,以減少鄰近通道的潛在干擾。
當電視微調器篩選到頻道時,它會掃描最精確的訊號。 若要將這項資訊儲存在登錄中以供後續微調作業使用,請執行下列動作:
- 呼叫 IAMTuner::ChannelMinMax 以判斷目前頻率資料表中的頻率專案範圍。
- 針對範圍中的每個頻率索引 呼叫 IAMTuner::p ut_Channel 方法一次。
- 呼叫 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_Channel 或 AutoTune 時,可以藉由檢查傳回碼來偵測此條件。
值 | 描述 |
---|---|
S_OK | 微調作業成功,而微調器收到頻率鎖定。 |
S_FALSE | 微調作業期間沒有錯誤,但微調器無法取得頻率鎖定。 這項作業不太可能有可檢視的通道。 |
任何其他傳回碼都表示發生某些錯誤。
S_OK的傳回值不保證解碼器具有水準鎖定。 AutoTune方法會更新FoundSignal參數,以指出是否達到水準鎖定。 IAMTuner::SignalPresent方法會傳回相同的資訊。
不過,當傳回值S_OK時,應用程式可以選擇忽略 FoundSignal 參數,因為微調器會報告頻率鎖定。 有頻率鎖定雜訊的可能性,但這個可能性應該根據略過可檢視通道的可能性來衡量。
登錄轉換
為了支援頻率覆寫,保存微調資訊之登錄機碼的內部格式已變更。 原始格式仍支援回溯相容性,但不支援頻率覆寫。
每當呼叫 IAMTVTuner::StoreAutoTune 方法時,舊的登錄格式會轉換成新的格式。 如果您的應用程式新增頻率覆寫,它應該呼叫 StoreAutoTune 方法,以轉換成新的登錄格式。 呼叫 StoreAutoTune之前,不需要收集任何微調資訊。
相關主題