Skip to content

Commit f8c4fbd

Browse files
committed
Fixes to allow compiling under C++ casting rules.
This should fix the build under Win32. I also took this opportunity to fix the MAKE_RESERVED macros and RESERVED_TO_* macros in cameras.c, which (while coincidentally functional) did not correctly do what they were meant to do. Signed-off-by: Drew Fisher <drew.m.fisher@gmail.com>
1 parent f863d9a commit f8c4fbd

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

include/libfreenect.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ typedef struct {
7676
uint32_t reserved; /**< unique ID used internally. The meaning of values may change without notice. Don't touch or depend on the contents of this field. We mean it. */
7777
freenect_resolution resolution; /**< Resolution this freenect_frame_mode describes, should you want to find it again with freenect_find_*_frame_mode(). */
7878
union {
79+
int32_t dummy;
7980
freenect_video_format video_format;
8081
freenect_depth_format depth_format;
8182
}; /**< The video or depth format that this freenect_frame_mode describes. The caller should know which of video_format or depth_format to use, since they called freenect_get_*_frame_mode() */

src/cameras.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131

3232
#include "freenect_internal.h"
3333

34-
#define MAKE_RESERVED(res, fmt) (((uint8_t)(res) << 8) | (((uint8_t)(fmt))) )
35-
#define RESERVED_TO_RESOLUTION(reserved) ((uint8_t)(reserved >> 8))
36-
#define RESERVED_TO_FORMAT(reserved) ((uint8_t)(reserved))
34+
#define MAKE_RESERVED(res, fmt) (uint32_t)(((res & 0xff) << 8) | (((fmt & 0xff))))
35+
#define RESERVED_TO_RESOLUTION(reserved) (freenect_resolution)((reserved >> 8) & 0xff)
36+
#define RESERVED_TO_FORMAT(reserved) ((reserved) & 0xff)
3737

3838
#define video_mode_count 12
3939
freenect_frame_mode supported_video_modes[video_mode_count] = {
@@ -66,7 +66,7 @@ freenect_frame_mode supported_depth_modes[depth_mode_count] = {
6666
{MAKE_RESERVED(FREENECT_RESOLUTION_MEDIUM, FREENECT_DEPTH_11BIT_PACKED), FREENECT_RESOLUTION_MEDIUM, {FREENECT_DEPTH_11BIT_PACKED}, 640*480*11/8, 640, 480, 11, 0, 30, 1},
6767
{MAKE_RESERVED(FREENECT_RESOLUTION_MEDIUM, FREENECT_DEPTH_10BIT_PACKED), FREENECT_RESOLUTION_MEDIUM, {FREENECT_DEPTH_10BIT_PACKED}, 640*480*10/8, 640, 480, 10, 0, 30, 1},
6868
};
69-
static const freenect_frame_mode invalid_mode = {0, 0, {0}, 0, 0, 0, 0, 0, 0, 0};
69+
static const freenect_frame_mode invalid_mode = {0, (freenect_resolution)0, {(freenect_video_format)0}, 0, 0, 0, 0, 0, 0, 0};
7070

7171
struct pkt_hdr {
7272
uint8_t magic[2];
@@ -647,7 +647,7 @@ typedef struct {
647647
uint16_t tag;
648648
} cam_hdr;
649649

650-
static int send_cmd(freenect_device *dev, uint16_t cmd, void *cmdbuf, unsigned int cmd_len, void *replybuf, unsigned int reply_len)
650+
static int send_cmd(freenect_device *dev, uint16_t cmd, void *cmdbuf, unsigned int cmd_len, void *replybuf, int reply_len)
651651
{
652652
freenect_context *ctx = dev->parent;
653653
int res, actual_len;
@@ -680,7 +680,7 @@ static int send_cmd(freenect_device *dev, uint16_t cmd, void *cmdbuf, unsigned i
680680
actual_len = fnusb_control(&dev->usb_cam, 0xc0, 0, 0, 0, ibuf, 0x200);
681681
} while (actual_len == 0);
682682
FN_SPEW("Control reply: %d\n", res);
683-
if (actual_len < sizeof(*rhdr)) {
683+
if (actual_len < (int)sizeof(*rhdr)) {
684684
FN_ERROR("send_cmd: Input control transfer failed (%d)\n", res);
685685
return res;
686686
}
@@ -1029,7 +1029,7 @@ const freenect_frame_mode freenect_get_current_video_mode(freenect_device *dev)
10291029

10301030
const freenect_frame_mode freenect_find_video_mode(freenect_resolution res, freenect_video_format fmt)
10311031
{
1032-
int unique_id = MAKE_RESERVED(res, fmt);
1032+
uint32_t unique_id = MAKE_RESERVED(res, fmt);
10331033
int i;
10341034
for(i = 0 ; i < video_mode_count; i++) {
10351035
if (supported_video_modes[i].reserved == unique_id)
@@ -1061,7 +1061,7 @@ int freenect_set_video_mode(freenect_device* dev, const freenect_frame_mode mode
10611061
}
10621062

10631063
freenect_resolution res = RESERVED_TO_RESOLUTION(mode.reserved);
1064-
freenect_video_format fmt = RESERVED_TO_FORMAT(mode.reserved);
1064+
freenect_video_format fmt = (freenect_video_format)RESERVED_TO_FORMAT(mode.reserved);
10651065
dev->video_format = fmt;
10661066
dev->video_resolution = res;
10671067
return 0;
@@ -1088,7 +1088,7 @@ const freenect_frame_mode freenect_get_current_depth_mode(freenect_device *dev)
10881088

10891089
const freenect_frame_mode freenect_find_depth_mode(freenect_resolution res, freenect_depth_format fmt)
10901090
{
1091-
int unique_id = MAKE_RESERVED(res, fmt);
1091+
uint32_t unique_id = MAKE_RESERVED(res, fmt);
10921092
int i;
10931093
for(i = 0 ; i < depth_mode_count; i++) {
10941094
if (supported_depth_modes[i].reserved == unique_id)
@@ -1120,7 +1120,7 @@ int freenect_set_depth_mode(freenect_device* dev, const freenect_frame_mode mode
11201120
return -1;
11211121
}
11221122
freenect_resolution res = RESERVED_TO_RESOLUTION(mode.reserved);
1123-
freenect_depth_format fmt = RESERVED_TO_FORMAT(mode.reserved);
1123+
freenect_depth_format fmt = (freenect_depth_format)RESERVED_TO_FORMAT(mode.reserved);
11241124
dev->depth_format = fmt;
11251125
dev->depth_resolution = res;
11261126
return 0;

0 commit comments

Comments
 (0)