Visualizzazione di sottotitoli chiusi

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation, invece di 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 didascalia chiuse in televisione analogica, il filtro di acquisizione espone un pin che fornisce dati VBI o chiusi didascalia. Il pin avrà una delle categorie di pin seguenti:

  • Pin VBI (PIN_CATEGORY_VBI). Fornisce un flusso di esempi di forme d'onda VBI. Questi vengono passati a un filtro decodificatore che estrae i dati di didascalia chiusi.
  • Pin CC (PIN_CATEGORY_CC). Fornisce coppie di byte didascalia chiuse, estratte dai dati della riga 21.
  • Pin CC di sezionamento hardware (PINNAME_VIDEO_CC_CAPTURE).

Per visualizzare in anteprima i didascalia 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 grafico di filtro tipico per la visualizzazione di didascalia chiuse.

closed captioning preview graph

Questo grafico usa i filtri seguenti per la visualizzazione didascalia chiusa:

  • Convertitore da tee/sink a sink. 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 didascalia in bitmap. Il filtro downstream (in questo caso overlay mixer) sovrappone le bitmap al video.

Il metodo RenderStream di Capture Graph Builder aggiunge 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 decodificatore linea 21 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 Allocator surface VBI, che alloca le superfici per contenere i dati VBI acquisiti. Se necessario, il metodo RenderStream aggiunge questo filtro. Il diagramma seguente mostra un grafico di filtro con l'allocatore surface VBI.

closed captioning preview graph with vbi surface allocator

Abilitazione e disabilitazione dei sottotitoli

Per controllare la visualizzazione didascalia, utilizzare l'interfaccia IAMLine21Decoder nel filtro Decodificatore Line 21. Ad esempio, è possibile disattivare la visualizzazione didascalia utilizzando 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 di FindInterface è &LOOK_DOWNSTREAM_ONLY, che specifica di eseguire ricerche downstream dal filtro di acquisizione (pCap).

Acquisizione di bitmap con didascalia chiusa

È possibile acquisire le bitmap 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 didascalia sovrapposti sopra l'immagine.

Sottotitoli e teletext