I have camera, that connected to TX2 through USB 3.0. I need send RAW frame data as UDP packets on multicast technology. Frame from camera is grayscale 8-bit per pixel format. Size is 2048x2048 pixels. I’m trying to send with c socket library with sendto method. I need to send around 64 packets with sendto method, because 2048*2048 / 65536 = 64. My test was to make high gpio line before starting send, and make low after sending frame. And i get time around 41 ms. Why? Why so long? Is it possible optimize ehternet on jetson tx2?
qint8 UdpSocketFilinVideo::SendFrame(quint8* frame, quint32 width, quint32 height, quint64 blockID){
Frame_offset = height;
nFrame.Header.FrameNumber = blockID;
nFrame.Header.FrameWidth = width;
nFrame.Header.FrameHeight = height;
nFrame.Header.FrameChannels = 1;
nFrame.Header.Version = 0x00;
nFrame.Header.Rezerved1 = 0x00;
nFrame.Header.Timestamp = 0;
int i = 2;
while(nFrame.Header.FrameWidth * Frame_offset * nFrame.Header.FrameChannels > MaximumPacketSize)
{
Frame_offset = (nFrame.Header.FrameHeight / i) + 1;
i++;
}
for(unsigned int number = 0; number < nFrame.Header.FrameHeight; number += Frame_offset) {
nFrame.Header.StringOffset = number;
if((nFrame.Header.FrameHeight - nFrame.Header.StringOffset) >= Frame_offset) {
move_size = (nFrame.Header.FrameWidth * Frame_offset) * nFrame.Header.FrameChannels;
nFrame.Header.StringsCount = Frame_offset;
}
else if((nFrame.Header.FrameHeight - nFrame.Header.StringOffset) < Frame_offset) {
move_size = ((nFrame.Header.FrameHeight - nFrame.Header.StringOffset) * nFrame.Header.FrameWidth) * nFrame.Header.FrameChannels;
nFrame.Header.StringsCount = nFrame.Header.FrameHeight - nFrame.Header.StringOffset;
}
memmove(nFrame.Data, frame + (number * nFrame.Header.FrameWidth * nFrame.Header.FrameChannels), move_size);
size = ProtocolTools::FramePacketSize(nFrame);
ssize_t err = sendto(sockfd, (const char*)&nFrame, size,
MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
}
}