DirectShow DirectShow 에 대해 필터 그래프와 그 구성 요소 미디어 샘플과 할당자에 대해   [목차열람] [주소복사] [슬롯비우기]
미디어 샘플과 할당자에 대해
 
Microsoft DirectX 9.0

미디어 샘플과 할당자에 대해

필터는 핀 접속을 개입시켜 데이터를 보낸다. 데이터는, 어느 필터의 출력 핀으로부터 다른 필터의 입력 핀으로 이동한다. 출력 핀이 데이터를 보내는 경우, 몇개의 메카니즘이 존재하지만, 가장 일반적인 방법은, 입력에 대해 IMemInputPin::Receive 메서드를 호출하는 방법이다.

필터에 응해, 미디어 데이터의 메모리는 다양한 방법으로 할당할 수가 있다. 예를 들어, heap상, DiredtDraw 표면내, 공유 GDI 메모리의 사용, 또는 그 외의 어로케이션 메카니즘의 사용등이 있다. 메모리의 할당을 실시하는 개체는 "할당자" 로 불려IMemAllocator 인터페이스를 공개하는 COM 개체이다.

2 개의 핀을 접속하는 경우, 한편의 핀이 할당자를 제공할 필요가 있다. DirectShow 에서는, 어느 핀이 할당자를 제공할까를 결정하기 위해서(때문에) 사용되는 메서드 호출의 순서를 정의하고 있다. 핀은, 할당자가 생성 하는 버퍼의 수, 및 버퍼의 사이즈에 대해서도 합의한다.

스트리밍이 시작되기 전에, 할당자는 버퍼의 풀을 생성 한다. 스트리밍중, 업 스트림 필터는 버퍼에 데이터를 넣어 데이터를 다운 스트림 필터에 보낸다. 다만, 업 스트림 필터는 다운 스트림 필터에 버퍼에의 미처리의 포인터는 건네주지 않는다. 그 대신에, 업 스트림 필터는, 할당자가 버퍼를 관리하기 위해서 생성 하는 "미디어 샘플" 로 불리는 COM 개체를 사용한다. 미디어 샘플은 IMediaSample 인터페이스를 공개한다. 미디어 샘플에는, 다음의 정보가 포함된다.

타임 스탬프는, 렌더링 필터가 렌더링을 스케줄 하기 위해서 사용하는 프레젠테이션 타임을 정의한다. 플래그에 의해, 데이터내의 앞의 샘플 이후에 브레이크가 있을지 어떨지등의 정보를 나타낸다. 미디어 타입은, 필터가 스트림의 도중에 포맷을 변경하는 방법을 제공한다. 보통, 샘플은 미디어 타입을 가지지 않고, 포맷이 전의 샘플 이후, 변경되지 않은 것을 나타낸다.

필터가 버퍼를 사용하고 있는 경우, 필터는 샘플의 참조 카운트를 보관 유지한다. 할당자는 이 참조 카운트를 사용해, 버퍼를 재이용할 수 있는 시기를 판단한다. 이것에 의해, 필터가 사용중의 버퍼를, 다른 필터가 덧쓰기하는 것을 방지한다. 샘플은, 각 필터가 샘플을 릴리즈 할 때까지, 할당자의 이용 가능한 샘플의 풀에는 돌아오지 않는다.

참조

다음 주제는, 독자적인 커스텀 필터를 생성 하는 개발자를 대상으로 하고 있다.

↑TOP