Skip to content

Commit

Permalink
CHG: Increased ExtraData buffer size for all events to fix Kinect ima…
Browse files Browse the repository at this point in the history
…ge streaming across multiple oinputservers
  • Loading branch information
arthurnishimoto committed Feb 12, 2019
1 parent 67b2d58 commit e8e88c6
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 173 deletions.
7 changes: 3 additions & 4 deletions include/connector/omicronConnectorClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ namespace omicronConnector
{
#ifndef OMICRON_EVENTDATA_DEFINED
#define OMICRON_EVENTDATA_DEFINED

#define DEFAULT_BUFLEN 51200 // Moved out of OmicronConnectorClient as NetClient/InputServer also uses this
#define OFLOAT_PTR(x) *((float*)&x)
#define OINT_PTR(x) *((int*)&x)

Expand All @@ -451,7 +451,7 @@ namespace omicronConnector
float orz;
float orw;

static const int ExtraDataSize = 1024;
static const int ExtraDataSize = DEFAULT_BUFLEN;
unsigned int extraDataType;
#if !defined(__GNUC__)
unsigned int extraDataItems;
Expand Down Expand Up @@ -494,8 +494,7 @@ namespace omicronConnector

// if OMICRON_CONNECTOR_LEAN_AND_MEAN, only define the omicron::EventBase and omicronConnector::EventData classes.
// Skip the OmicronConnectorClient class and all socket functionality.
#define DEFAULT_BUFLEN 1024 // Moved out of OmicronConnectorClient as NetClient/InputServer also uses this
#define DEFAULT_LRGBUFLEN 51200 // Moved out of OmicronConnectorClient as NetClient/InputServer also uses this
//#define DEFAULT_LRGBUFLEN 51200 // Moved out of OmicronConnectorClient as NetClient/InputServer also uses this

#ifndef OMICRON_CONNECTOR_LEAN_AND_MEAN
#ifndef OMICRON_CONNECTORCLIENT_DEFINED
Expand Down
10 changes: 1 addition & 9 deletions include/omicron/Event.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ namespace omicron
friend class EventUtils;
friend class Service;
public:
static const int ExtraDataSize = 1024;
static const int ExtraDataSize = DEFAULT_BUFLEN;
static const int MaxExtraDataItems = 32;
static Event::Flags parseButtonName(const String& name);
static int parseJointName(const String& name);
Expand Down Expand Up @@ -188,8 +188,6 @@ namespace omicron
//! Returns the raw etra data buffer.
void* getExtraDataBuffer() const;

bool isExtraDataLarge() const;

private:
unsigned int mySourceId;
enum Service::ServiceType myServiceType;
Expand Down Expand Up @@ -658,12 +656,6 @@ namespace omicron
return myExtraDataItems;
}

///////////////////////////////////////////////////////////////////////////
inline bool Event::isExtraDataLarge() const
{
return usingExtraDataLarge;
}

///////////////////////////////////////////////////////////////////////////
inline bool Event::getChar(char* c) const
{
Expand Down
2 changes: 0 additions & 2 deletions include/omicron/InputServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -456,8 +456,6 @@ class OMICRON_API InputServer
char legacyPacket[DEFAULT_BUFLEN];
char tacTilePacket[DEFAULT_BUFLEN];

char eventPacketLarge[DEFAULT_LRGBUFLEN];

bool validLegacyEvent;
bool validTacTileEvent;

Expand Down
5 changes: 0 additions & 5 deletions src/apps/oinputserver/oinputserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,6 @@ int main(int argc, char** argv)

// Mark the original event as processed
e->setProcessed();

if (e->isExtraDataLarge())
{
e->resetExtraData();
}
}
sm->unlockEvents();
}
Expand Down
194 changes: 51 additions & 143 deletions src/omicron/omicron/InputServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,68 +63,33 @@ char* InputServer::createOmicronPacketFromEvent(const Event* evt)
{
int offset = 0;

if (!evt->isExtraDataLarge())
char* eventPacket = new char[DEFAULT_BUFLEN];

OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getTimestamp());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getSourceId());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getServiceType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getFlags());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().x());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().y());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().z());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().w());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().x());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().y());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataMask());

