Visualizzazione di sottotitoli chiusi
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Cattura audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di utilizzare per i nuovi codici MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Per supportare i sottotitoli in televisione analogica, il filtro di acquisizione espone un pin che fornisce dati relativi a VBI o sottotitoli chiusi. Il pin avrà una delle categorie di pin seguenti:
- Pin VBI (PIN_CATEGORY_VBI). Fornisce un flusso di esempi di forme d'onda VBI. Queste informazioni vengono passate a un filtro decodificatore che estrae i dati dei sottotitoli nascosti.
- CC Pin (PIN_CATEGORY_CC) Recapita coppie di byte con didascalia chiusa, estratte dai dati della riga 21.
- Pin CC di sezionamento hardware (PINNAME_VIDEO_CC_CAPTURE).
Per visualizzare in anteprima i sottotitoli chiusi, chiamare ICaptureGraphBuilder2::RenderStream con la categoria pin VBI e, in caso di errore, chiamarlo di nuovo con la categoria CC.
hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}
Il diagramma seguente mostra un tipico grafico di filtro per la visualizzazione di sottotitoli chiusi.
Questo grafico usa i filtri seguenti per la visualizzazione della didascalia chiusa:
- Convertitore da tee/lavello a lavello. Accetta le informazioni VBI dal filtro di acquisizione e le suddivide in flussi separati per ognuno dei servizi dati presenti nel segnale. Microsoft fornisce codec VBI per Closed Caption, NABTS e World Standard Teletext (WST).
- DECODIFICATORE CC. Decodifica i dati CC dalle forme d'onda VBI campionate fornite dal filtro di acquisizione.
- Decodificatore linea 21. Converte le coppie di byte CC e disegna il testo della didascalia in bitmap. Il filtro downstream (in questo caso overlay mixer) sovrappone le bitmap al video.
Il metodoRenderStream di Capture Graph Builderaggiunge automaticamente questi filtri. Se il filtro di acquisizione ha un pin CC anziché un pin VBI, il pin CC viene collegato direttamente al filtro Decodificatore Linea 21.
Nota
Se si usa il filtro VMR (Video Mixing Renderer) per il rendering, usare il filtro "Line 21 Decoder" 2. Questo filtro ha la stessa funzionalità del decodificatore Line 21, ma CLSID è CLSID_Line21Decoder2.
Nota
Il filtro CC Decoder è stato rimosso in Windows Vista. Le nuove applicazioni devono usare il filtro VBICodec, documentato nella documentazione di Microsoft TV Technologies.
Se il dispositivo di acquisizione usa una porta video, il filtro di acquisizione potrebbe avere un pin VBI della porta video (PIN_CATEGORY_VIDEOPORT_VBI). Questo pin deve essere collegato al filtro Surface Allocator VBI, che alloca le superfici per memorizzare i dati VBI acquisiti. Se necessario, il metodoRenderStreamaggiunge questo filtro. Il diagramma seguente mostra un grafico di filtro con l'allocatore surface VBI.
Abilitazione e disabilitazione dei sottotitoli
Per controllare la visualizzazione della didascalia, usare l'interfaccia IAMLine21Decoder sul filtro Line 21 Decoder. Ad esempio, è possibile disattivare la visualizzazione della didascalia usando il metodo IAMLine21Decoder::SetServiceState, come indicato di seguito:
// 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();
}
Questo esempio usa il metodo ICaptureGraphBuilder2::FindInterface per individuare l'interfaccia IAMLine21Decoder. Il primo parametro passato a FindInterface è &LOOK_DOWNSTREAM_ONLY, che specifica di cercare a valle del filtro di acquisizione (pCap).
Acquisizione di bitmap con didascalia chiusa
È possibile salvare le bitmap della didascalia in un file. A tale scopo, aggiungere la sezione di scrittura di file del grafico del filtro, come descritto in Acquisizione di video in un file. Eseguire quindi il rendering del pin CC o VBI nel 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);
}
Se si acquisisce anche il video, verrà creato un file con due flussi video separati. Non acquisisce video con didascalie sovrapposte sopra l'immagine.
Argomenti correlati