All pastes #778198 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-11-17 12:02 UTC
rendered paste body
#pragma comment (lib,"ws2_32.lib")
#include <windows.h>
#include "cv.h"
#include "highgui.h"
#include <stdio.h>

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;
}