shareMemWR.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. #include "shareMemWR.h"
  2. ShareMemWR::ShareMemWR(void)
  3. {
  4. m_pDataPtr = NULL;
  5. m_pElement = NULL;
  6. m_dwShareMemIdFullIdx = 0;
  7. for (DWORD i = 0; i < SM_API_BLOCK_COUNT; i++)
  8. {
  9. m_dwShareMemIdFull[i] = INVALID_SHAREMEM_ID;
  10. }
  11. m_dwShareMemIdPreview = INVALID_SHAREMEM_ID;
  12. pImgData = new ImgDataInfo();
  13. pImgData->SetKey("ImgDataInfo");
  14. m_shareMemclient.Register();
  15. m_pImgPrev = (C2DGrayImageData*)m_shareMemclient.CreateDataElement(FUNCTION_DATATYPE_2D_GRAY_IMG);
  16. m_pImgFull = (C2DGrayImageData*)m_shareMemclient.CreateDataElement(FUNCTION_DATATYPE_2D_GRAY_IMG);
  17. }
  18. ShareMemWR::~ShareMemWR(void)
  19. {
  20. m_shareMemclient.ReleaseDataElement(m_pImgPrev);
  21. m_shareMemclient.ReleaseDataElement(m_pImgFull);
  22. if(pImgData)
  23. {
  24. delete pImgData;
  25. pImgData = NULL;
  26. }
  27. }
  28. unsigned long long &ShareMemWR::GetNextSmId()
  29. {
  30. ++m_dwShareMemIdFullIdx;
  31. if (m_dwShareMemIdFullIdx >= SM_API_BLOCK_COUNT)
  32. {
  33. m_dwShareMemIdFullIdx = 0;
  34. }
  35. return m_dwShareMemIdFull[m_dwShareMemIdFullIdx];
  36. }
  37. //ÄÚ´æID->¿ìÊý¾Ý
  38. void * ShareMemWR::GetDataBuf(unsigned long long nShareMemID, char *&pBuff,DWORD &Size)
  39. {
  40. Size = 0;
  41. pBuff = NULL;
  42. C2DGrayImageData *pC2DGImageData = NULL;
  43. CBaseFunctionDataElement *vecReadElement = NULL;
  44. UINT nCount = 0;
  45. m_shareMemclient.ReadShareMem(nShareMemID, &vecReadElement, 1, nCount);
  46. if (nCount>0)
  47. {
  48. if (FUNCTION_DATATYPE_2D_GRAY_IMG == vecReadElement->GetDataType())
  49. {
  50. IMG2DGRAYINFO info2d;
  51. pC2DGImageData = (C2DGrayImageData*)vecReadElement;
  52. pC2DGImageData->GetInfo(info2d);
  53. pBuff = (char*)pC2DGImageData->GetData(nCount);
  54. //info2d.nBits
  55. //info2d.nWidth
  56. //info2d.nHeight
  57. DWORD sizePerPix = (info2d.nBits + 7) / 8 ;
  58. Size = (info2d.nWidth) * (info2d.nHeight) * (sizePerPix);
  59. return pC2DGImageData;
  60. }
  61. }
  62. return NULL;
  63. }
  64. void ShareMemWR::ReleaseDataBuf(void * Handle)
  65. {
  66. if(Handle)
  67. {
  68. C2DGrayImageData *pC2DGImageData = (C2DGrayImageData*)Handle;
  69. m_shareMemclient.ReleaseDataElement(pC2DGImageData);
  70. }
  71. }
  72. //void CallGetDataBuf()
  73. //{
  74. // CommonLogicClient WheelClient;
  75. // HANDLE notifyhandle = WheelClient.GetNotifyHandle();
  76. // ResDataObject data;
  77. // ResDataObject ResParam;
  78. // ResDataObject ReqParam;
  79. // ResDataObject resContext;
  80. // PACKET_CMD cmd;
  81. //
  82. // WaitForSingleObject(notifyhandle, INFINITE);
  83. // while (WheelClient.IsDataArrived())
  84. // {
  85. // //cmd = PacketAnalizer::GetPacketCmd(&rMsg);
  86. //
  87. // cmd = WheelClient.ReadCmd(data);
  88. // printf("cmd:%d\n", cmd);
  89. // if (cmd == PACKET_CMD_DATA)
  90. // {
  91. // string strKey = PacketAnalizer::GetPacketKey(&data);
  92. // ResDataObject resImg;
  93. // PacketAnalizer::GetPacketContext(&data, resImg);
  94. //
  95. // ImgDataInfo ImgData;
  96. // ImgData.SetResDataObject(resImg);
  97. // GetDataBuf(ImgData.nShareMemID, ImgData.nHeight, ImgData.nWidth, ImgData.nViewType);
  98. // }
  99. // }
  100. //}
  101. typedef enum Image_View_Type_internal
  102. {
  103. IMAGE_FULL = 0,
  104. IMAGE_PREVIEW,
  105. IMAGE_AEC_PREVIEW,
  106. IMAGE_CAL
  107. }IMAGE_VIEW_TYPE_INTERNAL;
  108. bool ShareMemWR::GetShareMemBuf(ImgDataInfo *pImgData)
  109. {
  110. //LogInfo("GetShareMemBuf start");
  111. bool bRes = true;
  112. C2DGrayImageData *pC2DGrayImageData = NULL;
  113. if (pImgData->nViewType == IMAGE_FULL)
  114. {
  115. pC2DGrayImageData = m_pImgFull;
  116. }
  117. else if (pImgData->nViewType == IMAGE_PREVIEW)
  118. {
  119. pC2DGrayImageData = m_pImgPrev;
  120. }
  121. else if (pImgData->nViewType == IMAGE_CAL)
  122. {
  123. pC2DGrayImageData = m_pImgFull;
  124. }
  125. else
  126. {
  127. //LogInfo("eType undefine");
  128. return false;
  129. }
  130. IMG2DGRAYINFO stInfo;
  131. stInfo.nWidth = pImgData->nWidth;
  132. stInfo.nHeight = pImgData->nHeight;
  133. stInfo.nBits = pImgData->nBit;
  134. stInfo.nFrameId = (unsigned int)pImgData->nImageID;
  135. if (pC2DGrayImageData->CreateImageData(stInfo, MEM_MEMORY))
  136. {
  137. UINT nLen = 0;
  138. m_pDataPtr = (unsigned short*)pC2DGrayImageData->GetData(nLen);
  139. m_pElement = pC2DGrayImageData;
  140. }
  141. else
  142. {
  143. // LogInfo("m_pImg->CreateImageData return false");
  144. return false;
  145. }
  146. // LogInfo("GetShareMemBuf done");
  147. return bRes;
  148. }
  149. int ShareMemWR::WriteImageToShareMem(unsigned long long &dwShareMemId)
  150. {
  151. //LogInfo("WriteImageToShareMem start");
  152. int nRes;
  153. nRes = m_shareMemclient.WriteShareMem(&m_pElement, 1, dwShareMemId);
  154. //LogInfo("WriteImageToShareMem done");
  155. return nRes;
  156. }
  157. //bool SendImageInfo(ImgDataInfo*PImgDataInfo)
  158. //{
  159. // string str = PImgDataInfo->GetVal();
  160. // //LogInfo(str);
  161. //
  162. // RET_STATUS ret;
  163. // ResDataObject NotifyData;
  164. // ResDataObject resValue;
  165. // PImgDataInfo->GetResDataObject(resValue);
  166. // PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_DATA, PImgDataInfo->GetKey(), resValue);
  167. // ret = CmdFromLogicDev(&NotifyData);
  168. //
  169. // //LogInfo("SendImageInfo done");
  170. //
  171. // return true;
  172. //}
  173. RET_STATUS ShareMemWR::BufferToNotify(void * pOemImage,DWORD ImageSize,ImgDataInfo* PImgDataInfo)
  174. {
  175. RET_STATUS Ret = RET_SUCCEED;
  176. DWORD sizePerPix = (PImgDataInfo->nBit + 7) / 8;
  177. DWORD Size = (PImgDataInfo->nWidth) * (PImgDataInfo->nHeight) * (sizePerPix);
  178. if (Size != ImageSize)
  179. {
  180. return RET_FAILED;
  181. }
  182. if (GetShareMemBuf(PImgDataInfo))
  183. {
  184. memcpy(m_pDataPtr, pOemImage, Size);
  185. }
  186. else
  187. {
  188. //LogError("GetShareMemBuf return false");
  189. return RET_FAILED;
  190. }
  191. if (PImgDataInfo->nViewType==IMAGE_PREVIEW)
  192. {
  193. if (WriteImageToShareMem(m_dwShareMemIdPreview) == RES_SUCCESS)
  194. {
  195. PImgDataInfo->nShareMemID = m_dwShareMemIdPreview;
  196. //SendImageInfo(PImgDataInfo);
  197. }
  198. }
  199. else
  200. {
  201. if (WriteImageToShareMem(m_dwShareMemIdFull[m_dwShareMemIdFullIdx]) == RES_SUCCESS)
  202. {
  203. PImgDataInfo->nShareMemID = m_dwShareMemIdFull[m_dwShareMemIdFullIdx];
  204. GetNextSmId();//id++
  205. //SendImageInfo(PImgDataInfo);
  206. }
  207. }
  208. //LogInfo("DTL_FetchFrame done");
  209. return Ret;
  210. }