Direct3D 렌더링 대상 다루기
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
Direct3D 렌더링 대상에 대한 여러 미디어 하위 유형은 VMR-7 및 VMR-9와 함께 사용하도록 정의됩니다. 업스트림 필터가 이러한 하위 형식 중 하나와의 연결을 제안하면 Direct3D 렌더링 대상에서 렌더링을 수행할 것임을 VMR에 나타냅니다. VMR-7의 경우 DirectX 7 Direct3D 렌더링 대상이 되며 VMR-9의 경우 DirectX 9 Direct3D 렌더링 대상이 됩니다. VMR이 혼합 모드인 경우 표면도 Direct3D 텍스처 표면이 됩니다. VMR이 혼합 모드가 아닌 경우 표면은 일반 Direct3D 표면이 됩니다. ARGB 픽셀 형식은 VMR이 혼합 모드인 경우에만 지원됩니다. 렌더링 대상 하위 형식은 다음과 같습니다.
VMR-7 | VMR-9 |
---|---|
MEDIASUBTYPE_RGB32_D3D_DX7_RT | MEDIASUBTYPE_RGB32_D3D_DX9_RT |
MEDIASUBTYPE_RGB16_D3D_DX7_RT | MEDIASUBTYPE_RGB16_D3D_DX9_RT |
MEDIASUBTYPE_ARGB32_D3D_DX7_RT | MEDIASUBTYPE_ARGB32_D3D_DX9_RT |
MEDIASUBTYPE_ARGB4444_D3D_DX7_RT | MEDIASUBTYPE_ARGB4444_D3D_DX9_RT |
MEDIASUBTYPE_ARGB1555_D3D_DX7_RT | MEDIASUBTYPE_ARGB1555_D3D_DX9_RT |
이러한 형식은 헤더 파일 uuids.h에 정의됩니다. MEDIASUBTYPE_RGB32 미디어 형식은 RGBx888 형식이며 MEDIASUBTYPE_RGB16 미디어 형식은 RGB565 형식입니다. 이러한 픽셀 형식에 대한 자세한 내용은 DirectX 그래픽 설명서를 참조하세요.
잠금 해제된 Surface 요청
DirectDraw 표면 잠금 및 잠금 해제는 계산 비용이 많이 드는 작업입니다. Direct3D 렌더링 대상 미디어 하위 형식을 사용하는 경우 업스트림 필터는 그래픽 하드웨어를 사용하여 작동할 수 있도록 표면의 잠금을 해제해야 합니다. 불필요한 잠금 해제 작업을 방지하기 위해 VMR은 IMemAllocator::GetBuffer 메서드(AM_GBF_NODDSURFACELOCK)에서 샘플을 업스트림 필터에 전달하기 전에 DirectDraw 표면을 잠그지 않도록 지시하는 새 플래그를 지원합니다. 이 플래그를 사용하면 잠긴 포인터가 없으므로 IMediaSample::GetPointer 호출이 실패합니다. DirectDraw 화면에 액세스하려면 필터가 반환된 IMediaSample 개체에서 QueryInterface 호출하고 IVMRSurface 인터페이스를 요청해야 합니다. 물론 업스트림 필터는 샘플을 자유 목록으로 다시 놓을 때 표면이 잠기지 않도록 해야 합니다.