Hola!

Hace un tiempo escribí un post sobre la importancia de destruir correctamente los objectos del KinectSdk cuando cierras una app. La lección de hoy es parecida, pero acotada al trabajo con un Frame.

Por ejemplo, la siguiente porción de código muestra 2 formas de procesar un FRAME con el KinectSDK V2,


static void _bodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
var frame = e.FrameReference.AcquireFrame();
if (null == frame) return;
using (frame)
{
frame.GetAndRefreshBodyData(_bodies);
foreach (var body in _bodies)
{
if (null != body && body.IsTracked)
{
var msg = "Left:" + body.HandLeftState + " Right:" + body.HandRightState;
Console.WriteLine(msg);
}
}
}
}
static void _bodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
var frame = e.FrameReference.AcquireFrame();
if (null == frame) return;
frame.GetAndRefreshBodyData(_bodies);
foreach (var body in _bodies)
{
if (null != body && body.IsTracked)
{
var msg = "Left:" + body.HandLeftState + " Right:" + body.HandRightState;
Console.WriteLine(msg);
}
}
}

La función entre las líneas 1 y 19, utiliza el frame dentro de un using(), y la 2da opción no lo hace. Lo extraño es que la 2da opción no da un error ni nada parecido. Sin embargo al no destruirse el farme, nunca vuelve a entrar a procesar un nuevo frame con lo que el proceso de información de Kinect queda detenido para esta aplicación.

Lección aprendida en vivo!

Saludos @ Home

El Bruno

image image image Google

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading