SDL 渲染 子线程解码 主线程渲染问题

宇宙的尽头是编制 2018-06-22 12:21:50
最近使用SDL渲染图像,遇到棘手问题,视频流来自摄像头,进过解码之后,使用SDL渲染,将问题罗列如下:
问题:主线程同时进行视频解码,视频渲染,窗口会出现卡动,偶尔会很卡,不能移动。
网上搜解决办法,找到了雷神的帖子,晓得出现问题的大概原因是主线程需要解码,又要渲染窗口,造成窗口的卡动
解决办法:使用子线程来解码,(QT规定,所有对UI操作必须在主线程中)主线程来渲染,这样子减小主线程的负担,窗口不会在卡动。

顺着这个思路,本人将代码中做出改动,子线程解码成功之后,产生一个信号,该信号通知主线程去渲染窗口,并且信号本身带有渲染数据
为了达到这个目的,本人将解码成功,需要渲染的数据重新拷贝了一份,为了验证操作的正确性,就在主线程使用拷贝的数据进行渲染,结果原数据渲染ok,拷贝数据直接报错,请教各位网友,这是怎么回事??
原数据渲染:

图像正常:

拷贝数据渲染:

代码报错:

这份代码仅仅是将纹理更新代码的数据地址又dst_frame->data[0]改为sdldata.dst,两者数据一模一样,并且sdldata.dst开辟自己的空间,准备在主线程渲染之后释放。
请教一下,鄙人想将拷贝数据用信号发出给主线程渲染,在发出之前进行了这样的验证测试,解决就出错了,望各位网友赐教!!谢谢!!
...全文
506 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuxian2009 2018-08-23
  • 打赏
  • 举报
回复
没有加锁。两个线程操作一个内存(变量),肯定要加锁咯。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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