#include "StdAfx.h" #include "CHCameraControls/CameraBuffer.h" #include "CHImageControls/CHImageData.h" CCameraBuffer::CCameraBuffer() : CSharedMemory() { //m_nCameraIndex = nCameraIndex; m_nScanCount = 1; m_nBufferWidth = 0; m_nBufferHeight = 0; m_nBufferChannels = 0; m_nBufferCount = 0; m_pBufferInfo = NULL; m_pBufferData = NULL; m_pBufferImage = NULL; m_nBufferInfoSize = sizeof(CCameraBufferInfo); m_nBufferDataSize = 0; } CCameraBuffer::~CCameraBuffer(void) { DeleteBuffer(); } void CCameraBuffer::DeleteBuffer() { Reset(); if (m_pBufferImage) { for (int i=0; i=m_nScanCount) return FALSE; DWORD nTotalImageBuffSize = m_nBufferDataSize * m_nBufferCount; memset(m_pBufferData[nScanIndex], 0, nTotalImageBuffSize); return TRUE; } BOOL CCameraBuffer::CreateBuffer(int nWidth, int nHeight, int nChannels, int nCount, const CString& strBufferName, int nScanCount) { DeleteBuffer(); m_nBufferWidth = nWidth; m_nBufferHeight = nHeight; m_nBufferChannels = nChannels; m_nBufferCount = nCount; m_nBufferDataSize = m_nBufferWidth * m_nBufferHeight * m_nBufferChannels; m_nScanCount = nScanCount; DWORD nTotalAsignedBuffSize = -1; DWORD64 nTotalImageInfoSize = DWORD64(m_nBufferInfoSize); DWORD64 nTotalImageDataSize = DWORD64(m_nBufferDataSize) * DWORD64(m_nBufferCount); DWORD64 nMaxSize = nTotalImageInfoSize + nTotalImageDataSize; if (nMaxSize>=nTotalAsignedBuffSize) { return FALSE; } nTotalAsignedBuffSize = DWORD(nMaxSize); // alloc semaphore SetMemoryCount(m_nScanCount); m_pSemaPhore = new CSemaphore*[m_nScanCount]; m_pSharedMemory = new BYTE*[m_nScanCount]; m_pAsignedMemory = new HANDLE[m_nScanCount]; m_pBufferInfo = new CCameraBufferInfo*[m_nScanCount]; m_pBufferData = new BYTE*[m_nScanCount]; m_pBufferImage = new CCHImageData*[m_nScanCount]; /* CString strValue = _T(""); strValue.Format(_T("_%02d_"), m_nCameraIndex); strValue = strBufferName + strValue; */ CString strValue = strBufferName + _T("_"); CString strTemp = _T(""); for (int i=0; i=m_nScanCount) return NULL; return m_pBufferInfo[nScanIndex]; } const BYTE* CCameraBuffer::GetBufferData(int nScanIndex) const { if (nScanIndex<0 || nScanIndex>=m_nScanCount) return NULL; return m_pBufferData[nScanIndex]; } const BYTE* CCameraBuffer::GetBufferData(int nScanIndex, int nBufferIndex) const { if (nScanIndex<0 || nScanIndex>=m_nScanCount) return NULL; if (nBufferIndex<0 || nBufferIndex>=m_nBufferCount) return NULL; return ( m_pBufferData[nScanIndex] + (m_nBufferDataSize*nBufferIndex) ); } CCameraBufferInfo* CCameraBuffer::GetBufferInfo(int nScanIndex) { if (nScanIndex<0 || nScanIndex>=m_nScanCount) return NULL; return m_pBufferInfo[nScanIndex]; } BYTE* CCameraBuffer::GetBufferData(int nScanIndex) { if (nScanIndex<0 || nScanIndex>=m_nScanCount) return NULL; return m_pBufferData[nScanIndex]; } BYTE* CCameraBuffer::GetBufferData(int nScanIndex, int nBufferIndex) { if (nScanIndex<0 || nScanIndex>=m_nScanCount) return NULL; if (nBufferIndex<0 || nBufferIndex>=m_nBufferCount) return NULL; return ( m_pBufferData[nScanIndex] + (m_nBufferDataSize*nBufferIndex) ); } CCameraBufferInfo* CCameraBuffer::GetBufferData(int nScanIndex, BYTE** pBufferData) { if (LockMemory(nScanIndex)==FALSE) return NULL; *pBufferData = pBufferData[nScanIndex]; return m_pBufferInfo[nScanIndex]; } CCameraBufferInfo* CCameraBuffer::GetBufferData(int nScanIndex, int nBufferIndex, BYTE** pBufferData) { if (nBufferIndex<0 || nBufferIndex>=m_nBufferCount) return NULL; if (LockMemory(nScanIndex)==FALSE) return NULL; *pBufferData = ( pBufferData[nScanIndex] + (m_nBufferDataSize*nBufferIndex) ); return m_pBufferInfo[nScanIndex]; } BOOL CCameraBuffer::SetBufferInfo(int nScanIndex, CCameraBufferInfo *pBufferInfo) { if (LockMemory(nScanIndex)==FALSE) return FALSE; memcpy(m_pBufferInfo[nScanIndex], pBufferInfo, m_nBufferInfoSize); return UnlockMemory(nScanIndex); } BOOL CCameraBuffer::SetBufferData(int nScanIndex, int nBufferIndex, BYTE* pBufferData, int nBufferSize) { if (nBufferIndex<0 || nBufferIndex>=m_nBufferCount) return NULL; if (nBufferSize>(int)m_nBufferDataSize) return FALSE; if (LockMemory(nScanIndex)==FALSE) return FALSE; // À̹ÌÁö ±â·Ï memcpy(m_pBufferData[nScanIndex]+(m_nBufferDataSize*nBufferIndex), pBufferData, m_nBufferDataSize); return UnlockMemory(nScanIndex); } BOOL CCameraBuffer::SetBufferData(int nScanIndex, int nBufferIndex, CCameraBufferInfo *pBufferInfo, BYTE* pBufferData, int nBufferSize) { if (nBufferIndex<0 || nBufferIndex>=m_nBufferCount) return NULL; if (nBufferSize>(int)m_nBufferDataSize) return FALSE; if (LockMemory(nScanIndex)==FALSE) return FALSE; // À̹ÌÁö Á¤º¸ ±â·Ï memcpy(m_pBufferInfo[nScanIndex], pBufferInfo, m_nBufferInfoSize); // À̹ÌÁö ±â·Ï memcpy(m_pBufferData[nScanIndex]+(m_nBufferDataSize*nBufferIndex), pBufferData, m_nBufferDataSize); return UnlockMemory(nScanIndex); }