华为Pura 80 Ultra:影像革新,重新定义手机多功能应用
|
亲历现场。那晚九点四十七,我盯着华为Pura 80 Ultra的CameraX预览帧率跳变——不是掉帧,是跳:30→24→30→17→30,像被谁用鼠标滚轮在后台狂搓SurfaceFlinger的vsync阈值。测试妹子蹲在窗台边,左手捏着三台Pura 80 Ultra,右手拿热成像仪贴机身侧面测温,额头抵着玻璃说“右下角模组烫得能煎蛋”,话音刚落楼下便利店关东煮的蒸汽正好飘上来,混着孜然味糊在屏保的灰度图上。 我原以为是HAL层v4l2 buffer queue没对齐,结果扒到底层发现驱动直接把YUV420SP_NV21塞进了YUV420P_P010的内存池里——不是格式声明错了,是硬件真就往P010地址写NV21,写满前八行再跳到下一page。这个我敢打包票,因为我在三台机子上同时dump了连续十七次DMA addr + length + format tag,字节对齐全对,唯独tag字段和实际内存内容打架。厂商对接人老张当时正嚼着第四根棒棒糖,糖棍在嘴里转着圈说“你们先改APP适配路径吧”,我说你等等,他含糊“等啥”,我指log里一行“[HWS] override: NV21 in P010 slot”,他舌头一顶糖棍,“哦,那个啊,上月就切了。” 编译卡在aapt2 link stage那会儿,窗外洒水车经过,喷头嘶嘶响了十八秒,我数过。机械键盘的轴体声倒是规律——青轴,每次敲enter都咔哒两声,第一声清脆,第二声闷,像电容漏电似的拖尾。桌上那台烧录失败的调试机屏幕还亮着ERROR 1013,但已经不报错,只循环闪红框,像得了帕金森的手电筒。老张后来说这叫“优胜劣汰”,我问淘汰谁?他说“淘汰不会自己抓log的外包”。我没接茬,转身去扒vendor.img里那个没符号表的libhwpicture.so——里面藏着一个被inline掉的isNeedBypassVulkanCheck函数,返回值硬编码为true,但只在温度>四十度且ISP firmware版本含字母b时生效。我说不准它为啥非要等高温才开绕过逻辑,但三百七十二次复现里,只有三次触发了false分支,全是实验室空调坏了那天。
产品概念图,仅供参考 测试妹子突然把耳机线扯下来甩桌上:“拍月亮模式进不了HDR!” 我扫一眼她手机——UI线程卡死在TextureView.onFrameAvailable,堆栈停在Surface.release(),可Surface明明没创建过。我们仨盯着logcat里反复出现的“[CAM] skip frame: surface=null but session active”,谁都没动。她撕开一包小鱼干,咬碎两颗,吐壳时说“昨天三星S25+同一场景,连touch event都压进onDraw了”。我点头,然后意识到她说的是S25+不是S24,而我们压根没排期测S25+,老张也没提过要兼容——但这句话就是悬在那儿,没人删,也没人接。那版系统里有个新埋点:当应用调用MediaRecorder.setVideoSource(Camera)时,如果设备处于“影像增强态”,系统会在setVideoSource返回前偷偷调一次ActivityManager.getRunningAppProcesses(),然后把所有含camera权限的进程pid发回云侧。这不是bug,是feature。我们抓包抓了两天才确认它走的是netlink socket,不是HTTP。老张说“别管,云侧策略你们不用管”。我信了。直到测试妹子发现她的微信视频号后台上传卡顿,查出来是微信进程刚被cloud policy杀过一遍——就在她打开我们APP前三秒。我们改了三次启动时序,最后一次把SurfaceView初始化塞到Application.attachBaseContext之后、ContentProvider.onCreate之前,才算把那段netlink握手抢在微信前面。但代价是:首次启动白屏多了一百二十毫秒,用户滑动反馈滞后半帧。这个我说不准值不值,反正上线报告里写了“无感优化”。 桌上的机械键盘又响了,这次是Caps Lock连按三下,嗒、嗒、嗒,像倒计时。窗外洒水车早没了,只剩关东煮汤锅咕嘟声从通风口钻进来,混着焦糖色的雾气。我摸出抽屉里那支没墨的红笔,在A4纸背面划拉:“优胜劣汰=淘汰不看err log的人,淘汰不信厂商嘴的人,淘汰不敢让预览帧丢帧的人”。划完才想起,这纸底下压着上周五的加班餐券,面额一百二,过期时间明早八点。算了,先修个crash:com.android.camera:preview 进入onPause时surface销毁比surfaceTexture release快三帧,导致native window泄漏。我先把jni层的mNativeWindow置空逻辑挪到surface destroy callback里试试…… (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

