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