Anzeigen von Untertiteln

Um Untertitel in analogem Fernsehgerät zu unterstützen, macht der Erfassungsfilter eine Stecknadel verfügbar, die entweder VBI- oder Untertiteldaten liefert. Die Stecknadel hat eine der folgenden Pinkategorien:

  • VBI-Pin (PIN _ CATEGORY _ VBI). Stellt einen Stream von VBI-Wellenformbeispielen bereit. Diese werden an einen Decoderfilter übergeben, der die Untertiteldaten extrahiert.
  • CC-Pin (PIN _ CATEGORY _ CC). Stellt Untertitel-Bytepaare bereit, die aus den Zeilen-21-Daten extrahiert wurden.
  • CC-Pin für Hardwareslicing (PINNAME _ VIDEO _ CC _ CAPTURE).

Um untertitelte Untertitel in der Vorschau anzuzeigen, rufen Sie ICaptureGraphBuilder2::RenderStream mit der Kategorie VBI-Pin auf. Wenn dies fehlschlägt, rufen Sie sie mit der Kategorie CC erneut auf.

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}

Das folgende Diagramm zeigt ein typisches Filterdiagramm zum Anzeigen von Untertiteln.

Vorschaudiagramm für Untertitel

In diesem Diagramm werden die folgenden Filter für die Anzeige von Untertiteln verwendet:

  • Tee/Sink-to-Sink Converter. Akzeptiert die VBI-Informationen aus dem Erfassungsfilter und teilt sie für jeden datendienst, der auf dem Signal vorhanden ist, in separate Datenströme auf. Microsoft stellt VBI-Codecs für Untertitel, HYPERLINKTS und WST (World Standard Teletext) bereit.
  • CC-Decoder. Decodiert CC-Daten aus den stichprobenierten VBI-Wellenformen, die vom Erfassungsfilter bereitgestellt werden.
  • Zeile 21 Decoder. Übersetzt die CC-Bytepaare und zeichnet den Beschriftungstext auf Bitmaps. Der Downstreamfilter (in diesem Fall overlay Mixer) überlagert die Bitmaps auf dem Video.

Die RenderStream-Methode von Capture Graph Builder fügt diese Filter automatisch hinzu. Wenn der Erfassungsfilter über einen CC-Pin anstelle eines VBI-Pins verfügt, wird der CC-Pin direkt mit dem Filter Line 21 Decoder verbunden.

Hinweis

Wenn Sie den Filter Video Mixing Renderer (VMR) für das Rendering verwenden, verwenden Sie den Filter 2 des Line 21-Decoders. Dieser Filter verfügt über die gleiche Funktionalität wie der Line 21-Decoder, aber die CLSID ist CLSID _ Line21Decoder2.

Hinweis

Der CC-Decoderfilter wurde in Windows Vista entfernt. Neue Anwendungen sollten den VBICodec-Filter verwenden, der in der Dokumentation zu Microsoft TV-Technologien dokumentiert ist.

Wenn das Erfassungsgerät einen Videoport verwendet, verfügt der Erfassungsfilter möglicherweise über einen Videoport-VBI-Pin (PIN _ CATEGORY _ VIDEOPORT _ VBI). Dieser Pin muss mit dem VBI Surface Allocator-Filter verbunden sein, der Oberflächen zuordnet, die die erfassten VBI-Daten enthalten. Die RenderStream-Methode fügt diesen Filter hinzu, wenn er erforderlich ist. Das folgende Diagramm zeigt ein Filterdiagramm mit der VBI-Oberflächenzuweisung.

Vorschaudiagramm für Untertitel mit VBI-Oberflächenbelegung

Aktivieren und Deaktivieren der Beschriftungen

Verwenden Sie die IAMLine21Decoder-Schnittstelle im Filter Line 21 Decoder, um die Anzeige der Beschriftung zu steuern. Beispielsweise können Sie die Anzeige von Untertiteln mithilfe der IAMLine21Decoder::SetServiceState-Methode wie folgt deaktivieren:

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

In diesem Beispiel wird die ICaptureGraphBuilder2::FindInterface-Methode verwendet, um die IAMLine21Decoder-Schnittstelle zu suchen. Der erste Parameter für FindInterface ist &LOOK DOWNSTREAM _ _ ONLY, der angibt, dass downstream über den Erfassungsfilter (pCap) durchsucht werden soll.

Erfassen von Untertitelbitmaps

Sie können die Beschriftungsbitmaps in einer Datei erfassen. Fügen Sie hierzu den Abschnitt zum Schreiben von Dateien des Filterdiagramms hinzu, wie unter Aufzeichnen von Videos zu einer Dateibeschrieben. Rendern Sie dann den CC- oder VBI-Pin in den Mux-Filter:

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, pMux);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, pMux);
}

Wenn Sie auch das Video erfassen, wird eine Datei mit zwei separaten Videostreams erstellt. Es wird kein Video mit Untertiteln erfasst, die über dem Bild überlagert sind.

Untertitel und Teletext