다음을 통해 공유


기본 품질 관리

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

DirectShow 기본 클래스는 비디오 품질 관리에 대한 몇 가지 기본 동작을 구현할 있습니다.

품질 메시지는 렌더러에서 시작합니다. 비디오 렌더러의 기본 클래스는 CBaseVideoRenderer다음과 같은 동작이 있습니다.

  1. 비디오 렌더러가 샘플을 받으면 샘플의 타임스탬프를 현재 참조 시간과 비교합니다.
  2. 비디오 렌더러는 품질 메시지를 생성합니다. 기본 클래스에서 품질 메시지의 비율 멤버는 500(50%)에서 2000(200%)으로 제한됩니다. 이 범위를 벗어난 값으로 인해 품질이 갑자기 변경될 수 있습니다.
  3. 기본적으로 비디오 렌더러는 업스트림 출력 핀(입력 핀에 연결된 핀)에 품질 메시지를 보냅니다. 애플리케이션은 SetSink 메서드를 호출하여 이 동작을 재정의할 수 있습니다.

다음에 발생하는 작업은 업스트림 필터에 따라 달라집니다. 일반적으로 변환 필터입니다. 변환 필터의 기본 클래스는 CTransformInputPin 사용하고 CTransformOutputPin클래스를입력 및 출력 핀을 구현하는 CTransformFilter. 이러한 클래스에는 다음과 같은 동작이 있습니다.

  1. CTransformOutputPin::Notify 메서드는 필터 기본 클래스의 프라이빗 메서드인 CTransformFilter::AlterQuality호출합니다.
  2. 파생 필터는 AlterQuality 재정의하여 품질 메시지를 처리할 수 있습니다. 기본적으로 AlterQuality 품질 메시지를 무시합니다.
  3. AlterQuality 품질 메시지를 처리하지 않으면 출력 핀은 필터의 입력 핀에 대한 프라이빗 메서드인 CBaseInputPin::P assNotify호출합니다.
  4. PassNotify 다음 업스트림 출력 핀 또는 사용자 지정 품질 관리자와 같은 적절한 위치에 품질 메시지를 전달합니다.

변환 필터가 품질 메시지를 처리하지 않는다고 가정하면 메시지는 결국 원본 필터의 출력 핀에 도달합니다. 기본 클래스에서 CBasePin::Notify E_NOTIMPL 반환합니다. 특정 소스 필터가 품질 메시지를 처리하는 방법은 원본의 특성에 따라 달라집니다. 라이브 비디오 캡처와 같은 일부 원본은 의미 있는 품질 관리를 수행할 수 없습니다. 다른 소스는 샘플을 제공하는 속도를 조정할 수 있습니다.

다음 다이어그램에서는 기본 동작을 보여 줍니다.

기본 클래스

기본 비디오 렌더러는 IQualityControl::Notify 구현합니다. 즉, 렌더러 자체에 품질 메시지를 전달할 수 있습니다. 비율 멤버를 1000보다 작은 값으로 설정하면 비디오 렌더러는 렌더링되는 각 프레임 사이에 대기 기간을 삽입하여 렌더러를 느리게 합니다. (예를 들어 시스템 사용량을 줄이기 위해 이 작업을 수행할 수 있습니다.) 자세한 내용은 CBaseVideoRenderer::ThrottleWait참조하세요. 비율 멤버를 1000보다 큰 값으로 설정해도 아무 효과가 없습니다.

Quality-Control 관리