EVR C/P를 비디오 렌더러로 사용했을 때 팟플에서 동영상 재생시 영상 출력의 흐름도
동영상 -> 소스 필터 -> 스플리터 -> 비디오/오디오 디코더 -> 영상/음성 처리 필터 -> 오디오/비디오 렌더러
여기서 살펴볼 것은 디코딩된 비디오 데이터가 EVR C/P 렌더러에서 최종 출력되기까지의 과정입니다.
이 과정은 탭 정보를 눌러보면 "렌더러 포멧" 항목에서 흐름도를 볼 수 있습니다.
EVR C/P의 영상 출력 순서는 아래와 같습니다.
영상 버퍼 -> 믹서 버퍼 -> 비디오[서페이스] 버퍼 -> 백버퍼 -> 화면
믹서 버퍼: 디인터레이스, 컬러스페이스 변환
비디오(Surface) 버퍼: 픽셀 세이더를 포함한 각종 영상 처리(렌더러에서 가능한)
백버퍼: 화면에 출력 되는 버퍼, 즉 영상과 자막이 출력되는 버퍼, 백버퍼가 화면에 복사되면 CopyMode, 교체(?)되면 FlipMode이고, 오버레이로 출력이 되면 오버레이 모드가 됩니다. 10비트로 출력이 되기 위해서는 백버퍼가 10비트가 되어야 되고, 화면 모드 또한 10비트가 되어야 됩니다.
버퍼 수: 디코딩된 데이타를 렌더러에서 얼마 만큼 가지고 있을 지에 대한 수이며, EVR C/P의 경우 믹서 버퍼의 개수를, 내장 D3D9/11 렌더러의 경우 영상 버퍼 수를 나타냅니다. 너무 작으면 재생시 부드럽게 재생이 않될 수 있고, 너무 많으면 메모리 부족이나 기타 이상 동작을 할 수 있습니다. 5~10이 적당하며 문제가 없다면 건드리지 않는 것이 좋습니다.
비디오 버퍼: 비디오 버퍼는 픽셀 세이더등의 영상 처리를 위해서 사용하는 버퍼 입니다. 당연히 비트가 높으면 화질 손상이 줄어들 가능성이 있지만 큰 의미는 없고, 중요한 것은 입력과 같거나 커야 색손실이 없어집니다. 즉 10비트 소스라면 10비트 이상으로 설정해야 합니다.
10비트 출력: 백버퍼를(최종 화면에) 10비트로 출력하는 옵션. 현재 D3D9의 경우 배타적 전체 화면에서 가능하고, D3D11의 경우 창모드도 10비트 출력을 할 수 있습니다. 즉 10비트 모니터의 경우 이제 팟플레이어에서 10비트로 직접 출력을 할 수 있습니다
참고로 EVR CP는 내부 구조상 믹서 버퍼를 반드시 사용하게 되어 있는데 Intel VGA는 10 비트 믹서 버퍼를 지원하지 않고, NVIDIA나 AMD는 10비트 믹서 버퍼를 지원해서 10비트로 동작됩니다. 즉 현재 인텔에서 EVR C/P 사용시 10비트 출력은 큰 의미가 없습니다.
또 VMR9 Renderless는 Mixer 모드를 사용하지 않으면 색손실 없이 전달할 수 있고, 내장 D3D9와 D3D11 렌더러는 색손실 없이 처리할 수 있습니다. OpenGL의 경우 내부는 색손실 없이 처리가 가능 한데 10비트 출력이 않됩니다.
내장 렌더러의 경우 필요할 때만 믹서 버퍼를 사용하고 가능하면 영상을 백버퍼로 바로 출력합니다. 그래서 이게 가장 속도가 빠르고 색손실이 적습니다. 내장 렌더러의 경우 믹서 버퍼는 입력이 10비트라면 10비트 믹서 버퍼, 16비트라면 16비트 믹서 버퍼를 사용합니다.
요약하면 현재 10비트 출력은 창화면에서 10비트 출력을 생각하면 내장 D3D11가 제일 낫습니다. 다만 그래픽 카드에서 10비트 출력을 지원해야 하고, 모니터도 10비트 출력이 가능해야 합니다. 물론 10비트 소스여야 합니다.
참고로 시중에는 True 10비트 출력이 가능한 모니터가 거의 없습니다. 10비트라고 광고하는 대부분의 모니터가 8bit FRC입니다. 8비트 FRC는 10비트 입력을 받을 수 있는 모니터입니다. 다만 모니터 내부에서 이것을 8비트로 디더링해서 출력합니다.
EVR C/P 렌더러의 경우는 무조건
영상 버퍼 -> 믹서 버퍼 -> 비디오[Surface] 버퍼 -> 백버퍼 -> 화면 순으로 출력이 되지만
내장 D3D9/11 렌더러의 경우 영상 처리가 필요 없다면
영상 버퍼 -> [믹서 버퍼 -> 비디오[서페이스] 버퍼 ->] 백버퍼 -> 화면 순으로 믹서/비디오 버퍼를 생략할 수 있습니다.
참고: http://cafe.daum.net/pot-tool/AZMV/16143
ps. 팟플의 경우 내장 처리는 위의 내장 렌더러에서 설명한 것처럼 처리 단계를 줄이기 위해 여러가지 테크닉을 사용하고 있습니다. 다른 예를 들면 내장 오픈코덱 항목이 따로 있는 것도 마찬가지 이유입니다. 만약 사용하는 코덱 중에 내장 오픈코덱이 있다면 해당 항목을 무조전 사용으로 놓으면 처리 단계를 한단계 줄일 수 있습니다. 즉 조금이라도 빨라진다는 얘기..
ps. 개발자님 읽어보시고 틀린 부분 있으면 알려주세요~
첫댓글 EVR CP의 경우
영상 버퍼 -> 믹서 버퍼 -> 비디오[서페이스] 버퍼 -> 백버퍼 -> 화면
이고..
내장 D3D9/D3D11의 경우
영상 버퍼 -> [믹서 버퍼 -> 비디오[서페이스] 버퍼 ->] 백버퍼 -> 화면
입니다.
그리고 EVR CP의 경우 Intel VGA는 10 비트 믹서 버퍼를 지원하지 못해서 동작은 않되구요...
NVIDIA나 AMD는 10비트 믹서 버퍼를 지원해서 10비트 동작 됩니다.
추가 설명 감사드립니다~ 내용 수정했습니다.
그런데 evr c/p의 경우 d3d9 으로만 처리가 되는지요? 즉.. 배타적 전체화면에서만 10비트 출력이 가능한지요?
내장 렌더러 선택시 렌더러 설정에서 적용이 안되는 부분은 disabled 처리를 해주시면 어떨지요?
예를 들어 내장 d3d11 렌더러 선택시 d3d9 presentation이나 d3d9 출력장치같은 것 말입니다. 뭐가 적용이 되고 안되는지 정확히 알 수 있도록...
@킹팟 이미 그렇게 됩니다.
D3D11의 경우도 Pesent의 설정값과 D3D9 출력 장치의 영향을 받구요...
Present의 경우는 그냥 인덱스정도만 참조 하고...
출력 장치는 D3D9에서 선택한 장치로 동작 합니다.
NVIDIA나 AMD는 10비트 믹서 버퍼를 지원해서 10비트 동작 됩니다. 에서......
일반 vga카드로 출력은 8bit로 되고, 파이어프로 같은 환경에서는 출력도 10bit로 되는것이죠?
물론 디스플레이어가 10bit 입, 출력을 해야...
자세한 설명 감사합니다
많은 참고가 될것 같습니다.