📄 cframelist.cpp
字号:
//
// CFrameList.cpp
//
/*-----------------------------------------------------*\
HQ Tech, Make Technology Easy!
More information, please go to http://hqtech.nease.net.
/*-----------------------------------------------------*/
#include <streams.h>
#include "CFrameList.h"
////////////////////////////////////////////////////////////////////////////
CFrameList::CFrameList(long inFrameSize, long inMaxCount)
{
mFrameCounter = 0;
mFrameSize = inFrameSize;
mMaxFrameCount = inMaxCount;
mLastFrameOffset = (mMaxFrameCount - 1) * mFrameSize;
mFrameBuffer = new BYTE[inFrameSize * inMaxCount];
mReachEnd = FALSE;
mIndexWhenEndReached = 0;
}
CFrameList::~CFrameList()
{
if (mFrameBuffer)
{
delete[] mFrameBuffer;
mFrameBuffer = NULL;
}
}
__inline void CFrameList::MoveOneFrameUp(void)
{
for (int i = 1; i < mMaxFrameCount; i++)
{
BYTE * pCurrent = mFrameBuffer + i * mFrameSize;
memcpy(pCurrent - mFrameSize, pCurrent, mFrameSize);
}
}
void CFrameList::AddFrame(BYTE * inFrame)
{
CAutoLock lck(&mSyncBuffer);
MoveOneFrameUp();
// Then add new frame to the bottom of buffer
memcpy(mFrameBuffer + mLastFrameOffset, inFrame, mFrameSize);
mFrameCounter++;
}
void CFrameList::GetFrame(PBYTE * outFrame)
{
mSyncBuffer.Lock();
if (mFrameCounter < mMaxFrameCount)
{
*outFrame = NULL;
}
else
{
*outFrame = mFrameBuffer;
// If reach end of stream, we should pop up the last sevel frames
if (mReachEnd)
{
if (mIndexWhenEndReached < mMaxFrameCount)
{
*outFrame = mFrameBuffer + mIndexWhenEndReached * mFrameSize;
mIndexWhenEndReached++;
}
else
{
*outFrame = NULL;
}
}
}
// If no frame to pop up, remember to release the buffer-lock.
if (*outFrame == NULL)
{
mSyncBuffer.Unlock();
}
}
void CFrameList::ReleaseFrame(void)
{
mSyncBuffer.Unlock();
}
// Determine if the frame buffer is full filled?
BOOL CFrameList::IsFrameBufferFull(void)
{
return (mFrameCounter >= mMaxFrameCount);
}
void CFrameList::Flush(void)
{
CAutoLock lck(&mSyncBuffer);
mFrameCounter = 0;
}
void CFrameList::SetReachEnd(BOOL inIsEnd)
{
mReachEnd = inIsEnd;
mIndexWhenEndReached = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -