首先,向雷神,雷霄骅致敬!

星河战队.png

我们上篇文章已经介绍了sdl的播放视频的知识了,但是不知道试验过的同学有没有发现,我们在播放视频时的状态是这样的

细心的同学应该能看到,鼠标现在是加载中的一个状态,知道我们关闭程序,鼠标才能恢复到可用的状态,那么为什么是这种情况呢?拿到程序一跑起来电脑就卡掉了?

因为是mac下放的虚拟机,暂时无法截到鼠标忙碌的状态,大家脑补一下吧~~~乖

做过编程的朋友都知道,来解析yuv数据其实是工作量比较大,多少会占有cpu的内存,所以我们会看到卡顿的现象,那么处理的方式其实大多是创建一个子线程,让子线程中去处理耗时的操作,我们今天的内容其实就是介绍一下sdl中的"线程"及"事件"。

SDL进阶---SDL中的事件和多线程

SDL多线程的一些知识

*函数

      SDL_CreateThread():创建一个线程

*数据结构

      SDL_Thread:线程的句柄

SDL事件

*函数

        SDL_WaitEvent()等待一个事件SDL_PushEvent()发送一个事件

*数据结构

        SDL_Event:代表一个事件

看看代码吧

ok,概念看完了,我们来看一下代码
为了方便观看,还是截图吧,需要代码的同学可以朝我要,当然你们也可以自己敲一敲,代码量也不是很大

代码1.png

代码2.png

代码3.png

ok,代码都做了必要的注释,这个代码跟上一篇文章的代码相比,其实就事多了一个线程,多了一个event事件,除此之外其实没有过多的变化。

看看结果吧

这是原始视频大小

原始大小.png

我们拖拽一下,让他变大

拖拽变大.png

拖拽变小

拖拽变小.png

由此可见,我们通过事件就完成了sdl_window的拖动变大变小的操作,具体代码是这里

实现拖拽代码.png

然后我们点击窗口的关闭按键,就能把窗口关闭
实现代码是

点击关闭图标的调试界面.png

ok,我们来大体解释下代码:
其实代码很简单,我们创建了一个子线程,在改线程中每40ms去发送一次事件 即 SDL_PushEvent()
定义方法

方法.png

创建线程

创建线程.png

判断如果已经走完40ms就刷新界面

主线程去判断进入到哪个状态,判断是否需要重绘制界面.png

ok,逻辑就是这样,这个东西多看几遍其实就能看懂了,还是普通的逻辑。
今天的内容就到这了,大家如果有疑问,或者需要代码的话,可以评论,谢谢大家关注!

FFMPEG小白-day10(sdl项目播放视频进阶)相关推荐

  1. 树莓派编译ffmpeg支持x264硬解码播放视频

    树莓派编译ffmpeg支持h264_mmal硬解码 1,x264源码编译 1.1下载x264源码,解压 1.2添加一个脚本文件config_x264_rpi.sh ,放入1.1解压之后的文件夹中 1. ...

  2. FFMpeg.AutoGen+D2D解码并播放视频(含音频流)

    最近在捣鼓FFMpeg这个东西,可惜网上的资料实在难找,对于c#里面的FFmpeg.AutoGen更是如此.所以走了不少弯路.(语言组织能力不太好,这篇文章的东西会很杂.涉及到d2d绘图的部分,我封装 ...

  3. 使用ffmpeg和sdl播放视频实现时钟同步

    自定义播放器系列 第一章 视频渲染 第二章 音频(push)播放 第三章 音频(pull)播放 第四章 实现时钟同步(本章) 第五章 实现通用时钟同步 第六章 实现播放器 文章目录 自定义播放器系列 ...

  4. FFmpeg再学习 -- SDL 环境搭建和视频显示

    继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作 一.SDL 简介 参看:WIKI -- Simple DirectMedia Layer 参看:最简单的视音频播放示例9:SD ...

  5. android 视频播放滤镜,用openGL ES+MediaPlayer 渲染播放视频+滤镜效果

    之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频,今天再给大家来一篇openGL ES+Me ...

  6. 基于ffmpeg+SDL 实时播放摄像头视频

    基于ffmpeg+SDL 实时播放摄像头视频 基本流程 udp接收rtp数据流接收一帧数据后,转换为NAL单元送去解码 (这里特别说明一下,我本次用的接口是支持从连续数据流中自动分割出一个个NAL的, ...

  7. VC++实现视频聊天:FFmpeg解码+SDL播放视频

    经过网络传输接收到的码流,已经存放在公共链表 PacketNode_t 中,码流经过解码成YUV或RGB后才能播放,接下来就介绍FFmpeg解码过程和 SDL 播放视频. FFmpeg 解码 码流解码 ...

  8. 《FFmpeg+SDL的视频播放器的制作》学习记录(4):SDL播放视频

    SDL库的配置比较简单,略. SDL视频显示函数 SDL_Init():初始化SDL系统 SDL_CreateWindow():创建窗口 SDL_Window SDL_CreateRenderer() ...

  9. 使用ffmpeg解码音频sdl(push)播放

    自定义播放器系列 第一章 视频渲染 第二章 音频(push)播放(本章) 第三章 音频(pull)播放 第四章 实现时钟同步 第五章 实现通用时钟同步 第六章 实现播放器 文章目录 自定义播放器系列 ...

最新文章

  1. Nature | 机器学习在药物研发中的应用
  2. control-free CNV小记
  3. php 设定title,如何在PHP文件里面加title呢,我想写死的
  4. 云间来客 --- Java 目录大纲
  5. Nest Secure智能保全系统内建麦克风 引发用户反弹
  6. 武汉计算机985211大学有哪些,武汉985211大学有哪些 武汉985211大学有什么
  7. 基于systemverilog读写文件
  8. 关于用户自定义控件与引用该控件的页面之间的javascript脚本冲突
  9. 外服封号_王者荣耀外服玩家被封号十年吐槽无辜,官方复审后,玩家表示轻了...
  10. jQuery动画效果之上卷下拉
  11. 企业项目运行管理体系的实现
  12. 游学只缘图利国 求知理应做腾骧
  13. 方便!Python 操作 Excel 神器 xlsxwriter 初识!
  14. WIN7共享WIFI上网
  15. 计算机开机后报rundll,图文教你win10开机出现rundll无法找到入口的解决方法
  16. Xcelsius2008系统
  17. Work Stealing 的运作原理
  18. 2023.3.5英语单词学习笔记
  19. 百度的冬天:曾梦想成伟大公司 却为何陷入危机
  20. 手游竞争白热化 虎牙直播率先抢占手游新“蓝海”

热门文章

  1. 如何在 Windows 2000、XP 的桌面上增加公文包
  2. 韩式服装行业快速搭建商城网站的小技巧
  3. C/C++文件操作2
  4. thinkphp where 查询比较相同一个表中两个字段值
  5. 尼尔机械纪元游乐园怎么去机器人村_《尼尔机械纪元》图文流程攻略 主线剧情全收集及支线任务图文攻略...
  6. 企业软文营销如何抓住痛点匹配读者喜好
  7. 超好用的前端保存文件的解决方案-FileSaver.js
  8. 腾讯游戏营销活动在腾讯云K8S上的实践
  9. js中的枚举类型和不可枚举类型
  10. 多肽参数计算器 示例一