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_SETJMPMD_LONGJMP 全部都用汇编来实现,不同的平台 _st_md_cxt_save_st_md_cxt_restore 的汇编实现是不一样的,如下:

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

上图的 md_linux.S 其实就是 StateThreads 1.9md.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原理 》一书中的文章,如需观看更多内容,请购买本书。

相关推荐
ryn4839812 天前
关于我是如何用AI创作一个1分半的短视频的
aigc·音视频开发
码流怪侠13 天前
FFmpeg 开发实战全解析:从入门到精通(附完整代码示例)
ffmpeg·音视频开发·视频编码
redreamSo17 天前
HeyGen 开源了一个"用 HTML 写视频"的框架,我研究了一下,发现事情没那么简单
前端·开源·音视频开发
MonkeyKing17 天前
iOS 音频会话 AVAudioSession 完整机制:分类、模式、激活策略
ios·音视频开发
JMchen12323 天前
集成第三方 C/C++ 库到 Android NDK 项目:OpenCV 与 FFmpeg 实战指南
opencv·ffmpeg·音视频开发·cmake·jni·ndk·abi 兼容性
qwfy24 天前
从零实现一个 IM + 直播 App:Kotlin + Compose 多模块架构全流程记录
app·音视频开发·直播
音视频牛哥1 个月前
鸿蒙 NEXT 下 RTSP/RTMP 播放器如何实时调节音量、亮度、对比度与饱和度?
harmonyos·音视频开发·直播
冬奇Lab1 个月前
音视频同步与渲染:PTS、VSYNC 与 SurfaceFlinger 的协作之道
android·音视频开发
冬奇Lab1 个月前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
冬奇Lab1 个月前
硬件加速与 OMX/Codec2:解密编解码器的底层世界
android·音视频开发·视频编码