fix(ncm): 三连修 — 封面切歌不更新/缓冲无反馈失败无声/暂停切歌边界 (REPORT §18)
- cover worker 忙等死循环(成功后不清目标,每圈解码+换入+gen++,CPU 100%+每帧整盘重绘) → 成功清目标转怠速; 失败指数退避 0.5-4s 连 8 次放弃+WARN 日志; 去重加在拉目标; cover_get 持锁+cover_put 修绘制期 UAF; g_host_mock 防真网守卫 - 封面兜底污染修复: 不再把单曲 al_pic 写进 g_st.cover_url(否则 al_pic 缺失曲回落成 上一首封面且撞去重 → 封面永停); plr_page_enter 强制重估自愈; pl_page_enter 回填歌单封面 - 缓冲 UI: BUFFER 态「缓冲中… N%」(g_play.dl_done/total, 下载回调累加); 播放错误中文 错误条+snack(旧版 err 无 UI 消费者=无声死等); STOPPED 态播放键=重试; play/next 清 err - 写失败 set_err 修连环跳歌(旧版静默 break 被外层当自然播完,流死时跳完歌单+狂发 song_url); still_current 护栏修下载途中切歌的状态/快照过期覆盖 - 验证(0 真实请求): cover_chain_sim 7 组+player_flow_sim P1-P5 全 PASS, 旧代码对照 T2/P2/P4 必败坐实根因; audiod_chain_sim 14/14; pagination/window/core+qemu 回归 PASS; 宿主+mipsel 自有代码 0 warning; 9 页离屏渲染 rc=0 (含新 mock 页 playerbuf/playererr) - ncm md5 50d41bbf4a379e925699ba013b997ffd (未部署真机, 留主会话)
This commit is contained in:
1 parent
614694ad4a
commit
6200a41b71
13 files changed
+820
-20
No files matched your search
@@ -85,6 +85,8 @@ typedef struct ncm_play_run {
|
||||
int seq; /* 播放代际(每次 start 递增,用于区分过期信号)*/
|
||||
int err; /* 最近一次播放错误(0=无) */
|
||||
char errmsg[96];
|
||||
int64_t dl_done; /* 本曲已下载字节(缓冲期进度反馈,§18) */
|
||||
int64_t dl_total; /* 本曲标称大小(song_url 返回;0=未知) */
|
||||
int has_track; /* 当前是否有可播曲目(含 url 获取中) */
|
||||
/* 播放曲快照(REPORT §17):run_song 起播时把歌曲对象整体拷入(mu 保护),
|
||||
* 之后播放/歌词/IPC/UI 全读快照而非窗口——窗口滑出当前播放曲也不影响播放。 */
|
||||
@@ -303,7 +305,8 @@ int lyric_state(void); /* 0=空闲/未拉 1=加载中 2=已拉完(可能
|
||||
|
||||
/* cover */
|
||||
void cover_request(const char *url); /* 提交目标封面 URL(后台线程下载+解码) */
|
||||
meow_img *cover_get(void); /* 当前封面(不拥有;NULL=无) */
|
||||
meow_img *cover_get(void); /* 当前封面(**持锁返回**;NULL=无;用后必须 cover_put) */
|
||||
void cover_put(void); /* 配对 cover_get 释放锁(§18 修绘制期 UAF) */
|
||||
int cover_changed(void); /* 1=有新封面待绘制(UI tick 判变) */
|
||||
void cover_ack(void); /* UI 消费一次(已见当前版本) */
|
||||
const char *cover_current_path(void); /* 封面原始文件路径(供 launcher 媒体卡片读);NULL=无 */
|
||||
@@ -335,6 +338,7 @@ int64_t player_manager_dur_ms(void);
|
||||
int player_manager_load_lyric(void); /* 为当前曲目拉歌词并解析 */
|
||||
int player_manager_error(void);
|
||||
int player_manager_current_song(ncm_song_t *out); /* 播放曲快照锁内拷贝;0=有效 -1=无(REPORT §17) */
|
||||
void player_manager_dl(int64_t *done, int64_t *total); /* 本曲下载进度(字节;total=0 未知,§18) */
|
||||
|
||||
/* songmeta(app/logic/songmeta.c):歌曲元数据本地缓存(<cache_dir>/meta/<id>.bin),
|
||||
* 拉过的 song_detail 结果序列化落盘,再次入窗免重复请求(REPORT §17)。 */
|
||||
|
||||
Reference in new issue
Block a user