동적 서식 변경

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

두 필터가 연결되면 업스트림 필터가 제공할 데이터의 형식을 설명하는 미디어 형식에 동의합니다. 대부분의 경우 미디어 유형은 연결 기간 동안 고정됩니다. 그러나 DirectShow는 미디어 유형을 변경하는 필터에 대한 제한된 지원을 제공합니다. 필터가 미디어 형식을 전환하면 동적 형식 변경이라고 합니다. DirectShow 필터를 작성하는 경우 동적 형식 변경 메커니즘을 알고 있어야 합니다. 필터가 이러한 변경 내용을 지원하지 않더라도 다른 필터가 새 형식을 요청하는 경우 올바르게 응답해야 합니다.

DirectShow는 필터 그래프의 상태 및 필요한 변경 유형에 따라 동적 형식 변경에 대한 몇 가지 고유한 메커니즘을 정의합니다.

  • 그래프가 중지되면 핀이 미디어 형식을 다시 연결하고 재협상할 수 있습니다. 자세한 내용은 다시 연결 핀을 참조하세요.
  • 일부 필터는 그래프가 활성 상태인 경우에도(실행 중 또는 일시 중지) 핀을 다시 연결할 수 있습니다. 이 메커니즘에 대한 자세한 내용은 동적 다시 연결을 참조하세요.

그렇지 않으면 그래프가 활성 상태이지만 해당 필터가 동적 핀 재연결을 지원하지 않는 경우 형식을 변경할 수 있는 세 가지 메커니즘이 있습니다.

  • QueryAccept(다운스트림) 는 출력 핀이 다운스트림 피어에 대한 형식 변경을 제안하지만 새 형식에 더 큰 버퍼가 필요하지 않은 경우에만 사용됩니다.
  • 입력 핀이 업스트림 피어에 형식 변경을 제안할 때 QueryAccept(업스트림)가 사용됩니다. 새 형식은 크기가 같거나 더 클 수 있습니다.
  • ReceiveConnection 은 출력 핀이 다운스트림 피어에 대한 형식 변경을 제안하고 새 형식에 더 큰 버퍼가 필요할 때 사용됩니다.

Video Renderer에서 형식 변경 처리