MeowOS
a01e5ca18a
fix(ncm §25): 切音质后重播同一曲被卡「缓冲中」——play intent 以 seq 标识(同 idx 再 play 重启换档)
真机反馈:切音质后再播同一首歌,声音已出但播放页恒显示「缓冲中」。
根因(app/play/player_manager.c):同 idx 的新播放意图不被解码主循环识别。
切音质后重播同曲 = player_manager_play(idx),而 idx 与在播曲相同——cur_song 不变
(仍是 idx)、state 由 PLAYING 置 BUFFER、seq++。旧仍_current(cur==idx && state==BUFFER
恒真)与解码主循环(只认 cur!=idx / STOPPED)均不放过,于是:
①旧曲(旧档位)继续出声、state 停在 BUFFER → UI 恒「缓冲中…」(dl_done=0 无百分比);
②新档位下载/缓存条目从未发起;
③旧曲收尾后外层把 BUFFER 当「自然播完」顺延下一首——新档位永不生效。
三条取数路径(缓存命中/边下边播/.part续传)统一受影响(根因在 intent 层)。
修法:play intent 以 seq 标识,层层判别「我的 intent 是否仍有效」:
- 新增 still_intent(idx, my_seq)(cur==idx && state==BUFFER && seq==my_seq),取代
仍_current(同 idx 重播时 seq 变即判过期),贯穿 预缓冲/重试退避/物化/解码 open 各护栏;
- run_song 入口捕获 my_seq,沿 song_local_file/song_download_attempt 下传;
- 解码主循环 seq != my_seq → break 回外层重跑 run_song(换档重播);
- 外层「自然播完」收紧为 state==PLAYING,不把 BUFFER(挂起新 intent)当播完顺延下一首。
验证:player_flow_sim 新增 P12(同 idx 重播换档重启)——修前恒 PLAYING 不了/键仍旧档/
downloads=0/eff=-1;修后 state 回 PLAYING、下载新档位、缓存键 1000_lossless、eff_level
按非会员钳顶回填 EXHIGH。P1-P11 零回归(宿主+qemu-mipsel ALL PASS)。build_ncm.sh
自有代码 -Wall -Wextra 0 warning。0 真实 NCM 请求。未部署真机(留主会话)。
REPORT.md 另记(docs commit)。
2026-09-01 20:30:59 +08:00
..
2026-09-01 18:28:07 +08:00
2026-08-31 13:28:07 +08:00
2026-09-01 16:08:01 +08:00
2026-09-01 16:08:01 +08:00
2026-09-01 19:40:29 +08:00
2026-09-01 16:08:01 +08:00
2026-08-31 04:39:34 +08:00
2026-09-01 19:55:26 +08:00
2026-09-01 19:55:26 +08:00
2026-09-01 16:21:12 +08:00
2026-08-31 22:40:08 +08:00
2026-08-31 19:30:32 +08:00
2026-08-31 03:11:35 +08:00
2026-09-01 03:25:01 +08:00
2026-09-01 19:47:44 +08:00
2026-08-31 13:28:07 +08:00
2026-08-31 15:36:45 +08:00
2026-09-01 16:08:01 +08:00
2026-09-01 16:26:02 +08:00
2026-09-01 18:28:07 +08:00
2026-09-01 20:30:59 +08:00
2026-09-01 16:08:01 +08:00
2026-09-01 11:06:01 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 03:27:24 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 03:27:24 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 03:27:24 +08:00
2026-08-30 03:27:24 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00