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

📄 packet.cpp

📁 WebCam Viewer Camera Server Version 1.0.5 Chipsbrain Engineer Final Release
💻 CPP
字号:
//#include <iostream.h>#include "packet.h"#include "debug.h"#include "ioc_cmd.h"#include "def.h"#include <time.h>#ifdef USE_MJPEG_DRIVER#include <sys/ioctl.h>#include <unistd.h>#else#include <stdio.h>#endif#include <stdio.h>CPacket::CPacket(int iOwnerTaskNum){	m_iStreamPnt = 0;	m_iStreamSize = 0;	m_iOwnerTaskNum = iOwnerTaskNum;}CPacket::~CPacket(){}int CPacket::Make(COMMAND cmd, int iParam){	int iPacketSize = 0;	int iDataSize = 0;	TRANSLATE_HEADER th;//	FlushPacketBuff();	switch(cmd)	{	case STREAM_LENGTH://		FlushPacketBuff();		th.header = JPEG_SOI;		th.stream_size = m_iStreamSize;		SetTime(&th.time_info);		memcpy(m_szPacket, &th, sizeof(th));		iPacketSize += sizeof(th);		iDataSize = GetDataSize();		if(iDataSize + iPacketSize > DF_PACKET_SIZE)			iDataSize -= iPacketSize;		memcpy(m_szPacket + iPacketSize, GetData(), iDataSize);		m_iStreamPnt += iDataSize;		iPacketSize += iDataSize;		break;	case STREAM_DATA:		iDataSize = GetDataSize();		if(iDataSize == 0)			return 0;//		FlushPacketBuff();		memcpy(m_szPacket, GetData(), iDataSize);		iPacketSize += iDataSize;		m_iStreamPnt += iDataSize;		break;	default:		break;	}	return iPacketSize;}int CPacket::FetchStream(){	extern int g_mjpeg_driver;	//static int i = 0;	STREAM_READ_ARG arg;//	char szFileName[10];//	FILE *fp = NULL;	FlushStreamBuff();	arg.stream_buff = m_szStream;	arg.task_num = m_iOwnerTaskNum;#ifdef USE_MJPEG_DRIVER	do{		usleep(0);//		m_iStreamSize = read(g_mjpeg_driver, m_szStream, 512 * 1024);		m_iStreamSize = ioctl(g_mjpeg_driver, MJPEG_IOCGREAD, &arg);	}while(m_iStreamSize <= 0);	//	sprintf(szFileName, "%d.jpg", i++);//	fp = fopen(szFileName, "w");//	fwrite(m_szStream, m_iStreamSize, 1, fp);//	fclose(fp);//	if(i > 5)//		i = 0;	return m_iStreamSize;#else	m_iStreamSize = GetStreamLength();	if(m_iStreamSize)		SetStream(m_iStreamSize);	OutputDebugString("stream size = ", m_iStreamSize);	return m_iStreamSize;#endif}void CPacket::FlushStreamBuff(){//	memset(m_szStream, 0, m_iStreamSize);	m_iStreamSize = 0;	m_iStreamPnt = 0;}#ifndef USE_MJPEG_DRIVERint CPacket::GetStreamLength(){	static int iIndex = 0;	char szFileName[DF_MAX_PATH];	FILE *fp = 0;	int iStreamSize = 0;	memset(szFileName, 0, DF_MAX_PATH);	if(iIndex > 149)		iIndex = 0;	iIndex++;	sprintf(szFileName, "./images/%05d.bin.jpg", iIndex);	fp = fopen(szFileName, "rb");	if(!fp)		return 0;	fseek(fp, 0, SEEK_END);	iStreamSize = ftell(fp);	fclose(fp);		return iStreamSize;}void CPacket::SetStream(int iStreamSize){	static int iIndex = 0;	char szFileName[DF_MAX_PATH];	FILE *fp = 0;	memset(szFileName, 0, DF_MAX_PATH);	if(iIndex > 149)		iIndex = 0;	iIndex++;	sprintf(szFileName, "./images/%05d.bin.jpg", iIndex);	fp = fopen(szFileName, "rb");	if(!fp)		return;	fread(m_szStream, iStreamSize, 1, fp);	fclose(fp);}#endifvoid CPacket::SetTime(TIME_INFO *pTimeInfo){	static time_t prev_time;	time_t cal_time;	tm * system_time;	time(&cal_time);	if(prev_time != cal_time){		system_time = localtime(&cal_time);		pTimeInfo->year		= short(1900 + system_time->tm_year);		pTimeInfo->month	= BYTE(system_time->tm_mon + 1);		pTimeInfo->day		= BYTE(system_time->tm_mday);		pTimeInfo->hour		= BYTE(system_time->tm_hour);		pTimeInfo->minute	= BYTE(system_time->tm_min);		pTimeInfo->second	= BYTE(system_time->tm_sec);		pTimeInfo->available	= 1;		prev_time = cal_time;	}	else{		pTimeInfo->available = 0;		return;	}}

⌨️ 快捷键说明

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