ncm 三期三批: 歌曲对象瘦身(1324→608B)+滑动窗口(NCM_SONG_WINDOW=256, 取消1000截断支撑任意长度歌单)+播放快照解耦 — agent-251

- core/ncm_api.h: ncm_song_t 瘦身 id24/name128/art96/al96/pic256/dt int32 (1324B→608B)
- appstate.c 滑动窗口: song_ids 全量 trackIds 索引(16384) + songs[256] 窗口感知
  (song_valid 位图/window_base/滑窗 memmove 保留重叠), ensure_range 批网格(100)对齐
  预取, songmeta.c 盘缓存 <cache_dir>/meta/<id>.bin (回滚/二次进入 0 网络请求)
- playlist.c 触底分页退役→视口 ensure(±24 行), 占位行可直点(播放线程 fetch 物化),
  footer 改视口区间/总数
- 播放兼容: g_play.play_song 快照(mu), run_song 起播物化后全链路(下载/歌词/IPC META/
  播放页 UI)读快照——窗口滑出当前播放曲不崩; 边界 song_count→track_ids_count
- 验证(0 真实请求): pagination_sim 全 PASS(5191 无截断/52 批); window_sim 6000 首
  全程下滚 750 步视口全物化/song_detail 恰 60 次/回滚+0 请求/播放 fetch 不滑窗;
  core 宿主+qemu 全 PASS; mipsel -Wall -Wextra 0 warning, bss 2052068→1080900(-47%)
- 未部署真机(设备音频线排查中, 部署留主会话)
This commit is contained in:
MeowOS committed 2026-09-01 04:03:01 +08:00
1 parent d8898afa09
commit 997f89f879
18 files changed
+987 -209

No files matched your search

+11 -6
View File
@@ -33,13 +33,18 @@ typedef struct ncm_playlist {
int is_collected; /* 1=我收藏的(订阅他人);0=我创建的。来自响应 subscribed(§7.0) */
} ncm_playlist_t;
/* 瘦身(REPORT §17):旧版 name/art/al 各 256 + al_pic 512 + long dt ≈ 1324B/首,
* 滑动窗口常驻 256 首 ≈331KB 太肥;裁到 ≈608B/首(窗口 ≈152KB)。id 为数字文本
* (int64 最大 19 位 + NUL,24 足够);name 128 / art 96 / al 96(列表/播放页展示均按宽
* 再截断);al_pic 256(picUrl 实际 <200 字符,obj_str 截断安全);dt 用 int32_t
* (时长 <2^31ms≈24 天;MIPS32 的 long 本就 32 位)。字段变窄只影响展示截断,不改变语义。 */
typedef struct ncm_song {
char id[32];
char name[256];
char art_name[256]; /* 首个歌手名 */
char album_name[256];
char al_pic[512]; /* 专辑封面 picUrl(song_detail/cloudsearch/playlist_track_all 解析;播放页黑胶封面) */
long duration_ms;
char id[24];
char name[128];
char art_name[96]; /* 首个歌手名 */
char album_name[96];
char al_pic[256]; /* 专辑封面 picUrl(song_detail/cloudsearch 解析;播放页黑胶封面) */
int32_t duration_ms;
int fee;
} ncm_song_t;