Trabalhando com quadros de vídeo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use 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.]

Vídeo descompactado é 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 insere um grafo de filtro do DirectShow em um formato compactado, o fluxo de vídeo geralmente passa por um decodificador para descompactação. Muitos decodificadores geram dados em um formato YUV e deixam a conversão final em RGB para o hardware de vídeo pouco antes da renderização. Se um decodificador usar a Aceleração de Vídeo DirectX, o hardware de vídeo executará trabalho adicional para decodificar a imagem. Portanto, a descompactação final dos bitmaps pode não ser executada 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, geralmente é necessário trabalhar em bitmaps não compactados em algum tipo de formato RGB ou YUV antes de serem renderizados ou gravados no arquivo. Normalmente, esse trabalho é feito em um filtro de transformação com base na classe base CTransformFilter , especificamente no método Transform . Esse método recebe um ponteiro para um objeto IMediaSample 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 em segundo plano 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: