Compartilhar via


Recursos 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.]

O método IAMStreamConfig::GetStreamCaps apresenta recursos de vídeo em uma matriz de pares de estruturas de AM_MEDIA_TYPE e VIDEO_STREAM_CONFIG_CAPS . Você pode usar isso para expor todos os formatos e resoluções com suporte em um pin, conforme discutido abaixo.

Para obter exemplos relacionados a áudio de GetStreamCaps, consulte Recursos de áudio.

Suponha que sua cartão de captura dê suporte ao formato JPEG em todas as resoluções entre 160 x 120 pixels e 320 x 240 pixels, inclusive. A diferença entre as resoluções com suporte é uma nesse caso porque você adiciona ou subtrai um pixel de cada resolução com suporte para obter a próxima resolução com suporte. Essa diferença nas resoluções com suporte é chamada de granularidade.

Suponha que seu cartão também dê suporte ao tamanho 640 x 480. A seguir, ilustra essa resolução única e o intervalo de resoluções acima (todos os tamanhos entre 160 x 120 pixels e 320 x 240 pixels).

resolução de 160 x 120 a 320 x 240 pixels, mais 640 x 480

Além disso, suponha que ele dê suporte ao formato RGB de cor de 24 bits em resoluções entre 160 x 120 e 320 x 240, mas com uma granularidade de 8. A ilustração a seguir mostra alguns dos tamanhos válidos nesse caso.

resolução de 160 x 120 a 320 a 240, com granularidade = 8

Para dizer de outra forma e listar mais resoluções, os seguintes estão entre a lista de resoluções válidas.

  • 160 x 120
  • 168 x 120
  • 168 x 128
  • 176 x 128
  • 176 x 136
  • ... resoluções adicionais...
  • 312 x 232
  • 320 x 240

Use GetStreamCaps para expor esses recursos de formato de cor e dimensão oferecendo um tipo de mídia de 320 x 240 JPEG (se esse for o seu tamanho padrão ou preferencial) juntamente com funcionalidades mínimas de 160 x 120, capacidades máximas de 320 x 240 e uma granularidade de 1. O próximo par que você expõe usando GetStreamCaps é um tipo de mídia de 640 x 480 JPEG, juntamente com um mínimo de 640 x 480 e um máximo de 640 x 480 e uma granularidade de 0. O terceiro par inclui um tipo de mídia de 320 x 240, RGB de 24 bits com capacidades mínimas de 160 x 120, capacidades máximas de 320 x 240 e uma granularidade de 8. Dessa forma, você pode publicar quase todos os formatos e funcionalidades que seus cartão podem dar suporte. Um aplicativo que deve saber quais formatos de compactação você fornece pode obter todos os pares e fazer uma lista de todos os subtipos exclusivos dos tipos de mídia.

Um filtro obtém seus retângulos de origem e destino do tipo de mídia dos membros rcSource e rcTarget da estrutura VIDEOINFOHEADER, respectivamente. Os filtros não precisam dar suporte a retângulos de origem e destino.

O retângulo de corte descrito em toda a documentação IAMStreamConfig é o mesmo que o retângulo rcSource da estrutura VIDEOINFOHEADER para o pino de saída.

O retângulo de saída descrito em toda a documentação IAMStreamConfig é o mesmo que os membros biWidth e biHeight da estrutura BITMAPINFOHEADER do pino de saída (consulte Dados DV no Formato de Arquivo AVI).

Se o pino de saída de um filtro estiver conectado a um tipo de mídia com retângulos de origem e destino não vazios, o filtro será necessário para esticar o subrectângulo de origem do formato de entrada no subrectangle de destino do formato de saída. O subrectangle de origem é armazenado no membro InputSize da estrutura VIDEO_STREAM_CONFIG_CAPS.

Por exemplo, considere o seguinte cenário de compressor de vídeo: a imagem de entrada está no formato RGB e tem um tamanho de 160 x 120 pixels. O canto superior esquerdo do retângulo de origem está na coordenada (20,20) e seu canto inferior direito está em (30,30). A imagem de saída está no formato MPEG com um tamanho de 320 x 240. O canto superior esquerdo do retângulo de destino está em (0,0) e seu canto inferior direito está em (100.100). Nesse caso, o filtro deve usar uma parte 10 x 10 do bitmap de origem de 160 x 120 RGB e fazê-lo preencher a área superior de 100 x 100 de um bitmap de 320 x 240 bits, deixando o restante do bitmap 320 x 240 intocado. A ilustração a seguir mostra esse cenário.

alongamento subrectangle

Um filtro pode não dar suporte a isso e pode falhar ao se conectar com um tipo de mídia em que rcSource e rcTarget não estão vazios.

A estrutura VIDEOINFOHEADER expõe informações sobre os recursos de taxa de dados de um filtro. Por exemplo, suponha que você conectou o pino de saída ao próximo filtro com um determinado tipo de mídia (diretamente ou usando o tipo de mídia passado pela função CMediaType::SetFormat ). Examine o membro dwBitRate da estrutura de formato VIDEOINFOHEADER desse tipo de mídia para ver a taxa de dados à qual você deve compactar o vídeo. Se você multiplicar o número de unidades de tempo por quadro no membro AvgTimePerFrame da estrutura VIDEOINFOHEADER pela taxa de dados no membro dwBitRate e dividir por 10.000.000 (o número de unidades por segundo), você poderá descobrir quantos bytes cada quadro deve ser. Você pode produzir um quadro de tamanho menor, mas nunca um maior. Para determinar a taxa de quadros de um compressor de vídeo ou para um filtro de captura, use AvgTimePerFrame do tipo de mídia do pino de saída.