MCPcopy Create free account
hub / github.com/OpenKinect/libfreenect2 / onDataReceived

Method onDataReceived

src/rgb_packet_stream_parser.cpp:82–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80}
81
82void RgbPacketStreamParser::onDataReceived(unsigned char* buffer, size_t length)
83{
84 if (packet_.memory == NULL || packet_.memory->data == NULL)
85 {
86 LOG_ERROR << "Packet buffer is NULL";
87 return;
88 }
89 Buffer &fb = *packet_.memory;
90
91 // package containing data
92 if(length > 0)
93 {
94 if(fb.length + length <= fb.capacity)
95 {
96 memcpy(fb.data + fb.length, buffer, length);
97 fb.length += length;
98 }
99 else
100 {
101 LOG_INFO << "buffer overflow!";
102 fb.length = 0;
103 return;
104 }
105
106 // not enough data to do anything
107 if (fb.length <= sizeof(RawRgbPacket) + sizeof(RgbPacketFooter))
108 return;
109
110 RgbPacketFooter* footer = reinterpret_cast<RgbPacketFooter *>(&fb.data[fb.length - sizeof(RgbPacketFooter)]);
111
112 if (footer->magic_header == 0x39393939 && footer->magic_footer == 0x42424242)
113 {
114 RawRgbPacket *raw_packet = reinterpret_cast<RawRgbPacket *>(fb.data);
115
116 if (fb.length != footer->packet_size || raw_packet->sequence != footer->sequence)
117 {
118 LOG_INFO << "packetsize or sequence doesn't match!";
119 fb.length = 0;
120 return;
121 }
122
123 if (fb.length - sizeof(RawRgbPacket) - sizeof(RgbPacketFooter) < footer->filler_length)
124 {
125 LOG_INFO << "not enough space for packet filler!";
126 fb.length = 0;
127 return;
128 }
129
130 size_t jpeg_length = 0;
131 //check for JPEG EOI 0xff 0xd9 within 0 to 3 alignment bytes
132 size_t length_no_filler = fb.length - sizeof(RawRgbPacket) - sizeof(RgbPacketFooter) - footer->filler_length;
133 for (size_t i = 0; i < 4; i++)
134 {
135 if (length_no_filler < i + 2)
136 break;
137 size_t eoi = length_no_filler - i;
138
139 if (raw_packet->jpeg_buffer[eoi - 2] == 0xff && raw_packet->jpeg_buffer[eoi - 1] == 0xd9)

Callers 1

processTransferMethod · 0.45

Calls 3

readyMethod · 0.45
processMethod · 0.45
allocateBufferMethod · 0.45

Tested by

no test coverage detected