123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- #include "shareMemWR.h"
- ShareMemWR::ShareMemWR(void)
- {
- m_pDataPtr = NULL;
- m_pElement = NULL;
- m_dwShareMemIdFullIdx = 0;
- for (DWORD i = 0; i < SM_API_BLOCK_COUNT; i++)
- {
- m_dwShareMemIdFull[i] = INVALID_SHAREMEM_ID;
- }
- m_dwShareMemIdPreview = INVALID_SHAREMEM_ID;
- pImgData = new ImgDataInfo();
- pImgData->SetKey("ImgDataInfo");
- m_shareMemclient.Register();
- m_pImgPrev = (C2DGrayImageData*)m_shareMemclient.CreateDataElement(FUNCTION_DATATYPE_2D_GRAY_IMG);
- m_pImgFull = (C2DGrayImageData*)m_shareMemclient.CreateDataElement(FUNCTION_DATATYPE_2D_GRAY_IMG);
-
- }
- ShareMemWR::~ShareMemWR(void)
- {
- m_shareMemclient.ReleaseDataElement(m_pImgPrev);
- m_shareMemclient.ReleaseDataElement(m_pImgFull);
- if(pImgData)
- {
- delete pImgData;
- pImgData = NULL;
- }
- }
- unsigned long long &ShareMemWR::GetNextSmId()
- {
- ++m_dwShareMemIdFullIdx;
- if (m_dwShareMemIdFullIdx >= SM_API_BLOCK_COUNT)
- {
- m_dwShareMemIdFullIdx = 0;
- }
- return m_dwShareMemIdFull[m_dwShareMemIdFullIdx];
- }
- //ÄÚ´æID->¿ìÊý¾Ý
- void * ShareMemWR::GetDataBuf(unsigned long long nShareMemID, char *&pBuff,DWORD &Size)
- {
- Size = 0;
- pBuff = NULL;
- C2DGrayImageData *pC2DGImageData = NULL;
- CBaseFunctionDataElement *vecReadElement = NULL;
- UINT nCount = 0;
- m_shareMemclient.ReadShareMem(nShareMemID, &vecReadElement, 1, nCount);
- if (nCount>0)
- {
- if (FUNCTION_DATATYPE_2D_GRAY_IMG == vecReadElement->GetDataType())
- {
- IMG2DGRAYINFO info2d;
-
- pC2DGImageData = (C2DGrayImageData*)vecReadElement;
- pC2DGImageData->GetInfo(info2d);
- pBuff = (char*)pC2DGImageData->GetData(nCount);
- //info2d.nBits
- //info2d.nWidth
- //info2d.nHeight
- DWORD sizePerPix = (info2d.nBits + 7) / 8 ;
- Size = (info2d.nWidth) * (info2d.nHeight) * (sizePerPix);
-
- return pC2DGImageData;
- }
- }
- return NULL;
- }
- void ShareMemWR::ReleaseDataBuf(void * Handle)
- {
- if(Handle)
- {
- C2DGrayImageData *pC2DGImageData = (C2DGrayImageData*)Handle;
- m_shareMemclient.ReleaseDataElement(pC2DGImageData);
- }
- }
- //void CallGetDataBuf()
- //{
- // CommonLogicClient WheelClient;
- // HANDLE notifyhandle = WheelClient.GetNotifyHandle();
- // ResDataObject data;
- // ResDataObject ResParam;
- // ResDataObject ReqParam;
- // ResDataObject resContext;
- // PACKET_CMD cmd;
- //
- // WaitForSingleObject(notifyhandle, INFINITE);
- // while (WheelClient.IsDataArrived())
- // {
- // //cmd = PacketAnalizer::GetPacketCmd(&rMsg);
- //
- // cmd = WheelClient.ReadCmd(data);
- // printf("cmd:%d\n", cmd);
- // if (cmd == PACKET_CMD_DATA)
- // {
- // string strKey = PacketAnalizer::GetPacketKey(&data);
- // ResDataObject resImg;
- // PacketAnalizer::GetPacketContext(&data, resImg);
- //
- // ImgDataInfo ImgData;
- // ImgData.SetResDataObject(resImg);
- // GetDataBuf(ImgData.nShareMemID, ImgData.nHeight, ImgData.nWidth, ImgData.nViewType);
- // }
- // }
- //}
- typedef enum Image_View_Type_internal
- {
- IMAGE_FULL = 0,
- IMAGE_PREVIEW,
- IMAGE_AEC_PREVIEW,
- IMAGE_CAL
- }IMAGE_VIEW_TYPE_INTERNAL;
- bool ShareMemWR::GetShareMemBuf(ImgDataInfo *pImgData)
- {
- //LogInfo("GetShareMemBuf start");
- bool bRes = true;
- C2DGrayImageData *pC2DGrayImageData = NULL;
- if (pImgData->nViewType == IMAGE_FULL)
- {
- pC2DGrayImageData = m_pImgFull;
- }
- else if (pImgData->nViewType == IMAGE_PREVIEW)
- {
- pC2DGrayImageData = m_pImgPrev;
- }
- else if (pImgData->nViewType == IMAGE_CAL)
- {
- pC2DGrayImageData = m_pImgFull;
- }
- else
- {
- //LogInfo("eType undefine");
- return false;
- }
- IMG2DGRAYINFO stInfo;
- stInfo.nWidth = pImgData->nWidth;
- stInfo.nHeight = pImgData->nHeight;
- stInfo.nBits = pImgData->nBit;
- stInfo.nFrameId = (unsigned int)pImgData->nImageID;
- if (pC2DGrayImageData->CreateImageData(stInfo, MEM_MEMORY))
- {
- UINT nLen = 0;
- m_pDataPtr = (unsigned short*)pC2DGrayImageData->GetData(nLen);
- m_pElement = pC2DGrayImageData;
- }
- else
- {
- // LogInfo("m_pImg->CreateImageData return false");
- return false;
- }
- // LogInfo("GetShareMemBuf done");
- return bRes;
- }
- int ShareMemWR::WriteImageToShareMem(unsigned long long &dwShareMemId)
- {
- //LogInfo("WriteImageToShareMem start");
- int nRes;
- nRes = m_shareMemclient.WriteShareMem(&m_pElement, 1, dwShareMemId);
- //LogInfo("WriteImageToShareMem done");
- return nRes;
- }
- //bool SendImageInfo(ImgDataInfo*PImgDataInfo)
- //{
- // string str = PImgDataInfo->GetVal();
- // //LogInfo(str);
- //
- // RET_STATUS ret;
- // ResDataObject NotifyData;
- // ResDataObject resValue;
- // PImgDataInfo->GetResDataObject(resValue);
- // PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_DATA, PImgDataInfo->GetKey(), resValue);
- // ret = CmdFromLogicDev(&NotifyData);
- //
- // //LogInfo("SendImageInfo done");
- //
- // return true;
- //}
- RET_STATUS ShareMemWR::BufferToNotify(void * pOemImage,DWORD ImageSize,ImgDataInfo* PImgDataInfo)
- {
- RET_STATUS Ret = RET_SUCCEED;
- DWORD sizePerPix = (PImgDataInfo->nBit + 7) / 8;
- DWORD Size = (PImgDataInfo->nWidth) * (PImgDataInfo->nHeight) * (sizePerPix);
- if (Size != ImageSize)
- {
- return RET_FAILED;
- }
- if (GetShareMemBuf(PImgDataInfo))
- {
- memcpy(m_pDataPtr, pOemImage, Size);
- }
- else
- {
- //LogError("GetShareMemBuf return false");
- return RET_FAILED;
- }
- if (PImgDataInfo->nViewType==IMAGE_PREVIEW)
- {
- if (WriteImageToShareMem(m_dwShareMemIdPreview) == RES_SUCCESS)
- {
- PImgDataInfo->nShareMemID = m_dwShareMemIdPreview;
- //SendImageInfo(PImgDataInfo);
- }
- }
- else
- {
- if (WriteImageToShareMem(m_dwShareMemIdFull[m_dwShareMemIdFullIdx]) == RES_SUCCESS)
- {
- PImgDataInfo->nShareMemID = m_dwShareMemIdFull[m_dwShareMemIdFullIdx];
- GetNextSmId();//id++
- //SendImageInfo(PImgDataInfo);
- }
- }
- //LogInfo("DTL_FetchFrame done");
- return Ret;
- }
|