Advertisement
Guest User

Untitled

a guest
May 29th, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.94 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. using System.Threading;
  5. using System.Windows.Forms;
  6.  
  7. namespace TH.Parking.Wrapper.HBCamera
  8. {
  9. public class CameraUtilities
  10. {
  11. public static bool AllowRecordVideo { get; set; }
  12. private T1800.STREAM_READ_CALLBACK m_del;
  13. private IntPtr m_tmpContext;
  14. private GCHandle m_handle;
  15. private HB18TCamera[] m_ListCameras;
  16. Mutex m_Mutext = new Mutex();
  17. public HB18TCamera[] ListCameras
  18. {
  19. get { return m_ListCameras; }
  20. set { m_ListCameras = value; }
  21. }
  22. private ulong[] m_callBackChannels;
  23.  
  24. public static HB18TCamera[] InitCameras(string rootFolderPath, string videoFolderPath, int maxRecordFileSize)
  25. {
  26.  
  27. T1800.T18_SetDefaultVideoStandard(T1800.VideoStandard.StandardNone);
  28. int dsps = T1800.T18_InitDSPs();
  29. int totalDsps = T1800.T18_GetTotalDSPs();
  30. int totalChannels = T1800.T18_GetTotalChannels();
  31. HB18TCamera[] lstCamera = new HB18TCamera[totalChannels];
  32. IntPtr channelHandle = new IntPtr();
  33. string storeFilePath = string.Empty;
  34. string storeVideoPath = string.Empty;
  35. for (int i = 0; i < totalChannels; i++)
  36. {
  37. storeFilePath = string.Format("{0}\\{1}", rootFolderPath, (i + 1).ToString());
  38. storeVideoPath = string.Format("{0}\\{1}", videoFolderPath, (i + 1).ToString());
  39.  
  40. if (!Directory.Exists(storeFilePath))
  41. Directory.CreateDirectory(storeFilePath);
  42.  
  43. if (!Directory.Exists(storeVideoPath))
  44. Directory.CreateDirectory(storeVideoPath);
  45.  
  46. channelHandle = T1800.T18_ChannelOpen(i);
  47. lstCamera[i] = new HB18TCamera(channelHandle, storeFilePath, storeVideoPath, maxRecordFileSize);
  48. }
  49.  
  50. return lstCamera;
  51. }
  52.  
  53. public static bool DeInits()
  54. {
  55. if (T1800.T18_DeInitDSPs() == -1) return false;
  56. else return true;
  57. }
  58.  
  59. int cameraCurrentIndex = -1;
  60.  
  61. public void StartRecord()
  62. {
  63. if (this.ListCameras != null)
  64. {
  65. bool bRes = true;
  66. try
  67. {
  68. int tmpError = -1;
  69. m_tmpContext = new IntPtr();
  70. m_handle = new GCHandle();
  71. m_callBackChannels = new ulong[m_ListCameras.Length];
  72.  
  73. for (int i = 0; i < m_ListCameras.Length; i++)
  74. {
  75. m_callBackChannels[i] = 10;
  76. cameraCurrentIndex = 0;
  77. IntPtr channelHandle = T1800.T18_ChannelOpen(cameraCurrentIndex);
  78. m_ListCameras[cameraCurrentIndex].ChannelHandle = channelHandle;
  79. T1800.T18_CaptureIFrame(m_ListCameras[i].ChannelHandle);
  80.  
  81.  
  82.  
  83. m_ListCameras[i].BeginRecord();
  84. if (AllowRecordVideo)
  85. {
  86. m_del = new T1800.STREAM_READ_CALLBACK(StreamReadCallBack);
  87. m_tmpContext = m_ListCameras[i].ChannelHandle;
  88. tmpError = T1800.T18_RegisterStreamReadCallback(m_del, ref m_tmpContext);
  89. }
  90. }
  91.  
  92.  
  93.  
  94.  
  95. if (tmpError == -1) bRes = false;
  96. }
  97. catch (Exception ex)
  98. {
  99. Log.Logger.Error(ex);
  100. bRes = false;
  101. }
  102. }
  103. }
  104.  
  105. private void OpenAndRecordChanel()
  106. {
  107. IntPtr channelHandle = T1800.T18_ChannelOpen(cameraCurrentIndex);
  108. m_ListCameras[cameraCurrentIndex].ChannelHandle = channelHandle;
  109. T1800.T18_CaptureIFrame(channelHandle);
  110. m_ListCameras[cameraCurrentIndex].BeginRecord();
  111. int error = T1800.T18_SetLogoDisplayMode(channelHandle, T1800.ToUlong(255, 255, 255), true, 0);
  112. if (error == 0)
  113. {
  114. int length = 200 * 200 * 4;
  115. IntPtr imgBuff = new IntPtr(length);
  116. int w, h;
  117. w = h = 96;
  118.  
  119. IntPtr orgBuff = new IntPtr(704 * 576 * 2);
  120. ulong size = (704 * 576 * 2);
  121. int tmp = T1800.T18_GetOriginalImage(channelHandle, orgBuff, ref size, 1);
  122. if (tmp == 0)
  123. {
  124. error = T1800.T18_SetLogo(channelHandle, 0, 0, 96, 96, orgBuff);
  125. }
  126.  
  127. //error = T1800.T18_LoadYUV444FromBmpFile("logo.bmp", ref imgBuff, length, ref w, ref h);
  128. if (error == 0)
  129. {
  130. error = T1800.T18_SetLogo(channelHandle, 0, 0, 96, 96, imgBuff);
  131. }
  132. }
  133. }
  134.  
  135. private void AssignCallBackChannel(ulong channelHandle)
  136. {
  137. for (int i = 0; i < m_callBackChannels.Length; i++)
  138. {
  139. if (m_callBackChannels[i] == 10)
  140. {
  141. m_callBackChannels[i] = channelHandle;
  142. break;
  143. }
  144. }
  145. }
  146.  
  147. private int GetCallBackIndex(ulong channelHandle)
  148. {
  149. int tmp = 0;
  150. for (int i = 0; i < m_callBackChannels.Length; i++)
  151. {
  152. tmp = i;
  153. if (m_callBackChannels[i] == channelHandle) break;
  154. }
  155. return tmp;
  156. }
  157.  
  158. private int ImageStreamReadCallBack(ulong channelHandle, IntPtr context)
  159. {
  160. return 0;
  161. }
  162.  
  163. private int StreamReadCallBack(ulong channelHandle, IntPtr context)
  164. {
  165. Log.Logger.Error("enter m_del = new T1800.STREAM_READ_CALLBACK(StreamReadCallBack);");
  166. try
  167. {
  168.  
  169. Application.DoEvents();
  170. GC.KeepAlive(m_del);
  171. GC.KeepAlive(m_tmpContext);
  172. GC.KeepAlive(m_handle);
  173. GC.KeepAlive(m_callBackChannels);
  174. GC.KeepAlive(m_Mutext);
  175. GC.KeepAlive(m_ListCameras);
  176. if (channelHandle == 0)
  177. return 0;
  178. m_Mutext.WaitOne();
  179. Application.DoEvents();
  180. HB18TCamera current = null;
  181. foreach (var item in m_ListCameras)
  182. {
  183. if (item.CallBackChannelHandle == channelHandle)
  184. {
  185. current = item;
  186. break;
  187. }
  188. }
  189. if (current != null)
  190. {
  191. current.SaveCallBackData();
  192. Log.Logger.Error("SaveCallBackData 1");
  193. }
  194. else if (cameraCurrentIndex < m_ListCameras.Length)
  195. {
  196. m_ListCameras[cameraCurrentIndex].CallBackChannelHandle = channelHandle;
  197. m_ListCameras[cameraCurrentIndex].SaveCallBackData();
  198. Log.Logger.Error("SaveCallBackData 2");
  199.  
  200. cameraCurrentIndex++;
  201. if (cameraCurrentIndex < m_ListCameras.Length)
  202. {
  203. m_ListCameras[cameraCurrentIndex].ChannelHandle = T1800.T18_ChannelOpen(cameraCurrentIndex);
  204. T1800.T18_CaptureIFrame(m_ListCameras[cameraCurrentIndex].ChannelHandle);
  205. m_ListCameras[cameraCurrentIndex].BeginRecord();
  206. }
  207. }
  208.  
  209. if (m_ListCameras[cameraCurrentIndex].CallBackChannelHandle == 0)
  210. m_ListCameras[cameraCurrentIndex].CallBackChannelHandle = channelHandle;
  211. else if (m_ListCameras[cameraCurrentIndex].CallBackChannelHandle == channelHandle)
  212. {
  213. m_ListCameras[GetCallBackIndex(channelHandle)].SaveCallBackData();
  214. Log.Logger.Error("SaveCallBackData 3");
  215. }
  216. AssignCallBackChannel(channelHandle);
  217. Application.DoEvents();
  218. int index = (int)channelHandle;
  219. if (channelHandle >= (ulong)m_ListCameras.Length)
  220. {
  221. index = (int)(channelHandle / 4294967297);
  222. }
  223. if (index > m_ListCameras.Length || m_ListCameras.Length < 0)
  224. index = 0;
  225. m_ListCameras[index].SaveCallBackData();
  226. Log.Logger.Error("SaveCallBackData 4");
  227. Application.DoEvents();
  228.  
  229. m_Mutext.ReleaseMutex();
  230. }
  231. catch (Exception ex)
  232. {
  233.  
  234. Log.Logger.Error(ex);
  235. //throw;
  236. }
  237. return 0;
  238. }
  239. }
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement