📄 dummyserver.cpp
字号:
#include "DummyServer.h"#include "debug.h"CDummyServer::CDummyServer(){// dbg_print("DummyServer Openned!\n");}CDummyServer::~CDummyServer(){ delete pFrame;}int CDummyServer::Init(int dFrameRate, int nMaxFrame, int nStreamFormat, char *fileName){ char ff[128]; memset(ff,0,128); sprintf(ff,"%s//%s","//home//Jonathan//box//goserver//data",fileName); if((fpSource=fopen(ff, "rb"))==NULL) { printf("Can not open file %s.\n", fileName); return 1; } pFrame=new unsigned char [MAX_FRAME_LENGTH]; m_nFilePoint=0; m_nFrameLength=0; m_dStartTime=0.0; m_dFrameRate=dFrameRate; m_nMaxFrame=nMaxFrame; m_nRollBackCount=0; m_nStreamFormat=nStreamFormat; if(nStreamFormat==GO_STREAM) { m_SyncWord[0]=0x00; m_SyncWord[1]=0x00; m_SyncWord[2]=0x01; m_SyncWord[3]=0xf0; } else if(nStreamFormat==MPEG4_STREAM) { m_SyncWord[0]=0x00; m_SyncWord[1]=0x00; m_SyncWord[2]=0x01; m_SyncWord[3]=0xb6; }// memcpy(m_SyncWord, syncWord, 4);// printf("CDummyServer initialized.\n"); return 0;}int CDummyServer::getOneFrame(unsigned char *buffer){ double dTime=0.0; int nLength;#ifdef LINUX timeval tv; timezone tz; gettimeofday(&tv, &tz);// printf("Init time: %d, %d\n", tv.tv_sec, tv.tv_usec); dTime=((double)(tv.tv_sec))*1000000.0 + ((double)(tv.tv_usec));#endif if(m_nFrameLength==0) if(m_nStreamFormat==GO_STREAM) { if((m_nFrameLength=readNextFrame(pFrame, fpSource))==0) return -1; else frameNum=((((unsigned int)pFrame[4])<<24) & 0x1f000000) + ((((unsigned int)pFrame[5])<<16) & 0x00ff0000) + ((((unsigned int)pFrame[6])<<8) & 0x0000ff00) + ((((unsigned int)pFrame[7])<<0) & 0x000000ff); } else { if((m_nFrameLength=readNextFrame_MV4(pFrame, fpSource))==0) return -1; } if(frameNum>m_nMaxFrame) { m_nFilePoint=0; m_nRollBackCount++; m_nFrameLength=0; } if(dTime-m_dStartTime>((double)(frameNum+m_nMaxFrame*m_nRollBackCount))*1000000.0/m_dFrameRate) {// dbg_print("Frame number: %d, frame length: %d, Time: %d \t", frameNum, m_nFrameLength, (int)(dTime-m_dStartTime));//* dbg_print("framenum: %d, maxframe: %d, RollBackCount: %d, framecount: %d\t", frameNum, m_nMaxFrame, m_nRollBackCount, frameNum+m_nMaxFrame*m_nRollBackCount); memcpy(buffer, pFrame, m_nFrameLength); nLength=m_nFrameLength; m_nFrameLength=0; return nLength; } return 0;}int CDummyServer::Close(){ fclose(fpSource); return 0;}int CDummyServer::readNextFrame(unsigned char *buffer, FILE * fp){ unsigned char pTemp[4]; int addToBuffer=0; int bufferEnd=0; fseek(fp, m_nFilePoint, SEEK_SET); while((fread(pTemp, 1, 4, fp)!=0)) { if(pTemp[0]==m_SyncWord[0] && pTemp[1]==m_SyncWord[1] && pTemp[2]==m_SyncWord[2] && pTemp[3]==m_SyncWord[3]) if(addToBuffer==0) addToBuffer=1; else break; m_nFilePoint+=4; if(addToBuffer==1) { memcpy(buffer+bufferEnd, pTemp, 4); bufferEnd+=4; } } return bufferEnd;}int CDummyServer::readNextFrame_MV4(unsigned char *buffer, FILE * fp){ int i; int addToBuffer=0; int bufferEnd=0; int frameHeaderPos=0; fseek(fp, m_nFilePoint, SEEK_SET); if(fread(buffer, 1, 100004, fp)==0) return 0; for(i=0;i<100000;i++) { if(buffer[i]==m_SyncWord[0] && buffer[i+1]==m_SyncWord[1] && buffer[i+2]==m_SyncWord[2] && buffer[i+3]==m_SyncWord[3]) {// dbg_print("\n*********%d******%d*****\n\n", i, m_nFilePoint); if(addToBuffer==0) addToBuffer=1; else break; } m_nFilePoint++; bufferEnd++; if(addToBuffer==0) frameHeaderPos++; } frameNum=(((unsigned int)buffer[frameHeaderPos+4] & 0x0f)<<11)+(((unsigned int)buffer[frameHeaderPos+5])<<3)+(((unsigned int)buffer[frameHeaderPos+6])>>5);// dbg_print("\n***********frameNum: %d*************\n", frameNum); return bufferEnd;} int CDummyServer::StartTime(timeval tv){#ifdef LINUX// timeval tv;// timezone tz;// gettimeofday(&tv, &tz);// printf("Init time: %d, %d\n", tv.tv_sec, tv.tv_usec); m_dStartTime=((double)(tv.tv_sec))*1000000.0 + ((double)(tv.tv_usec));#endif return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -