⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testimagegrab.cpp

📁 用socket的Event select方式进行 五个连接数据的接收
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>
#include <winsock2.h>
#include <process.h>
#include <windows.h>
#include "TestImageGrab.h"
#include "image_type_def.h"

/*define the global variable to store the client socket*/
#define	IMAGE_JPG_HEAD_FFC4_LEN					(212)
#define IMAGE_JPG_HEAD_FFC0_LEN					(13)
#define	IMAGE_JPG_HEAD_FFDA_LEN					(10)
#define IMAGE_JPG_HEAD_FFDB_LEN					(69)

#define IMAGE_RCV_DATA_WITH_ACK                 (1)



/*定义本程序线程的优先级*/
#define IMAGE_CURRENT_THREAD_PRIORITY           (THREAD_PRIORITY_NORMAL)
//#define IMAGE_CURRENT_THREAD_PRIORITY           (THREAD_PRIORITY_TIME_CRITICAL)


/*define the Jpg file head ffda*/
u8                          g_u8JpgHead_FFDA[IMAGE_JPG_HEAD_FFDA_LEN] = 
{
							0xFF,      
							0xDA,      
							0x00,      
							0x08,      
							0x01,      
							0x01,      
							0x00,      
							0x00,      
							0x3F,      
							0x00       
				
};/*endof of initialize Jpg head ffda part*/

/*define the Jpg file head ffdb*/
u8                          g_u8JpgHead_FFDB[IMAGE_JPG_HEAD_FFDB_LEN] = 
{
							0xFF, 
							0xDB, 
							0x00, 
							0x43, 
							0x00,
							0x10, 
							0x0B, 
							0x0C, 
							0x0E, 
							0x0C, 
							0x0A, 
							0x10, 
							0x0E, 
							0x0D, 
							0x0E, 
							0x12, 
							0x11, 
							0x10, 
							0x13, 
							0x18, 
							0x28,
							0x1A, 
							0x18, 
							0x16, 
							0x16, 
							0x18, 
							0x31, 
							0x23, 
							0x25, 
							0x1D, 
							0x28, 
							0x3A, 
							0x33, 
							0x3D, 
							0x3C, 
							0x39,
							0x33, 
							0x38, 
							0x37, 
							0x40, 
							0x48, 
							0x5C, 
							0x4E, 
							0x40, 
							0x44, 
							0x57, 
							0x45, 
							0x37, 
							0x38, 
							0x50, 
							0x6D, 
							0x51, 
							0x57,
							0x5F, 
							0x62, 
							0x67, 
							0x68, 
							0x67, 
							0x3E, 
							0x4D, 
							0x71, 
							0x79, 
							0x70, 
							0x64, 
							0x78, 
							0x5C, 
							0x65, 
							0x67, 
							0x63
				
};/*endof of initialize Jpg head ffda part*/

#if 0 /* 800(width) * 600(High)*/
/*define the Jpg file head ffc0*/
u8                          g_u8JpgHead_FFC0[IMAGE_JPG_HEAD_FFC0_LEN] = 
{
							0xFF, 
							0xC0, 
							0x00, 
							0x0B, 
							0x08, 
							0x02, //600-- 0x0258 
							0x58, //600-- 0x0258
							0x03, //800-- 0x0320
							0x20, //800-- 0x0320
							0x01, 
							0x01, 
							0x11, 
							0x00
};/*endof of initialize Jpg head ffc0 part*/
#endif

#if 1 /* 782(width) * 582(Highth)*/
/*define the Jpg file head ffc0*/
u8                          g_u8JpgHead_FFC0[IMAGE_JPG_HEAD_FFC0_LEN] = 
{
							0xFF, 
							0xC0, 
							0x00, 
							0x0B, 
							0x08, 
							0x02, //582-- 0x0246 
							0x46, //582-- 0x0246
							0x03, //782-- 0x030E
							0x0E, //782-- 0x030E
							0x01, 
							0x01, 
							0x11, 
							0x00
};/*endof of initialize Jpg head ffc0 part*/
#endif


