다음을 통해 공유


비디오 디코딩 작업 동기화

DirectX VA 2.0에 대한 동기화 메커니즘은 1.0 버전에서 개선되었으며 Microsoft Direct3D 작업에서 사용하는 동기화 메커니즘과 더 유사합니다.

DirectX VA 1.0에서 동기화는 주로 디코더에 의해 수행됩니다. 디코더가 압축된 버퍼를 사용하기 전에 DdMoCompQueryStatus 함수를 호출하여 버퍼를 사용할 수 있는지 확인합니다(즉, 하드웨어가 버퍼에 액세스하지 않음). 버퍼를 사용할 수 없는 경우 디코더는 절전 모드, 폴링 또는 다른 작업을 수행해야 합니다.

DirectX VA 2.0은 Direct3D가 꼭짓점 버퍼 및 인덱스 버퍼에서 이미 사용하는 동기화 모델을 사용합니다. DirectX VA 2.0에서 압축된 버퍼를 잠그는 디코더에 의해 동기화가 수행됩니다. 사용자 모드 표시 드라이버가 압축된 버퍼를 잠그려고 시도하고 버퍼가 사용 중인 경우 드라이버는 잠금에 실패하거나 버퍼의 이름을 바꿀 수 있습니다. 사용자 모드 표시 드라이버는 드라이버가 pfnLockCb 함수 호출에서 D3DDDICB_LOCKFLAGS 구조체의 무시 멤버를 설정하는 경우 비디오 메모리 관리자의 버퍼 이름을 바꾸도록 요청합니다. 사용자 모드 표시 드라이버가 버퍼의 이름을 바꾸면 드라이버는 차단되지 않고 디코더를 계속할 수 있도록 대체 버퍼에 대한 포인터를 반환합니다.

일반적으로 DirectX VA 2.0의 경우 하드웨어가 추가 버퍼 복사본 없이 압축된 버퍼를 직접 사용할 수 있는 경우에만 동기화가 문제입니다.