編集 2: 作業コード:
このブランチには、私が行っていた変更のサブセットが既に含まれており、実際に実行されます。不安定ですが、少なくとも奥行きと色のイメージは得られます。
https://github.com/zarvox/libfreenect/tree/k4w-wip
この不安定さは、Darwin の libusb でのアイソクロナス転送によるものです。libfreenect に付属するパッチは、libusb の不安定性を軽減するだけです。
Kinect for Windows は、メイン ツリーではサポートされていません。このパッチを試しましたか? https://github.com/renewagner/libfreenect/tree/k4w-wip
編集:このリポジトリは、私(私たち)が持っているファームウェアのバージョンには古すぎます。
カメラを検出するには、usb_libusb10.c をチェックする 3 つの場所で変更するだけですdesc.idProduct == PID_NUI_CAMERA
。これは今でなければなりません
(desc.idProduct == PID_NUI_CAMERA || desc.idProduct == PID_NUI_CAMERA_K4W);
そして追加:
#define PID_NUI_CAMERA_K4W 0x02bf
また、Kinect for Windows にはモーターがないことにも注意してください。ソースが存在することを前提として、ソースを変更する必要がある場合があります。
しかし、これではまだ不十分です。USB コマンドも変更されました。
camera.c では、
static int freenect_fetch_zero_plane_info(freenect_device *dev)
{
freenect_context *ctx = dev->parent;
char reply[0x200];
uint16_t cmd[5] = {0}; // Offset is the only field in this command, and it's 0
// Different reply based on hardware
const int expected_reply_length = dev->kinect_for_windows ? 334 : 322;
int res;
res = send_cmd(dev, 0x04, cmd, 10, reply, expected_reply_length); //OPCODE_GET_FIXED_PARAMS = 4,
if (res != expected_reply_length) {
FN_ERROR("freenect_fetch_zero_plane_info: send_cmd read %d bytes (expected %d)\n", res, expected_reply_length);
return -1;
}
Kinect for Windows の場合に格納するためのフィールドを freenect_device に追加したことに注意してください。
それはまだデータをストリーミングしていませんが、これは私が得た限りです。