DXVA

DirectX Video Accelaction


coreavc 같은 코덱으로도 돌리지 못할 경우, 그래픽카드는 좀 쓸만하다 싶은 사람들이 최후로 쓰는 방법. Windows 2000부터 사용 가능하고 AMD의 퓨전APU 온타리오, 자카테(예, C-50; E-350)의 경우 아톰보다 별로 나을것 없는 성능이지만 DXVA를 사용할 경우 H264 1080p의 영상도 가볍게 보여준다.

사실 내장코덱을 이용한 구동방식보다 전기소모가 더 많을 수도 있으며[1][2] 호환성이 나쁜 경우도 많아서, 정말로 내장코덱으로 안 돌아가는 경우에만 사용하는 것을 권장한다.[3]

DXVA는 DirectX를 이용, CPU로 디코딩을 하는 것이 아니라 GPU를 이용한 디코딩을 하는 방식을 뜻한다. 일종의 GPGPU.

DXVA의 장점으로는 디코딩에 GPU를 이용하기 때문에 CPU 점유율이 무척 낮아지며 또한 렌더링 속도도 무척 빨라지게 된다. 또한 비디오 디코더->비디오 렌더러로 바로 영상이 처리되기 때문에 가장 원본에 가까운 영상을 볼 수 있기도 하다.

비디오 디코더->렌더러로 바로 영상이 처리되는 만큼 밝기 조절 같은 기타 영상효과는 전혀 주지 못한다는 것은 단점이나 요즘은 하드웨어 수준에서 모두 지원하고, 동영상 플레이어도 하드웨어 컨트롤을 사용하여 조절하는 것을 지원한다.

VGA에 따라 지원하는 코덱과 영역이 다른데, 이걸 간단히 확인하는 방법으로는 DXVA Checker라는 프로그램을 받아서 실행시켜보면 알 수 있다.

또한, 아무 재생기에서 되는 건 아니고 특정 플레이어와 코덱 VGA를 모두 가리는 제한적인 조건이 필요하다. MPEG2/WMV가 주요 지원 코덱이며, DXVA2에 들어서 H.264/VC1/AVC 등의 지원이 추가되어 지원코덱의 범위는 커졌지만 그 외에 제한 조건이 더 심해지며 EVR 렌더러를 필수로 이용해야 한다. 원래 Windows Vista부터 사용 가능했으나 나중에 Windows XP에서도 사용 가능하게 제공해줬다. 단, .Net Framework 3.0 이상의 프레임워크를 별도로 설치해야한다.

DXVA는 여러 수준의 가속이 있으며 가속 수준별 특징 또한 다르다.

  • Post Process - 직역하면 후처리이며 DXVA 중 가장 VGA 가속을 덜 받는다. CPU가 완전히 디코딩한 것에 디인터레이싱이나, 블럭 제거 등의 잡티 제거만 돕는 수준. 물론 CPU 점유율이 높다.
  • Mocomp - Motion Compensation 직역하면 움직임 보상, 그나마 VGA가 디코딩을 조금씩 담당하는 단계, 동영상 압축원리 중 하나가 움직이는 물체의 움직임만 기록하고, 움직이지 않는 것은 생략하고 전에 있던 정보로 대체하는데, 이때 VGA가 연산을 약간 도와주는 정도. CPU 점유율이 떨어지는 건 눈에 보이긴하나 생각보다 높진 않은 상태. 엔비디아 그래픽카드에서는 지포스 256부터 처음 지원했었는데 지포스 2 ~ 4 Ti 시리즈 동안 해당 기능이 잠시 삭제되었다.
  • IDCT - Inverse Discrete Cosine Transform 역 이산 코사인 변환, 이 단계부터 VGA가 적극적으로 디코딩에 참여하고, 현재 대부분의 기존 프로그램들이 IDCT 가속을 이용하며 CPU 점유율도 상당히 내려간다. DXVA1에서 이용가능한 최고 수준의 가속.
  • VLD - Variable Length Decoder며 해석하면 가변장 복호화가 된다. 영상압축중 상당부분을 차지하고 있는 엔트로피 코드를 디코딩하는 것이며, 사실상 동영상 복호과정중 가장 많은 프로세스를 점유한다. ( 비트레이트가 높으면 높을수록, 엔트로피 코드의 복호화 부하도 크다. 따라서 비트레이트는 엔트로피 코딩을 사용하는 영상압축포맷을 디코딩할때 CPU점유율을 가늠하는 척도가 된다 ) 따라서 CPU부하가 대부분 줄어들게 되며, MPEG-4 part2 와 같이 가변장 복호를 제외한 나머지 프로세스들의 점유율이 크지 않은 경우에는 사실상 이를 통해 CPU점유율을 0%에 가깝게 끌어내릴수도 있다. 하지만 H.264/AVC처럼 In-loop 디블럭킹 필터[4] 를 사용하는 포맷의 경우는 제외

