Partilhar via


Trabalhando com quadros de vídeo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O vídeo não comprimido é uma sequência de bitmaps reproduzidos em rápida sucessão, normalmente a uma taxa de cerca de 30 quadros por segundo. Como a maioria dos vídeos entra em um gráfico de filtro DirectShow em um formato compactado, o fluxo de vídeo geralmente passa por um decodificador para descompressão. Muitos decodificadores emitem dados em um formato YUV e deixam a conversão final para RGB para o hardware de vídeo pouco antes da renderização. Se um descodificador utilizar o DirectX Video Acceleration, o hardware de vídeo executa trabalho adicional para descodificar a imagem. Assim, a descompressão final dos bitmaps não pode ser realizada até que os dados cheguem ao hardware de vídeo.

Mas para executar muitos tipos de análise, processamento ou edição de vídeo, muitas vezes é necessário trabalhar em bitmaps não compactados em algum tipo de formato RGB ou YUV antes que eles sejam renderizados ou gravados no arquivo. Esse trabalho normalmente é feito dentro de um filtro de transformação com base na classe base CTransformFilter, especificamente no método Transform. Este método recebe um ponteiro para um IMediaSample objeto que encapsula os dados de vídeo. O método IMediaSample::GetPointer retorna um ponteiro para o primeiro byte dos dados brutos. Para quadros não compactados, esses dados consistem em pixels que podem ser acessados ou modificados diretamente pelo filtro. As seções a seguir fornecem informações básicas que ajudarão você a trabalhar efetivamente com dados DIB dessa maneira.

Observação

Você também pode modificar os bits usando funções GDI, GDI+, DirectDraw ou Direct3D, mas essas técnicas estão além do escopo deste artigo.

 

Esta seção contém os seguintes tópicos: