DirectShow DirectShow 의 사용법 비디오 캡춰 아날로그 TV 클로즈드 캡션과 teletext 클로즈드 캡션의 표시   [목차열람] [주소복사] [슬롯비우기]
자막 방송의 표시
 
Microsoft DirectX 9.0

자막 방송의 표시

아날로그 TV 로 자막 방송을 지원 하기 위한(해), 캡춰 필터는 VBI 또는 자막 방송 데이터를 송신하는 핀을 공개한다. 핀은, 다음의 어느쪽이든 1 개의 핀 카테고리로 분류된다.

자막 방송을 프리뷰 하려면 , VBI 핀 카테고리를 사용해 ICaptureGraphBuilder2::RenderStream 를 호출한다. 호출이 실패했을 경우, CC 카테고리를 사용해 한번 더 호출한다.

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

다음 그림은 자막 방송을 표시하는 일반적인 필터 그래프를 나타내고 있다.

클로즈드 캡션 프리뷰 그래프

이 그래프는 자막 방송의 표시에 다음의 필터를 사용한다.

Capture Graph Builder 의 RenderStream 메서드는 이러한 필터를 자동적으로 추가한다. 캡춰 필터에, VBI 핀 대신에 CC 핀이 있는 경우, CC 핀은 직접 Line 21 디코더 필터에 접속된다.

 :  렌더링에 Video Mixing Renderer (VMR) 필터를 사용하고 있는 경우, Line 21 디코더 필터를 사용하는 것. 이 필터는, Line 21 디코더와 같은 기능을 갖는다. 그러나, CLSID 는 CLSID_Line21Decoder2 이다.

캡춰 장치가 비디오 포트를 사용하는 경우, 캡춰 필터에는 비디오 포트 VBI 핀 (PIN_CATEGORY_VIDEOPORT_VBI)이 설정되어 있는 일이 있다. 이 핀은 VBI 표면 할당자 필터에 접속할 필요가 있다. 이 필터는 캡춰 된 VBI 데이터를 보관 유지하는 표면을 할당한다. RenderStream 메서드는, 필요에 따라서 이 필터를 추가한다. 다음 그림은 VBI 표면 할당자가 있는 필터 그래프를 나타내고 있다.

VBI 표면 할당자가 있는 클로즈드 캡션 프리뷰 그래프

캡션을 유효/무효로 한다

캡션 표시를 제어하려면 , Line 21 디코더 필터로 IAMLine21Decoder 인터페이스를 사용한다. 예를 들어, 다음과 같이 SetServiceState 메서드를 사용해, 캡션 표시를 무효로 할 수 있다.

// FindInterface 메서드를 사용해 인터페이스를 검색한다.
IAMLine21Decoder *pLine21 = NULL;
hr = pBuild->FindInterface(
    &LOOK_DOWNSTREAM_ONLY, // pCap 로부터 다운 스트림 방향으로 조사한다.
    NULL,                  // 미디어 타입을 특정하지 않는다.
    pCap,                  // 캡춰 필터의 포인터.
    IID_IAMLine21Decoder, (void**) &pLine21);
if (SUCCEEDED(hr))
{
    pLine21->SetServiceState(AM_L21_CCSTATE_Off);
    // (유효하게 하려면 , AM_L21_CCSTATE_On 를 사용한다. )
    pLine21->Release();
}

이 예에서는,ICaptureGraphBuilder2::FindInterface 메서드를 사용해 IAMLine21Decoder 인터페이스를 검색한다. FindInterface 에의 최초의 파라미터는 &LOOK_DOWNSTREAM_ONLY 이다. 이 파라미터는, 캡춰 필터 (pCap)로부터 다운 스트림 방향으로 검색하는 것을 지정한다.

자막 방송 비트 맵의 캡춰

캡션 비트 맵은 파일에 캡춰 할 수 있다. 거기에는, 「파일에의 비디오의 캡춰」에 설명하고 있도록(듯이), 필터 그래프의 파일 쓰기 섹션을 추가한다. 다음에, CC 핀 또는 VBI 핀을 Mux 필터에 렌더링 한다.

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

비디오도 캡춰 하는 경우, 2 개가 다른 비디오 스트림을 가지는 파일이 생성 된다. 화면 위에 캡션이 오버레이 된 비디오는 "캡춰 되지 않는다".

↑TOP