Visualización de subtítulos
[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.
Para admitir subtítulos en televisión analógica, el filtro de captura expone un pin que entrega VBI o datos cerrados subtítulo. El pin tendrá una de las siguientes categorías de patillas:
- Pin VBI (PIN_CATEGORY_VBI). Proporciona una secuencia de muestras de forma de onda de VBI. Se pasan a un filtro de descodificador que extrae los datos de subtítulos.
- Patilla CC (PIN_CATEGORY_CC). Entrega pares de bytes de subtítulo cerrados, extraídos de los datos de la línea 21.
- Pin CC de segmentación de hardware (PINNAME_VIDEO_CC_CAPTURE).
Para obtener una vista previa de los subtítulos, llame a ICaptureGraphBuilder2::RenderStream con la categoría de patillas VBI y, si se produce un error, llámalo de nuevo con la categoría CC.
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}
En el diagrama siguiente se muestra un gráfico de filtros típico para mostrar subtítulos.
Este gráfico usa los siguientes filtros para la presentación cerrada subtítulo:
- Convertidor de tee/receptor a receptor. Acepta la información de VBI del filtro de captura y la divide en secuencias independientes para cada uno de los servicios de datos presentes en la señal. Microsoft proporciona códecs VBI para subtítulos, NABTS y Teletext estándar del mundo (WST).
- Descodificador CC. Descodifica los datos CC de las formas de onda VBI muestreadas proporcionadas por el filtro de captura.
- Descodificador de línea 21. Convierte los pares de bytes CC y dibuja el texto de subtítulo en mapas de bits. El filtro de bajada (en este caso, el mezclador de superposición) superpone los mapas de bits en el vídeo.
El método RenderStream de Capture Graph Builder agrega estos filtros automáticamente. Si el filtro de captura tiene un pin CC en lugar de un pin VBI, el pin CC se conecta directamente al filtro de descodificador de línea 21.
Nota:
Si usa el filtro Representador de mezcla de vídeos (VMR) para la representación, use el filtro de descodificador de línea 21. Este filtro tiene la misma funcionalidad que el descodificador de línea 21, pero el CLSID es CLSID_Line21Decoder2.
Nota:
El filtro de descodificador CC se quitó en Windows Vista. Las nuevas aplicaciones deben usar el filtro VBICodec, que se documenta en la documentación de Microsoft TV Technologies.
Si el dispositivo de captura usa un puerto de vídeo, el filtro de captura podría tener un pin VBI de puerto de vídeo (PIN_CATEGORY_VIDEOPORT_VBI). Este pin debe estar conectado al filtro de asignador de superficie de VBI , que asigna superficies para contener los datos VBI capturados. El método RenderStream agrega este filtro si es necesario. En el diagrama siguiente se muestra un gráfico de filtros con el asignador de superficie de VBI.
Habilitación y deshabilitación de los títulos
Para controlar la presentación de subtítulos, use la interfaz IAMLine21Decoder en el filtro Descodificador de línea 21. Por ejemplo, puede desactivar la presentación de subtítulos mediante el método IAMLine21Decoder::SetServiceState , como se indica a continuación:
// Use the FindInterface method to find the interface.
IAMLine21Decoder *pLine21 = NULL;
hr = pBuild->FindInterface(
&LOOK_DOWNSTREAM_ONLY, // Look downstream from pCap
NULL, // No particular media type
pCap, // Pointer to the capture filter.
IID_IAMLine21Decoder, (void**)&pLine21);
if (SUCCEEDED(hr))
{
pLine21->SetServiceState(AM_L21_CCSTATE_Off);
// (Use AM_L21_CCSTATE_On to enable.)
pLine21->Release();
}
En este ejemplo se usa el método ICaptureGraphBuilder2::FindInterface para buscar la interfaz IAMLine21Decoder . El primer parámetro de FindInterface es &LOOK_DOWNSTREAM_ONLY, que especifica buscar en bajada desde el filtro de captura (pCap).
Captura de mapas de bits de subtítulos
Puede capturar los subtítulo mapas de bits en un archivo. Para ello, agregue la sección de escritura de archivos del grafo de filtro, como se describe en Capturar vídeo en un archivo. A continuación, represente el pin CC o VBI en el filtro mux:
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, pMux);
if (FAILED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, pMux);
}
Si también está capturando el vídeo, se creará un archivo con dos secuencias de vídeo independientes. No capturará vídeo con subtítulos superpuestos en la parte superior de la imagen.
Temas relacionados