Compartir a través de


Ajuste de televisión analógica

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El ajuste se controla mediante el filtro de sintonizador de TV, a través de la interfaz IAMTVTuner . La interfaz IAMTVTuner hereda IAMTuner. Para obtener un puntero a la interfaz, llame al método ICaptureGraphBuilder2::FindInterface de la siguiente manera:

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();
}

El primer parámetro indica que se va a buscar en la cadena desde el filtro de captura.

Tablas de frecuencia

Internamente, el filtro de sintonizador de TV mantiene una lista de tablas de frecuencias. Cada tabla de frecuencias corresponde a las frecuencias de difusión o de cable de un país o región determinado. También hay una tabla de frecuencia genérica "Unicable", que se usa cuando un país o región no tiene un conjunto estándar de asignaciones de frecuencia.

Cada tabla de frecuencias contiene una lista de frecuencias de optimización. En algunos países o regiones, los índices de la tabla se corresponden directamente con los números de canal; es decir, la frecuencia del canal n es la nª entrada de la tabla. Sin embargo, en algunos países o regiones no hay correspondencia directa entre los números de canal y las frecuencias. En ese caso, la aplicación debe mantener una lista que asigne números de canal (normalmente elegidos por el usuario) para las entradas de la tabla de frecuencia. Por ejemplo, lo que el usuario ve como "canal 5" podría ser el número de entrada 12 en la tabla de frecuencias.

Para obtener más información, consulta International Analog TV Tuning.

Operaciones básicas de optimización

Si el sintonizador admite varios modos de recepción, como televisión y radio FM, llame a IAMTuner::p ut_Mode para seleccionar el modo. El método IAMTuner::GetAvailableModes devuelve todos los modos que admite el tuner. Por ejemplo, el código siguiente comprueba si el sintonizador admite radio FM y, si es así, cambia a ese 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 establecer el país o región, llame al método IAMTuner::p ut_CountryCode . El tuner usa este valor para seleccionar la tabla de frecuencias adecuada. Consulte Asignaciones de país o región para obtener más información.

Para establecer el canal, llame al método IAMTuner::p ut_Channel . El argumento de este método no es realmente un número de canal, sino un índice en la tabla de frecuencias actual. Como se ha descrito anteriormente, el número de índice puede o no corresponder a un número de canal. El método IAMTuner::ChannelMinMax devuelve los valores de índice mínimo y máximo para la tabla de frecuencias actual.

Invalidar entradas de frecuencia

Es posible que algunas entradas de las tablas de frecuencias sean incorrectas o estén obsoletas. Por lo tanto, se proporciona un mecanismo para invalidar entradas individuales mediante claves del Registro.

Los detalles se explican en el tema International Analog TV Tuning. Cada clave del Registro define un "espacio de optimización" que contiene una o varias subclaves. Cada subclave invalida una entrada de frecuencia. Para establecer el espacio de optimización actual, use el método IAMTuner::p ut_TuningSpace . Al activar el espacio de optimización, se invalidan las entradas de frecuencia de la tabla de frecuencias actual. Por lo tanto, es necesario que la aplicación mantenga una correspondencia entre los espacios de ajuste y los países o regiones. El mejor enfoque es simplemente usar el identificador de país o región como nombre del espacio de optimización.

Ajuste de las entradas de frecuencia

Las frecuencias de difusión se pueden ajustar hacia arriba o hacia abajo varios kHz por la estación de difusión para reducir la posible interferencia con los canales vecinos. Dada la frecuencia nominal, la tarjeta de tuner puede buscar la frecuencia exacta. El filtro de sintonizador de TV tiene un mecanismo para guardar las frecuencias ajustadas en el registro.

Para cada entrada de la tabla de frecuencias, llame al método put_Channel para ajustarlo a esa frecuencia. El sintonizador buscará la frecuencia más precisa. Puede comprobar si el tuner ha logrado un bloqueo horizontal llamando a IAMTuner::SignalPresent. El filtro sintonizador de TV también almacena el resultado internamente.

Después de examinar todas las frecuencias, llama al método IAMTVTuner::StoreAutoTune para escribir los valores actualizados en el registro. Los valores actualizados se almacenan en la entrada del Registro para el espacio de optimización actual.

Televisión analógica