Сбор сведений о Fine-Tuning
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Хотя частоты кабелей, как правило, должны быть точными, частота вещания может быть скорректирована на несколько кГц станцией вещания, чтобы уменьшить потенциальные помехи с соседними каналами.
Когда тв-тюнер фильтр настраивается на канал, он проверяет наиболее точный сигнал. Чтобы сохранить эти сведения в реестре для последующих операций настройки, выполните следующие действия.
- Вызовите 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.
Связанные темы