Coletando informações de Fine-Tuning
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Embora as frequências de cabo geralmente sejam exatas, as frequências de transmissão podem ser ajustadas para cima ou para baixo vários kHz pela estação de transmissão para reduzir a possível interferência com canais vizinhos.
Quando o filtro do Sintonizador de TV é ajustado para um canal, ele verifica o sinal mais preciso. Para salvar essas informações no Registro para operações de ajuste subsequentes, faça o seguinte:
- Chame IAMTuner::ChannelMinMax para determinar o intervalo de entradas de frequência na tabela de frequência atual.
- Chame o método IAMTuner::p ut_Channel uma vez para cada índice de frequência no intervalo.
- Chame IAMTVTuner::StoreAutoTune para salvar as informações de ajuste fino no Registro. As informações são armazenadas na chave do Registro para o espaço de ajuste atual.
O código a seguir mostra essas etapas:
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();
}
Com versões anteriores do filtro sintonizador de TV, o método IAMTVTuner::AutoTune foi recomendado para ajuste fino. No entanto, esse método ignora qualquer substituição de frequência, portanto, seu uso não é mais recomendado. O código a seguir é equivalente ao método AutoTune , mas funciona corretamente com substituições de frequência:
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;
}
Com a recepção de transmissão, nem sempre é possível obter um bloqueio horizontal, embora a imagem seja acessível. Nesses casos, o hardware do sintonizador terá um bloqueio de frequência, mas o decodificador não terá bloqueio horizontal. Essa condição pode ser detectada ao usar put_Channel ou o AutoTune examinando o código de retorno.
Valor | Descrição |
---|---|
S_OK | A operação de ajuste foi bem-sucedida e o sintonizador obteve um bloqueio de frequência. |
S_FALSE | Não houve erros durante a operação de ajuste, mas o sintonizador não conseguiu obter um bloqueio de frequência. É altamente improvável que haja um canal viewl resultante dessa operação. |
Qualquer outro código de retorno indica que ocorreu algum erro.
Um valor retornado de S_OK não garante que o decodificador tenha um bloqueio horizontal. O método AutoTune atualiza o parâmetro FoundSignal para indicar se o bloqueio horizontal foi obtido ou não. O método IAMTuner::SignalPresent retorna as mesmas informações.
No entanto, quando o valor retornado é S_OK, o aplicativo tem a opção de ignorar o parâmetro FoundSignal , pois o sintonizador está relatando um bloqueio de frequência. Há a possibilidade de um bloqueio de frequência no ruído, mas essa possibilidade deve ser ponderada contra a possibilidade de ignorar canais viewveis.
Conversão do Registro
Para dar suporte a substituições de frequência, o formato interno da chave do Registro que contém informações de ajuste fino foi alterado. O formato original ainda tem suporte para compatibilidade com versões anteriores, mas não dá suporte a substituições de frequência.
O formato antigo do Registro é convertido no novo formato sempre que o método IAMTVTuner::StoreAutoTune é chamado. Se o aplicativo adicionar substituições de frequência, ele deverá chamar o método StoreAutoTune para converter no novo formato do Registro. Não é necessário coletar nenhuma informação de ajuste fino antes de chamar StoreAutoTune.
Tópicos relacionados