收集 Fine-Tuning 資訊
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine,以及媒體基金會中的 音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
雖然通常預計電纜頻率是確切的,但廣播頻率可能會由廣播電臺上下調整數 kHz,以減少鄰近通道的潛在干擾。
當電視調諧器調整到頻道時,它會掃描最精確的訊號。 若要在登錄中儲存這項資訊以進行後續的微調作業,請執行下列動作:
- 呼叫 IAMTuner::ChannelMinMax,以判斷目前頻率數據表中的頻率項目範圍。
- 對於範圍中的每一個頻率索引,請呼叫 IAMTuner::put_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();
}
使用舊版的TV Tuner篩選器時,建議使用 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之前,不需要收集任何微調資訊。
相關主題