DirectShow DirectShow 의 사용법 DirectShow 필터의 개발 캡춰 필터의 생성 캡춰 필터의 핀 요건   [목차열람] [주소복사] [슬롯비우기]
캡춰 필터의 핀 요건
 
Microsoft DirectX 9.0

캡춰 필터의 핀 요건

핀명

핀에는 임의의 이름을 붙일 수 있다. 핀의 이름이 tilde (~) 문자로 시작되는 경우, 애플리케이션이 IGraphBuilder::RenderFile 를 호출해도, 필터 그래프는 그 핀에 대해서 자동적인 렌더링을 실시하지 않는다. 예를 들어, 필터에 캡춰 핀과 프리뷰 핀이 있어, 각각 "~ Capture" 와 "Preview" 라는 이름을 붙였다고 한다. 애플리케이션이 그래프로 그 필터를 렌더링 하는 경우, 프리뷰 핀은 디폴트 렌더러에 접속해, 캡춰 핀에는 아무것도 접속하지 않는다. 이것은 적절한 디폴트 동작이다. 또, 렌더링 할 예정이 없는 정보 제공용 데이터를 송신하는 핀, 또는 커스텀 프로퍼티 세트를 필요로 하는 핀에도 적용할 수 있다. tilde (~) 프레픽스가 붙은 핀은 애플리케이션으로 수동 접속도 할 수 있는 점에 주의 해야 한다.

핀 카테고리

캡춰 필터에는 항상 캡춰 핀이 있어, 경우에 따라서는 프리뷰 핀도 있다. 일부의 캡춰 필터는, 제어 정보 등 다른 타입의 데이터를 송신하기 위해(때문에), 다른 출력 핀을 가지는 일이 있다. 각 출력 핀은 IKsPropertySet 인터페이스를 공개할 필요가 있다. 애플리케이션은 이 인터페이스를 사용해, 핀 카테고리를 판별한다. 보통, 핀은 PIN_CATEGORY_CAPTURE 또는 PIN_CATEGORY_PREVIEW 를 돌려준다. 더 자세한 정보는, 「핀 프로퍼티 세트」를 참조할것.

다음 예는 캡춰 핀의 핀 카테고리를 돌려주는 IKsPropertySet 를 처리 하는 방법을 나타내고 있다.

// Set: 프로퍼티를 설정할 수 없다.
HRESULT CMyCapturePin::Set(REFGUID guidPropSet, DWORD dwID,
    void *pInstanceData, DWORD cbInstanceData, void *pPropData, 
    DWORD cbPropData)
{
    return E_NOTIMPL;
}

// Get: 핀 카테고리를 돌려준다 (유일한 프로퍼티).  
HRESULT CMyCapturePin::Get(
   REFGUID guidPropSet,    // 어느 프로퍼티 세트인가.
    DWORD dwPropID,        // 그 세트 중(안)에서 어느 프로퍼티인가.
    void *pInstanceData,   // 인스턴스 데이터 (무시).
    DWORD cbInstanceData,  // 인스턴스 데이터의 사이즈 (무시).
    void *pPropData,       // 프로퍼티 데이터를 받는 버퍼.
    DWORD cbPropData,      // 버퍼의 사이즈.
    DWORD *pcbReturned     // 프로퍼티의 사이즈를 돌려준다.
)
{
    if (guidPropSet != AMPROPSETID_Pin) 
        return E_PROP_SET_UNSUPPORTED;
    if (dwPropID != AMPROPERTY_PIN_CATEGORY)
        return E_PROP_ID_UNSUPPORTED;
    if (pPropData == NULL && pcbReturned == NULL)
        return E_POINTER;
    if (pcbReturned)
        *pcbReturned = sizeof(GUID);
    if (pPropData == NULL)  // 호출원래는 사이즈만 알고 싶다.
        return S_OK;
    if (cbPropData < sizeof(GUID)) // 버퍼가 너무 작다.
        return E_UNEXPECTED;
    *(GUID *) pPropData = PIN_CATEGORY_CAPTURE;
    return S_OK;
}

// QuerySupported: 지정된 프로퍼티를 핀이 지원 하고 있을지 어떨지 문의한다.
HRESULT CMyCapturePin::QuerySupported(REFGUID guidPropSet, DWORD dwPropID,
    DWORD *pTypeSupport)
{
    if (guidPropSet != AMPROPSETID_Pin)
        return E_PROP_SET_UNSUPPORTED;
    if (dwPropID != AMPROPERTY_PIN_CATEGORY)
        return E_PROP_ID_UNSUPPORTED;
    if (pTypeSupport)
        // 이 프로퍼티의 취득은 지원 하고 있지만, 설정은 지원 하고 있지 않다.
        *pTypeSupport = KSPROPERTY_SUPPORT_GET; 
    return S_OK;
}
↑TOP