📄 packet.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 + -