Skip to content

MuMu 外壳在第一帧发布前照旧交出尺寸和黑图 - #9

Merged
qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:fix/shim-first-frame
Nov 10, 2026
Merged

qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:fix/shim-first-frame

Conversation

@qiyinxi

@qiyinxi qiyinxi commented Nov 10, 2026

Copy link
Copy Markdown
Member

为什么

#8 让 mx_copy_frame 在第一帧发布前(时间戳为 0)返回 MODAVD_E_NOT_READY。这个函数 Windows 上也走,MuMu 外壳又是直接调它,所以开流以后、第一帧到之前,外壳会给 MaaCore 返回 -2,以前返回的是 0 和一张黑图。

MaaCore 那边:

  • 连上时马上用 buffer_size = 0 问尺寸,失败就认为这条路不能用;
  • 截图失败会先重连一次,再失败就重新跑截图测速。

改了什么

  • 加了一个内部标志 MX_CAPTURE_UNPUBLISHED:带上它,mx_copy_frame 在第一帧发布前也照常拷贝,交出尺寸和区域里现有的(黑)画面。外壳带上它,行为回到 POSIX 连接先确认开流,截图拒绝未发布首帧 #8 以前,和它替换掉的 DLL 一样。
  • modavd_capture 会清掉这个标志,公开接口照旧:第一帧前返回 MODAVD_E_NOT_READY。
  • README:
    • 截图示例写明刚开流、第一帧没到时也会返回 NOT_READY,稍后再调;
    • 补一条:Linux、macOS 上 modavd_open 默认先经控制台开流,什么时候可以带 MODAVD_OPEN_NO_START。

测试

  • test_shim:时间戳为 0 时,问尺寸返回 0 和正确的宽高,带缓冲区截图返回 0。
  • test_core:公开的 modavd_capture 带上这个标志仍返回 NOT_READY;mx_copy_frame 带上它能拷贝。
  • Windows 上 build.ps1 编译,两个测试都过。

ModAVD#8 让截图在第一帧发布前返回未就绪,外壳也跟着给 MaaCore 返回 -2。
MaaCore 连上时马上要尺寸,失败就放弃这条路;截图失败会重新测速。
外壳改用内部标志照旧拷贝,和它替换掉的 DLL 一样;公开接口不受影响。
README 补上 Linux、macOS 打开时先经控制台开流、第一帧前要重试。
@qiyinxi qiyinxi added the bug Something isn't working label Nov 10, 2026
@qiyinxi
qiyinxi added this pull request to the merge queue Nov 10, 2026
Merged via the queue into ModAVD:main with commit fbfba1d Nov 10, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant