public synchronized void onNewFrame(UserTracker tracker) { if (mLastFrame != null) { mLastFrame.release(); mLastFrame = null; } mLastFrame = mTracker.readFrame(); // check if any new user detected for (UserData user : mLastFrame.getUsers()) { if (user.isNew()) { // start skeleton tracking mTracker.startSkeletonTracking(user.getId()); } } VideoFrameRef depthFrame = mLastFrame.getDepthFrame(); if (depthFrame != null) { ByteBuffer frameData = depthFrame.getData().order(ByteOrder.LITTLE_ENDIAN); ByteBuffer usersFrame = mLastFrame.getUserMap().getPixels().order(ByteOrder.LITTLE_ENDIAN); // make sure we have enough room if (mDepthPixels == null || mDepthPixels.length < depthFrame.getWidth() * depthFrame.getHeight()) { mDepthPixels = new int[depthFrame.getWidth() * depthFrame.getHeight()]; } calcHist(frameData); frameData.rewind(); int pos = 0; while (frameData.remaining() > 0) { short depth = frameData.getShort(); short userId = usersFrame.getShort(); short pixel = (short) mHistogram[depth]; int color = 0xFFFFFFFF; if (userId > 0) { color = mColors[userId % mColors.length]; } mDepthPixels[pos] = color & (0xFF000000 | (pixel << 16) | (pixel << 8) | pixel); pos++; } } repaint(); }