DirectShow DirectShow 의 사용법 Microsoft TV 테크놀러지 DirectX 그리고 디지털 TV 애플리케이션을 쓴다   [목차열람] [주소복사] [슬롯비우기]
DirectX 로 디지털 TV 애플리케이션을 쓴다
 
Microsoft DirectX 9.0

DirectX 로 디지털 TV 애플리케이션을 쓴다

이 마디에서는, 비디오 컨트롤을 사용할 수 없는 하위 플랫폼용의 디지털 TV 필터 그래프를 생성 하는 방법에 대해 설명한다. 이러한 플랫폼에서는, 애플리케이션은 디지털 TV 그래프를 수동으로 생성 해, 각 필터의 추가나 접속을 해야 한다 (캡춰 그래프 빌더 개체는 디지털 TV 그래프를 지원 하지 않는 것에 주의). BDA 샘플 애플리케이션에서는, 기본적인 디지털 TV 필터 그래프를 생성 할 방법이 소개되고 있다.

튜닝 요구의 취득

최초로 튜닝 요구를 얻어온다. 가이드 스토어로부터 얻어온다인가, 또는 애플리케이션내에서 프로그램적으로 생성 한다. 더 자세한 정보는, 「Microsoft 통합 튜닝 모델」을 참조할것.

네트워크 프로바이더 필터의 생성

디지털 TV 필터 그래프에 최초로 표시되는 필터는,BDA 네트워크 프로바이더 필터이다. 네트워크 프로바이더는 튜닝을 제어해, 트랜스포트 정보 필터 (TIF)와 제휴해, 트랜스포트 스트림으로부터 프로그램 정보를 얻어온다. 네트워크 프로바이더 필터를 선택하려면 , 튜닝 공간의 네트워크 타입 프로퍼티를 문의한다. 네트워크 타입 프로퍼티는 그 튜닝 공간에서 사용되는 네트워크 프로바이더의 CLSID 에 대응하고 있다. 다음 코드는, 네트워크 프로바이더를 생성 해 그래프에 추가하는 방법을 나타내고 있다.

CComPtr<ITuneRequest> pTuneRequest;  // 튜닝 요구
CComPtr<ITuningSpace> pTuningSpace;  // 튜닝 공간
CComPtr<IBaseFilter> pNetworkProvider; // 네트워크 프로바이더 필터
GUID CLSIDNetworkType; // 네트워크 타입의 GUID.

// 튜닝 요구를 초기화한다 (생략).

// 이 튜닝 요구의 튜닝 공간을 찾아낸다.
hr = pTuneRequest->get_TuningSpace(&pTuningSpace);
if (FAILED(hr))
{
        // 에러를 처리한다.
}

// 네트워크 타입을 찾아낸다.
hr = pTuningSpace->get__NetworkType(&CLSIDNetworkType);
if (FAILED(hr))
{
        // 에러를 처리한다.
}
if (CLSID_NetworkType == GUID_NULL)
{
        // 이 튜닝 공간은 아날로그 TV, AuxIn, 또는 그 외의 비 BDA 타입이다.
}
else
{
        // 이 네트워크 타입용의 네트워크 프로바이더 필터를 생성 한다.
    hr = pNetworkProvider.CoCreateInstance(CLSIDNetworkType);
    if (SUCCEEDED(hr))
    {
                // 네트워크 프로바이더를 그래프에 추가한다.
        hr = pGraph->AddFilter(pNetworkProvider, L"Network Provider");
    }
}

ITuneRequest::get_TuningSpace 메서드는, 특정의 튜닝 요구의 튜닝 공간의 포인터를 얻어온다. 다음에,ITuningSpace::get__NetworkType 를 호출해 네트워크 타입 GUID 를 얻어온다. 이 GUID 를 CoCreateInstance 함수에 건네주어 네트워크 프로바이더 필터를 생성 한다.

아날로그 튜닝 공간

일부의 튜닝 공간에서는, 네트워크 타입이 GUID_NULL 이다. 이것은, 튜닝 공간이 디지털 TV 네트워크를 나타내지 않는 것을 의미한다. 그 때문에, BDA 네트워크 프로바이더 필터는 이 튜닝 공간을 처리하지 않는다. 이 경우, 애플리케이션에서는, 「비디오 캡춰」 및 「아날로그 TV 」시에에 있는 설명에 따라, 아날로그 TV 캡춰 그래프를 생성 할 필요가 있다. 튜닝 요구 위에의 채널 번호는, TV 튜너 필터상으로 설정하는 채널을 나타낸다.

AuxInTuningSpace 튜닝 공간은, 보조 비디오 입력 또는 "AuxIn" 를 나타낸다. 채널 번호는 입력 소스를 나타낸다.