/*define the Jpg file head ffc4*/
u8                          g_u8JpgHead_FFC4[IMAGE_JPG_HEAD_FFC4_LEN] = 
{
								0xFF, 
								0xC4, 
								0x00, 
								0xD2, 
								0x00, 
								0x00, 
								0x01, 
								0x05, 
								0x01, 
								0x01, 
								0x01, 
								0x01, 
								0x01, 
								0x01, 
								0x00, 
								0x00, 
								0x00, 
								0x00, 
								0x00, 
								0x00, 
								0x00,
								0x00, 
								0x01, 
								0x02, 
								0x03, 
								0x04, 
								0x05, 
								0x06, 
								0x07, 
								0x08, 
								0x09, 
								0x0A, 
								0x0B,
								0x10,
								0x00,
								0x02, 
								0x01, 
								0x03, 
								0x03, 
								0x02, 
								0x04, 
								0x03, 
								0x05, 
								0x05, 
								0x04, 
								0x04, 
								0x00, 
								0x00, 
								0x01, 
								0x7D,
								0x01, 
								0x02, 
								0x03, 
								0x00, 
								0x04, 
								0x11, 
								0x05, 
								0x12, 
								0x21, 
								0x31, 
								0x41, 
								0x06, 
								0x13, 
								0x51, 
								0x61, 
								0x07, 
								0x22, 
								0x71, 
								0x14, 
								0x32, 
								0x81, 
								0x91, 
								0xA1, 
								0x08, 
								0x23, 
								0x42, 
								0xB1, 
								0xC1, 
								0x15, 
								0x52, 
								0xD1, 
								0xF0, 
								0x24, 
								0x33, 
								0x62, 
								0x72, 
								0x82, 
								0x09, 
								0x0A, 
								0x16, 
								0x17, 
								0x18, 
								0x19, 
								0x1A, 
								0x25, 
								0x26, 
								0x27, 
								0x28, 
								0x29, 
								0x2A, 
								0x34, 
								0x35, 
								0x36, 
								0x37, 
								0x38, 
								0x39, 
								0x3A, 
								0x43, 
								0x44, 
								0x45, 
								0x46, 
								0x47, 
								0x48,
								0x49, 
								0x4A, 
								0x53, 
								0x54, 
								0x55, 
								0x56, 
								0x57, 
								0x58, 
								0x59, 
								0x5A, 
								0x63, 
								0x64,
								0x65, 
								0x66, 
								0x67, 
								0x68, 
								0x69, 
								0x6A, 
								0x73, 
								0x74,
								0x75, 
								0x76, 
								0x77, 
								0x78, 
								0x79, 
								0x7A, 
								0x83, 
								0x84, 
								0x85, 
								0x86, 
								0x87, 
								0x88, 
								0x89, 
								0x8A, 
								0x92, 
								0x93, 
								0x94, 
								0x95, 
								0x96, 
								0x97, 
								0x98, 
								0x99, 
								0x9A, 
								0xA2, 
								0xA3, 
								0xA4, 
								0xA5, 
								0xA6, 
								0xA7, 
								0xA8, 
								0xA9, 
								0xAA, 
								0xB2, 
								0xB3, 
								0xB4, 
								0xB5, 
								0xB6, 
								0xB7, 
								0xB8, 
								0xB9, 
								0xBA, 
								0xC2, 
								0xC3, 
								0xC4, 
								0xC5, 
								0xC6, 
								0xC7, 
								0xC8, 
								0xC9, 
								0xCA, 
								0xD2, 
								0xD3, 
								0xD4, 
								0xD5, 
								0xD6, 
								0xD7, 
								0xD8, 
								0xD9, 
								0xDA, 
								0xE1, 
								0xE2, 
								0xE3, 
								0xE4, 
								0xE5, 
								0xE6, 
								0xE7, 
								0xE8, 
								0xE9, 
								0xEA, 
								0xF1, 
								0xF2, 
								0xF3, 
								0xF4, 
								0xF5, 
								0xF6, 
								0xF7, 
								0xF8, 
								0xF9, 
								0xFA
}; /*END OF	g_u8JpgHead_FFC4 Initialize	*/

typedef struct STRU_COMMAND_HEADER
{
     DWORD u32CmdType;
     DWORD u32ExposeTime;
     DWORD u32Gain;
     DWORD u32Status; 
} ZXG_COMMAND;


typedef struct tag_STRU_IMAGE_DOWN_MACHINE_STAT
{
    STRU_COMMAND_HEADER     struCmdHeader;
    u32                     u32FpgaRecvPicNum;
    u32                     u32Write2BufNum;
    u32                     u32SockSendPicNum;
    u32                     u32ProcessingFullBufNum;
    u32                     u32DiscardFpgaFrameNum;
    u32                     u32BuferFulTimes;
    
}STRU_IMAGE_DOWN_MACHINE_STAT;

typedef struct PictureInfo
{
	char strLogo[4];
	DWORD m_nTotalSize;
} PICTUREINFO;

#define IMAGE_CAMERA_NUM                 5
#define IMAGE_CAMERA_ONE_PATH_BUFS       20000
u32     g_u32WriteIndex[IMAGE_CAMERA_NUM];
u32     g_u32ReadIndex[IMAGE_CAMERA_NUM];


/*用来存放*/
u32							 g_u32BufferPointer[IMAGE_CAMERA_NUM][IMAGE_CAMERA_ONE_PATH_BUFS];
u32                          g_u32BufferLen[IMAGE_CAMERA_NUM][IMAGE_CAMERA_ONE_PATH_BUFS];

void ListenImagesSocket(void *arg);
void RecvImagesSocket(void *arg);
void GrabImagesContinuous(void *arg);
void MonitorImagesSocketUDP(void *arg);
void WritePic2Disk1(void *arg);
void WritePic2Disk2(void *arg);


HANDLE   g_handleSemphore2WriteThread[IMAGE_CAMERA_NUM] = {NULL,NULL,NULL,NULL,NULL};


