Combinação não quadrada
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]
Este tópico se aplica ao Windows XP Service Pack 2 ou posterior.
Quando a VMR-9 mistura dois ou mais fluxos, há dois pontos em que o dimensionamento pode ocorrer: quando o mixer compõe os fluxos de entrada e quando o alocador-apresentador renderiza a imagem composta.
As versões anteriores da VMR-9 sempre compõem os fluxos de entrada usando uma PAR (taxa de proporção de pixel) quadrada (1:1), mesmo quando havia apenas um único fluxo de vídeo. Se o fluxo de entrada tivesse pixels não quadrados, isso causava uma operação de dimensionamento desnecessária. O dimensionamento deve ser evitado o máximo possível, é claro, porque degrada a qualidade final da imagem.
A partir do Windows XP Service Pack 2, a VMR-9 dá suporte a duas maneiras diferentes de evitar o problema de dimensionamento duplo:
- Implemente um alocador-apresentador personalizado e dê suporte à interface IVMRSurfaceAllocatorEx9 .
- Use o modo de combinação não quadrado.
Esta seção descreve o modo de combinação não quadrado. Os aplicativos podem combinar ambas as técnicas.
Como funciona a combinação não quadrada
No modo de combinação não quadrada, a VMR-9 seleciona um fluxo de entrada para ser o tamanho de destino e PAR. O mixer da VMR não dimensiona o vídeo desse fluxo ou de nenhum outro fluxo com o mesmo tamanho de imagem e PAR. Os fluxos com um tamanho ou taxa de proporção diferentes são dimensionados para corresponder ao PAR de destino e à caixa de correio para se ajustarem ao tamanho final da imagem de saída.
A escolha de fluxos depende do modo de combinação atual:
- O modo de combinação YUV é restrito a um fluxo de vídeo no pino 0. (Os outros pinos podem ter subpictura ou fluxos de legenda fechados.) Portanto, a VMR-9 sempre seleciona fixar 0 para o tamanho da imagem de destino e PAR.
- No modo de combinação RGB, a VMR seleciona o fluxo com o maior tamanho de imagem. Se houver mais de um, ele selecionará aquele com a ordem z mais alta; e, se ainda houver um empate, ele selecionará o fluxo com o número de pino mais baixo.
Exemplos de operação
Exemplo 1. O fluxo 0 é de 720 x 480 pixels com uma taxa de proporção de imagem de 16:9. O Fluxo 1 é um 640 x 480 pixels com uma taxa de proporção de imagem de 4:3.
Neste exemplo, o fluxo 0 tem o maior tamanho de imagem, portanto, a VMR escolhe esse fluxo, independentemente do modo de combinação RGB ou do modo de combinação YUB. O PAR é 32:27 (16:9 / 720:480), o que significa que a imagem deve ser ampliada horizontalmente por essa proporção para produzir a taxa de proporção correta de imagem de 16:9.
Para corresponder ao PAR de destino, o mixer de VMR dimensiona o fluxo 1 pela taxa inversa (27:32), resultando em uma imagem de 540 x 480. Os dois fluxos são então compostos em uma superfície. Para exibir a imagem resultante corretamente, o apresentador alocador deve esticar a imagem horizontalmente para se ajustar à taxa de proporção da imagem 16:9.
Exemplo 2. O fluxo 0 é de 720 x 480 pixels com uma taxa de proporção de imagem de 16:9. Stream 1 é um 1024 x 768 pixels com uma taxa de proporção de imagem de 4:3.
Se a VMR-9 estiver usando o modo de combinação YUV, ela sempre selecionará o fluxo 0. Portanto, ele estende o fluxo de 1 a 540 x 480 pixels, para corresponder ao PAR do fluxo 0.
Se a VMR-9 estiver usando o modo de combinação RGB, ela selecionará o fluxo 1 como o destino, pois esse fluxo tem o maior tamanho de imagem. Ele estende o fluxo 0 para um tamanho de imagem de 1024 x 576 pixels. Observe que, nesse caso, a imagem composta tem um PAR de 1:1, portanto, o alocador-apresentador não precisa corrigir para pixels não quadrados. (Talvez ainda seja necessário alongar o vídeo para levar em conta o retângulo de destino.)
Usando o modo de combinação não quadrado
O modo de combinação não quadrado será recomendado se uma das seguintes condições for verdadeira:
- Seu aplicativo nunca envia mais de um fluxo de vídeo para a VMR-9.
- Seu aplicativo renderiza arquivos de DVD, televisão ou ms-dvr. Você também deve usar o modo de combinação YUV nesse caso, se o hardware gráfico der suporte a ele.
Se o aplicativo misturar vários fluxos de vídeo que podem ter diferentes tamanhos de imagem ou taxas de proporção de pixel, o modo de combinação quadrada padrão será recomendado.
Para configurar o modo de combinação não quadrado, o grafo de filtro deve ser interrompido e todos os pinos de entrada desconectados na VMR-9. Em seguida, chame IVMRMixerControl9::SetMixingPrefs com o sinalizador MixerPref9_NonSquareMixing:
DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);
Observação
Se você combinar o sinalizador MixerPref9_NonSquareMixing com o sinalizador MixerPref9_ARAdjustXorY, a VMR-9 ignorará o sinalizador MixerPref9_ARAdjustXorY.
Se o aplicativo usar um alocador-apresentador personalizado com modo de combinação não quadrado, lembre-se de que a imagem composta pode ter um PAR não quadrado. O alocador-apresentador deve dimensionar a imagem para um PAR quadrado (1:1).
Bitmaps estáticos
Se você usar a interface IVMRMixerBitmap9 para misturar um bitmap estático ao vídeo, considere o bitmap como um segundo fluxo de vídeo para fins do modo de combinação de VMR.
A VMR trata o bitmap como tendo o mesmo PAR que o destino. Ele não dimensiona o bitmap para ajustar para a taxa de proporção de pixel do destino. Na configuração padrão da VMR, o destino tem um PAR 1:1, que corresponde à maioria dos bitmaps. No modo de combinação não quadrado, o destino pode ter pixels não quadrados. Para garantir que o bitmap seja exibido corretamente, o aplicativo deve fornecer uma imagem cujo PAR corresponda ao PAR de destino.
Tópicos relacionados