X 비디오 확장

X video extension
X 비디오 확장
원본 작성자엑스오르크 파운데이션
안정적 해제
2.0 / 1991년 7월 25일; 30년(1991-07-25)

흔히 XVideo 또는 Xv로 약칭되는 X 비디오 확장은 X 윈도우 시스템을 위한 비디오 출력 메커니즘이다.프로토콜은 David Carver에 의해 설계되었다; 프로토콜 버전 2의 사양은 1991년 7월에 작성되었다.[1]현재는 특정 영상을 확대하거나 전체 화면 모드로 시청하기 위해 비디오 컨트롤러 하드웨어의 비디오 콘텐츠 크기를 조정하는 데 주로 사용된다.XVideo가 없다면 X는 주 CPU에서 이러한 확장을 수행해야 할 것이다.그것은 비디오 스트림을 느리게 하거나 저하시킬 수 있는 상당한 양의 처리 능력을 필요로 한다; 비디오 컨트롤러는 이러한 종류의 계산을 위해 특별히 설계되었기 때문에 훨씬 더 저렴하게 할 수 있다.마찬가지로 X 비디오 확장자는 비디오 컨트롤러가 색 공간 변환을 수행하도록 할 수 있으며, 표시되는 비디오 스트림의 대비, 밝기 및 색조를 변경할 수 있다.

이를 위해서는 다음 세 가지가 함께 이루어져야 한다.

  • 비디오 컨트롤러는 필요한 기능을 제공해야 한다.
  • 비디오 컨트롤러와 X 디스플레이 서버 프로그램을 위한 장치 드라이버 소프트웨어는 XVideo 인터페이스를 구현해야 한다.
  • 비디오 재생 소프트웨어는 이 인터페이스를 사용해야 한다.

대부분의 최신 비디오 컨트롤러는 XVideo에 필요한 기능을 제공한다. 이 기능을 하드웨어 스케일링 YUV 가속 또는 2D 하드웨어 가속이라고 한다.XFree86 X 디스플레이 서버는 버전 4.0.2 이후 XVideo를 구현했다.지정된 X 표시 서버가 XVideo를 지원하는지 확인하려면 유틸리티를 사용하십시오.xdpyinfo비디오 컨트롤러가 필요한 기능을 제공하는지 여부 및 X 장치 드라이버가 XVideo를 구현하는지 여부를 확인하려면xvinfo프로그램을 짜다

MPlayer, MythetTV 또는 xine과 같이 X Window 시스템에서 실행되는 비디오 재생 프로그램은 일반적으로 XVideo 출력을 활성화할 수 있는 옵션이 있다.시스템 GPU 비디오-하드웨어 및 장치 드라이버가 XVideo를 지원하고 OpenGL 및 VDPAU와 같은 보다 현대적인 렌더링 시스템을 사용할 수 없는 경우 이 옵션을 설정하는 것이 매우 바람직하다. 즉, 빠른 CPU에서도 속도가 매우 눈에 띈다.

프로토콜 자체는 비디오 어댑터에서 또는 비디오 어댑터로 전송되는 비디오 스트림을 읽고 쓰는 기능을 가지고 있지만, 실제로는 기능만 있다.XvPutImage그리고XvShmPutImage사용: 클라이언트 프로그램이 이미지를 반복적으로 준비하여 크기를 조정, 변환 및 표시할 그래픽 하드웨어에 전달한다.

디스플레이

비디오 카드의 크기를 조정하고 비디오 카드에 표시할 준비를 한 후에는 반드시 비디오를 표시해야 한다.이 단계에서 가속된 비디오를 표시할 수 있는 몇 가지 방법이 있다.완전가속은 비디오 컨트롤러가 비디오의 스케일링, 변환, 그리기를 담당한다는 것을 의미하기 때문에, 사용되는 기술은 전적으로 비디오가 무엇에 그려지는가에 달려 있다.

창 관리자 지원 및 구성의 역할