if (evt->getExtraDataType() != Event::ExtraDataNull)
{
char* eventPacket = new char[DEFAULT_BUFLEN];

OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getTimestamp());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getSourceId());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getServiceType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getFlags());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().x());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().y());
OI_WRITEBUF(float, eventPacket, offset, evt->getPosition().z());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().w());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().x());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().y());
OI_WRITEBUF(float, eventPacket, offset, evt->getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt->getExtraDataMask());

if (evt->getExtraDataType() != Event::ExtraDataNull)
{
memcpy(&eventPacket[offset], evt->getExtraDataBuffer(), evt->getExtraDataSize());
}
offset += evt->getExtraDataSize();

return eventPacket;
}
else
{
char* eventPacketLarge = new char[DEFAULT_LRGBUFLEN];

OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getTimestamp());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getSourceId());
OI_WRITEBUF(int, eventPacketLarge, offset, evt->getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getServiceType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getFlags());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getPosition().x());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getPosition().y());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getPosition().z());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getOrientation().w());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getOrientation().x());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getOrientation().y());
OI_WRITEBUF(float, eventPacketLarge, offset, evt->getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt->getExtraDataMask());

//void* buffer = evt->getExtraDataBuffer();
//int bufferSize = evt->getExtraDataSize();
//eventPacketLarge = (char*)buffer;

memcpy(&eventPacketLarge[offset], evt->getExtraDataBuffer(), evt->getExtraDataSize());

offset += evt->getExtraDataSize();

return eventPacketLarge;
memcpy(&eventPacket[offset], evt->getExtraDataBuffer(), evt->getExtraDataSize());
}
offset += evt->getExtraDataSize();

return eventPacket;
}

///////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -187,59 +152,30 @@ void InputServer::handleEvent(const Event& evt)
#endif

int offset = 0;
int LargeBufferSize = 65535;

if (!evt.isExtraDataLarge())
{
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getTimestamp());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getSourceId());
OI_WRITEBUF(int, eventPacket, offset, evt.getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getServiceType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getFlags());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().x());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().y());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().z());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().w());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().x());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().y());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getTimestamp());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getSourceId());
OI_WRITEBUF(int, eventPacket, offset, evt.getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getServiceType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getFlags());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().x());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().y());
OI_WRITEBUF(float, eventPacket, offset, evt.getPosition().z());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().w());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().x());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().y());
OI_WRITEBUF(float, eventPacket, offset, evt.getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataMask());

memcpy(&eventPacket[offset], evt.getExtraDataBuffer(), evt.getExtraDataSize());

offset += evt.getExtraDataSize();

validTacTileEvent = handleTacTileEvent(evt);
}
else
{
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getTimestamp());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getSourceId());
OI_WRITEBUF(int, eventPacketLarge, offset, evt.getDeviceTag());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getServiceType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getFlags());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getPosition().x());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getPosition().y());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getPosition().z());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getOrientation().w());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getOrientation().x());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getOrientation().y());
OI_WRITEBUF(float, eventPacketLarge, offset, evt.getOrientation().z());

OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacketLarge, offset, evt.getExtraDataMask());

memcpy(&eventPacketLarge[offset], evt.getExtraDataBuffer(), evt.getExtraDataSize());

offset += evt.getExtraDataSize();
}
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataType());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataItems());
OI_WRITEBUF(unsigned int, eventPacket, offset, evt.getExtraDataMask());

memcpy(&eventPacket[offset], evt.getExtraDataBuffer(), evt.getExtraDataSize());

offset += evt.getExtraDataSize();