void WritePic2Disk1(void *arg)
{
	u32						u32j = 0;
	DWORD                   waitforRet;
    FILE                    *pJpgFile;
	s8						s8JpgNameBuf[100];
	u16						u16Temp;
	u32                     u32i;

	u32                     u32HasDataNums = 0;

	while (1)
	{
		u32HasDataNums = 0;


		for (u32j = 0; u32j < 3; u32j++)
		{
			waitforRet = WaitForSingleObject(g_handleSemphore2WriteThread[u32j], 0);
			if (WAIT_TIMEOUT == waitforRet)
			{
				continue;		
			}

			u32HasDataNums++;
			
			if (NULL != g_u32BufferPointer[u32j][g_u32ReadIndex[u32j]] )
			{
				/*如果有数据,那么写到文件*/

		        #if 1   
				//u32ImageLenAfterConvert = ntohl(u32IMAGELen);

				/*write the recved Jpg data to file*/

				sprintf( (char*)(u32)s8JpgNameBuf, "d:\\data\\%d\\%d.jpg", u32j + 1, g_u32ReadIndex[u32j]);
				pJpgFile = fopen((char*)(u32)s8JpgNameBuf, "wb+");

				/*如果文件成功打开*/
				if (pJpgFile != NULL)
				{
					/*写文件头*/
					/*写0xffd8*/
					u16Temp = 0xd8ff;
					fwrite((void*)(u32)&u16Temp, sizeof(u16), 1, pJpgFile);

					/*写0xffc0开始的数组*/
					for (u32i = 0; u32i < IMAGE_JPG_HEAD_FFC0_LEN; u32i++)
					{
						fwrite((void*)(u32)&g_u8JpgHead_FFC0[u32i], sizeof(u8), 1, pJpgFile);
					}

					/*写0xffdb开始的数组*/
					for (u32i = 0; u32i < IMAGE_JPG_HEAD_FFDB_LEN; u32i++)
					{
						fwrite((void*)(u32)&g_u8JpgHead_FFDB[u32i], sizeof(u8), 1, pJpgFile);
					}

					/*写0xffc4开始的数组*/
					for (u32i = 0; u32i < IMAGE_JPG_HEAD_FFC4_LEN; u32i++)
					{
						fwrite((void*)(u32)&g_u8JpgHead_FFC4[u32i], sizeof(u8), 1, pJpgFile);
					}

					/*写0xffda开始的数组*/
					for (u32i = 0; u32i < IMAGE_JPG_HEAD_FFDA_LEN; u32i++)
					{
						fwrite((void*)(u32)&g_u8JpgHead_FFDA[u32i], sizeof(u8), 1, pJpgFile);
					}


					fwrite( (void*)g_u32BufferPointer[u32j][g_u32ReadIndex[u32j]], sizeof(s8), g_u32BufferLen[u32j][g_u32ReadIndex[u32j]], pJpgFile);



					/*写文件尾*/
					/*写0xffd9*/
					u16Temp = 0xd9ff;
					fwrite((void*)(u32)&u16Temp, sizeof(u16), 1, pJpgFile);

					
				}
				else
				{
					/*处理下一路*/
					continue;
				}
				
				/*关闭文件以及善后处理*/
				fclose(pJpgFile);
				pJpgFile = NULL;
				
				//send( g_socketNewTcpSocket, (char*)(u32)&u32IMAGELen,  sizeof(u32), 0);
		        #endif
                
				/*释放buffer*/
                free((void*)g_u32BufferPointer[u32j][g_u32ReadIndex[u32j]]);
				g_u32BufferPointer[u32j][g_u32ReadIndex[u32j]] = NULL;
                
				/*把buffer长度置0*/
				g_u32BufferLen[u32j][g_u32ReadIndex[u32j]]  = 0;

				/*指针加加*/
				g_u32ReadIndex[u32j]++;
				g_u32ReadIndex[u32j] %= IMAGE_CAMERA_ONE_PATH_BUFS; 
			
			}
			else
			{
				/*处理下一路*/
				continue;
			}/*End of */		
		}/*End of for (u32j = 0; u32j < IMAGE_CAMERA_NUM; u32j++)*/	

		if (u32HasDataNums == 0)
		{
			Sleep(10);		
		}

	}/* End of while (1)*/

	_endthread();
}


void WritePic2Disk2(void *arg)
{
	u32						u32j = 0;
	DWORD                   waitforRet;
    FILE                    *pJpgFile;
	s8						s8JpgNameBuf[100];
	u16						u16Temp;
	u32                     u32i;

	u32                     u32HasDataNums = 0;

	while (1)
	{
		u32HasDataNums = 0;


		for (u32j = 3; u32j < IMAGE_CAMERA_NUM; u32j++)
		{
			waitforRet = WaitForSingleObject(g_handleSemphore2WriteThread[u32j], 0);
			if (WAIT_TIMEOUT == waitforRet)
			{
				continue;		
			}

			u32HasDataNums++;
			
			if (NULL != g_u32BufferPointer[u32j][g_u32ReadIndex[u32j]] )
			{
				/*如果有数据,那么写到文件*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -