#pragma comment (lib,"ws2_32.lib") #include #include "cv.h" #include "highgui.h" #include WSADATA wsadata; int sock; struct sockaddr_in server; struct timeval tv; fd_set readfds; IplImage* frame = 0; struct init { int header; int width; int height; int origin; }; struct image { int header; int index; int stl; char buf[1150]; }; struct init initPack; int main( int argc, char** argv ) { WSAStartup(MAKEWORD(2, 2), &wsadata); //Installerar sockets för applikationen sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_port = htons(10); server.sin_family = AF_INET; tv.tv_sec = 1; tv.tv_usec = 0; CvCapture* capture = 0; capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 ); if( !capture ) { fprintf(stderr,"Could not initialize capturing...\n"); return -1; } frame = cvQueryFrame( capture ); initPack.header = 'INIT'; initPack.width = frame->width; initPack.height = frame->height; initPack.origin = frame->origin; while(true) { FD_ZERO(&readfds); FD_SET(sock, &readfds); select(sock+1, &readfds, NULL, NULL, &tv); printf("%d\n", WSAGetLastError()); if(FD_ISSET(sock, &readfds)) { int t; //ACK has received recvfrom(sock, (char*)&t, 4, 0, (struct sockaddr *) &server, (int*)sizeof(server)); break; } else { int s = sendto(sock, (char*)&initPack, sizeof(initPack), 0, (struct sockaddr *) &server, sizeof(server)); printf("%d", s); } } struct image imgData; int img_size = frame->width*frame->height*3; imgData.header = 'IMAG'; while(true) //for(int k = 0; k < 10; k++) { frame = cvQueryFrame( capture ); if( !frame ) return 0; for(int i = 0; i < img_size; i=i+initPack.width*3) { imgData.index = i; imgData.stl = initPack.width*3; memmove(imgData.buf, frame->imageData+i, imgData.stl); int s = imgData.stl+(3*sizeof(int)); int cs = sendto(sock, (char*)&imgData, s, 0, (struct sockaddr *) &server, sizeof(server)); if(WSAGetLastError() != 0) printf("%d\n", WSAGetLastError()); if(cs == -1) printf("%d\n", cs); } } cvReleaseCapture( &capture ); system("PAUSE"); return 0; }