Compartir a través de


MediaFrameReader.TryAcquireLatestFrame Método

Definición

Intenta obtener un objeto MediaFrameReference que representa el fotograma más reciente de MediaFrameSource.

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

Devoluciones

MediaFrameReference que representa el fotograma más reciente del origen del marco multimedia.

Comentarios

Este método no siempre se realiza correctamente. Si se produce un error en el método, la clase MediaFrameReference devuelta será null, por lo que siempre debe probar para ver si el objeto devuelto es NULL antes de intentar usarlo. Debe llamar a este método desde el controlador para el evento MediaFrameReader.FrameArrived en lugar de sondear manualmente los nuevos fotogramas.

Cada Objeto MediaFrameReader mantiene un búfer circular de objetos MediaFrameReference obtenidos de TryAcquireLatestFrame. Una vez usados todos los objetos MediaFrameReference del búfer, las llamadas posteriores a TryAcquireLatestFrame harán que el sistema llame a Close (o Dispose en C#) en el objeto de búfer más antiguo para reutilizarlo. Una vez eliminado el objeto, ya no se puede usar para acceder a los datos de la trama. Por este motivo, no debe almacenar el objeto MediaFrameReference más tiempo de lo que realmente necesita para procesar el marco. Si el escenario de la aplicación requiere que mantenga una referencia a los datos durante más tiempo, debe usar una de las API proporcionadas para obtener los datos subyacentes. Entre ellas se incluyen las siguientes:

Es responsabilidad de la aplicación llamar a Close (o Dispose) en los objetos devueltos por estas API cuando ya no se usan.

Importante

Si accedes a los objetos SoftwareBitmap o Direct3DSurface proporcionados por la propiedad VideoMediaFrame de una clase MediaFrameReference, el sistema crea una referencia fuerte a estos objetos, lo que significa que no se eliminarán cuando se llamae a Dispose en la clase MediaFrameReference contenedora. Esto también se aplica a los objetos SoftwareBitmap o Direct3DSurface proporcionados por el objeto VideoFrame que se obtiene de la propiedad MediaFrameReference.VideoMediaFrame . Se debe llamar explícitamente al método Dispose de SoftwareBitmap o Direct3DSurface directamente para los objetos que deben eliminarse inmediatamente. De lo contrario, el recolector de elementos no usados al final liberará la memoria de estos objetos, pero no se puede saber cuando ocurrirá, y si el número de superficies o mapas de bits asignados supera la cantidad máxima permitida por el sistema, el nuevo flujo de fotogramas se detendrá.

Se aplica a