Direct3D 렌더링 대상 작업

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 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은 AM_GBF_NODDSURFACELOCK IMemAllocator::GetBuffer 메서드에서 샘플을 업스트림 필터에 전달하기 전에 DirectDraw 표면을 잠그지 않도록 지시하는 새 플래그를 지원합니다. 이 플래그를 사용하면 잠긴 포인터가 없으므로 IMediaSample::GetPointer 에 대한 호출이 실패합니다. DirectDraw 표면에 액세스하려면 필터가 반환된 IMediaSample 개체에서 QueryInterface를 호출하고 IVMRSurface 인터페이스를 요청해야 합니다. 분명히 업스트림 필터는 샘플을 자유 목록으로 다시 놓을 때 표면이 잠기지 않도록 해야 합니다.