DXVA를 지원하는 소프트웨어.

  1. cpu만을 사용하는 내장코덱과는 달리 dxva는 vga를 가속에 참여시킨다. 고성능 그래픽카드의 경우 영상 재생시 절전효과가 좋지 못하다.
  2. DXVA를 이용할 경우 일반적으로 GPU에 내장된 하드웨어 디코더를 통해 재생하지만 하드웨어 디코더가 아닌, DXVA를 단지 인터페이스로 쓸 뿐 실제로는 GPGPU를 통해서 연산하거나 둘의 하이브리드 방식인 경우도 있으며 이 경우엔 절전효과는커녕 오히려 전력을 더 많이 잡아먹기도 한다. 이는 CPU의 연산력으론 감당할 수 없는 최신의 영상코덱(옛 H.264나 현 H.265(HEVC))의 재생을 위한 불가피한 방법으로 강구된 것이나 잘못 설정할 경우엔 DXVA 사용이 오히려 CPU로 재생하는 것보다 더 많은 전력을 소모할 수 있으므로 약간 주의할 필요가 있다.
  3. VGA의 전용 동영상 디코딩칩을 이용하기 때문에 단순히 그래픽카드의 성능이 좋다고 DXVA의 효율이 높아지는것은 아니고, 오히려 상위 그래픽카드 제품군이 하위 그래픽카드 제품군의 동영상 가속 성능에서 밀리는 경우도 있다. 거기에다 이러한 하드웨어 방식의 디코딩은 디코딩에 약간은 엄격한 제한이 붙기 때문에 모든 동영상에서의 호환을 장담할 수 없을 뿐만 아니라 호환되지 않는 부분에서는 가차없이 에러를 뿜어낸다. (DXVA를 사용하다 영상에서 묘한 깍두기같은것을 보았다면 100%) 따라서 CPU의 능력이 모자란 경우가 아니면 CPU만을 이용할것을 강력 추천한다. 단, AMD APU의 경우 UVD3.0을 지원하여 좋은 효과를 거둘 수 있다.
  4. 이름에서 알수 있듯이 동영상의 복호,부호화 과정내에(In-loop) 수행되는 디블럭킹 필터이다. 동영상을 인코딩하기 전에 전처리를 하는 Pre-process 디블럭킹 필터나, 동영상을 디코딩한 후에 적용되는 post-process 디블럭킹 필터와는 엄연히 구분된다. 거기다가 In-loop 디블럭킹 필터자체가 디코딩 과정중 하나이기 때문에 디코딩할때도 디블럭킹 연산을 해야하며 이의 부하가 생각외로 크다. (어느 서적에 따르면 전체 CPU점유율의 대략 30%에서 많으면 50%라고 한다) 따라서 저사양 컴퓨터에 무리를 주기 때문에 어떤 디코더는(대표적으로 CoreAVC) 이 디블럭킹 연산을 해제할수 있도록 한다. 사양은 많이 낮아지지만 최후의 보루다. 해제하면 네모난 블럭이 난무하는 끔찍한 화질을 볼 수 있다.