비디오 품질 관리

이 항목에서는 Microsoft Media Foundation 및 Microsoft DirectShow용 Windows 7의 비디오 파이프라인에 대한 몇 가지 개선 사항에 대해 설명합니다.

완벽한 환경에서 비디오 해상도 또는 CPU/GPU 부하에 관계없이 비디오는 결코 결함이 없습니다. 물론 비디오 파이프라인은 유한한 하드웨어 리소스에 대처할 수 있어야 하며 시스템 환경에 맞게 재생을 적응적으로 조정해야 합니다. 비디오 품질 관리의 목표는 다음과 같습니다.

  • 결함(삭제되거나 늦은 프레임)을 줄입니다.
  • 특히 GPU에서 메모리 사용량을 줄입니다.
  • 특히 배터리 전원으로 실행되는 노트북에서 전력 소비를 줄입니다.
  • 리소스 제약 조건이 지정된 경우 가능한 최상의 이미지 품질을 가져옵니다.
  • 비디오를 오디오와 동기화된 상태로 유지합니다.

이러한 목표 중 일부는 특히 로우 엔드 시스템에서 반대입니다. 일반적으로 속도와 품질 사이에는 절차가 있습니다. 결함은 시각적 품질이 적당히 감소하는 것보다 더 불쾌합니다. 전력 소비의 상대적 중요성은 환경에 따라 다릅니다. 배터리 전원으로 실행되는 노트북에서 매우 중요합니다.

Windows 7에서는 향상된 EVR(비디오 렌더러)이 비디오 품질 관리를 더 잘 지원합니다. 이러한 기능을 활용하도록 Media Foundation 파이프라인과 DirectShow 파이프라인이 모두 업데이트되었습니다. 두 갈래 접근 방식이 사용됩니다.

  • 재생이 시작되기 전에 파이프라인은 사용자의 전원 관리 설정 및 하드웨어에 대한 정보를 기반으로 정적 최적화를 수행할 수 있습니다.
  • 재생이 시작된 후 파이프라인은 런타임 성능에 따라 동적 최적화를 적용할 수 있습니다.

Media Foundation의 품질 관리

정적 최적화를 사용하도록 설정하려면 토폴로지를 확인하기 전에 부분 토폴로지에서 MF_TOPOLOGY_STATIC_PLAYBACK_OPTIMIZATIONS 특성을 설정합니다. 토폴로지 로더는 IMFTopoLoader::Load 메서드에서 이 특성을 쿼리합니다.

정적 최적화를 사용하도록 설정하는 경우 토폴로지에서 두 가지 다른 특성을 설정해야 합니다.

attribute Description
MF_TOPOLOGY_PLAYBACK_MAX_DIMS
비디오 재생 창의 최대 크기를 지정합니다.
MF_TOPOLOGY_PLAYBACK_FRAMERATE
모니터 새로 고침 속도를 지정합니다.

 

이러한 두 특성은 파이프라인이 품질 관리를 위한 가장 효과적인 설정을 계산하는 데 도움이 될 수 있습니다.

동적 최적화는 품질 관리자가 수행합니다. 품질 관리자를 사용하도록 설정하기 위해 아무 작업도 수행할 필요가 없습니다. 자동으로 사용하도록 설정됩니다. 품질 관리자는 Windows Vista에 존재했습니다. Windows 7에서 EVR은 품질 관리자의 메시지에 더 잘 응답할 수 있습니다.

DirectShow의 품질 관리

DirectShow는 DVD 재생을 위한 정적 및 동적 최적화를 지원합니다. DVD 재생 애플리케이션에서 이러한 최적화를 사용하도록 설정하려면 IDvdGraphBuilder::RenderDvdVideoVolume 메서드의 dwFlags 매개 변수에 다음 플래그를 설정합니다.

플래그 설명
AM_DVD_ADAPT_GRAPH 정적 최적화를 사용하도록 설정합니다.
AM_DVD_EVR_QOS 동적 최적화를 사용하도록 설정합니다.

 

다른 DirectShow 애플리케이션은 EVR 필터에서 직접 IEVRFilterConfigEx::SetConfigPrefs 메서드를 호출하여 동적 최적화를 사용하도록 설정할 수 있습니다. EVRFilterConfigPrefs_EnableQoS 플래그를 지정합니다.

참고

DirectShow의 정적 최적화는 DVD 재생으로 제한됩니다.

 

EVR의 품질 관리

EVR은 품질 관리를 위한 몇 가지 새로운 구성 플래그를 지원합니다. 앞에서 설명한 품질 관리 최적화를 사용하도록 설정하는 경우 이러한 플래그를 직접 설정할 필요가 없습니다. 그러나 EVR에 대한 보다 세분화된 제어를 원하는 애플리케이션에 대해 문서화되어 있습니다.

IMFVideoMixerControl2::SetMixingPrefs 메서드를 호출하여 EVR 믹서에서 다음 플래그를 설정합니다.

플래그 설명
  • MFVideoMixPrefs_ForceHalfInterlace
  • MFVideoMixPrefs_AllowDropToHalfInterlace
인터레이스된 모든 프레임의 두 번째 필드를 건너뜁니다.
  • MFVideoMixPrefs_AllowDropToBob
  • MFVideoMixPrefs_ForceBob
드라이버가 고품질 디인터레이스 모드를 지원하는 경우에도 bob deinterlacing을 사용합니다.

 

IMFVideoDisplayControl::SetRenderingPrefs 메서드를 호출하여 EVR 발표자에 다음 플래그를 설정합니다.

플래그 Description
  • MFVideoRenderPrefs_ForceOutputThrottling
  • MFVideoRenderPrefs_AllowOutputThrottling
GPU 대역폭과 일치하도록 출력을 제한합니다.
  • MFVideoRenderPrefs_ForceBatching
  • MFVideoRenderPrefs_AllowBatching
Batch Direct3D Present 호출. 이 최적화를 통해 시스템은 유휴 상태를 더 자주 입력하여 전력 소비를 줄일 수 있습니다.
  • MFVideoRenderPrefs_ForceScaling
  • MFVideoRenderPrefs_AllowScaling
출력 사각형보다 작은 사각형을 사용하여 비디오 혼합을 수행합니다. 결과를 올바른 출력 크기로 조정합니다.

 

또한 EVR 미디어 싱크는 이러한 각 플래그에 해당하는 구성 특성을 지원합니다.

재생이 시작되기 전에 IMFVideoMixerControl2IMFVideoDisplayControl 메서드를 호출하는 대신 EVR 미디어 싱크에서 직접 이러한 특성을 설정할 수 있습니다. 이러한 특성을 설정하려면 IMFAttributes에 대한 EVR 미디어 싱크를 쿼리합니다.

미디어 세션