Amostras de vídeo
O objeto de amostra de vídeo é uma implementação especializada do interface IMFSample para uso com o Enhanced Video Renderer (EVR). Para criar uma instância desse objeto, chame a função MFCreateVideoSampleFromSurface. A função recebe um ponteiro para uma superfície Direct3D e retorna um ponteiro para a interface IMFSample. Os seguintes tipos de objetos devem alocar amostras usando essa função:
Apresentadores EVR personalizados. Um apresentador aloca amostras de vídeo e as envia para o método IMFTransform::ProcessOutput do mixer. Para obter mais informações, consulte Como criar um apresentador EVR.
Descodificadores de vídeo que suportam aceleração de vídeo. Para obter mais informações, consulte Supporting DXVA 2.0 in Media Foundation.
O objeto de exemplo de vídeo implementa as seguintes interfaces:
Se o parâmetro pUnkSurface de MFCreateVideoSampleFromSurface não forNULL, o exemplo de vídeo resultante conterá um único buffer de multimédia que encapsula a superfície Direct3D. Este objeto de buffer tem funcionalidade limitada:
O método IMFMediaBuffer::Lock do buffer retorna E_NOTIMPL.
O buffer não implementa o IMF2DBuffer interface.
A única maneira de acessar a superfície a partir do buffer é chamar IMFGetService::GetService, usando o identificador de serviço MR_BUFFER_SERVICE.
Se o parâmetro pUnkSurface for NULL, o exemplo de vídeo será criado sem buffers de mídia. Para adicionar um buffer ao exemplo, faça o seguinte:
Crie uma superfície Direct3D.
Crie um buffer de superfície chamando MFCreateDXSurfaceBuffer. Para obter mais informações, consulte DirectX Surface Buffer.
Adicione o buffer ao exemplo chamando IMFSample::AddBuffer.
Use esta abordagem se precisar que a memória de superfície seja acessível por meio da interface IMF2DBuffer.
Tópicos relacionados