Compartilhar via


Ajuste de televisão analógica

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]

O ajuste é controlado pelo filtro sintonizador de TV, por meio da interface IAMTVTuner . A interface IAMTVTuner herda o IAMTuner. Para obter um ponteiro para a interface, chame o método ICaptureGraphBuilder2::FindInterface da seguinte maneira:

IAMTVTuner *pTuner = NULL;
hr = pBuild->FindInterface(
    &LOOK_UPSTREAM_ONLY,  // Look upstream from pCap.
    NULL,                 // No particular media type.
    pCap,                 // Pointer to the capture filter.
    IID_IAMTVTuner, (void**)&pTuner);
if (SUCCEEDED(hr))
{
    // Use pTuner ...
    pTuner->Release();
}

O primeiro parâmetro indica pesquisar upstream do filtro de captura.

Tabelas de frequência

Internamente, o filtro sintonizador de TV mantém uma lista de tabelas de frequência. Cada tabela de frequência corresponde às frequências de transmissão ou cabo para um determinado país/região. Há também uma tabela de frequência genérica "Inicable", que é usada quando um país/região não tem um conjunto padrão de atribuições de frequência.

Cada tabela de frequência contém uma lista de frequências de ajuste. Para alguns países/regiões, os índices na tabela correspondem diretamente aos números de canal — em outras palavras, a frequência do canal n é a n ª entrada na tabela. Para alguns países/regiões, no entanto, não há correspondência direta entre números de canal e frequências. Nesse caso, o aplicativo deve manter uma lista que mapeia números de canal (normalmente escolhidos pelo usuário) para entradas de tabela de frequência. Por exemplo, o que o usuário vê como "canal 5" pode ser o número de entrada 12 na tabela de frequência.

Para obter detalhes, consulte Ajuste internacional de TV analógica.

Operações básicas de ajuste

Se o sintonizador der suporte a vários modos de recepção, como televisão e rádio FM, chame IAMTuner::p ut_Mode para selecionar o modo. O método IAMTuner::GetAvailableModes retorna todos os modos aos quais o sintonizador dá suporte. Por exemplo, o código a seguir verifica se o sintonizador dá suporte ao rádio FM e, em caso afirmativo, alterna para esse modo.

// Check whether the mode is supported.
long lModes = 0;
hr = m_pTuner->GetAvailableModes(&lModes);
if (SUCCEEDED(hr) && (lModes & AMTUNER_MODE_FM_RADIO))
{
    // Set the mode.
    hr = pTuner->put_Mode(AMTUNER_MODE_FM_RADIO);
}

Para definir o país/região, chame o método IAMTuner::p ut_CountryCode . O sintonizador usa esse valor para selecionar a tabela de frequência apropriada. Confira Atribuições de país/região para obter mais informações.

Para definir o canal, chame o método IAMTuner::p ut_Channel . O argumento para esse método não é, na verdade, um número de canal, mas sim um índice na tabela de frequência atual. Conforme descrito anteriormente, o número de índice pode ou não corresponder a um número de canal. O método IAMTuner::ChannelMinMax retorna os valores de índice mínimo e máximo para a tabela de frequência atual.

Substituindo entradas de frequência

É possível que algumas entradas nas tabelas de frequência estejam incorretas ou se tornem obsoletas. Portanto, um mecanismo é fornecido para substituir entradas individuais usando chaves do Registro.

As especificidades são explicadas no tópico Ajuste Internacional de TV analógica. Cada chave do Registro define um "espaço de ajuste" que contém uma ou mais subchaves. Cada subchave substitui uma entrada de frequência. Para definir o espaço de ajuste atual, use o método IAMTuner::p ut_TuningSpace . Ativar o espaço de ajuste substitui as entradas de frequência na tabela de frequência atual. Portanto, cabe ao aplicativo manter uma correspondência entre espaços de ajuste e países/regiões. A melhor abordagem é simplesmente usar o identificador de país/região como o nome do espaço de ajuste.

Ajustar as entradas de frequência

As frequências de difusão podem ser ajustadas para cima ou para baixo em vários kHz pela estação de transmissão para reduzir a possível interferência com canais vizinhos. Dada a frequência nominal, o sintonizador cartão pode verificar a frequência exata. O filtro sintonizador de TV tem um mecanismo para salvar as frequências ajustadas no registro.

Para cada entrada na tabela de frequência, chame o método put_Channel para ajustar a essa frequência. O sintonizador verificará a frequência mais precisa. Você pode marcar se o sintonizador obteve um bloqueio horizontal chamando IAMTuner::SignalPresent. O filtro sintonizador de TV também armazena o resultado internamente.

Depois de verificar todas as frequências, chame o método IAMTVTuner::StoreAutoTune para gravar os valores atualizados no Registro. Os valores atualizados são armazenados na entrada do Registro para o espaço de ajuste atual.

Televisão Analógica