# X video extension

O X video extension, sendo normalmente abreviado como XVideo ou Xv, é um output de saída para vídeo para o X Window System. O protocolo foi desenvolvido por David Canver, A especificação para a versão 2 do protocolo foi escrita em Julho de 1991. Hoje em dia é mais usado para redimensionar o conteúdo do vídeo no no hardware do controlador do vídeo para expandir o vídeo em questão ou para assisti-lo em tela cheia. Sem XVideo, seria necessário para fazer isso escalando para CPU principal. Isso requere uma consideralvemente poder de processamento, no qual poderia diminuir ou degradar o stream do vídeo, controladores de vídeo são especificadamente feitos para esse tipo de computação, então podendo fazer isso muito mais barato. Similiar o X video extension pode ter um controlador de vídeo fazendo conversas com o espaço de cores e mudar o contraste, brilho e a matiz do vídeo mostrado em stream.
Para isso funcionar, três coisas precisam ir juntas:
* O controlador de vídeo deve fornecer as funções necessárias.
* O driver de dispositivo do software para o controlador de vídeo e o programa do X display server deve implementar o XVideo interface.
* O software de reprodução de vídeo tem de fazer uso desta interface.
Os controladores de vídeos modernos conseguem fornecer as funções necessárias para XVideo, esse recurso é conhecido como escalonamento de hardware e YUV aceleração ou, às vezes, como aceleração de hardware 2D. O XFree86 de display X o servidor implementou XVideo desde a versão 4.0.2. Para verificar se um dado X display server suporta XVideo, pode-se usar a ferramenta xdpyinfo. Para verificar se o controlador de vídeo fornece as funções necessárias e se o X driver de dispositivo implementa XVideo para qualquer um deles, pode-se usar o xvinfo programa.
Reprodução de vídeo programas que rodam pelo X Window system, como o MPlayer, MythTV ou xine, normalmente tem uma opção para ativar XVideo saída. É muito aconselhável para ativar esta opção se o sistema de GPU de vídeo de hardware e drivers de dispositivo suporta XVideo e mais modernos sistemas de processamento, tais como OpenGL e VDPAU não estão disponíveis, o velocidade de processamento é muito perceptível até mesmo em um CPU com bons componentes.
Enquanto o protocolo em si tem recursos para leitura e gravação de streams de vídeo e para placas de vídeo, na prática, hoje, apenas as funções XvPutImage e XvShmPutImage são utilizadas: o programa cliente repetidamente prepara as imagens e as transmite para o hardware de gráficos para ser ampliados, convertidos e apresentados.

## Display

Após o vídeo ser dimensionado e preparado para exibição na placa de vídeo, ele deve ser exibido. Existem algumas maneiras possíveis de exibir vídeos acelerados nesse estágio. Como a aceleração total significa que o controlador de vídeo é responsável pelo dimensionamento, conversão e desenho do vídeo, a técnica usada depende inteiramente do desenho do vídeo.

### O papel do suporte e composição do gerenciador de janelas

Em X, como o vídeo é finalmente desenhado depende muito do X window manager em uso. Com drivers instalados corretamente e hardware de GPU, como chipsets Intel, ATI e nVidia suportados, alguns gerenciadores de janela, chamados gerenciadores de janela de composição, permitem que as janelas sejam processadas separadamente e, em seguida, renderizadas (ou compostas). Isso envolve todas as janelas sendo renderizadas para separar os buffers de saída na memória primeiro e depois combinados para formar uma interface gráfica completa. Enquanto na memória (vídeo), janelas individuais podem ser transformadas separadamente, e vídeo acelerado pode ser adicionado neste estágio usando um filtro de textura, antes da janela ser composta e desenhada. O XVideo também pode ser usado para acelerar a reprodução de vídeo durante o desenho das janelas usando um objeto OpenGL Framebuffer Object ou pbuffer.
Metacity, um X window manager usa a composição dessa maneira. A composição também pode usar acelerações de pipelines 3D, como GLX_EXT_texture_from_pixmap. Entre outras coisas, este processo permite que muitas saídas de vídeo compartilhem a mesma tela sem interferir entre si. Outros gerenciadores de janelas de composição, como o Compiz, também usam composição.
Entretanto, num sistema limitado como o OpenGL a função de aceleração, especialmente a falta do OpenGL Framebuffer Object ou pbuffer, o uso de um ambiente OpenGL como Xgl faz xv aceleração de hardware impossível.

### As desvantagens do chroma keying

No caso em que o gerenciador de janelas não suporta diretamente a composição, é mais difícil isolar onde o fluxo de vídeo deve ser renderizado, porque no momento em que ele pode ser acelerado, a saída já foi transformada em uma única imagem. A única maneira de fazer isso é geralmente empregar uma sobreposição de hardware overlay, usando chroma keying. Depois que todas as janelas já foram desenhadas, as únicas informações que temos disponíveis são o tamanho e a posição da tela da janela de vídeo. Uma terceira informação é necessária para indicar quais partes da tela da janela de vídeo estão obscurecidas por outras janelas e quais não são. Portanto, o player de vídeo desenha sua tela usando uma cor sólida (digamos verde) e essa cor se torna uma terceira dimensão improvisada. Quando todas as janelas tiverem sido desenhadas, as janelas que cobrem o player de vídeo bloquearão a cor verde. Quando o fluxo de vídeo é adicionado à saída, a placa gráfica pode simplesmente digitalizar as coordenadas da tela. Quando encontra verde, sabe que encontrou uma parte visível da janela de vídeo e apenas desenha essas partes do vídeo. Esse mesmo processo também era a única opção disponível para renderizar vídeo acelerado por hardware no Microsoft Windows XP e versões anteriores, já que seus recursos de gerenciamento de janelas estavam tão profundamente incorporados no sistema operacional que a aceleração deles seria impossível.
Se o gerenciador de janelas não tem suporte composição, as sobreposições de hardware pós-processadas usando chroma key, conforme descrito no parágrafo anterior, podem impossibilitar a produção de capturas de tela adequadas de aplicativos Xvideo. Ele também pode impossibilitar a visualização desse tipo de reprodução em um monitor secundário quando somente uma sobreposição é permitida no nível do hardware.