Skip to content

feat(starry): add FFmpeg multimedia test suite with 89 tests across 5 levels#1086

Merged
ZR233 merged 11 commits into
rcore-os:devfrom
zyc107109102:pr/ffmpeg
Jun 6, 2026
Merged

feat(starry): add FFmpeg multimedia test suite with 89 tests across 5 levels#1086
ZR233 merged 11 commits into
rcore-os:devfrom
zyc107109102:pr/ffmpeg

Conversation

@zyc107109102

@zyc107109102 zyc107109102 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

新增ffmpeg软件测试,用于测试starryos的大量mmap,网络传输,图像音频编解码能力。

概述

在 StarryOS 上移植并测试 FFmpeg 8.0.1(Alpine v3.23),新增 88 个测试用例,
覆盖 5 个层级:smoke、basic、thread、codec、network。

测试覆盖

层级 用例数 覆盖内容
Smoke 12 ffmpeg/ffprobe 命令行基本功能验证
Basic 23 格式转换、重封装、缩放裁剪、帧提取、元数据、拼接
Thread 12 单/多线程编解码、并发 pipeline、A/V 同步
Codec 29 H.264/H.265/VP8/VP9/MPEG-4/MP3/AAC/Opus/FLAC 编解码
Network 12 HTTP/TCP/UDP 回环、file/pipe 协议、协议检测

