Compartilhar via


MediaFrameReader.TryAcquireLatestFrame Método

Definição

Tenta obter um objeto MediaFrameReference que representa o quadro mais recente do MediaFrameSource.

public:
 virtual MediaFrameReference ^ TryAcquireLatestFrame() = TryAcquireLatestFrame;
MediaFrameReference TryAcquireLatestFrame();
public MediaFrameReference TryAcquireLatestFrame();
function tryAcquireLatestFrame()
Public Function TryAcquireLatestFrame () As MediaFrameReference

Retornos

Um MediaFrameReference que representa o quadro mais recente da origem do quadro de mídia.

Comentários

Esse método nem sempre é bem-sucedido. Se o método falhar, o MediaFrameReference retornado será nulo, portanto, você sempre deve testar para ver se o objeto retornado é nulo antes de tentar usá-lo. Você deve chamar esse método de dentro do manipulador para o evento MediaFrameReader.FrameArrived em vez de sondar manualmente novos quadros.

Cada MediaFrameReader mantém um buffer circular de objetos MediaFrameReference obtidos de TryAcquireLatestFrame. Depois que todos os objetos MediaFrameReference no buffer tiverem sido usados, as chamadas subsequentes para TryAcquireLatestFrame farão com que o sistema chame Close (ou Dispose em C#) no objeto buffer mais antigo para reutilizá-lo. Depois que o objeto for descartado, você não poderá mais usá-lo para acessar os dados do quadro. Por esse motivo, você não deve armazenar o objeto MediaFrameReference por mais tempo do que realmente precisa para processar o quadro. Se o cenário do aplicativo exigir que você mantenha uma referência aos dados por mais tempo, use uma das APIs fornecidas para obter os dados subjacentes. Estão incluídos:

É responsabilidade do aplicativo chamar Close (ou Dispose) nos objetos retornados por essas APIs quando eles não estão mais sendo usados.

Importante

Se você acessar a propriedade SoftwareBitmap ou Direct3DSurface fornecidas pela propriedade VideoMediaFrame de uma MediaFrameReference, o sistema criará uma forte referência a esses objetos, o que significa que eles não serão descartados quando você chamar Dispose na MediaFrameReference contida. Isso também se aplica aos objetos SoftwareBitmap ou Direct3DSurface fornecidos pelo objeto VideoFrame que você obtém da propriedade MediaFrameReference.VideoMediaFrame . Você deve chamar explicitamente o método Dispose do SoftwareBitmap ou Direct3DSurface diretamente para os objetos serem descartados imediatamente. Caso contrário, o coletor de lixo acabará liberando a memória para esses objetos, mas você não saberá quando isso vai ocorrer, e se o número de bitmaps ou superfícies alocados exceder o valor máximo permitido pelo sistema, o fluxo de quadros novos será interrompido.

Aplica-se a