[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
DirectShow 기본 클래스는 비디오 품질 관리에 대한 몇 가지 기본 동작을 구현할 있습니다.
품질 메시지는 렌더러에서 시작합니다. 비디오 렌더러의 기본 클래스는 CBaseVideoRenderer다음과 같은 동작이 있습니다.
- 비디오 렌더러가 샘플을 받으면 샘플의 타임스탬프를 현재 참조 시간과 비교합니다.
- 비디오 렌더러는 품질 메시지를 생성합니다. 기본 클래스에서 품질 메시지의 비율 멤버는 500(50%)에서 2000(200%)으로 제한됩니다. 이 범위를 벗어난 값으로 인해 품질이 갑자기 변경될 수 있습니다.
- 기본적으로 비디오 렌더러는 업스트림 출력 핀(입력 핀에 연결된 핀)에 품질 메시지를 보냅니다. 애플리케이션은 SetSink 메서드를 호출하여 이 동작을 재정의할 수 있습니다.
다음에 발생하는 작업은 업스트림 필터에 따라 달라집니다. 일반적으로 변환 필터입니다. 변환 필터의 기본 클래스는 CTransformInputPin 사용하고 CTransformOutputPin클래스를입력 및 출력 핀을 구현하는 CTransformFilter. 이러한 클래스에는 다음과 같은 동작이 있습니다.
- CTransformOutputPin::Notify 메서드는 필터 기본 클래스의 프라이빗 메서드인 CTransformFilter::AlterQuality호출합니다.
- 파생 필터는 AlterQuality 재정의하여 품질 메시지를 처리할 수 있습니다. 기본적으로 AlterQuality 품질 메시지를 무시합니다.
- AlterQuality 품질 메시지를 처리하지 않으면 출력 핀은 필터의 입력 핀에 대한 프라이빗 메서드인 CBaseInputPin::P assNotify호출합니다.
- PassNotify 다음 업스트림 출력 핀 또는 사용자 지정 품질 관리자와 같은 적절한 위치에 품질 메시지를 전달합니다.
변환 필터가 품질 메시지를 처리하지 않는다고 가정하면 메시지는 결국 원본 필터의 출력 핀에 도달합니다. 기본 클래스에서 CBasePin::Notify E_NOTIMPL 반환합니다. 특정 소스 필터가 품질 메시지를 처리하는 방법은 원본의 특성에 따라 달라집니다. 라이브 비디오 캡처와 같은 일부 원본은 의미 있는 품질 관리를 수행할 수 없습니다. 다른 소스는 샘플을 제공하는 속도를 조정할 수 있습니다.
다음 다이어그램에서는 기본 동작을 보여 줍니다.
기본 클래스
기본 비디오 렌더러는 IQualityControl::Notify 구현합니다. 즉, 렌더러 자체에 품질 메시지를 전달할 수 있습니다. 비율 멤버를 1000보다 작은 값으로 설정하면 비디오 렌더러는 렌더링되는 각 프레임 사이에 대기 기간을 삽입하여 렌더러를 느리게 합니다. (예를 들어 시스템 사용량을 줄이기 위해 이 작업을 수행할 수 있습니다.) 자세한 내용은 CBaseVideoRenderer::ThrottleWait참조하세요. 비율 멤버를 1000보다 큰 값으로 설정해도 아무 효과가 없습니다.
관련 항목