用setpixmap绘图 UI界面总是死掉

jinatomsd 2012-10-08 07:31:17
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界面老是死在那,不能显示图片,但后台还在不断运行,没死掉,只是界面死掉了,求解中
...全文
1104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mqy88 2013-01-15
  • 打赏
  • 举报
回复
pen2008,你是怎么做的呀,我现在也正在弄这事,不知怎么下手,希望给点指导
pen2008 2012-10-29
  • 打赏
  • 举报
回复
感谢楼主啊!
我在做Qt界面上显示来自Linphone底层的画面(没有用X11和SDL),用了两天时间,终于实现了,看到了nowebcam图片了。
格式转换不是一般的不理性啊。
jinatomsd 2012-10-09
  • 打赏
  • 举报
回复
楼上有道理
后来我可以用rgb888了,改成QImage image=QImage((const uchar*)pFrameRGB.data[0],176,144,QImage::Format_RGB888);
我试试你这个办法
[Quote=引用 1 楼 的回复:]

个人觉得,标准的做法是:把UI的操作放在主线程里,把数据接收处理放在另外的线程里,收到后通知UI去处理
[/Quote]
donwmufromdying 2012-10-09
  • 打赏
  • 举报
回复
个人觉得,标准的做法是:把UI的操作放在主线程里,把数据接收处理放在另外的线程里,收到后通知UI去处理
jinatomsd 2012-10-09
  • 打赏
  • 举报
回复
闪图也解决了,不能提早释放缓存 呵呵
jinatomsd 2012-10-09
  • 打赏
  • 举报
回复
用了多线程 果断好了 哈哈,可是闪图怎么解决呢

16,154

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