Kinect/NuiImageCamera.h Source File

NuiImageCamera.h
Go to the documentation of this file.
1 /************************************************************************
2 * *
3 * NuiImageCamera.h -- This module defines the APIs for the Natural *
4 * User Interface(NUI) image and camera services. *
5 * *
6 * Copyright (c) Microsoft Corp. All rights reserved. *
7 * *
8 ************************************************************************/
9 #pragma once
10 
11 #ifndef NUIAPI
12 #error "You must include nuiapi.h rather than including nuiimagecamera.h directly"
13 #endif
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 #ifndef __NuiSensor_h__
20 
21 #ifndef _NUI_IMAGE_TYPE_
22 #define _NUI_IMAGE_TYPE_
23 typedef enum _NUI_IMAGE_TYPE
24 {
26  NUI_IMAGE_TYPE_COLOR, // RGB32 data
27  NUI_IMAGE_TYPE_COLOR_YUV, // YUY2 stream from camera h/w, but converted to RGB32 before user getting it.
28  NUI_IMAGE_TYPE_COLOR_RAW_YUV, // YUY2 stream from camera h/w.
33 #endif // _NUI_IMAGE_TYPE_
34 
35 #ifndef _NUI_IMAGE_RESOLUTION_
36 #define _NUI_IMAGE_RESOLUTION_
38 {
43  NUI_IMAGE_RESOLUTION_1280x960, // for hires color only
45 #endif _NUI_IMAGE_RESOLUTION_
46 
47 #ifndef _NUI_BACKLIGHT_COMPENSATION_MODE_
48 #define _NUI_BACKLIGHT_COMPENSATION_MODE_
49 typedef
51  {
57 #endif _NUI_BACKLIGHT_COMPENSATION_MODE_
58 
59 #ifndef _NUI_POWER_LINE_FREQUENCY_
60 #define _NUI_POWER_LINE_FREQUENCY_
61 typedef
63  {
68 #endif _NUI_POWER_LINE_FREQUENCY_
69 
70 #endif // __NuiSensor_h__
71 
78 inline void NuiImageResolutionToSize( _In_ NUI_IMAGE_RESOLUTION res, _Out_ DWORD & refWidth, _Out_ DWORD & refHeight )
79 {
80  switch( res )
81  {
83  refWidth = 80;
84  refHeight = 60;
85  break;
87  refWidth = 320;
88  refHeight = 240;
89  break;
91  refWidth = 640;
92  refHeight = 480;
93  break;
95  refWidth = 1280;
96  refHeight = 960;
97  break;
98  default:
99  refWidth = 0;
100  refHeight = 0;
101  break;
102  }
103 }
104 
105 #define NUI_IMAGE_PLAYER_INDEX_SHIFT 3
106 #define NUI_IMAGE_PLAYER_INDEX_MASK ((1 << NUI_IMAGE_PLAYER_INDEX_SHIFT)-1)
107 #define NUI_IMAGE_DEPTH_MAXIMUM ((4000 << NUI_IMAGE_PLAYER_INDEX_SHIFT) | NUI_IMAGE_PLAYER_INDEX_MASK)
108 #define NUI_IMAGE_DEPTH_MINIMUM (800 << NUI_IMAGE_PLAYER_INDEX_SHIFT)
109 #define NUI_IMAGE_DEPTH_MAXIMUM_NEAR_MODE ((3000 << NUI_IMAGE_PLAYER_INDEX_SHIFT) | NUI_IMAGE_PLAYER_INDEX_MASK)
110 #define NUI_IMAGE_DEPTH_MINIMUM_NEAR_MODE (400 << NUI_IMAGE_PLAYER_INDEX_SHIFT)
111 #define NUI_IMAGE_DEPTH_NO_VALUE 0
112 #define NUI_IMAGE_DEPTH_TOO_FAR_VALUE (0x0fff << NUI_IMAGE_PLAYER_INDEX_SHIFT)
113 #define NUI_IMAGE_DEPTH_UNKNOWN_VALUE (0x1fff << NUI_IMAGE_PLAYER_INDEX_SHIFT)
114 #define NUI_DEPTH_DEPTH_UNKNOWN_VALUE NUI_IMAGE_DEPTH_UNKNOWN_VALUE
115 
116 // These must exactly match the constants defined in CDRPProcessor.h
117 #define NUI_DEPTH_UNKNOWN 0
118 #define NUI_PIXEL_COORDINATE_UNKNOWN INT_MIN
119 
120 #define NUI_CAMERA_DEPTH_NOMINAL_FOCAL_LENGTH_IN_PIXELS (285.63f) // Based on 320x240 pixel size.
121 #define NUI_CAMERA_DEPTH_NOMINAL_INVERSE_FOCAL_LENGTH_IN_PIXELS (3.501e-3f) // (1/NUI_CAMERA_DEPTH_NOMINAL_FOCAL_LENGTH_IN_PIXELS)
122 #define NUI_CAMERA_DEPTH_NOMINAL_DIAGONAL_FOV (70.0f)
123 #define NUI_CAMERA_DEPTH_NOMINAL_HORIZONTAL_FOV (58.5f)
124 #define NUI_CAMERA_DEPTH_NOMINAL_VERTICAL_FOV (45.6f)
125 
126 #define NUI_CAMERA_COLOR_NOMINAL_FOCAL_LENGTH_IN_PIXELS (531.15f) // Based on 640x480 pixel size.
127 #define NUI_CAMERA_COLOR_NOMINAL_INVERSE_FOCAL_LENGTH_IN_PIXELS (1.83e-3f) // (1/NUI_CAMERA_COLOR_NOMINAL_FOCAL_LENGTH_IN_PIXELS)
128 #define NUI_CAMERA_COLOR_NOMINAL_DIAGONAL_FOV ( 73.9f)
129 #define NUI_CAMERA_COLOR_NOMINAL_HORIZONTAL_FOV ( 62.0f)
130 #define NUI_CAMERA_COLOR_NOMINAL_VERTICAL_FOV ( 48.6f)
131 
132 
133 //
134 // Unpacks the depth value from the packed pixel format
135 //
136 inline USHORT NuiDepthPixelToDepth(USHORT packedPixel)
137 {
138  return packedPixel >> NUI_IMAGE_PLAYER_INDEX_SHIFT;
139 }
140 
141 //
142 // Unpacks the player index value from the packed pixel format
143 //
144 inline USHORT NuiDepthPixelToPlayerIndex(USHORT packedPixel)
145 {
146  return packedPixel & NUI_IMAGE_PLAYER_INDEX_MASK;
147 }
148 
150 {
153 
154 
155 #ifndef __NuiSensor_h__
156 
157 #ifndef _NUI_IMAGE_VIEW_AREA_
158 #define _NUI_IMAGE_VIEW_AREA_
159 typedef struct _NUI_IMAGE_VIEW_AREA
160 {
162  LONG lCenterX;
163  LONG lCenterY;
165 #endif _NUI_IMAGE_VIEW_AREA_
166 
167 
168 #endif __NuiSensor_h__
169 
170 #define NUI_IMAGE_FRAME_FLAG_NONE 0x00000000
171 #define NUI_IMAGE_FRAME_FLAG_VIEW_AREA_UNKNOWN 0x00000001
172 #define NUI_IMAGE_FRAME_FLAG_NEAR_MODE_ENABLED 0x00020000
173 
174 #ifndef __NuiSensor_h__
175 
176 #ifndef _NUI_LOCKED_RECT_
177 #define _NUI_LOCKED_RECT_
178 // Note: NOT identical to D3DLOCKED_RECT
179 typedef struct _NUI_LOCKED_RECT
180 {
181  INT Pitch;
182  int size; // Size of pBits, in bytes.
185 #endif _NUI_LOCKED_RECT_
186 
187 #ifndef _NUI_SURFACE_DESC_
188 #define _NUI_SURFACE_DESC_
189 // Note: NOT identical to D3DSURFACE_DESC
190 typedef struct _NUI_SURFACE_DESC
191 {
192  UINT Width;
193  UINT Height;
195 #endif _NUI_SURFACE_DESC_
196 
197 struct INuiFrameTexture;
198 
199 #ifndef _NUI_IMAGE_FRAME_
200 #define _NUI_IMAGE_FRAME_
201 typedef struct _NUI_IMAGE_FRAME
202 {
203  LARGE_INTEGER liTimeStamp;
208  DWORD dwFrameFlags;
211 #endif _NUI_IMAGE_FRAME_
212 
213 #ifndef _NUI_DEPTH_IMAGE_PIXEL_
214 #define _NUI_DEPTH_IMAGE_PIXEL_
215 
216 // This struct layout must exactly match that of NUI_DEPTH_IMAGE_PIXEL in
217 // Kinect.idl and NUI_IMAGE_PIXEL in CDRPProcessor.h.
219 {
220  USHORT playerIndex;
221  USHORT depth;
223 
224 #endif _NUI_DEPTH_IMAGE_PIXEL_
225 
226 #ifndef _NUI_DEPTH_IMAGE_POINT_
227 #define _NUI_DEPTH_IMAGE_POINT_
228 
229 // This struct layout must exactly match that of NUI_DEPTH_IMAGE_POINT in
230 // Kinect.idl and NUI_DEPTH_IMAGE_POINT in CDRPProcessor.h.
232 {
233  LONG x;
234  LONG y;
235  LONG depth;
236  LONG reserved;
238 
239 #endif _NUI_DEPTH_IMAGE_POINT_
240 
241 #ifndef _NUI_COLOR_IMAGE_POINT_
242 #define _NUI_COLOR_IMAGE_POINT_
243 
244 // This struct layout must exactly match that of NUI_DEPTH_IMAGE_POINT in
245 // Kinect.idl and NUI_DEPTH_IMAGE_POINT in CDRPProcessor.h.
247 {
248  LONG x;
249  LONG y;
251 
252 #endif _NUI_COLOR_IMAGE_POINT_
253 
254 
255 #endif __NuiSensor_h__
256 
257 // return S_FALSE instead of E_NUI_FRAME_NO_DATA if NuiImageStreamGetNextFrame( ) doesn't have a frame ready and a timeout != INFINITE is used
258 #define NUI_IMAGE_STREAM_FLAG_SUPPRESS_NO_FRAME_DATA 0x00010000
259 // Set the depth stream to near mode
260 #define NUI_IMAGE_STREAM_FLAG_ENABLE_NEAR_MODE 0x00020000
261 // Use distinct values for depth values that are either too close, too far or unknown
262 #define NUI_IMAGE_STREAM_FLAG_DISTINCT_OVERFLOW_DEPTH_VALUES 0x00040000
263 
264 // the max # of NUI output frames you can hold w/o releasing
265 #define NUI_IMAGE_STREAM_FRAME_LIMIT_MAXIMUM 4
266 
292 _Check_return_ HRESULT NUIAPI NuiImageStreamSetImageFrameFlags(
293  _In_ HANDLE hStream,
294  _In_ DWORD dwImageFrameFlags
295  );
296 
323 _Check_return_ HRESULT NUIAPI NuiImageStreamGetImageFrameFlags(
324  _In_ HANDLE hStream,
325  _Out_ DWORD *pdwImageFrameFlags
326  );
327 
379 _Check_return_ HRESULT NUIAPI NuiSetFrameEndEvent(
380  _In_ HANDLE hEvent,
381  _In_ DWORD dwFrameEventFlag
382  );
383 
514 _Check_return_ HRESULT NUIAPI NuiImageStreamOpen(
515  _In_ NUI_IMAGE_TYPE eImageType,
516  _In_ NUI_IMAGE_RESOLUTION eResolution,
517  _In_ DWORD dwImageFrameFlags,
518  _In_ DWORD dwFrameLimit,
519  _In_opt_ HANDLE hNextFrameEvent,
520  _Out_ HANDLE *phStreamHandle
521  );
522 
563 _Check_return_ HRESULT NUIAPI NuiImageStreamGetNextFrame(
564  _In_ HANDLE hStream,
565  _In_ DWORD dwMillisecondsToWait,
566  _Deref_out_ CONST NUI_IMAGE_FRAME **ppcImageFrame
567  );
568 
601 _Check_return_ HRESULT NUIAPI NuiImageStreamReleaseFrame(
602  _In_ HANDLE hStream,
603  _In_ CONST NUI_IMAGE_FRAME *pImageFrame
604  );
605 
676  _In_ NUI_IMAGE_RESOLUTION eColorResolution,
677  _In_opt_ CONST NUI_IMAGE_VIEW_AREA *pcViewArea,
678  _In_ LONG lDepthX,
679  _In_ LONG lDepthY,
680  _In_ USHORT usDepthValue,
681  _Out_ LONG *plColorX,
682  _Out_ LONG *plColorY
683  );
684 
758  _In_ NUI_IMAGE_RESOLUTION eColorResolution,
759  _In_ NUI_IMAGE_RESOLUTION eDepthResolution,
760  _In_opt_ CONST NUI_IMAGE_VIEW_AREA *pcViewArea,
761  _In_ LONG lDepthX,
762  _In_ LONG lDepthY,
763  _In_ USHORT usDepthValue,
764  _Out_ LONG *plColorX,
765  _Out_ LONG *plColorY
766  );
767 
768 #define NUI_CAMERA_ELEVATION_MAXIMUM 27
769 #define NUI_CAMERA_ELEVATION_MINIMUM (-27)
770 
803 _Check_return_ HRESULT NUIAPI NuiCameraElevationGetAngle(
804  _Out_ LONG * plAngleDegrees
805  );
806 
857 _Check_return_ HRESULT NUIAPI NuiCameraElevationSetAngle(
858  _In_ LONG lAngleDegrees
859  );
860 
861 #ifdef __cplusplus
862 } //close extern "C"
863 #endif
864 
_Check_return_ HRESULT NUIAPI NuiImageStreamOpen(_In_ NUI_IMAGE_TYPE eImageType, _In_ NUI_IMAGE_RESOLUTION eResolution, _In_ DWORD dwImageFrameFlags, _In_ DWORD dwFrameLimit, _In_opt_ HANDLE hNextFrameEvent, _Out_ HANDLE *phStreamHandle)
Opens an image stream.
struct _NUI_IMAGE_VIEW_AREA NUI_IMAGE_VIEW_AREA
enum _NUI_BACKLIGHT_COMPENSATION_MODE NUI_BACKLIGHT_COMPENSATION_MODE
interface INuiFrameTexture INuiFrameTexture
Definition: NuiSensor.h:52
enum _NUI_POWER_LINE_FREQUENCY NUI_POWER_LINE_FREQUENCY
_Check_return_ HRESULT NUIAPI NuiImageGetColorPixelCoordinatesFromDepthPixel(_In_ NUI_IMAGE_RESOLUTION eColorResolution, _In_opt_ CONST NUI_IMAGE_VIEW_AREA *pcViewArea, _In_ LONG lDepthX, _In_ LONG lDepthY, _In_ USHORT usDepthValue, _Out_ LONG *plColorX, _Out_ LONG *plColorY)
Gets the pixel coordinates in color space that correspond to the specified pixel coordinates in depth...
#define NUI_IMAGE_PLAYER_INDEX_SHIFT
NUI_IMAGE_TYPE eImageType
#define BYTE
Definition: bitset.h:10
USHORT NuiDepthPixelToDepth(USHORT packedPixel)
_Check_return_ HRESULT NUIAPI NuiSetFrameEndEvent(_In_ HANDLE hEvent, _In_ DWORD dwFrameEventFlag)
Sets the event that signals the last frame.
INuiFrameTexture * pFrameTexture
_Check_return_ HRESULT NUIAPI NuiImageStreamReleaseFrame(_In_ HANDLE hStream, _In_ CONST NUI_IMAGE_FRAME *pImageFrame)
Releases the specified frame of data from the specified stream.
NUI_IMAGE_VIEW_AREA ViewArea
_Check_return_ HRESULT NUIAPI NuiImageStreamGetNextFrame(_In_ HANDLE hStream, _In_ DWORD dwMillisecondsToWait, _Deref_out_ CONST NUI_IMAGE_FRAME **ppcImageFrame)
Gets the next frame of data from the specified image stream.
enum _NUI_IMAGE_DIGITALZOOM NUI_IMAGE_DIGITALZOOM
struct _NUI_IMAGE_FRAME NUI_IMAGE_FRAME
struct _NUI_DEPTH_IMAGE_PIXEL NUI_DEPTH_IMAGE_PIXEL
#define NUIAPI
Definition: NuiApi.h:13
_Check_return_ HRESULT NUIAPI NuiImageStreamGetImageFrameFlags(_In_ HANDLE hStream, _Out_ DWORD *pdwImageFrameFlags)
Gets the image frame flags for the specified stream.
_Check_return_ HRESULT NUIAPI NuiCameraElevationSetAngle(_In_ LONG lAngleDegrees)
Sets the elevation angle of the Kinect sensor.
_NUI_IMAGE_DIGITALZOOM
struct _NUI_DEPTH_IMAGE_POINT NUI_DEPTH_IMAGE_POINT
enum _NUI_IMAGE_TYPE NUI_IMAGE_TYPE
void NuiImageResolutionToSize(_In_ NUI_IMAGE_RESOLUTION res, _Out_ DWORD &refWidth, _Out_ DWORD &refHeight)
Converts the resolution to a size.
USHORT NuiDepthPixelToPlayerIndex(USHORT packedPixel)
NUI_IMAGE_RESOLUTION eResolution
NUI_IMAGE_DIGITALZOOM eDigitalZoom
_NUI_IMAGE_TYPE
_NUI_BACKLIGHT_COMPENSATION_MODE
enum _NUI_IMAGE_RESOLUTION NUI_IMAGE_RESOLUTION
struct _NUI_SURFACE_DESC NUI_SURFACE_DESC
struct _NUI_LOCKED_RECT NUI_LOCKED_RECT
_Check_return_ HRESULT NUIAPI NuiCameraElevationGetAngle(_Out_ LONG *plAngleDegrees)
Gets the elevation angle of the Kinect sensor.
_NUI_IMAGE_RESOLUTION
#define NUI_IMAGE_PLAYER_INDEX_MASK
LARGE_INTEGER liTimeStamp
_Check_return_ HRESULT NUIAPI NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution(_In_ NUI_IMAGE_RESOLUTION eColorResolution, _In_ NUI_IMAGE_RESOLUTION eDepthResolution, _In_opt_ CONST NUI_IMAGE_VIEW_AREA *pcViewArea, _In_ LONG lDepthX, _In_ LONG lDepthY, _In_ USHORT usDepthValue, _Out_ LONG *plColorX, _Out_ LONG *plColorY)
Gets the pixel coordinates in color space that correspond to the specified pixel coordinates in depth...
struct _NUI_COLOR_IMAGE_POINT NUI_COLOR_IMAGE_POINT
_NUI_POWER_LINE_FREQUENCY
_Check_return_ HRESULT NUIAPI NuiImageStreamSetImageFrameFlags(_In_ HANDLE hStream, _In_ DWORD dwImageFrameFlags)
Sets the image frame flags for the specified stream.