X 아래에서 어떻게 비디오를 최종적으로 그릴지는 주로 사용 중인 X 창 매니저에 달려 있다.제대로 설치된 드라이버와 지원되는 Intel, ATInVidia 칩 세트와 같은 GPU 하드웨어를 사용하면 컴포지팅 윈도우 관리자라고 하는 일부 윈도우 관리자는 윈도우를 별도로 처리한 후 렌더링(또는 컴포지션)할 수 있다.여기에는 모든 윈도우가 먼저 메모리의 출력 버퍼를 분리하도록 렌더링되고 나중에 결합되어 완전한 그래픽 인터페이스를 형성하는 것이 포함된다.(비디오) 메모리에 있는 동안, 개별 창은 별도로 변형될 수 있으며, 창은 합성되어 그려지기 전에 텍스처 필터를 사용하여 이 단계에서 가속 비디오를 추가할 수 있다.XVideo는 OpenGL Framebuffer Object 또는 pbuffer를 사용하여 창을 그리는 동안 비디오 재생을 가속화하는 데도 사용할 수 있다.

X매니저인 메타시티는 이런 방식으로 컴포지팅을 사용한다.합성에는 GLX_EXT_texture_from_픽스맵과 같은 3D 파이프라인 가속도 사용할 수 있다.무엇보다도, 이 과정은 많은 비디오 출력물들이 서로 간섭하지 않고 같은 화면을 공유할 수 있게 한다.컴피즈와 같은 다른 컴포지팅 윈도우 관리자들도 컴포지팅을 사용한다.

그러나 OpenGL 가속 기능이 제한적인 시스템, 특히 OpenGL 프레임 버퍼 개체 또는 pbuffer가 없는 시스템에서 Xgl과 같은 OpenGL 환경의 사용은 xv 하드웨어 가속을 불가능하게 만든다.

크로마 키잉의 단점

윈도우 관리자가 직접 컴포지팅을 지원하지 않는 경우, 비디오 스트림을 렌더링해야 할 위치를 분리하는 것은 더욱 어렵다. 비디오 스트림을 가속할 수 있을 무렵에는 이미 출력이 하나의 이미지로 바뀌었기 때문이다.이를 위한 유일한 방법은 보통 크로마 키잉을 사용하여 후처리 하드웨어 오버레이를 사용하는 것이다.모든 창문이 이미 그려진 후, 우리가 이용할 수 있는 유일한 정보는 비디오 창문의 캔버스의 크기와 위치뿐입니다.비디오 창의 캔버스의 어느 부분이 다른 창에 가려져 있고 어떤 부분이 가려져 있지 않은지 표시하기 위해 세 번째 정보가 필요하다.따라서 비디오 플레이어는 단색(우리는 녹색이라고 말함)을 사용하여 캔버스를 그렸고, 이 색상은 임시로 만들어진 3차원이 된다.모든 윈도우가 그려지면 비디오 플레이어를 덮는 윈도우가 녹색을 차단할 것이다.비디오 스트림이 출력에 추가되면 그래픽 카드는 캔버스의 좌표를 간단히 스캔할 수 있다.녹색과 마주쳤을 때, 그것은 그것이 비디오 창의 눈에 보이는 부분을 발견했다는 것을 알고, 비디오의 그 부분만을 그린다.윈도우 관리 기능이 운영 체제에 너무 깊이 내장되어 있어서 가속화가 불가능했을 것이기 때문에, 이 같은 과정은 마이크로소프트 윈도 XP와 그 이전 버전에서 하드웨어 가속 비디오를 렌더링할 수 있는 유일한 옵션이다.

윈도우 관리자가 컴포지팅을 지원하지 않는 경우, 앞 단락에서 설명한 대로 크로마 키잉을 사용하여 처리된 하드웨어 오버레이를 게시하면 X비디오 애플리케이션의 적절한 스크린샷을 만들 수 없다.또한 하드웨어 레벨에서 오버레이가 하나만 허용될 때 보조 디스플레이에서 이러한 종류의 재생을 볼 수 없게 만들 수 있다.

참고 항목

참조

외부 링크

예제 프로그램

  • testxv.c: 대부분의 설치에서는 "로 컴파일된다.gcc -o testxv testxv.c -L/usr/X11R6/lib -lX11 -lXext -lXv"
  • testxv2.cc: C++의 다른 예