z
02-01-2007, 09:49 PM
VMR9에서 뿌옇게 나오는 이유와 해결책
처음 작성일: [2007/02/01]
작성자: z in kmp forum
# 게시물의 무단도용을 금지합니다.
VMR9 Renderless에서 뿌옇게 나오는 이유는 아래 글에 잘 설명되어 있다.
[Only registered and activated users can see links]
이것은 비디오 카드의 드라이버 레벨에서 압축된 YUV 형식의 색공간을 출력장치(컴퓨터 모니터, LCD, 플라즈마 TV등)가 사용하는 RGB 형식으로 변환(colorspace conversion: YUV -> RGB)할 때 발생하는 문제이다.
풍문에 의하면 최근에 릴리즈된 ATI 카달리스트 7.1 이나 Nvidia 93.71 드라이버에서 이 문제가 해결되었다고 한다. 이 이야기를 듣고 얼씨구나 하고(ATI 사용자임 :p) 7.1 을 설치해 보니까 과연 VMR9에서 이 문제가 해결이 된 것을 확인할 수 있었다.
Colorspace Conversion(색공간 변환 - YUV를 RGB로)시에 문제가 이것 하나만 있던 게 아니였는데, 나머지 하나는 여전히 조정이 되지 않은 것을 확인할 수 있었다. ㅠ.ㅠ 물론 내가 쓰고 있는 ATI 9600에 대해서이다. (상위버전의 비됴카드나 nVidia에서는 어떻게 출력되는 줄 모른다.)
그 다른 문제는 빨간색 계열의 원색에서 pixelated(적당한 우리말이 안떠오르니 읽는 분들은 용서해 달라. 기술 용어는 번역하면 이해하기가 더 어렵다.)된 채로 출력되던 문제이다. 일반 영화같은 실사 동영상에서는 확인이 어렵고 애니메이션 등에서 확실하게 구분할 수 있다.
KMP에서는 이 문제에 대해서 RGB 출력시 내부적으로 이 버그를 해결하는 루틴을 내장하고 있다. 간혹 보면 VMR9에서 RGB force 옵션을 켜고 환호하는 사람들이 있는데 십중 팔구는 뻘건색 계통의 원색 계열에서 계단식으로 뭉게지며 출력되던 문제가 해결된 사람들일 것이다.
그래, 아직도 VMR9 RGB출력이 최고다. :p
참고로 RGB가 아닌 YV12나 YUY2 출력은 드라이버 레벨(렌더러)에서 RGB 변환이 이뤄진다. 즉 비됴 카드 내에서 출력장치에 뿌리기 전에 RGB 변환을 한다는 얘기다. 이것도 일종의 비됴 가속이라고 할 수 있다.
그런데 화질이 문제가 되서 KMP에서 RGB 출력을 한다는 얘기는 kmp의 비디오 변환 필터(KMP video transform filter)에서 RGB 변환을 해서 렌더러에 RGB 형식으로 보내준다는 얘기다. 이 경우에 발생하는 부하는 다음과 같다.
픽셀당 YV12는 12비트, YUY2는 16비트, RGB는 32비트이다.
초당 24프레임으로 재생되는 640*480 해상도의 동영상에 대해서 CPU에서 처리해야 하는 초당 데이터는 다음과 같이 계산한다.
RGB 출력시: 640 X 480 (총 픽셀 수) x 32 (bit) X 24 (초당) = 235,929,600 bit/s
YV12 출력시: 640 X 480 X 12 (bit) X 24 (초당) = 88,473,600 bit/s
즉 RGB 출력시는 초당 235메가정도를 YV12시는 88메가 정도를 cpu에서 처리해주어야 한다. 이 정보는 640*480 동영상을 재생하고 tab을 눌러보면 출력 비트레이트를 표시해 주는 부분에서 확인할 수 있다. RGB가 YUV에 비해 cpu가 처리해야 하는 데이터가 대략 2.7배이다.
그런데 짐작했을지 모르겠지만 RGB 출력은 고해상도로 갈수록 처리해야 하는 데이터가 무지막지하게 늘어난다. (궁금한 사람은 해상도를 바꿔서 계산해 보면 된다) 위는 디코딩 파워에 대한 것이 아니고 단순히 색공간 변환에 들어가는 부하에 대한 것뿐이니 이걸 가지고 잘못 오해하는 사람이 없길 바란다. 위는 디코딩을 한 후 이루어지는 작업이다.
이런 이유로 KMP 비디오 필터 내에서는 YV12로 데이터 처리를 한다. 간혹 초고속 모드에 대해 이게 뭐하는 것인가 하는 분들이 있는데 초고속 모드는 비디오 필터를 떼는 동작이다. 고해상도 동영상에서 다른 재생기보다 퍼포먼스가 떨어지는 이유는 kmp는 기본적으로 비디오 필터 처리기가 붙어 있기 때문이다. 비디오 필터 내에서 아무런 비디오 처리를 하지 않아도 붙어 있는 것만으로도 약간의 부하가 발생하는데 고해상도 동영상의 경우는 이 차이가 상당히 느껴질 수 있다.
더구나 고해상도 동영상은 DxVA 가속을 할 수있는 상용 디코더가 존재하는데 어떤 종류의 비디오 필터라도 중간에 끼여 있으면 가속이 되지 않는다. 비스타이후에 출시되는 DirectX에서 DxVA 2.0 스펙을 마련해 놓고 있는데 이걸 준수하는 디코더가 나오게 된다면 앞으로 이러한 제한은 풀리지 않을지 싶다. (물론 비스타 이상에서만 동작한다)
처음 작성일: [2007/02/01]
작성자: z in kmp forum
# 게시물의 무단도용을 금지합니다.
VMR9 Renderless에서 뿌옇게 나오는 이유는 아래 글에 잘 설명되어 있다.
[Only registered and activated users can see links]
이것은 비디오 카드의 드라이버 레벨에서 압축된 YUV 형식의 색공간을 출력장치(컴퓨터 모니터, LCD, 플라즈마 TV등)가 사용하는 RGB 형식으로 변환(colorspace conversion: YUV -> RGB)할 때 발생하는 문제이다.
풍문에 의하면 최근에 릴리즈된 ATI 카달리스트 7.1 이나 Nvidia 93.71 드라이버에서 이 문제가 해결되었다고 한다. 이 이야기를 듣고 얼씨구나 하고(ATI 사용자임 :p) 7.1 을 설치해 보니까 과연 VMR9에서 이 문제가 해결이 된 것을 확인할 수 있었다.
Colorspace Conversion(색공간 변환 - YUV를 RGB로)시에 문제가 이것 하나만 있던 게 아니였는데, 나머지 하나는 여전히 조정이 되지 않은 것을 확인할 수 있었다. ㅠ.ㅠ 물론 내가 쓰고 있는 ATI 9600에 대해서이다. (상위버전의 비됴카드나 nVidia에서는 어떻게 출력되는 줄 모른다.)
그 다른 문제는 빨간색 계열의 원색에서 pixelated(적당한 우리말이 안떠오르니 읽는 분들은 용서해 달라. 기술 용어는 번역하면 이해하기가 더 어렵다.)된 채로 출력되던 문제이다. 일반 영화같은 실사 동영상에서는 확인이 어렵고 애니메이션 등에서 확실하게 구분할 수 있다.
KMP에서는 이 문제에 대해서 RGB 출력시 내부적으로 이 버그를 해결하는 루틴을 내장하고 있다. 간혹 보면 VMR9에서 RGB force 옵션을 켜고 환호하는 사람들이 있는데 십중 팔구는 뻘건색 계통의 원색 계열에서 계단식으로 뭉게지며 출력되던 문제가 해결된 사람들일 것이다.
그래, 아직도 VMR9 RGB출력이 최고다. :p
참고로 RGB가 아닌 YV12나 YUY2 출력은 드라이버 레벨(렌더러)에서 RGB 변환이 이뤄진다. 즉 비됴 카드 내에서 출력장치에 뿌리기 전에 RGB 변환을 한다는 얘기다. 이것도 일종의 비됴 가속이라고 할 수 있다.
그런데 화질이 문제가 되서 KMP에서 RGB 출력을 한다는 얘기는 kmp의 비디오 변환 필터(KMP video transform filter)에서 RGB 변환을 해서 렌더러에 RGB 형식으로 보내준다는 얘기다. 이 경우에 발생하는 부하는 다음과 같다.
픽셀당 YV12는 12비트, YUY2는 16비트, RGB는 32비트이다.
초당 24프레임으로 재생되는 640*480 해상도의 동영상에 대해서 CPU에서 처리해야 하는 초당 데이터는 다음과 같이 계산한다.
RGB 출력시: 640 X 480 (총 픽셀 수) x 32 (bit) X 24 (초당) = 235,929,600 bit/s
YV12 출력시: 640 X 480 X 12 (bit) X 24 (초당) = 88,473,600 bit/s
즉 RGB 출력시는 초당 235메가정도를 YV12시는 88메가 정도를 cpu에서 처리해주어야 한다. 이 정보는 640*480 동영상을 재생하고 tab을 눌러보면 출력 비트레이트를 표시해 주는 부분에서 확인할 수 있다. RGB가 YUV에 비해 cpu가 처리해야 하는 데이터가 대략 2.7배이다.
그런데 짐작했을지 모르겠지만 RGB 출력은 고해상도로 갈수록 처리해야 하는 데이터가 무지막지하게 늘어난다. (궁금한 사람은 해상도를 바꿔서 계산해 보면 된다) 위는 디코딩 파워에 대한 것이 아니고 단순히 색공간 변환에 들어가는 부하에 대한 것뿐이니 이걸 가지고 잘못 오해하는 사람이 없길 바란다. 위는 디코딩을 한 후 이루어지는 작업이다.
이런 이유로 KMP 비디오 필터 내에서는 YV12로 데이터 처리를 한다. 간혹 초고속 모드에 대해 이게 뭐하는 것인가 하는 분들이 있는데 초고속 모드는 비디오 필터를 떼는 동작이다. 고해상도 동영상에서 다른 재생기보다 퍼포먼스가 떨어지는 이유는 kmp는 기본적으로 비디오 필터 처리기가 붙어 있기 때문이다. 비디오 필터 내에서 아무런 비디오 처리를 하지 않아도 붙어 있는 것만으로도 약간의 부하가 발생하는데 고해상도 동영상의 경우는 이 차이가 상당히 느껴질 수 있다.
더구나 고해상도 동영상은 DxVA 가속을 할 수있는 상용 디코더가 존재하는데 어떤 종류의 비디오 필터라도 중간에 끼여 있으면 가속이 되지 않는다. 비스타이후에 출시되는 DirectX에서 DxVA 2.0 스펙을 마련해 놓고 있는데 이걸 준수하는 디코더가 나오게 된다면 앞으로 이러한 제한은 풀리지 않을지 싶다. (물론 비스타 이상에서만 동작한다)