채널 번호 입력
0 S 비디오
1 합성 비디오

튜닝 요구가 AuxIn 타입인지 아닌지를 확인하려면 , 튜닝 공간의 IAuxInTuningSpace 인터페이스를 문의한다. 이 인터페이스가 공개되고 있는 경우는, 아날로그 캡춰 그래프를 생성 해, 크로스바 필터를 사용해 입력 소스를 선택한다. 더 자세한 정보는, 「크로스바의 조작」을 참조할것. S 비디오의 경우는, PhysConn_Video_SVideo 핀을 비디오 출력 핀에 루팅 한다. 합성 비디오의 경우는, PhysConn_Video_Composite 핀을 비디오 출력에 루팅 한다. 양쪽 모두의 경우에, PhysConn_Audio_Line 핀을 오디오 출력에 루팅 한다.

아날로그 그래프의 경우, 이 마디의 이후의 부분은 무시해 상관없다.

네트워크 프로바이더에의 튜닝 요구의 송신

네트워크 프로바이더를 그래프에 추가한 후, 튜닝 요구에의 포인터를 지정해 네트워크 프로바이더의 ITuner 인터페이스를 문의해ITuner::put_TuneRequest 를 호출한다.

// ITuner 를 문의한다.
CComQIPtr<ITuner> pTuner(pNetworkProvider);
if (pTuner)
{
        // 네트워크 프로바이더에 튜닝 요구를 송신한다.
    hr = pTuner->put_TuneRequest(pTuneRequest);
}

나머지의 필터의 추가와 접속

튜닝 요구의 네트워크 프로바이더를 구성한 후, 나머지의 필터를 그래프에 추가할 수 있다. 네트워크 프로바이더는,"BDA 소스 필터" 카테고리의 튜너 필터 (KSCATEGORY_BDA_NETWORK_TUNER)에 접속하는 튜너 필터는,"" 카테고리의 1 개 이상의 필터 (KSCATEGORY_BDA_RECEIVER_COMPONENT)에 접속한다. 이 카테고리에는, 하드웨어에 응해, 캡춰 필터 또는 디모듀래이터 필터가 포함된다. 애플리케이션에서는, 미디어 타이프별 또는 미디어별로 이 카테고리의 필터를 열거해, 필터를 접속할 필요가 있다.

캡춰 필터를 MPEG-2 디멀티플렉서에 접속한다. 하면, 우선 컴포넌트 타입에 근거해 출력 핀이 자동적으로 구성된다. 보통, 핀 1 은 BDA MPEG-2 트랜스포트 정보 필터 (TIF)에 접속한다. 보통은, 모든 출력 핀을 디멀티플렉서상에 렌더링 하면, 올바른 렌더러 필터가 그래프에 추가된다. IP 데이터의 경우는, 디멀티플렉서 위에의 출력 핀을 BDA MPE 필터 경유로 BDA IP 싱크 필터에 접속한다.

디폴트 우선 컴포넌트 타입의 정의

"구성 요소" 는 프로그램 서브 스트림을 나타낸다. 디폴트 우선 컴포넌트 타입은, 사용자가 디폴트로 액티브하게 하는 것을 바라는 타입의 서브 스트림이다. 예를 들어, 스페인어의 오디오 스트림이 이용 가능한 때는 언제나 그것을 재생하도록(듯이) 지정하는 사용자도 있다. 애플리케이션은 하늘의 구성 요소 콜렉션 개체를 인스턴스화해, 게다가 기입하는 것에 의해 우선 구성 요소 세트를 생성 한다. 다음에 애플리케이션은 그 구성 요소 개체를 지속하도록(듯이) 보존하는지, 튜너에 보낸다. 또는 그 양쪽 모두를 실시한다. 튜너는 이용 가능한 서브 스트림으로 변경이 있으면 반드시 구성 요소 개체를 체크한다.

서브 스트림의 선택

어느 서브 스트림을 액티브 또는 비액티브하게 하는지를 지정하려면 , 애플리케이션은 최초로 튜닝 요구를 튜너에 보내지 않으면 안 된다. 튜너가 지정한 채널이나 주파수를 튜닝 하면, 튜너는 튜닝 요구의 구성 요소 콜렉션에 액티브 또는 비액티브한 각 서브 스트림의 정보를 기입한다. 다음에 애플리케이션은 이 콜렉션내의 각 구성 요소를 조사해IComponent::put_Status 메서드를 사용해 각각의 서브 스트림을 액티브 또는 비액티브하게 할 수가 있다.

디지털 튜닝

최초의 튜닝 요구가 보내진 후, 다음의 튜닝은 새로운 튜닝 요구를 네트워크 프로바이더에 보내는 것에 의해 행해진다.

↑TOP