이 광현
Hyun's
이 광현
전체 방문자
오늘
어제
  • 분류 전체보기 (30)
    • 일상생활 (0)
      • 골프 (0)
    • 언어&프레임워크 (29)
      • 파이썬 (0)
      • Go (0)
      • C++ (1)
      • C# (13)
      • Android (4)
      • SIP (3)
      • Embedded (2)
      • DirectShow (6)
    • 서드파티 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • typedef 및 #define
  • DVK270
  • c#
  • Border없는 Form만들고 이동시키기
  • SIP참조
  • C# #define 사용하기
  • 서비스팩1 파일 제거
  • 커널 및 make
  • 부트로더LED
  • 버젼확인
  • 필터와 그래프
  • 윈도우버젼
  • 윈도우 비스타
  • 클래스
  • NET Compact Framework v3.5
  • 안드로이드
  • 닷넷 2010
  • 사용 포트
  • 스크립트 에러
  • 무료 소스
  • SIP
  • 다이렉트쇼
  • 비정형 윈도우창
  • JAVA sIP
  • ini 파일 사용
  • 삼성전자 SDK
  • 애뮬레이터
  • gitlab 502
  • 윈도우모바일
  • gitlab

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이 광현

Hyun's

언어&프레임워크/DirectShow

필터와 핀

2009. 5. 15. 14:51

여러번 반복해서 지겨운 생각도 들겠지만, DirectShow구조는 필터들을 연결해서 데이터가 흘러가게 하고, 필터그래프 매니저가 데이터의 흐름을 제어하는 구조로 되어있다.

 

그렇다면 필터와 필터는 어떻게 연결할 수 있을까? 이 연결을 위한 객체가 바로 핀(pin)이다.

IC에 핀이 있어서 다른 소자와 연결할 수 있는 것 처럼 필터에도 핀이 있어 다른 필터와 연결을 할 수 있는 것이다. IC마다 핀의 종류와 성격이 다르 듯, 필터의 성격에 따라 하나의 핀만을 노출할 수도 있고, 둘 이상의 핀을 노출할 수도 있다.

 

MSDN의 설명에 따르면, 핀은 필터에 의해 생성되는 COM 객체로써, 필터에 대한 단방향 데이터 스트림(unidirectional data stream)의 연결점 역활을 한다.

 

입력핀은 데이터를 필터 안으로 읽어들일 때 사용하며, 출력핀은 데이터를 다른 필터에 전달할 때 사용한다. 소스필터는 파일에서 읽은 개개의 스트림마다 각각 하나의 출력핀을 제공한다. 코덱과(compression/decompression을 줄여서 codec이라 함)같은 전형적인 변환필터는 하나의 입력핀과 출력핀을 가진다. 마찬가지로 렌더러 필터는 보통 하나의 입력핀만을 가지는 경우가 많다.

 

핀의 이름은 필터를 작성하는 사람이 마음대로 붙일 수 있다. 만약 핀의 이름이 ~로 시작되면, 필터그래프는 그 핀을 IGraphBuilder::RenderFile을 어플리케이션이 호출했을 때, 자동으로 처리하지 않는다. 따라서, ~로 시작되는 핀 이름은 렌더링을 원하지 않고 정보만 제공하고 싶은 경우에 사용할 수 있다. ~가 핀의 이름의 첫글자로 들어가는것은 IGraphBuilder::RenderFile과 인텔리전트 연결(IGraphBuilder::Connect)에만 영향을 끼친다. 만약 ~로 시작되는 핀을 인텔리전트 연결에 사용하고 싶으면, IPin::Connect메소드를 해당 핀에 구현해주면 된다.

 

필터는 최소한 IBaseFilter인터페이스는 노출을 시켜야 한다. 이 인터페이스는 필터가 제공하는 핀들을 뒤질 수 있도록 하는 메소드를 제공하고, 필터에 대한 정보를 제공한다. 또한, 이 인터페이스는 IMediaFilter에서 상속한 메소드를 함께 제공한다. 이런 메소드에는 필터의 상태를 처리하는 것이나(플레이/일시중지/정지), 동기화 관련된 메소드들이 있으며, 팔터 그래프 매니저에 의해 주로 호출되게 된다.

 

당연한 말이지만, 필터가 처리하는 미디어의 종류나 작업에 따라 이 인터페이스 외에 필요한 인터페이스를 더 노출할 수 있다. 예를 들어 ISpecifyPropertyPages 인터페이스를 통해 프로퍼티 페이지를 제공해서, 필터의 프로퍼티를 설정할 수 있도록 할수도 있다.

 

핀은 다른 핀과의 연결과 데이터의 전송을 책임진다. 핀 인터페이스는 다음 기능을 지원한다.

   * 공유메모리 혹은 다른 자원을 사용한 타임스탬프가 찍힌 정보의 전달

   * 핀대핀 연결에 있어 데이터 포맷의 협상

   * 데이터 복사 최소화화 처리 성능 향상을 위한 버퍼 관리와 버퍼 할당 관리 협상

 

핀 인터페이스는 그 핀이 입력핀인지 출력핀인지에 따라 약간씩 다르다.

 

출력핀은 일반적으로 다음 인터페이스들을 노출한다.

 

* IPin의 메소드들은 핀, 연결, 그리고 데이터 타입 정보에 대한 질의에 응답하도록 하며, 필터그래프가 정지될 때, 플러쉬 통지를 다운스트림으로 보내는데 사용된다.

* IMediaSeeking의 메소드들은 스트림의 길이, 시작시간, 그리고 종료시간을 렌더러로 전달하도록 한다. 렌더러는 미디어의 위치를 업스트림으로 보내서, 스트림이 적절한 위치로 위치하도록 하는 책임을 지닌 필터(일반적으로는 소스필터)가 위치 변경을 처리할 수 있도록 한다.

* IQualityControl의 메소드들은 렌더러에서 업스트림쪽으로 품질 컨트롤을 위한 메시지를 전달하도록 하는데 사용된다.

 

입력핀은 다음 인터페이스들을 노출한다.

* IPin은 핀이 출력핀에 연결될 수 있도록 하고, 핀의 정보와 연결 정보를 제공하도록 한다.

* IMemInputPin은 핀이 자신의 메모리 할당자를 제안하고, 메모리 할당자에게 출력핀이 데이터를 제공하고 있음을 통지하고, 미디어 샘플을 설정된 할당자를 통해 전달할 수 있도록 한다. 또한, 버퍼의 플러쉬 기능도 제공한다. 이 인터페이스는 연결된 핀이 전송을 위한 메모리 할당자를 제공하지 않는다면, 공유메모리 할당자를 생성할 수 있다

저작자표시 비영리 변경금지 (새창열림)
    '언어&프레임워크/DirectShow' 카테고리의 다른 글
    • File Play
    • 필터와 필터 그래프
    • DirectShow 리퍼런스 모음
    • DirectShow.NET
    이 광현
    이 광현
    Korea Developer

    티스토리툴바