00001 #include "Util/log.H"
00002 #include "Util/WorkThreadServer.H"
00003 #include "Util/JobWithSemaphore.H"
00004 #include "Component/ModelManager.H"
00005 #include "Raster/GenericFrame.H"
00006 #include "Image/Layout.H"
00007 #include "Image/MatrixOps.H"
00008 #include "Image/DrawOps.H"
00009 #include "GUI/DebugWin.H"
00010 #include "Media/FrameSeries.H"
00011 #include "Transport/FrameInfo.H"
00012 #include "Util/CpuTimer.H"
00013 #include "Image/JPEGUtil.H"
00014
00015 #include <stdlib.h>
00016 #include <math.h>
00017
00018 #include <stdlib.h>
00019 #include <string.h>
00020 #include <unistd.h>
00021 #include <sys/types.h>
00022 #include <sys/socket.h>
00023 #include <netinet/in.h>
00024 #include <netdb.h>
00025 #include <fcntl.h>
00026
00027 bool useTcp = true;
00028
00029 int main(int argc, char *argv[])
00030 {
00031
00032 ModelManager manager("Test view iMgae");
00033
00034 nub::ref<OutputFrameSeries> ofs(new OutputFrameSeries(manager));
00035 manager.addSubComponent(ofs);
00036
00037
00038 if (manager.parseCommandLine(argc, argv, "<server> <port>", 2, 2) == false) return(1);
00039
00040 manager.start();
00041
00042 const char* hostname = manager.getExtraArg(0).c_str();
00043 int portno = atoi(manager.getExtraArg(1).c_str());
00044
00045 int sockfd = -1;
00046 if (useTcp)
00047 sockfd = socket(AF_INET, SOCK_STREAM, 0);
00048 else
00049 sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
00050
00051 if (sockfd < 0)
00052 LFATAL("ERROR opening socket");
00053
00054 struct hostent* server = gethostbyname(hostname);
00055 if (server == NULL)
00056 LFATAL("ERROR, no such host as %s\n", hostname);
00057
00058
00059 struct sockaddr_in serveraddr;
00060 bzero((char *) &serveraddr, sizeof(serveraddr));
00061 serveraddr.sin_family = AF_INET;
00062 bcopy((char *)server->h_addr,
00063 (char *)&serveraddr.sin_addr.s_addr, server->h_length);
00064 serveraddr.sin_port = htons(portno);
00065
00066 if (useTcp)
00067 {
00068
00069 if (connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0)
00070 LFATAL("ERROR connecting");
00071 }
00072
00073 CpuTimer timer;
00074
00075
00076 const char *startFrame = "S\n";
00077 int n = -1;
00078 if (useTcp)
00079 n = write(sockfd, startFrame, strlen(startFrame));
00080 else
00081 n = sendto(sockfd, startFrame, sizeof(startFrame), 0, (const struct sockaddr *)&serveraddr,sizeof(serveraddr));
00082
00083 if (n < 0)
00084 LFATAL("ERROR writing to socket");
00085
00086 while(1)
00087 {
00088 timer.reset();
00089 for(int t=0; t<30; t++)
00090 {
00091 int n=-1;
00092
00093
00094 unsigned int frameSize = 0;
00095 socklen_t sin_size = sizeof(serveraddr);
00096 if (useTcp)
00097 n = recv(sockfd, &frameSize, sizeof(frameSize), MSG_WAITALL);
00098 else
00099 n = recvfrom(sockfd, &frameSize, sizeof(frameSize), MSG_WAITALL, (struct sockaddr *)&serveraddr,&sin_size);
00100
00101 char buf[frameSize];
00102 if (useTcp)
00103 n = recv(sockfd, buf, frameSize, MSG_WAITALL);
00104 else
00105 n = recvfrom(sockfd, buf, frameSize, MSG_WAITALL, (struct sockaddr *)&serveraddr,&sin_size);
00106 LINFO("Size %i", n);
00107
00108
00109 if (n < 0)
00110 LFATAL("ERROR reading from socket");
00111
00112 if (n > 5000)
00113 {
00114 JPEGDecompressor jpdec;
00115 std::vector<unsigned char> data(n);
00116 for(int ii=0; ii<n; ii++)
00117 data[ii] = buf[ii];
00118
00119 Image<PixRGB<byte> > img(320,240,ZEROS);
00120 img.attach((const_cast<PixRGB<byte>*> (reinterpret_cast<const PixRGB<byte>* >
00121 (&buf))), 320, 240);
00122 Image<PixRGB<byte> > tmp = img.deepcopy();
00123 ofs->writeRGB(tmp, "gpsOutput", FrameInfo("gpsOutput", SRC_POS));
00124 usleep(10000);
00125 }
00126 }
00127 timer.mark();
00128 LINFO("Total time %0.2f sec", 30/timer.real_secs());
00129
00130
00131 }
00132
00133 close(sockfd);
00134
00135 manager.stop();
00136
00137 }
00138
00139