validTacTileEvent = handleTacTileEvent(evt);

if( showStreamSpeed )
{
Expand Down Expand Up @@ -283,53 +219,25 @@ void InputServer::handleEvent(const Event& evt)
{
if (evt.getType() == Event::Update || evt.getType() == Event::Move)
{
// Send continual data streams as UDP
if (!evt.isExtraDataLarge())
{
client->sendEvent(eventPacket, DEFAULT_BUFLEN);
}
else
{
client->sendEvent(eventPacketLarge, DEFAULT_LRGBUFLEN);
//ofmsg("Sent frame %1% %2%", %evt.getSourceId() %evt.getFlags());
}
client->sendEvent(eventPacket, DEFAULT_BUFLEN);
}
else
{
// If client supports dual TCP/UDP (V2), send single events as TCP
if (client->getMode() == data_omicronV2)
{
if (!evt.isExtraDataLarge())
{
client->sendMsg(eventPacket, DEFAULT_BUFLEN);
}
else
{
client->sendMsg(eventPacketLarge, DEFAULT_LRGBUFLEN);
}
client->sendMsg(eventPacket, DEFAULT_BUFLEN);
}
else
{
// Legacy support, send single events as UDP
if (!evt.isExtraDataLarge())
{
client->sendEvent(eventPacket, DEFAULT_BUFLEN);
}
else
{
client->sendEvent(eventPacketLarge, DEFAULT_LRGBUFLEN);
}
client->sendEvent(eventPacket, DEFAULT_BUFLEN);
}
}
}
}
itr++;
}

if (evt.isExtraDataLarge())
{
// delete(eventPacketLarge);
}
}

///////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -988,7 +896,7 @@ void InputServer::loop()
if ( client->isReceivingData() )
{
// Grab data from client
int iresult = client->recvEvent(eventPacket, DEFAULT_LRGBUFLEN);
int iresult = client->recvEvent(eventPacket, DEFAULT_BUFLEN);
if (iresult > 0)
{
// Convert client packet to omicron event
Expand Down
4 changes: 2 additions & 2 deletions src/omicron/omicron/MSKinect2Service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ void MSKinectService::poll()
Event* evt = mysInstance->writeHead();
evt->reset(Event::Update, Service::Image, currentFrameTimestamp);
evt->setPosition(cColorWidth, cColorHeight, 0); // Position: imageWidth, imageHeight, typeFlag (Color = 0, Depth = 1)
evt->setFlags(currentPacket);
evt->setOrientation(currentPacket, nPackets, 0, 0);

evt->setExtraData(EventBase::ExtraDataString, dataPacketSize, 1, imageEventBuffer);
mysInstance->unlockEvents();
Expand Down Expand Up @@ -481,7 +481,7 @@ void MSKinectService::pollDepth()
Event* evt = mysInstance->writeHead();
evt->reset(Event::Update, Service::Image, timestamp);
evt->setPosition(cDepthWidth, cDepthHeight, 1); // Position: imageWidth, imageHeight, typeFlag (Color = 0, Depth = 1)
evt->setFlags(i);
evt->setOrientation(i, nPackets, 0, 0);

evt->setExtraData(EventBase::ExtraDataString, dataPacketSize, 1, imageEventBuffer);
mysInstance->unlockEvents();
Expand Down
9 changes: 1 addition & 8 deletions src/omicron/omicron/NetService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,7 @@ void NetService::poll()

char* eventPacket = InputServer::createOmicronPacketFromEvent(e);

if (!e->isExtraDataLarge())
{
streamClient->sendEvent(eventPacket, DEFAULT_BUFLEN);
}
else
{
streamClient->sendEvent(eventPacket, DEFAULT_LRGBUFLEN);
}
streamClient->sendEvent(eventPacket, DEFAULT_BUFLEN);

delete eventPacket;
}
Expand Down

0 comments on commit e8e88c6

Please sign in to comment.