Capacidades 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 método IAMStreamConfig::GetStreamCaps apresenta recursos de vídeo em uma matriz de pares de estruturas AM_MEDIA_TYPE e VIDEO_STREAM_CONFIG_CAPS. Você pode usar isso para expor todos os formatos e resoluções suportados em um pino, conforme discutido abaixo.
Para obter exemplos relacionados ao áudio de GetStreamCaps, consulte Recursos de áudio.
Suponha que sua placa de captura suporte o 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 suportadas é uma neste caso, porque você adiciona ou subtrai um pixel de cada resolução suportada para obter a próxima resolução suportada. Essa diferença nas resoluções suportadas é chamada de granularidade.
Suponha que o seu cartão também suporta o tamanho 640 x 480. O seguinte ilustra esta resolução única e o intervalo de resoluções acima (todos os tamanhos entre 160 x 120 pixels e 320 x 240 pixels).
Além disso, suponha que ele suporta o formato RGB colorido 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 neste caso.
Dito de outra forma, e listando mais resoluções, as seguintes estão todas 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 preferido) juntamente com recursos mínimos de 160 x 120, recursos máximos de 320 x 240 e uma granularidade de 1. O próximo par exposto usando GetStreamCaps é um tipo de mídia de 640 x 480 JPEG acoplado a 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. Desta forma, pode publicar quase todos os formatos e capacidades suportados pelo seu cartão. Um aplicativo que deve saber quais formatos de compressã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 de tipo de mídia dos VIDEOINFOHEADER rcSource e rcTarget membros, respectivamente. Os filtros não têm de suportar retângulos de origem e de destino.
O retângulo de corte descrito em toda a documentação doIAMStreamConfig doé o mesmo que o VIDEOINFOHEADER retângulo de rcSource da estrutura para o pino de saída.
O retângulo de saída descrito em toda a documentação do IAMStreamConfig é o mesmo que o biWidth e biHeight membros da estrutura BITMAPINFOHEADER do pino de saída (consulte DV Data 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 deverá esticar o subretângulo de origem do formato de entrada para o subretângulo de destino do formato de saída. O subretângulo 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á em coordenada (20,20) e o canto inferior direito em (30,30). A imagem de saída está em formato MPEG com um tamanho de 320 x 240. O canto superior esquerdo do retângulo alvo está em (0,0) e o canto inferior direito em (100.100). Nesse caso, o filtro deve pegar uma parte 10 x 10 do bitmap de origem RGB 160 x 120 e fazê-lo preencher a área 100 x 100 superior de um bitmap 320 x 240, deixando o restante do bitmap 320 x 240 intocado. A ilustração a seguir mostra esse cenário.
de alongamento do subretângulo
Um filtro pode não suportar isso e pode falhar ao se conectar a 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 seu 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çãoCMediaType::SetFormat). Observe o dwBitRate membro da estrutura de formato de VIDEOINFOHEADER desse tipo de mídia para ver para qual taxa de dados você deve compactar o vídeo. Se você multiplicar o número de unidades de tempo por quadro no VIDEOINFOHEADER membro da estrutura AvgTimePerFrame pela taxa de dados no dwBitRate membro e dividir por 10.000.000 (o número de unidades por segundo), você pode 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 de um filtro de captura, use AvgTimePerFrame do tipo de mídia do pino de saída.