static inline INT32 getRecordArray(INT32 capacity, RecordArray** recordArray) { RecordArray* array = NULL; INT32 rc = SDB_OK; SDB_ASSERT(capacity >= 0, "capacity must >= 0"); SDB_ASSERT(NULL != recordArray, "recordArray can't be NULL"); array = SDB_OSS_NEW RecordArray(); if (NULL == array) { rc = SDB_OOM; PD_LOG(PDERROR, "failed to alloc RecordArray, rc=%d", rc); goto error; } if (capacity > 0) { rc = array->init(capacity); if (SDB_OK != rc) { PD_LOG(PDERROR, "failed to init RecordArray, rc=%d", rc); goto error; } } *recordArray = array; done: return rc; error: goto done; }
/// <summary> /// Creates the main window and begins processing /// </summary> /// <param name="hInstance">handle to the application instance</param> /// <param name="nCmdShow">whether to display minimized, maximized, or normally</param> int KinectEasyGrabber::Run(HINSTANCE hInstance, int nCmdShow) { MSG msg = {0}; WNDCLASS wc; // Dialog custom window class ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = hInstance; wc.hCursor = LoadCursorW(NULL, IDC_ARROW); wc.hIcon = LoadIconW(hInstance, MAKEINTRESOURCE(IDI_APP)); wc.lpfnWndProc = DefDlgProcW; wc.lpszClassName = L"KinectEasyGrabberAppDlgWndClass"; if (!RegisterClassW(&wc)) { return 0; } // Create main application window HWND hWndApp = CreateDialogParamW( hInstance, MAKEINTRESOURCE(IDD_APP), NULL, (DLGPROC)KinectEasyGrabber::MessageRouter, reinterpret_cast<LPARAM>(this)); // Show window ShowWindow(hWndApp, nCmdShow); const int eventCount = 2; HANDLE hEvents[eventCount]; LoadResourceImage(L"Background", L"Image", m_colorWidth*m_colorHeight*cBytesPerPixel, m_backgroundRGBX); // Main message loop while (WM_QUIT != msg.message) { hEvents[0] = m_hNextDepthFrameEvent; hEvents[1] = m_hNextColorFrameEvent; // Check to see if we have either a message (by passing in QS_ALLINPUT) // Or a Kinect event (hEvents) // Update() will check for Kinect events individually, in case more than one are signalled DWORD dwEvent = MsgWaitForMultipleObjects(eventCount, hEvents, FALSE, INFINITE, QS_ALLINPUT); // Check if this is an event we're waiting on and not a timeout or message if (WAIT_OBJECT_0 == dwEvent || WAIT_OBJECT_0 + 1 == dwEvent) { //Update(); //Record(); RecordArray(); } if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { // If a dialog message will be taken care of by the dialog proc if ((hWndApp != NULL) && IsDialogMessageW(hWndApp, &msg)) { continue; } TranslateMessage(&msg); DispatchMessageW(&msg); } } return static_cast<int>(msg.wParam); }