libsharequeue.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. #include "libsharequeue.h"
  2. #include "libsharememory.h"
  3. #include "inner_log.h"
  4. #if defined(_MSC_VER)
  5. #include <windows.h>
  6. #else
  7. #define ENABLE_LOG_4_SHAREQUEUE
  8. #endif //_MSC_VER
  9. typedef struct Qnode
  10. {
  11. unsigned int videoframeindex;
  12. unsigned int nextqnodeindex;
  13. }Qnode, *queueptr;
  14. typedef struct linkqueue
  15. {
  16. unsigned int frontindex;
  17. unsigned int rearindex;
  18. unsigned int queuelens;
  19. }linkqueue;
  20. class libsharequeue_impl
  21. {
  22. private:
  23. Clibsharememory4SDK m_ShareMem;
  24. void* m_lpMem;
  25. linkqueue*m_pQueue;
  26. int m_nTimeSignLens;
  27. int m_nQueueAddrLens;
  28. int m_nQnodeAddrLens;
  29. int m_nFrameAddrLens;
  30. int m_nDataAddrlens;
  31. char* szShareMemName;
  32. unsigned long aQnodeAddr[MAX_SHAREQUEUE_LENS];
  33. unsigned long aShareFrameAddr[MAX_SHAREQUEUE_LENS];
  34. unsigned long aImgDataAddr[MAX_SHAREQUEUE_LENS];
  35. unsigned long nTimeSignAddr;
  36. public:
  37. libsharequeue_impl(char* queuename, bool newcreate, int size= MAX_SHAREQNODE_SIZE)
  38. {
  39. m_lpMem = NULL;
  40. m_pQueue = NULL;
  41. szShareMemName = NULL;
  42. m_nQueueAddrLens = 0;
  43. m_nQnodeAddrLens = 0;
  44. m_nTimeSignLens = 0;
  45. m_nFrameAddrLens = 0;
  46. m_nDataAddrlens = 0;
  47. for(int i=0;i< MAX_SHAREQUEUE_LENS;i++)
  48. {
  49. aQnodeAddr[i] = 0;
  50. aShareFrameAddr[i] = 0;
  51. aImgDataAddr[i] = 0;
  52. }
  53. nTimeSignAddr = 0;
  54. InitQueue(queuename, newcreate, size);
  55. }
  56. ~libsharequeue_impl()
  57. {
  58. ClearQueue();
  59. }
  60. //初始化队列
  61. bool InitQueue(const char* szName, bool createFlag, int size)
  62. {
  63. aos_debug_log((LB, "enter init queue %s, %s", szName, createFlag ? "true" : "false"));
  64. m_nQueueAddrLens = sizeof(linkqueue);
  65. m_nQnodeAddrLens = MAX_SHAREQUEUE_LENS *sizeof(Qnode);
  66. m_nFrameAddrLens = MAX_SHAREQUEUE_LENS *sizeof(shareq_frame);
  67. m_nDataAddrlens = MAX_SHAREQUEUE_LENS * size;
  68. m_nTimeSignLens = sizeof(unsigned int);
  69. unsigned long nMemTotalNum = m_nTimeSignLens+m_nQueueAddrLens+m_nQnodeAddrLens+m_nFrameAddrLens+m_nDataAddrlens;
  70. #if defined(_MSC_VER)
  71. if (m_ShareMem.Create(szName, nMemTotalNum) && (m_nDataAddrlens != 0)) {
  72. m_lpMem = m_ShareMem.Lock(1000);
  73. if (m_lpMem != NULL) {
  74. memset(m_lpMem, 0, nMemTotalNum);
  75. m_pQueue = (linkqueue*)m_lpMem;
  76. for (int i = 0; i < MAX_SHAREQUEUE_LENS; i++) {
  77. aQnodeAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + sizeof(Qnode) * i;
  78. aShareFrameAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + sizeof(shareq_frame) * i;
  79. aImgDataAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + size * i;
  80. }
  81. nTimeSignAddr = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + m_nDataAddrlens;
  82. m_pQueue->frontindex = m_pQueue->rearindex = 0;
  83. m_pQueue->queuelens = 0;
  84. m_ShareMem.Unlock();
  85. }
  86. } else if (m_ShareMem.Open(szName, nMemTotalNum)) {
  87. int i = m_ShareMem.GetBytes();
  88. m_lpMem = m_ShareMem.Lock(1000);
  89. if (m_lpMem != NULL) {
  90. m_pQueue = (linkqueue*)m_lpMem;
  91. for (int i = 0; i < MAX_SHAREQUEUE_LENS; i++) {
  92. aQnodeAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + sizeof(Qnode) * i;
  93. aShareFrameAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + sizeof(shareq_frame) * i;
  94. aImgDataAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + size * i;
  95. }
  96. nTimeSignAddr = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + m_nDataAddrlens;
  97. m_ShareMem.Unlock();
  98. }
  99. }
  100. return true;
  101. #else
  102. if (createFlag && m_ShareMem.Create(szName, nMemTotalNum)) {
  103. aos_debug_log((LB, "create share mem succ."));
  104. m_lpMem = m_ShareMem.Lock(1000);
  105. if (m_lpMem != NULL) {
  106. memset(m_lpMem, 0, nMemTotalNum);
  107. m_pQueue = (linkqueue*)m_lpMem;
  108. for (int i = 0; i < MAX_SHAREQUEUE_LENS; i++) {
  109. aQnodeAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + sizeof(Qnode) * i;
  110. aShareFrameAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + sizeof(shareq_frame) * i;
  111. aImgDataAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + size * i;
  112. }
  113. nTimeSignAddr = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + m_nDataAddrlens;
  114. m_pQueue->frontindex = m_pQueue->rearindex = 0;
  115. m_pQueue->queuelens = 0;
  116. m_ShareMem.Unlock();
  117. }
  118. return true;
  119. } else if (!createFlag && m_ShareMem.Open(szName, nMemTotalNum)) {
  120. aos_debug_log((LB, "open share mem succ."));
  121. int i = m_ShareMem.GetBytes();
  122. m_lpMem = m_ShareMem.Lock(1000);
  123. if (m_lpMem != NULL) {
  124. m_pQueue = (linkqueue*)m_lpMem;
  125. for (int i = 0; i < MAX_SHAREQUEUE_LENS; i++) {
  126. aQnodeAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + sizeof(Qnode) * i;
  127. aShareFrameAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + sizeof(shareq_frame) * i;
  128. aImgDataAddr[i] = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + size * i;
  129. }
  130. nTimeSignAddr = (unsigned long)m_pQueue + m_nQueueAddrLens + m_nQnodeAddrLens + m_nFrameAddrLens + m_nDataAddrlens;
  131. aos_debug_log((LB, "frontindex: %d, rearindex: %d, len: %u", m_pQueue->frontindex, m_pQueue->rearindex, m_pQueue->queuelens));
  132. m_ShareMem.Unlock();
  133. }
  134. return true;
  135. } else {
  136. aos_error_log((LB, "create or open share mem failed!"));
  137. }
  138. return false;
  139. #endif //_MSC_VER
  140. }
  141. //返回队列的元素个数,视频队列长度
  142. int GetLens()
  143. {
  144. if(m_ShareMem.IsValid())
  145. {
  146. m_lpMem = m_ShareMem.Lock(1000);
  147. if(m_lpMem != NULL)
  148. {
  149. int num = m_pQueue->queuelens;
  150. m_ShareMem.Unlock();
  151. return num;
  152. }
  153. else
  154. {
  155. m_ShareMem.Unlock();
  156. return 0;
  157. }
  158. }
  159. else
  160. {
  161. return 0;
  162. }
  163. }
  164. //往视频循环队列尾部插节点
  165. bool Insert(shareq_frame* frame,unsigned int nowtime)
  166. {
  167. if(m_ShareMem.IsValid())
  168. {
  169. m_lpMem = m_ShareMem.Lock(1000);
  170. if(m_lpMem != NULL && m_pQueue != NULL)
  171. {
  172. unsigned int nRearNextIndex = 0;
  173. //保存当前对位指针的序列号
  174. queueptr rearptrfront = (queueptr)aQnodeAddr[m_pQueue->rearindex];
  175. #ifdef ENABLE_LOG_4_SHAREQUEUE
  176. do {
  177. char* szLogBuf = AllocLogBuf();
  178. char szLevel[10];
  179. char szTime[32];
  180. szLogBuf[2047] = 0;
  181. MakeLogPrefix(LM_DEBUG, szLevel, szTime);
  182. _snprintf(szLogBuf, 2047, "Insert, frontindex %d, rearindex %d.", m_pQueue->frontindex, m_pQueue->rearindex);
  183. RvcLog_log(__FILE__, __LINE__, 1, LM_DEBUG, szLevel, szTime, szLogBuf);
  184. } while (0);
  185. #endif
  186. //如果队列已满
  187. if ((m_pQueue->rearindex+1)% MAX_SHAREQUEUE_LENS == m_pQueue->frontindex)
  188. {
  189. return false;
  190. }
  191. m_pQueue->queuelens++;
  192. if (frame != NULL)
  193. {
  194. queueptr rearqnodetmp = (queueptr)aQnodeAddr[m_pQueue->rearindex];
  195. rearqnodetmp->videoframeindex = m_pQueue->rearindex;
  196. rearqnodetmp->nextqnodeindex = 0;
  197. shareq_frame*sharetmp = (shareq_frame*)aShareFrameAddr[m_pQueue->rearindex];
  198. sharetmp->data = (unsigned char*)aImgDataAddr[m_pQueue->rearindex ];
  199. sharetmp->size = frame->size;
  200. unsigned int*Ptr = (unsigned int*)nTimeSignAddr;
  201. *Ptr = nowtime;
  202. memcpy(sharetmp->data, frame->data, frame->size);
  203. rearptrfront->nextqnodeindex = m_pQueue->rearindex;
  204. m_pQueue->rearindex = (m_pQueue->rearindex + 1) % MAX_SHAREQUEUE_LENS;
  205. #ifdef ENABLE_LOG_4_SHAREQUEUE
  206. do
  207. {
  208. char* szLogBuf = AllocLogBuf();
  209. char szLevel[10];
  210. char szTime[32];
  211. szLogBuf[2047] = 0;
  212. MakeLogPrefix(LM_DEBUG, szLevel, szTime);
  213. _snprintf(szLogBuf, 2047, "Insert2, frontindex %d, rearindex %d.", m_pQueue->frontindex, m_pQueue->rearindex);
  214. RvcLog_log(__FILE__, __LINE__, 1, LM_DEBUG, szLevel, szTime, szLogBuf);
  215. } while (0);
  216. #endif
  217. }
  218. m_ShareMem.Unlock();
  219. return true;
  220. }
  221. else
  222. {
  223. m_ShareMem.Unlock();
  224. return false;
  225. }
  226. }
  227. else
  228. {
  229. return false;
  230. }
  231. }
  232. //读视频队列头部节点
  233. bool Get(shareq_frame* frame)
  234. {
  235. if(m_ShareMem.IsValid())
  236. {
  237. m_lpMem = m_ShareMem.Lock(1000);
  238. if(m_lpMem != NULL)
  239. {
  240. if (m_pQueue->queuelens == 0)
  241. {
  242. m_ShareMem.Unlock();
  243. return false;
  244. }
  245. else
  246. {
  247. shareq_frame* sharetemp = (shareq_frame*)aShareFrameAddr[m_pQueue->frontindex];
  248. frame->size = sharetemp->size;
  249. memcpy(frame->data, sharetemp->data, sharetemp->size);
  250. m_ShareMem.Unlock();
  251. return true;
  252. }
  253. }
  254. else
  255. {
  256. m_ShareMem.Unlock();
  257. return false;
  258. }
  259. }
  260. else
  261. {
  262. return false;
  263. }
  264. }
  265. //读视频队列头部节点,并删除头部节点
  266. bool GetAndDel(shareq_frame* frame)
  267. {
  268. if(m_ShareMem.IsValid())
  269. {
  270. m_lpMem = m_ShareMem.Lock(1000);
  271. if(m_lpMem != NULL)
  272. {
  273. #ifdef ENABLE_LOG_4_SHAREQUEUE
  274. do
  275. {
  276. char* szLogBuf = AllocLogBuf();
  277. char szLevel[10];
  278. char szTime[32];
  279. szLogBuf[2047] = 0;
  280. MakeLogPrefix(LM_DEBUG, szLevel, szTime);
  281. _snprintf(szLogBuf, 2047, "GetAndDel, frontindex %d, rearindex %d.", m_pQueue->frontindex, m_pQueue->rearindex);
  282. RvcLog_log(__FILE__, __LINE__, 1, LM_DEBUG, szLevel, szTime, szLogBuf);
  283. }while (0);
  284. #endif
  285. //if (m_pQueue->queuelens == 0)
  286. if (m_pQueue->frontindex == m_pQueue->rearindex)
  287. {
  288. m_ShareMem.Unlock();
  289. return false;
  290. }
  291. else
  292. {
  293. shareq_frame* sharetemp = (shareq_frame*)aShareFrameAddr[m_pQueue->frontindex];
  294. frame->size = sharetemp->size;
  295. memcpy(frame->data, (unsigned char*)aImgDataAddr[m_pQueue->frontindex], sharetemp->size);
  296. unsigned char*data = (unsigned char*)aImgDataAddr[m_pQueue->frontindex];
  297. memset(data,0, sharetemp->size);
  298. memset(sharetemp,0,sizeof(shareq_frame));
  299. queueptr qnodetmp = (queueptr)aQnodeAddr[m_pQueue->frontindex];
  300. //m_pQueue->frontindex = qnodetmp->nextqnodeindex;
  301. m_pQueue->frontindex = (m_pQueue->frontindex + 1) % MAX_SHAREQUEUE_LENS;
  302. qnodetmp = (queueptr)aQnodeAddr[m_pQueue->rearindex];
  303. qnodetmp->nextqnodeindex = 0;
  304. m_pQueue->queuelens--;
  305. #ifdef ENABLE_LOG_4_SHAREQUEUE
  306. do
  307. {
  308. char* szLogBuf = AllocLogBuf();
  309. char szLevel[10];
  310. char szTime[32];
  311. szLogBuf[2047] = 0;
  312. MakeLogPrefix(LM_DEBUG, szLevel, szTime);
  313. _snprintf(szLogBuf, 2047, "GetAndDel2, frontindex %d, rearindex %d.", m_pQueue->frontindex, m_pQueue->rearindex);
  314. RvcLog_log(__FILE__, __LINE__, 1, LM_DEBUG, szLevel, szTime, szLogBuf);
  315. } while (0);
  316. #endif
  317. m_ShareMem.Unlock();
  318. return true;
  319. }
  320. }
  321. else
  322. {
  323. m_ShareMem.Unlock();
  324. return false;
  325. }
  326. }
  327. else
  328. {
  329. return false;
  330. }
  331. }
  332. //清除队列
  333. int ClearQueue()
  334. {
  335. shareq_frame frame;
  336. unsigned char buffer[MAX_SHAREQNODE_SIZE];
  337. frame.data = buffer;
  338. while (!IsEmpty()) {
  339. GetAndDel(&frame);
  340. }
  341. return 0;
  342. /*
  343. if(m_ShareMem.IsValid())
  344. {
  345. m_lpMem = m_ShareMem.Lock(1000);
  346. if(m_lpMem != NULL)
  347. {
  348. if (m_pQueue->queuelens != 0)
  349. {
  350. while(m_pQueue->queuelens != 0)
  351. {
  352. shareq_frame* sharetemp = (shareq_frame*)aShareFrameAddr[m_pQueue->frontindex];
  353. unsigned char*data = (unsigned char*)aImgDataAddr[m_pQueue->frontindex];
  354. memset(data,0, sharetemp->size);
  355. memset(sharetemp,0,sizeof(shareq_frame));
  356. queueptr qnodetmp = (queueptr)aQnodeAddr[m_pQueue->frontindex];
  357. m_pQueue->frontindex = qnodetmp->nextqnodeindex;
  358. qnodetmp = (queueptr)aQnodeAddr[m_pQueue->rearindex];
  359. qnodetmp->nextqnodeindex = 0;
  360. m_pQueue->queuelens--;
  361. }
  362. }
  363. m_ShareMem.Unlock();
  364. return TRUE;
  365. }
  366. else
  367. {
  368. return FALSE;
  369. }
  370. }
  371. else
  372. {
  373. return FALSE;
  374. }
  375. */
  376. }
  377. //删除队头的数据
  378. int DeleteHead()
  379. {
  380. if(m_ShareMem.IsValid())
  381. {
  382. m_lpMem = m_ShareMem.Lock(1000);
  383. if(m_lpMem != NULL)
  384. {
  385. if (m_pQueue->queuelens != 0)
  386. {
  387. shareq_frame* sharetemp = (shareq_frame*)aShareFrameAddr[m_pQueue->frontindex];
  388. unsigned char*data = (unsigned char*)aImgDataAddr[m_pQueue->frontindex];
  389. memset(data,0, sharetemp->size);
  390. memset(sharetemp,0,sizeof(shareq_frame));
  391. queueptr qnodetmp = (queueptr)aQnodeAddr[m_pQueue->frontindex];
  392. //m_pQueue->frontindex = qnodetmp->nextqnodeindex;
  393. m_pQueue->frontindex = (m_pQueue->frontindex + 1) % MAX_SHAREQUEUE_LENS;
  394. qnodetmp = (queueptr)aQnodeAddr[m_pQueue->rearindex];
  395. qnodetmp->nextqnodeindex = 0;
  396. m_pQueue->queuelens--;
  397. }
  398. m_ShareMem.Unlock();
  399. return 1;
  400. }
  401. else
  402. {
  403. m_ShareMem.Unlock();
  404. return 0;
  405. }
  406. }
  407. else
  408. {
  409. return 0;
  410. }
  411. }
  412. //获取图像的大小
  413. int GetFrameSize()
  414. {
  415. if(m_ShareMem.IsValid())
  416. {
  417. m_lpMem = m_ShareMem.Lock(1000);
  418. if(m_lpMem != NULL)
  419. {
  420. int nFrameSize = 0;
  421. if (m_pQueue->queuelens != 0)
  422. {
  423. shareq_frame* sharetemp = (shareq_frame*)aShareFrameAddr[m_pQueue->frontindex];
  424. nFrameSize = sharetemp->size;
  425. }
  426. m_ShareMem.Unlock();
  427. return nFrameSize;
  428. }
  429. else
  430. {
  431. m_ShareMem.Unlock();
  432. return 0;
  433. }
  434. }
  435. else
  436. {
  437. return 0;
  438. }
  439. }
  440. unsigned int GetLastFrameTime()
  441. {
  442. if(m_ShareMem.IsValid())
  443. {
  444. m_lpMem = m_ShareMem.Lock(1000);
  445. if(m_lpMem != NULL)
  446. {
  447. unsigned int nLastFrameTime = 0;
  448. nLastFrameTime = *(unsigned int *)nTimeSignAddr;
  449. m_ShareMem.Unlock();
  450. return nLastFrameTime;
  451. }
  452. else
  453. {
  454. m_ShareMem.Unlock();
  455. return 0;
  456. }
  457. }
  458. else
  459. {
  460. return 0;
  461. }
  462. }
  463. bool IsEmpty() {
  464. if (m_ShareMem.IsValid())
  465. {
  466. m_lpMem = m_ShareMem.Lock(1000);
  467. if (m_lpMem != NULL)
  468. {
  469. const int result = !!(m_pQueue->frontindex == m_pQueue->rearindex);
  470. m_ShareMem.Unlock();
  471. return result;
  472. }
  473. else
  474. {
  475. m_ShareMem.Unlock();
  476. return true;
  477. }
  478. }
  479. else
  480. {
  481. return true;
  482. }
  483. }
  484. bool IsFull() {
  485. if (m_ShareMem.IsValid())
  486. {
  487. m_lpMem = m_ShareMem.Lock(1000);
  488. if (m_lpMem != NULL)
  489. {
  490. const bool result = (m_pQueue->rearindex + 1) % MAX_SHAREQUEUE_LENS == m_pQueue->frontindex;
  491. m_ShareMem.Unlock();
  492. return result;
  493. }
  494. else
  495. {
  496. m_ShareMem.Unlock();
  497. return true;
  498. }
  499. }
  500. else
  501. {
  502. return true;
  503. }
  504. }
  505. };
  506. struct Clibsharequeue_t {
  507. libsharequeue_impl* m_pImpl;
  508. };
  509. Clibsharequeue* ClibsharequeueCreate(char* queuename, int size) {
  510. Clibsharequeue* queue = (Clibsharequeue*)malloc(sizeof(struct Clibsharequeue_t));
  511. queue->m_pImpl = new libsharequeue_impl(queuename, false, size);
  512. return queue;
  513. }
  514. Clibsharequeue* ClibsharequeueCreate2(char* queuename) {
  515. Clibsharequeue* queue = (Clibsharequeue*)malloc(sizeof(struct Clibsharequeue_t));
  516. queue->m_pImpl = new libsharequeue_impl(queuename, false, MAX_SHAREQNODE_SIZE);
  517. return queue;
  518. }
  519. Clibsharequeue* ClibsharequeueCreate3(char* queuename, int newcreate)
  520. {
  521. Clibsharequeue* queue = (Clibsharequeue*)malloc(sizeof(struct Clibsharequeue_t));
  522. queue->m_pImpl = new libsharequeue_impl(queuename, !!newcreate, MAX_SHAREQNODE_SIZE);
  523. return queue;
  524. }
  525. void ClibsharequeueDestroy(Clibsharequeue* queue) {
  526. if (queue != NULL) {
  527. ClibsharequeueClearQueue(queue);
  528. if (queue->m_pImpl != NULL) {
  529. delete queue->m_pImpl;
  530. }
  531. free(queue);
  532. queue = NULL;
  533. }
  534. return;
  535. }
  536. int ClibsharequeueInsert(Clibsharequeue* queue, shareq_frame* data, unsigned int nowtime)
  537. {
  538. if (queue != NULL && queue->m_pImpl != NULL) {
  539. const int bRst = queue->m_pImpl->Insert(data, nowtime) ? 1 : 0;
  540. return bRst;
  541. }
  542. return 0;
  543. }
  544. int ClibsharequeueGet(Clibsharequeue* queue, shareq_frame* data)
  545. {
  546. if (queue != NULL && queue->m_pImpl != NULL) {
  547. const int bRst = queue->m_pImpl->Get(data) ? 1 : 0;
  548. return bRst;
  549. }
  550. return 0;
  551. }
  552. int ClibsharequeueGetAndDel(Clibsharequeue* queue, shareq_frame* data)
  553. {
  554. if (queue != NULL && queue->m_pImpl != NULL) {
  555. const int bRst = queue->m_pImpl->GetAndDel(data) ? 1 : 0;
  556. return bRst;
  557. }
  558. return 0;
  559. }
  560. int ClibsharequeueGetLens(Clibsharequeue* queue)
  561. {
  562. if (queue != NULL && queue->m_pImpl != NULL) {
  563. int i = queue->m_pImpl->GetLens();
  564. return i;
  565. }
  566. return 0;
  567. }
  568. void ClibsharequeueClearQueue(Clibsharequeue* queue)
  569. {
  570. if (queue != NULL && queue->m_pImpl != NULL) {
  571. queue->m_pImpl->ClearQueue();
  572. return;
  573. }
  574. }
  575. int ClibsharequeueGetFrameSize(Clibsharequeue* queue)
  576. {
  577. if (queue != NULL && queue->m_pImpl != NULL) {
  578. int i = queue->m_pImpl->GetFrameSize();
  579. return i;
  580. }
  581. return 0;
  582. }
  583. void ClibsharequeueDeleteHead(Clibsharequeue* queue)
  584. {
  585. if (queue != NULL && queue->m_pImpl != NULL) {
  586. queue->m_pImpl->DeleteHead();
  587. return;
  588. }
  589. }
  590. unsigned int ClibsharequeueGetLastFrameTime(Clibsharequeue* queue)
  591. {
  592. if (queue != NULL && queue->m_pImpl != NULL) {
  593. return queue->m_pImpl->GetLastFrameTime();
  594. }
  595. return 0;
  596. }