미디어 샘플 및 할당자 정보

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

필터는 핀 연결 간에 데이터를 전달합니다. 데이터는 한 필터의 출력 핀에서 다른 필터의 입력 핀으로 이동합니다. 출력 핀이 데이터를 전달하는 가장 일반적인 방법은 입력에서 IMemInputPin::Receive 메서드를 호출하는 것입니다. 몇 가지 다른 메커니즘도 있습니다.

필터에 따라 미디어 데이터의 메모리는 힙, DirectDraw 표면, 공유 GDI 메모리 사용 또는 다른 할당 메커니즘 사용 등 다양한 방법으로 할당할 수 있습니다. 메모리 할당을 담당하는 개체를 할당자라고 하며, 이 할당자는 IMemAllocator 인터페이스를 노출하는 COM 개체입니다.

두 핀이 연결되면 핀 중 하나가 할당자를 제공해야 합니다. DirectShow는 할당자를 제공하는 핀을 설정하는 데 사용되는 메서드 호출 시퀀스를 정의합니다. 핀은 할당자가 만들 버퍼 수와 버퍼 크기에 대해서도 동의합니다.

스트리밍이 시작되기 전에 할당자는 버퍼 풀을 만듭니다. 스트리밍하는 동안 업스트림 필터는 버퍼를 데이터로 채우고 다운스트림 필터에 전달합니다. 그러나 업스트림 필터는 버퍼에 다운스트림 필터 원시 포인터를 제공하지 않습니다. 대신, 할당자가 버퍼를 관리하기 위해 만드는 미디어 샘플이라는 COM 개체를 사용합니다. 미디어 샘플은 IMediaSample 인터페이스를 노출합니다. 미디어 샘플에는 다음이 포함됩니다.

  • 기본 버퍼에 대한 포인터
  • 타임스탬프를
  • 다양한 플래그
  • 필요에 따라 미디어 유형

타임스탬프는 렌더러 필터가 렌더링을 예약하는 데 사용하는 프레젠테이션 시간을 정의합니다. 플래그는 이전 샘플 이후 데이터에 중단이 있었는지 여부와 같은 항목을 나타냅니다. 미디어 형식은 필터가 중간 스트림 형식을 변경하는 방법을 제공합니다. 일반적으로 샘플에는 이전 샘플 이후 형식이 변경되지 않았다는 것을 나타내는 미디어 형식이 없습니다.

필터가 버퍼를 사용하는 동안 샘플에 대한 참조 횟수를 보유합니다. 할당자는 참조 횟수를 사용하여 버퍼를 다시 사용할 수 있는 시기를 결정합니다. 이렇게 하면 필터가 다른 필터에서 여전히 사용 중인 버퍼를 덮어쓰지 않습니다. 샘플은 모든 필터가 릴리스될 때까지 할당자의 사용 가능한 샘플 풀로 돌아가지 않습니다.

자세한 내용은 아래 항목을 참조하세요.

다음 topics 고유한 사용자 지정 필터를 작성하는 개발자를 위한 것입니다.

필터 그래프 및 해당 구성 요소