Compartilhar via


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:

  1. Chame IAMTuner::ChannelMinMax para determinar o intervalo de entradas de frequência na tabela de frequência atual.
  2. Chame o método IAMTuner::p ut_Channel uma vez para cada índice de frequência no intervalo.
  3. 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.

Ajuste internacional de TV analógica