StateThreads对RISCV、龙芯等CPU架构的支持—SRS对StateThreads的改进与完善

让 StateThreads 支持新的 CPU 架构,只需要实现下面 3 个函数就行了。

  1. MD_SETJMP,保存函数上下文
  2. MD_GET_SP,获取函数的 SP 寄存器,主要是为了进行修改。
  3. MD_LONGJMP,恢复函数上下文

StateThreads 官网最后一个版本是 1.9,而 SRS 改造后的版本是 1.9.5,可以看到,MD_SETJMP 统一映射成 _st_md_cxt_save()

scss 复制代码
#define MD_SETJMP(env) _st_md_cxt_save(env)
#define MD_LONGJMP(env, val) _st_md_cxt_restore(env, val)

不像 1.9 版本,MD_SETJMP 有时候又调用的是 C 标准库的 setjmp 函数,如下:

SRS 社区把 MD_SETJMP 跟 MD_LONGJMP 全部都用汇编来实现,不同的平台 _st_md_cxt_save 与 _st_md_cxt_restore 的汇编实现是不一样的,如下:

RISCV、龙芯 架构的实现是在 md_linux2.S 里面的,如下:

上图的 md_linux.S 其实就是 StateThreads 1.9 的 md.S ,只是换了下名字。而 md_linux2.S 里面就有 RISCV、龙芯 架构的 _st_md_cxt_save 实现,如下:

所以我觉得,github.com/ossrs/srs/tree/develop/trunk/3rdparty/st-srs 这个地址的 StateThreads 代码是更新更丰富的,而 https://github.com/ossrs/state-threads 这个地址的代码我感觉是杨成立从 SRS 里面把 StateThreads 扣出来弄成一个项目的。


推荐阅读:

  1. 《如何移植ST到其他系统或CPU?》

本文是《 SRS原理 》一书中的文章,如需观看更多内容,请购买本书。

相关推荐
花椒技术2 天前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
代码小学僧9 天前
从 0 到 1,记录我的第一个出海 SaaS 独立开发项目
前端·rpc·音视频开发
贾伟康10 天前
【HarmonyOS 7新能力|041】弱网直播优化工程封装:把接入逻辑放进可维护的分层结构
性能优化·harmonyos·arkts·音视频开发·直播
用户380341658829712 天前
Broadcast Extension 里的 Live Activity:一次跨进程妥协
ios·音视频开发
用户380341658829713 天前
macOS 录屏:ScreenCaptureKit 与 iOS 的分野,共用引擎的抽象层该切在哪
ios·音视频开发
用户380341658829715 天前
FFmpeg 在 iOS 上的裁剪、集成与包体控制
ios·音视频开发
花椒技术16 天前
把 AI 视频接进直播:提前生成、按次生成、持续生成怎么选?
agent·音视频开发
老孙讲技术16 天前
把连锁门店轮询抓拍和遮挡叫醒接进督导台-setDeviceSnapEnhanced与setMessageCallback
后端·物联网·音视频开发
用户380341658829719 天前
手写 fMP4 muxer:从 ISO 14496-12 到能播的文件
ios·音视频开发
字节跳动视频云技术团队20 天前
火山引擎 AI MediaKit X 懂车帝,探索汽车内容智能创作新方式
人工智能·音视频开发