当前位置: 代码迷 >> QT开发 >> 用setpix地图绘图 UI界面总是死掉
  详细解决方案

用setpix地图绘图 UI界面总是死掉

热度:32   发布时间:2016-04-25 04:28:49.0
用setpixmap绘图 UI界面总是死掉
for (;;)
  {
  sockaddr_in from;
  socklen_t fromlen = sizeof(from);
  int rc = recvfrom(sock, buf, 65536, 0, (sockaddr*)&from, &fromlen);
  if (rc > 0) {
  //解码
  int got;
  AVPacket pkt;
  pkt.data = buf;
  pkt.size = rc;
  frame=avcodec_alloc_frame();
  int ret = avcodec_decode_video2(dec, frame, &got, &pkt);
  if (ret > 0 && got)
  {
  struct SwsContext *context;
  context=sws_getContext(dec->width, dec->height, dec->pix_fmt, dec->width, dec->height, PIX_FMT_RGB24,SWS_FAST_BILINEAR,0, 0, 0);
  avpicture_alloc(&pFrameRGB,PIX_FMT_RGB24,dec->width,dec->height);
  sws_scale(context,frame->data, frame->linesize,0, dec->height, pFrameRGB.data, pFrameRGB.linesize);
  QImage image=QImage((const uchar*)pFrameRGB.data,176,144,QImage::Format_RGB32);

  ui->label->setPixmap(QPixmap::fromImage(image));// 将图片显示到label上
  fprintf(stderr, "jiema ing6\n");
  avpicture_free(&pFrameRGB);
  sws_freeContext(context);
  av_free(frame);
  }
  }
  }

用这个循环无限接收UDP上的H264流,解码转化都没问题,最后形成的rgb24流的确可以正常转化成png图片;
而且foemat_RGB32只能那么写 写成888就会发生异常,编译可以过,运行时会退出;
UI界面老是死在那,不能显示图片,但后台还在不断运行,没死掉,只是界面死掉了,求解中

------解决方案--------------------
个人觉得,标准的做法是:把UI的操作放在主线程里,把数据接收处理放在另外的线程里,收到后通知UI去处理
  相关解决方案