//frees all frames void CSpriteFile::FreeAllFrames() { for(uint32 nCurrFrame = 0; nCurrFrame < GetNumFrames(); nCurrFrame++) { FreeFrame(nCurrFrame); } }
// RequestHandler receives requests from the Client. Server should // build and return "request responses" packets in this same thread. // // pPacketIn - data packet from Client // pPacketOut - empty packet, to be filled in and returned to the // Client as the "request response". // int __cdecl RequestHandler(sPacket* pPacketIn, sPacket* pPacketOut, void* pUserData) { int iHandled = 1; // handled switch (pPacketIn->iMessage) { case NAT_PING: printf("[SampleServer] received ping from Client.\n"); printf("[SampleServer] Client App Name : %s\n", pPacketIn->Data.Sender.szName); printf("[SampleServer] Client App Version : %d.%d.%d.%d\n", pPacketIn->Data.Sender.Version[0], pPacketIn->Data.Sender.Version[1],pPacketIn->Data.Sender.Version[2],pPacketIn->Data.Sender.Version[3]); printf("[SampleServer] Client App NatNet Version : %d.%d.%d.%d\n", pPacketIn->Data.Sender.NatNetVersion[0], pPacketIn->Data.Sender.NatNetVersion[1],pPacketIn->Data.Sender.NatNetVersion[2],pPacketIn->Data.Sender.NatNetVersion[3]); // build server info packet strcpy(pPacketOut->Data.Sender.szName, "SimpleServer"); pPacketOut->Data.Sender.Version[0] = 2; pPacketOut->Data.Sender.Version[1] = 1; pPacketOut->iMessage = NAT_PINGRESPONSE; pPacketOut->nDataBytes = sizeof(sSender); iHandled = 1; break; case NAT_REQUEST_MODELDEF: printf("[SimpleServer] Received request for data descriptions.\n"); theServer->PacketizeDataDescriptions(&descriptions, pPacketOut); break; case NAT_REQUEST_FRAMEOFDATA: { // note: Client does not typically poll for data, but we accomodate it here anyway // note: need to return response on same thread as caller printf("[SimpleServer] Received request for frame of data.\n"); sFrameOfMocapData frame; BuildFrame(g_lCurrentFrame, &descriptions, &frame); theServer->PacketizeFrameOfMocapData(&frame, pPacketOut); FreeFrame(&frame); } break; case NAT_REQUEST: printf("[SampleServer] Received request from Client: %s\n", pPacketIn->Data.szData); pPacketOut->iMessage = NAT_UNRECOGNIZED_REQUEST; if (stricmp(pPacketIn->Data.szData, "TestRequest") == 0) { pPacketOut->iMessage = NAT_RESPONSE; strcpy(pPacketOut->Data.szData, "TestResponse"); pPacketOut->nDataBytes = ((int)strlen(pPacketOut->Data.szData)) + 1; } break; default: pPacketOut->iMessage = NAT_UNRECOGNIZED_REQUEST; pPacketOut->nDataBytes = 0; iHandled = 0; break; } return iHandled; // 0 = not handled, 1 = handled; }
/*===========================================================================* * * Frame_Exit * * frees the memory associated with frames * * RETURNS: nothing * * SIDE EFFECTS: frameMemory * *===========================================================================*/ void Frame_Exit() { register int index; for ( index = 0; index < 3; index++ ) { FreeFrame(frameMemory[index]); } }
bool CHolly_Theora_Video::End() { ProcessFrame( true ); th_encode_free( m_Encoder ); m_Encoder = NULL; FreeFrame(); return true; }
// PlayingThread_Func streams data at ~60hz DWORD WINAPI PlayingThread_Func(void * empty) { while (1) { sFrameOfMocapData frame; BuildFrame(g_lCurrentFrame, &descriptions, &frame); SendFrame(&frame); FreeFrame(&frame); printf("Sent Frame %d", g_lCurrentFrame); g_lCurrentFrame++; HiResSleep(10); } return ErrorCode_OK; }
//sets a specific frame name bool CSpriteFile::SetFrame(uint32 nFrame, const char* pszName) { assert(nFrame < GetNumFrames()); FreeFrame(nFrame); m_ppszFrames[nFrame] = new char [strlen(pszName) + 1]; if(!m_ppszFrames[nFrame]) return false; strcpy(m_ppszFrames[nFrame], pszName); return true; }
void CHolly_Theora_Video::SetupFrame() { FreeFrame(); unsigned int iPixelSize = sizeof(unsigned char); for ( int i=0; i<3; i++ ) { m_Frame[i].width = Width(); m_Frame[i].height = Height(); if ( i > 0 ) { m_Frame[i].width /= 2; m_Frame[i].height /= 2; } m_Frame[i].stride = m_Frame[i].width * iPixelSize; m_Frame[i].data = (unsigned char*)malloc( m_Frame[i].width * m_Frame[i].height * iPixelSize ); } }
int _tmain(int argc, _TCHAR* argv[]) { // Create a NatNet server int iConnectionType = ConnectionType_Multicast; //int iConnectionType = ConnectionType_Unicast; int iResult = CreateServer(iConnectionType); if(iResult != ErrorCode_OK) { printf("Error initializing server. See log for details. Exiting"); return 1; } // Create a MarkerSet description BuildDescription(&descriptions); // OK! Ready to stream data. Listen for request from clients (RequestHandler()) printf("\n\nCommands:\nn\tnext frame\ns\tstream frames\nr\treset server\nq\tquit\n\r\tmulticast\nu\tunicast\n\n"); bool bExit = false; while(int c =_getch()) { switch(c) { case 'n': // next frame { sFrameOfMocapData frame; BuildFrame(g_lCurrentFrame++, &descriptions, &frame); SendFrame(&frame); FreeFrame(&frame); } break; case 'q': // quit bExit = true; break; case 's': // play continuously g_lCurrentFrame = 0; if(g_bPlaying) StopPlayingThread(); else StartPlayingThread(); break; case 'r': // reset server resetServer(); break; case 'm': // change to multicast iResult = CreateServer(ConnectionType_Multicast); if(iResult == ErrorCode_OK) printf("Server connection type changed to Multicast.\n\n"); else printf("Error changing server connection type to Multicast.\n\n"); break; case 'u': // change to unicast iResult = CreateServer(ConnectionType_Unicast); if(iResult == ErrorCode_OK) printf("Server connection type changed to Unicast.\n\n"); else printf("Error changing server connection type to Unicast.\n\n"); break; default: break; } if(bExit) { theServer->Uninitialize(); FreeDescription(&descriptions); break; } } return ErrorCode_OK; }
CHolly_Theora_Video::~CHolly_Theora_Video() { FreeFrame(); }