fix(sdk+launcher): 图标不渲染真根因(agent-219) — meow_ui_img.c scale_buf cover 采样把乘写成除(÷缩放比→采到源图左上角透明区,全丢); 改乘+居中裁剪偏移修正; 宿主旧测试用纯色图掩盖了该bug。+ main_menu App退出/结构变化重绘时 fb_pan_buf0_force 无条件pan回buffer0(防App翻页留buffer1致菜单残帧)

meow_ui.a→3e0ee8f7 launcher→9d0efc2f hello→9609ea6e files→90f5cf07 ncm→be8be221(均已上卡); 真机截图证据 .tmp/meowbug/fix1.png+fix_b2_after.png
This commit is contained in:
MeowOS committed 2026-08-31 15:42:24 +08:00
1 parent 05a19a9ea3
commit ab4da09e75
45 files changed
+1926 -147

No files matched your search

+31
View File
@@ -222,6 +222,36 @@ static void test_network(void) {
if (!net_ok) printf(" SKIP network live checks (host unreachable or TLS CA missing)\n");
}
/* ---------- 二期:/api/playlist/track/all 服务端分页 离线解析 ---------- */
static void test_track_all_parse(void) {
printf("== track_all 离线解析(二期)==\n");
/* 合成一个真实形态的 track/all 响应:songs[](全 song 对象,含 al.picUrl)+ total。
* id 为 >2^31 数字,验证 int64 不溢出;al.picUrl 验证专辑封面字段。 */
const char *json =
"{\"code\":200,\"songs\":["
"{\"id\":2746301825,\"name\":\"Chrono Rewind\",\"dt\":253000,\"fee\":1,"
" \"ar\":[{\"name\":\"CVRCH\"}],"
" \"al\":{\"name\":\"Rewrite\",\"picUrl\":\"http://p1.music.126.net/ab/cover1.jpg\"}},"
"{\"id\":2048962657,\"name\":\"Verve\",\"dt\":210000,\"fee\":0,"
" \"ar\":[{\"name\":\"Ryan Taubert\"}],"
" \"al\":{\"name\":\"Rebuild\",\"picUrl\":\"https://p2.music.126.net/cd/cover2.jpg\"}}"
"],\"total\":5191}";
ncm_song_t songs[8];
int n = 0;
int64_t total = 0;
int rc = ncm_api_parse_track_all(json, strlen(json), songs, 8, &n, &total);
CHECKRC(rc, "parse_track_all rc");
CHECK(n == 2, "parsed 2 songs (n=%d)", n);
CHECK(total == 5191, "total=%lld", (long long)total);
CHECK(strcmp(songs[0].name, "Chrono Rewind") == 0, "song0 name");
CHECK(strcmp(songs[0].art_name, "CVRCH") == 0, "song0 artist");
CHECK(strcmp(songs[0].album_name, "Rewrite") == 0, "song0 album");
CHECK(strcmp(songs[0].al_pic, "http://p1.music.126.net/ab/cover1.jpg") == 0, "song0 al_pic");
CHECK(strcmp(songs[1].id, "2048962657") == 0, "song1 id(numeric->text)");
CHECK(strcmp(songs[1].al_pic, "https://p2.music.126.net/cd/cover2.jpg") == 0, "song1 al_pic");
CHECK(songs[0].duration_ms == 253000 && songs[0].fee == 1, "song0 dt/fee");
}
int main(int argc, char **argv) {
const char *data_dir = (argc > 1) ? argv[1] : "/tmp/ncm_test";
printf("ncm_core self-test, data_dir=%s\n", data_dir);
@@ -236,6 +266,7 @@ int main(int argc, char **argv) {
test_cache();
test_qr();
test_network();
test_track_all_parse();
printf("\n%s\n", g_fail ? "== RESULT: FAIL ==" : "== RESULT: PASS ==");
return g_fail ? 1 : 0;
Binary file not shown.