#include "stdafx.h" #include "ImagePool.h" ImagePoolEx::ImagePoolEx() { //OEM层需要进行细节上的设置. m_pFullImageQueue = NULL; m_pPrevImageData = NULL; } ImagePoolEx::~ImagePoolEx() { ClearPool(); } bool ImagePoolEx::SetMaxBlockSize(const char *pQueName, DWORD BlockSize, DWORD FulBlockCount, DWORD PrevBlockSize, DWORD PrevBlockCount) { bool ret = true; string PrevQueName = pQueName; PrevQueName += "Prv"; if (BlockSize) { m_pFullImageQueue = (PVOID)new CShareMemory_Circle(); if (((CShareMemory_Circle*)m_pFullImageQueue)->Create(pQueName, BlockSize, FulBlockCount, SM_READWRITE) < 0) { //printf ("Create Full Pool Failed.%s\n", pQueName); return false; } } if (PrevBlockSize) { m_pPrevImageData = (PVOID)new CShareMemory_Circle(); if (((CShareMemory_Circle*)m_pPrevImageData)->Create(PrevQueName.c_str(), PrevBlockSize, PrevBlockCount, SM_READWRITE) < 0) { //printf ("Create Prev Pool Failed.%s\n", PrevQueName.c_str ()); return false; } } //try open if (m_pFullImageQueue) { if (((CShareMemory_Circle*) m_pFullImageQueue)->Open (pQueName, SM_READWRITE) < 0) { //printf ("Open Full Pool Failed.%s\n", pQueName); return false; } } if (m_pPrevImageData) { if (((CShareMemory_Circle*) m_pPrevImageData)->Open (PrevQueName.c_str (), SM_READWRITE) < 0) { //printf ("Open Prev Pool Failed.%s\n", PrevQueName.c_str ()); return false; } else { } } return ret; } ShareMemoryBlockID ImagePoolEx::AddFrameWithHead(BLOCK_IMAGE_TYPE Type, string &imageHead, char* pFrameBuff, DWORD FrameSize) { ShareMemoryBlockID id = UnvalidSMBid; if (Type == PREV_BLOCK_IMG) { if (m_pPrevImageData) { id = ((CShareMemory_Circle*)m_pPrevImageData)->PushRaw(imageHead, pFrameBuff, FrameSize, true); } } else { if (m_pFullImageQueue) { id = ((CShareMemory_Circle*)m_pFullImageQueue)->PushRaw(imageHead, pFrameBuff, FrameSize, true); } } return id; } void ImagePoolEx::ClearPool() { if (m_pFullImageQueue) { ((CShareMemory_Circle*)m_pFullImageQueue)->Clear(); delete (CShareMemory_Circle*)m_pFullImageQueue; m_pFullImageQueue = NULL; } if (m_pPrevImageData) { ((CShareMemory_Circle*)m_pPrevImageData)->Clear(); delete (CShareMemory_Circle*)m_pPrevImageData; m_pPrevImageData = NULL; } }