video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2022-07-20 b3dd7bdf54aff8c85a36d9637258050e68820abd
csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -43,7 +43,7 @@
        pthread_mutex_lock(&mtx);
        if (q.empty()) {
            gettimeofday(&now, NULL);
            t.tv_sec = now.tv_sec + 3;
            t.tv_sec = now.tv_sec + 12;
            t.tv_nsec = now.tv_usec * 1000;
//            pthread_cond_wait(&cond, &mtx);
            pthread_cond_timedwait(&cond, &mtx, &t);
@@ -77,7 +77,8 @@
      pthread_mutex_unlock(&mtx);
    }
   
   void clearAll(std::function<void(T)> fn){
    template<class F>
   void clearAll(F&& fn){
      pthread_mutex_lock(&mtx);
      while (!q.empty()){
         T value = q.front();
@@ -109,13 +110,23 @@
      printf("GB28181API end!\n");
      // m_rtpQueue.clearAll();
      m_rtpQueue.clearAll([](frameBuffInfo *info){
         delete[] info->buff;
         delete info;
         if (info){
            delete[] info->buff;
            delete info;
         }
      });
      deleteCamera();
   }
   bool pushInfo(unsigned char *data, int datalen) {
      while(m_rtpQueue.count_queue() > 120){
            auto p = m_rtpQueue.popNotWait();
            if (p){
                delete[] p->buff;
                delete p;
            }
        }
      frameBuffInfo *info = new frameBuffInfo();
      info->buff = new unsigned char[datalen];
@@ -155,6 +166,13 @@
            info->buff = new unsigned char[buffinfo->buffLen - len]{};
            memcpy(info->buff, buffinfo->buff + len, buffinfo->buffLen - len);
            while(_this->m_rtpQueue.count_queue() > 120){
                    auto p = _this->m_rtpQueue.popNotWait();
                    if (p){
                        delete[] p->buff;
                        delete p;
                    }
                }
//            printf("/帧长大于info->buffLen:%d\n", info->buffLen);
            _this->m_rtpQueue.push_front_one(info);
//            printf("/帧长大于info->buffLen\n");