main.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include <QCoreApplication>
  2. #include <opencv2/opencv.hpp>
  3. #include <opencv2/core.hpp>
  4. #include <opencv2/imgproc.hpp>
  5. //#include "opencv2/imgcodecs/legacy/constants_c.h"
  6. #include <opencv2/imgproc/types_c.h>
  7. #include "rawpic.pb.h"
  8. #include "modulecomm.h"
  9. #include <QMutex>
  10. #include <QWaitCondition>
  11. #include <thread>
  12. extern char * gstrbuffer;
  13. extern QMutex gMutexLock;
  14. extern bool gbNewData;
  15. extern QWaitCondition gwc;
  16. static char * gstrwidth ="1920";
  17. static char * gstrheight = "1080";
  18. int gnwidth,gnheight;
  19. void StartNVENC(char * strwidth,char * strheight);
  20. extern bool gbNewOut;
  21. extern QWaitCondition gwcout;
  22. extern char * gstrout;
  23. extern QMutex gWaitMutexout;
  24. extern QMutex gMutexout;
  25. extern int gnoutsize ;
  26. void * gpaout;
  27. void threadout()
  28. {
  29. char * strout = new char[10000000];
  30. int nout = 0;
  31. while(1)
  32. {
  33. gWaitMutexout.lock();
  34. gwcout.wait(&gWaitMutexout,10);
  35. gWaitMutexout.unlock();
  36. if(gbNewOut)
  37. {
  38. gMutexout.lock();
  39. memcpy(strout, gstrout,gnoutsize);
  40. nout = gnoutsize;
  41. gbNewOut = false;
  42. gMutexout.unlock();
  43. std::cout<<"send out. "<<std::endl;
  44. iv::modulecomm::ModuleSendMsg(gpaout,strout,nout);
  45. }
  46. }
  47. }
  48. void Listenpic(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  49. {
  50. if(nSize<1000)return;
  51. iv::vision::rawpic pic;
  52. std::cout<<"rec. "<<std::endl;
  53. if(false == pic.ParseFromArray(strdata,nSize))
  54. {
  55. std::cout<<"picview Listenpic fail."<<std::endl;
  56. return;
  57. }
  58. cv::Mat mat(pic.height(),pic.width(),pic.mattype());
  59. if(pic.type() == 1)
  60. memcpy(mat.data,pic.picdata().data(),mat.rows*mat.cols*mat.elemSize());
  61. else
  62. {
  63. // qDebug("jpg");
  64. std::vector<unsigned char> buff(pic.picdata().data(),pic.picdata().data()+pic.picdata().size());
  65. mat = cv::imdecode(buff,1);
  66. }
  67. cv::Mat dstYuvImage;
  68. QTime xTime;
  69. xTime.start();
  70. cv::cvtColor(mat, dstYuvImage, CV_BGR2YUV_I420);
  71. std::cout<<" cvt time: "<<xTime.elapsed()<<std::endl;
  72. gMutexLock.lock();
  73. memcpy(gstrbuffer,(char *)dstYuvImage.data,gnwidth*gnheight*3/2);
  74. gbNewData = true;
  75. gMutexLock.unlock();
  76. gwc.wakeAll();
  77. // xFileYUV.write((char *)dstYuvImage.data,gwidth*gheight*3/2);
  78. }
  79. int main(int argc, char *argv[])
  80. {
  81. QCoreApplication a(argc, argv);
  82. gstrbuffer = new char[30000000];
  83. gstrout = new char[10000000];
  84. gnwidth = atoi(gstrwidth);
  85. gnheight = atoi(gstrheight);
  86. gpaout = iv::modulecomm::RegisterSend("h264frame",1000000,1);
  87. void * pthread = new std::thread(threadout);
  88. void * pa = iv::modulecomm::RegisterRecv("picfront",Listenpic);
  89. StartNVENC(gstrwidth,gstrheight);
  90. return a.exec();
  91. }