构建机制

  • prebuild.sh 通过 host apk 将 ffmpeg 及其依赖安装到 staging rootfs
  • 使用 readelf -d 递归解析共享库依赖,包括非标准路径(如 /usr/lib/pulseaudio/
  • 内置 Alpine 镜像回退逻辑:当 mirrors.cernet.edu.cn 不可用时自动切换到 dl-cdn.alpinelinux.org
  • 网络测试使用 python3 http.server 提供 HTTP 服务

运行命令

默认运行全部测试(smoke + basic + thread + codec + network):

cargo xtask starry app qemu -t ffmpeg --arch x86_64

也可以单独运行某个级别:

# 仅 Smoke 测试(基本功能验证)
cargo xtask starry app qemu -t ffmpeg --arch x86_64 --qemu-config qemu-x86_64-smoke.toml

# 仅基础测试(格式转换、滤镜等)
cargo xtask starry app qemu -t ffmpeg --arch x86_64 --qemu-config qemu-x86_64-basic.toml

# 仅多线程测试
cargo xtask starry app qemu -t ffmpeg --arch x86_64 --qemu-config qemu-x86_64-thread.toml

# 仅编解码器测试
cargo xtask starry app qemu -t ffmpeg --arch x86_64 --qemu-config qemu-x86_64-codec.toml

# 仅网络测试
cargo xtask starry app qemu -t ffmpeg --arch x86_64 --qemu-config qemu-x86_64-network.toml

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审 head 97c7c8dac40ca6dba37b32df6983739a2573da89。远端 CI 当前全绿;本地 bash -n apps/starry/ffmpeg/prebuild.sh apps/starry/ffmpeg/test_ffmpeg.sh apps/starry/ffmpeg/ffmpeg-*-tests.sh 通过,cargo xtask starry app list 能发现 qemu ffmpeg prebuildcargo xtask starry app qemu --help 确认当前 app runner 子命令。

不过当前 PR 还不能合入:git diff --check origin/dev...HEAD 因 README 尾随空格失败;README/PR body 给出的运行命令使用了不存在的 starry app run;并且 codec/network 脚本会把关键依赖或测试媒体缺失当作 SKIP,最后仍打印 PASS,这会让 PR 声称的 89 项覆盖在实际环境中静默缩水。请至少保证声明的 smoke/basic/thread/codec/network 覆盖在依赖缺失时明确失败,或把可选项从成功条件和文档声明中拆出来。

Comment thread apps/starry/ffmpeg/README.md Outdated
Comment thread apps/starry/ffmpeg/ffmpeg-codec-tests.sh Outdated
Comment thread apps/starry/ffmpeg/ffmpeg-network-tests.sh Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审报告:PR #1086 FFmpeg 多媒体测试套件

复审 head: 778834b493115b50a3af7a22c4d186508ff293a4

PR 改动概述

新增 FFmpeg 多媒体测试套件,位于 apps/starry/ffmpeg/,包含 89 个测试用例覆盖 5 个层级(smoke/basic/thread/codec/network)。全部为新增文件(15 个文件,+1744 行),不修改任何现有 Rust 代码或内核逻辑。

实现逻辑

PR 正确遵循 apps/starry/<app>/ 目录规范:

  • prebuild.sh 在构建时通过 host apk 安装 FFmpeg 及依赖到 staging rootfs,使用 readelf -d 递归解析共享库依赖
  • generate_test_media() 在构建时生成所有必需的测试媒体文件(MP4/MKV/AVI/MP3),可选媒体(WAV/AV-MP4)使用 || true 允许失败
  • 6 个 qemu-x86_64*.toml 配置正确设置 shell_prefixshell_init_cmdsuccess_regex/fail_regex 和合理的超时值
  • 测试脚本结构清晰:使用 set -eu、EXIT trap 打印失败标记、cleanup 函数清理临时文件

前次 ZR233 review 修复情况

问题 状态
README 尾随空格 ✅ 已修复(git diff --check 通过)
文档使用不存在的 starry app run 命令 ✅ 已修复(已改为 cargo xtask starry app qemu
codec/network 脚本 SKIP-as-PASS ✅ 已修复:codec 脚本 `has_encoder

CI 状态

  • Check formatting / run_host: success
  • Run sync-lint / run_host: success
  • Detect changed paths: success
  • axvisor loongarch64 qemu / run_container: success
  • Run clippy / run_host: failure ❌ — 与本 PR 无关:PR 仅添加 shell 脚本和 TOML 配置,不涉及任何 Rust 代码。最近 dev 分支 CI 运行(run #5200, #5187)同样显示 clippy failure,确认为已有问题。
  • 其他 job skipped/cancelled 为路径过滤和 clippy 级联导致,属预期行为

本地验证结果

检查 结果
bash -n 全部 7 个 shell 脚本 ✅ 通过
TOML 语法验证(6 个 qemu 配置) ✅ 通过
git diff --check ✅ 无问题
[patch.crates-io] 检查 ✅ 无 patch
Shell 脚本中 ffmpeg 命令引用一致性 shell_init_cmd 与脚本文件名匹配

重复/重叠分析

  • apps/starry/ 下无其他 ffmpeg 相关文件
  • 其他 open PR(#1125 nix-smoke、#1128 aarch64 MRS)与本 PR 完全不重叠
  • 本 PR 是全新功能,不替代现有实现

非阻塞性建议(后续改进)

  1. ffmpeg-basic-tests.sh stages 2-24 在测试媒体缺失时静默 SKIP 但最终仍打印 PASSED。虽然 prebuild.sh 会在构建时生成必需媒体,但如果 prebuild 静默失败,测试会全部跳过仍报通过。建议对 test_160x120.mp4 等必需媒体增加硬失败检查。
  2. ffmpeg-thread-tests.sh stages 7、8、12 对 test_audio.wav/test_av.mp4 使用静默 SKIP(prebuild 中这些为 || true 可选生成)。建议将这些标记为可选或增加 SKIP 计数器。

这些问题不阻塞合入,因为正常构建流程中 prebuild.sh 会正确生成所有必需媒体。

结论

前次 review 的阻塞问题已全部修复。PR 结构正确、测试覆盖合理、CI 失败与本 PR 无关。建议 APPROVE。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审 head 778834b493115b50a3af7a22c4d186508ff293a4。上次 review 里的 README 命令、尾随空格、codec/network SKIP-as-PASS 问题已确认修复,相关旧线程已标记 resolved。

本地验证:git diff --check origin/dev...HEADcargo fmt --checkbash -n apps/starry/ffmpeg/*.sh 通过;6 个 qemu-x86_64*.toml 可由 tomllib 解析;cargo xtask starry app list 能发现 qemu ffmpeg prebuildcargo xtask starry app qemu --help 确认 README 使用的子命令存在;未发现 [patch.crates-io]。远端 clippy 失败是既有 axvisor_api incremental-selection 问题,与本 PR 的 shell/TOML 新增文件无关。

仍需修改:当前 prebuild 需要 host ffmpeg 生成测试媒体,但没有纳入 host 依赖 bootstrap 或文档依赖。我的本地环境缺少 ffmpeg,因此完整 cargo xtask starry app qemu -t ffmpeg --arch x86_64 会在 prebuild 阶段失败,无法进入 QEMU。请让该依赖可复现(例如纳入 host package 检查/安装,或改用 staging root 里的 ffmpeg 生成媒体),并同步 README 的 host 依赖说明。

Comment thread apps/starry/ffmpeg/prebuild.sh Outdated
@zyc107109102

Copy link
Copy Markdown
Contributor Author

修复 FFmpeg 测试套件中媒体缺失时静默跳过(SKIP)仍报 PASSED 的问题,并将测试媒体生成从宿主机迁移到 QEMU 客户机,移除宿主机 ffmpeg 依赖。

修改文件

文件 变更
ffmpeg-ensure-media.sh 新增:共享脚本,QEMU 内用 guest ffmpeg 生成全部 6 个测试媒体
prebuild.sh 删除 generate_test_media() 函数,改为复制 ensure-media 脚本到 overlay
ffmpeg-basic-tests.sh 删除 Stage 1 原始数据回退和 22 个 if [ -f ] 静默跳过守卫,改为调用 ensure-media
ffmpeg-thread-tests.sh 删除 ensure_test_media() 和 Stages 7/8/12 的静默跳过守卫,改为调用 ensure-media
ffmpeg-codec-tests.sh 顶部调用 ensure-media(保留 gen_raw_video/gen_raw_audio 作为编码器级回退)
ffmpeg-network-tests.sh 删除前置媒体检查,改为调用 ensure-media
README.md 依赖章节拆分宿主机/客户机,测试媒体章节说明运行时自动生成

核心改动

消除静默跳过

  • 原逻辑:if [ -f "$TEST_MEDIA_DIR/test_160x120.mp4" ]; then ... fi — 媒体缺失时整个阶段不执行,最终仍打印 PASSED
  • 现逻辑:各脚本启动时通过 ffmpeg-ensure-media.sh 生成全部媒体,生成失败则 fail() 终止

媒体生成迁移到 guest

  • 删除:prebuild.sh 中 50 行的 generate_test_media()(依赖宿主机 ffmpeg + libx264)
  • 新增ffmpeg-ensure-media.sh 在 QEMU 内用 guest 自带 ffmpeg 通过 lavfi 源生成 6 个文件(160×120, 2 秒, ultrafast),缓存到 /tmp/ffmpeg-test-media/
  • prebuild.sh 仅保留 rootfs 构建工具链依赖(apk-tools/e2fsprogs/coreutils/binutils),与 redis/nginx 等 app 一致

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审报告:PR #1086 FFmpeg 多媒体测试套件

复审 head: 1521751932e63bedf6cb0c931ba26b3d9816cbf3

PR 改动概述

apps/starry/ffmpeg/ 新增 16 个文件(+1697 行),不修改任何现有 Rust 代码或内核逻辑。新增 FFmpeg 多媒体测试套件,覆盖 smoke/basic/thread/codec/network 5 个层级。正确遵循 apps/starry/<app>/ 目录规范。

实现逻辑

最新提交 fix(starry-ffmpeg): eliminate silent SKIP, move media generation to guest 将测试媒体生成从 host 侧 prebuild 移入 guest 侧 ffmpeg-ensure-media.sh,使用 FFmpeg lavfi 虚拟输入源在 QEMU 客户机内生成 6 个测试媒体文件(MP4/MKV/AVI/MP3/AAC MP4/WAV)。所有媒体生成失败时硬退出(|| { echo FAILED; return 1; }),不再有静默跳过。

  • prebuild.sh:安装 ffmpeg/ffmpeg-libs/python3 到 staging rootfs,用 readelf -d 递归解析共享库依赖,不需要 host 安装 ffmpeg
  • 6 个 qemu-x86_64*.toml 配置:success_regex/fail_regex 正确,timeout 合理(smoke 300s、basic 600s、codec 900s、network 600s、all 3600s)
  • 测试脚本使用 set -eu、EXIT trap 打印 _TEST_FAILEDcleanup 清理临时文件

前次 review 修复情况

问题 状态
README 尾随空格 git diff --check 通过
文档使用不存在的 starry app run ✅ 已改为 cargo xtask starry app qemu
codec/network 脚本 SKIP-as-PASS ✅ 全部改为 `
host ffmpeg 依赖未纳入 bootstrap ✅ 媒体生成移入 guest,不再需要 host ffmpeg

CI 状态

CI run #5401(head SHA 1521751932)状态 pending,正在排队。本 PR 仅添加 shell 脚本和 TOML 配置,不涉及 Rust 代码。Check formattingRun sync-lintDetect changed paths 对纯新增文件应直接通过。远端 Run clippy 的既有 axvisor_api incremental-selection 失败与本 PR 无关(PR 不修改任何 .rs 文件)。

本地验证结果

检查 结果
bash -n 全部 7 个 shell 脚本 ✅ 通过
TOML 语法验证(6 个 qemu 配置 + 1 个 build 配置) ✅ 通过
git diff --check ✅ 无问题
[patch.crates-io] 检查 ✅ 无 patch
skip/SKIP/`
ffmpeg-ensure-media.sh 6 个媒体生成 ✅ 每个都用 `
codec 脚本 has_encoder/has_decoder ✅ 均用 `
network 脚本 has_protocol/has_encoder ✅ 均用 `

重复/重叠分析

  • apps/starry/ 下无其他 ffmpeg 相关文件
  • 搜索 open PR 列表(#1155 IOAPIC、#1151 qperf、#1150 FDT IRQ),均与本 PR 完全不重叠
  • base 分支无等价 FFmpeg 功能
  • 本 PR 是全新功能,不替代现有实现

结论

前次 review 的 4 个阻塞问题已全部修复。PR 结构正确、测试覆盖合理、媒体生成架构合理(guest 侧生成消除 host 依赖)。无阻塞问题。建议 APPROVE。

Powered by mimo-v2.5-pro

@zyc107109102
zyc107109102 requested a review from ZR233 June 5, 2026 15:59

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审 head 1521751932e63bedf6cb0c931ba26b3d9816cbf3

本 PR 在 apps/starry/ffmpeg/ 新增 FFmpeg app 测试套件和 x86_64 QEMU 配置。当前实现方向是合理的:prebuild.sh 只负责通过 Alpine apk 准备 guest 侧 ffmpeg/ffprobe/python3 及运行时库,测试媒体改为在 QEMU guest 内由 ffmpeg-ensure-media.sh 生成;各层级脚本使用失败标记和 success_regex/fail_regex 区分结果。前几轮 review 中 README 命令、SKIP-as-PASS、host ffmpeg 依赖问题对应的旧线程已确认修复并全部 resolved。

仍需修改:PR 描述还在“运行方式”里写 cargo xtask starry app run -t ffmpeg --arch x86_64 以及各层级的 starry app run 命令。我在当前 head 上实际运行该命令,结果是 error: unrecognized subcommand 'run';同时 cargo xtask starry app qemu --help 显示当前有效入口是 starry app qemu。这个 PR 属于 app/QEMU 工作流,PR body 给出的复现命令必须能直接运行;请把 PR 描述同步到当前 qemu 子命令,并顺手同步最新的 guest 侧媒体生成/测试数量说明。

本地验证结果:

  • cargo fmt --check 通过
  • git diff --check origin/dev...HEAD 通过
  • bash -n apps/starry/ffmpeg/prebuild.sh apps/starry/ffmpeg/test_ffmpeg.sh apps/starry/ffmpeg/ffmpeg-*.sh 通过
  • python3/tomllib 解析 7 个 FFmpeg TOML 配置通过
  • cargo xtask starry app list 能发现 qemu ffmpeg prebuild
  • cargo xtask starry app qemu --help 确认 qemu 子命令存在
  • cargo xtask starry app run -t ffmpeg --arch x86_64 失败,确认 PR body 命令不可复现
  • 未发现 [patch.crates-io]

CI 状态:当前 head 的 CI run 27006807021 已完成且结论为 success;check-runs 汇总为 success=24, skipped=25, failure=0,跳过项为 run_host/run_container 互斥矩阵或发布类 job,未发现 PR 相关失败。

重复/重叠分析:base 分支没有 apps/starry/ffmpeg 或等价 FFmpeg app;用 ffmpegmultimediaapps/starry/ffmpegrootfs-x86_64-ffmpegpython3 http.server 等关键词搜索 open PR,只找到本 PR 或相邻但不重叠的 Starry app 工作(例如 nginx)。本 PR 不是重复实现。

Comment thread apps/starry/ffmpeg/README.md Outdated
@ZR233
ZR233 requested review from ZCShou and luodeb June 6, 2026 02:33

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审报告:PR #1086 FFmpeg 多媒体测试套件

复审 head: f08f40f51a5b02df8e6fa00acaaa65e75c222118

PR 改动概述

apps/starry/ffmpeg/ 新增 16 个文件(+1705 行),不修改任何现有 Rust 代码或内核逻辑。新增 FFmpeg 多媒体测试套件,覆盖 smoke/basic/thread/codec/network 5 个层级。正确遵循 apps/starry/<app>/ 目录规范。

实现逻辑

  • prebuild.sh:仅负责通过 host apk 安装 ffmpeg/ffmpeg-libs/python3 到 staging rootfs,用 readelf -d 递归解析共享库依赖,不需要 host 安装 ffmpeg
  • ffmpeg-ensure-media.sh:在 QEMU guest 内用 ffmpeg lavfi 虚拟输入源生成 6 个测试媒体文件,每个生成步骤使用 || { ... return 1; } 硬失败
  • 6 个 qemu-x86_64*.toml 配置正确设置 shell_prefixshell_init_cmdsuccess_regex/fail_regex 和合理的超时值
  • 测试脚本使用 set -eu、EXIT trap 打印失败标记、cleanup 清理临时文件
  • 各层级脚本中 has_encoder/has_decoder/has_protocol 检查均使用 || fail 硬失败模式(已修复前次 review 的 SKIP-as-PASS 问题)

前次 review 修复情况

问题 状态
README 尾随空格 git diff --check 通过
文档使用不存在的 starry app run ✅ README 已改为 cargo xtask starry app qemu
codec/network 脚本 SKIP-as-PASS ✅ 全部改为 `
host ffmpeg 依赖未纳入 bootstrap ✅ 媒体生成移入 guest

仍需修改(阻塞)

问题 1:PR body 运行命令使用不存在的子命令

PR 描述的「运行方式」章节仍然写 cargo xtask starry app run -t ffmpeg --arch x86_64 以及各层级的 starry app run 命令。当前 xtask 只有 starry app qemu 子命令,starry app run 会报 error: unrecognized subcommand 'run'。README 已修复为 qemu,但 PR body 未同步。PR body 是用户复现 app 工作流的主要参考,必须可执行。

问题 2:PR body 测试覆盖数量与实际脚本不一致

  • PR body 声称总数 89(Smoke=12, Basic=24, Thread=12, Codec=29, Network=12)
  • 实际脚本 stage 数:Smoke=12, Basic=23, Thread=12, Codec=29, Network=12,总计 88
  • README 正确标注 Basic=23 个阶段,与脚本一致
  • PR body 的 Basic=24 与脚本不符,需修正为 23 并更新总数为 88

CI 状态

CI run #5539(head SHA f08f40f51a)结论 success。Check-runs 汇总:

  • Check formatting / run_host: success ✅
  • Run sync-lint / run_host: success ✅
  • Detect changed paths: success ✅
  • axvisor loongarch64 qemu / run_container: success ✅
  • 其余 job(run_host/run_container 互斥矩阵、路径过滤类)skipped,属预期行为
  • 本 PR 仅添加 shell 脚本和 TOML 配置,不涉及 Rust 代码,clippy/Test 类 job 的 skipped 非本 PR 引起

本地验证结果

检查 结果
bash -n 全部 8 个 shell 脚本 ✅ 通过
TOML 语法验证(7 个配置文件) ✅ 通过
git diff --check ✅ 无尾随空格等问题
[patch.crates-io] 检查 ✅ 无 patch
codec/network has_encoder/has_decoder/has_protocol 审计 ✅ 全部 `
ffmpeg-ensure-media.sh 6 个媒体生成步骤 ✅ 全部 `

重复/重叠分析

  • apps/starry/ 下无其他 ffmpeg 相关文件
  • base 分支无等价 FFmpeg 功能
  • 搜索 open PR(#1076 self-compile、#1164 mmap-populate 等),均与本 PR 完全不重叠
  • 本 PR 是全新功能,不替代现有实现

结论

代码实现已修复前几轮 review 的所有阻塞问题,shell 脚本和 TOML 配置逻辑正确、媒体生成架构合理(guest 侧生成消除 host 依赖)、失败模式清晰。但 PR body 描述未同步更新:运行命令仍使用不存在的 starry app run 子命令,测试覆盖数量与实际脚本不一致。请更新 PR body 后标记为可复审。

Powered by mimo-v2.5-pro

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审报告:PR #1086 FFmpeg 多媒体测试套件

复审 head: 6ee00570930f9da74fa0db8e8e4850826e9bdd87

PR 改动概述

apps/starry/ffmpeg/ 新增 16 个文件(+1705 行),不修改任何现有 Rust 代码或内核逻辑。新增 FFmpeg 多媒体测试套件,覆盖 smoke/basic/thread/codec/network 5 个层级。正确遵循 apps/starry/<app>/ 目录规范。

实现逻辑

  • prebuild.sh:仅通过 host apk 安装 ffmpeg/ffmpeg-libs/python3 到 staging rootfs,使用 readelf -d 递归解析共享库依赖,不需要 host 安装 ffmpeg
  • ffmpeg-ensure-media.sh:在 QEMU guest 内用 ffmpeg lavfi 虚拟输入源生成 6 个测试媒体文件,每个生成步骤使用 || { ... return 1; } 硬失败
  • 6 个 qemu-x86_64*.toml 配置正确设置 shell_prefixshell_init_cmdsuccess_regex/fail_regex 和合理的超时值(smoke 300s、basic 600s、thread 600s、codec 900s、network 600s、all 3600s)
  • 测试脚本使用 set -eu、EXIT trap 打印失败标记、cleanup 清理临时文件
  • 各层级脚本中 has_encoder/has_decoder/has_protocol 检查均使用 || fail 硬失败模式
  • skip/SKIP/|| true 静默跳过模式(仅 cleanup/kill/wait 中使用)

前次 review 修复情况

问题 状态
README 尾随空格 git diff --check 通过
文档使用不存在的 starry app run ✅ README 和 PR body 均已改为 cargo xtask starry app qemu
codec/network 脚本 SKIP-as-PASS ✅ 全部改为 `
host ffmpeg 依赖未纳入 bootstrap ✅ 媒体生成移入 guest(ffmpeg-ensure-media.sh

CI 状态

CI run #5547(head SHA 6ee00570930f)整体结论 success ✅。关键 job:

  • Detect changed paths: success
  • Check formatting / run_host: success
  • Run sync-lint / run_host: success
  • Run clippy / run_host: success(之前 dev 分支的 axvisor_api clippy 失败已修复)
  • Test with std / run_host: success
  • Test starry riscv64 qemu / run_container: success
  • Test starry loongarch64 qemu / run_container: success
  • Test arceos x86_64 qemu / run_host: success
  • 其他 board/QEMU 测试:均 success
  • skipped 项为 run_host/run_container 互斥矩阵和路径过滤类,属预期行为

CI 全绿,无 PR 相关失败。

本地验证结果

检查 结果
bash -n 全部 8 个 shell 脚本 ✅ 通过
TOML 语法验证(7 个配置文件) ✅ 通过
git diff --check ✅ 无尾随空格等问题
[patch.crates-io] 检查 ✅ 无 patch
has_encoder/has_decoder/has_protocol 审计 ✅ 全部 `
ffmpeg-ensure-media.sh 6 个媒体生成步骤 ✅ 全部 `
测试 stage 计数验证 ✅ Smoke=12, Basic=23, Thread=12, Codec=29, Network=12 (总计 88)

重复/重叠分析

  • apps/starry/ 下无其他 ffmpeg 相关文件
  • base 分支无等价 FFmpeg 功能
  • git log --oneline --all --grep=ffmpeg 仅找到旧 PR #46(usb-keyboard + ffmpeg .codec 修复),与本 PR 无重叠
  • 搜索 open PR 列表无重叠
  • 本 PR 是全新功能,不替代现有实现

非阻塞性建议

  1. PR 标题写 "89 tests" 但 PR body 正确标注 88 个(12+23+12+29+12)。建议将标题更新为 "88 tests" 保持一致。
  2. ensure-media.shtest_160x120.mp4 使用 libx264 编码、test_audio.mp3 使用 libmp3lame 编码。如果 Alpine 的 ffmpeg 包不含这些编码器,媒体生成会直接硬失败(这是期望行为),但 README 的排查建议章节可补充此依赖说明。

结论

前几轮 review 的所有阻塞问题已全部修复。PR 结构正确、测试覆盖合理、CI 全绿。无阻塞问题。建议 APPROVE。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已按当前 head 6ee00570930f9da74fa0db8e8e4850826e9bdd87 复审。当前版本未发现阻塞问题,approve。

复核要点:

  • 新增内容集中在 apps/starry/ffmpeg/,通过 app prebuild 准备 FFmpeg/python3 guest 环境,并用 qemu 配置分别覆盖 smoke/basic/thread/codec/network 以及全量入口。
  • 之前关于 README 命令、测试数量、host ffmpeg 依赖、codec/network skip-as-pass 的问题已修复;遗留的测试数量 review thread 已标记 resolved。
  • stage 计数与 README/PR body 一致:Smoke 12、Basic 23、Thread 12、Codec 29、Network 12,总计 88。
  • 未发现与现有 open PR 的重复实现;#1151/#1160 只是在 Starry app/测试框架方向有相邻改动,不构成本 PR 的替代或合入阻塞。

本地验证:

  • cargo fmt --check 通过。
  • git diff --check origin/dev...HEAD 通过。
  • bash -n 覆盖新增 shell 脚本,通过。
  • TOML 语法解析覆盖新增 qemu/build 配置,通过。
  • cargo xtask starry app list 能识别 qemu ffmpeg prebuild
  • cargo xtask starry app qemu --help 确认文档中的 app qemu 子命令有效。
  • cargo xtask starry app qemu -t ffmpeg --arch x86_64 完成实际 QEMU 运行,guest 输出最终匹配 ===== ALL FFMPEG TESTS PASSED =====
  • [patch.crates-io] 检查无新增 patch。

CI 复核:gh pr checks 当前 head 为 SUCCESS: 24SKIPPED: 25,没有失败项。skipped 项为矩阵/路径过滤下的预期跳过。

本地环境说明:本机 host 原本缺少 apkprebuild.sh 的 apt-get 自动安装路径在无 root 权限环境下无法完成;为验证同一 app/qemu 流程,我临时将 PATH 指向本地 apk.static,并仅在本地临时 rootfs 中切换 Alpine 镜像源后重新运行,未修改 PR 文件。

非阻塞建议:PR 标题仍写 89 tests,而 README、PR body 和脚本计数均为 88,建议后续把标题同步为 88。

@ZR233
ZR233 merged commit 3e26331 into rcore-os:dev Jun 6, 2026
49 checks passed
aptacc2421 pushed a commit to aptacc2421/tgoskits that referenced this pull request Jun 14, 2026
… levels (rcore-os#1086)

* feat(starry): add FFmpeg multimedia test suite with 89 tests across 5 levels

* test ci

* test ci

* test ci

* update

* update

* test ci

* update

* fix(starry-ffmpeg): eliminate silent SKIP, move media generation to guest

* update

* update

---------

Co-authored-by: zyc107109102 <zhouyucong2019@163.com>
luodeb pushed a commit that referenced this pull request Jun 30, 2026
… levels (#1086)

* feat(starry): add FFmpeg multimedia test suite with 89 tests across 5 levels

* test ci

* test ci

* test ci

* update

* update

* test ci

* update

* fix(starry-ffmpeg): eliminate silent SKIP, move media generation to guest

* update

* update

---------

Co-authored-by: zyc107109102 <zhouyucong2019@163.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants