vivo S50全面评测:高颜值+强性能购机指南
|
亲历现场。那天凌晨三点十七分,vivo S50那版系统刷进第三台测试机,我盯着Logcat里一行蓝底白字:`ActivityManager: START u0a14 {act=android.intent.action.VIEW dat=vivoscheme://camera?mode=pro}`——没崩溃,没ANR,但相机点开就是黑屏。我原以为是SurfaceView初始化被厂商动了hook,结果抓帧发现TextureView根本没bind到surface,连onSurfaceCreated都没进。真·空转。 桌上机械键盘咔哒咔哒响,左手边三块S50堆在窗台,下午五点晒的,背面烫手,指纹识别区泛白光。我拿红外测温枪扫了一眼——四十二度二,比隔壁OPPO Reno12还高零点八。测试妹子小林端着关东煮路过工位,竹签上串着萝卜和魔芋结,汤汁滴在《S50适配checklist》第一页,把“动态阴影渲染一致性”那行泡得发皱。她没停,只说:“刘工,你那个悬浮窗权限弹窗样式,V社说‘太像MIUI’。” 我扯了下领口,空调遥控器电池早没电,出风口吹的是热风。翻厂商对接人老张的微信,他十一点半回的“等我们确认”,截图时间戳还带着手机自动加的水印。而我在两点前就得交build——不是最终版,是能跑通核心场景的PRD验证包。编译窗口卡在DexMerger,进度条停在87%,后台还在跑ProGuard。窗外洒水车又来了,哗啦——哗啦——哗啦——,节奏准得像在嘲讽,每次水柱扫过玻璃,反光就盖住屏幕上那行`E/VideoEncoder: failed to create encoder: -38`。 优胜劣汰?对。但这淘汰不是靠性能跑分,是靠谁敢在system_server里塞私有IPC通道。S50那个「影像增强开关」,表面看是个SettingsProvider Boolean值,实际读写走的是/vendor/bin/vivo-camera-hal-proxy的socket监听,而这个proxy进程会根据当前是否在录4K60才决定是否把`enable_ultra_hdr`字段喂给HAL层。我们写的Adapter代码里判断的是`Build.VERSION.SDK_INT >= 33`,结果人家连SDK_INT都懒得校验,只认`SystemProperties.get("ro.vivo.camera.version", "0")`——字符串比较,俩字节的事。这个我敢打包票,我把vivo-camera-hal-proxy的so拖进Ghidra,字符串表第七行就是它。 但你说这设计蠢?不,它挺聪明。只是聪明错地方了。我们上周提的ISSUE编号#A3329-218里写着:当`ro.vivo.camera.version`为`"3.2b"`时,HAL返回的YUV stride是128对齐,但SurfaceDescriptor却按64算——导致所有第三方滤镜app预览绿屏。他们回复“已归档(Not Repro)”,附图是自家CameraApp截图,光鲜亮丽。没提图像是从buffer queue里memcpy硬抠出来的,还是绕开了surface直接喂GPU。我说不准。 外包同事老赵昨天晚上重写了三遍CameraX ExtensionCompat,最后删掉全部,改用反射调`CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL`——因为S50的Level字段在VendorTag里藏了两层,CameraCharacteristics直接读出来是null,非得`vendorCharacteristics.get(vendorKey)`再get一次。我试过用CameraManager.openCamera走底层API,失败。不是权限,不是锁,是openCamera回调里的`@NonNull CameraDevice`对象,`toString()`打印出来是`android.hardware.camera2.impl.CameraDeviceImpl@293c7f4`,可调`createCaptureSession()`瞬间NPE。Java层全链路没问题,C++ native_handle_t指针地址居然是0x0。真的0x0。这玩意儿没法debug,只能换路径绕。绕过去之后,又发现MediaCodec.createEncoderByType("video/avc")在S50上创建成功,但configure时传入的Surface参数被hal_proxy悄悄篡改过,width变成width+16——导致H.264码流SPS里pic_width_in_mbs_minus1错两位,解码器直接拒收。这种事,写进文档?他们文档里连`ro.vivo.camera.version`变量存在都不承认。
产品概念图,仅供参考 我抽了根烟,打火机咔一声,火苗歪了,熏黑滤嘴。楼下便利店的关东煮锅还在咕嘟,老板娘擦玻璃,抹布从左往右,停在“本店不提供发票”贴纸边上,又继续往右。这台S50现在在我右手边,屏幕朝下扣着,USB线插在电脑上,ADB Devices列着,Serial Number开头是V237……后面什么忘了。测试机堆在窗台最底下那台,边框有指甲刮痕,应该是小林之前急着拆后盖看电池型号留的。 其实我最烦的不是这些。是今天早上老张发来的会议纪要,PDF里写:“S50影像架构全面升级,采用全新自研影像引擎vISP 3.0,算法与硬件深度协同”。我没截图,但记得清清楚楚,第一页第二段第三行,“深度协同”四个字是微软雅黑加粗,字号比其他内容大两磅。他们真觉得我们不会打开/system/etc/permissions/目录看看有没有vivo.permission.CAMERA_VISP_3_0这个文件?没有。连vivo.permission.开头的permission都没有。只有`com.vivo.rom.permission.SECURE_CAMERA_ACCESS`——这名字听着吓人,实际就是个普通signature|privileged权限,只要package name带vivo.rom就能申。 所以我说优胜劣汰。淘汰的不是代码能力差的人,是还信文档、信接口定义、信厂商回复“已修复”的人。我刚点了Clean Project,AS又开始重新索引,进度条卡在“Indexing kotlin…”。窗外洒水车走了,换成了快递三轮车喇叭,“扫码取件——”,单音节,破音,重复三遍。我把S50倒扣过来,镜头朝上,阳光直射CMOS,三秒后屏幕右上角跳出一行小字:“温度过高,关闭AI降噪”。它连高温预警都懒得走标准SensorManager流程,自己在HAL层截了thermal事件抛Toast。 下一步?先submit一个patch把SurfaceView替换TextureView的fallback逻辑补上,至少让用户能看见预览——哪怕画质糊成马赛克。至于那个42℃下的YUV stride错位?等他们下次push new build再说。或者不等。我打算下午去找老赵,借他那台拆过主板的S50,试试能不能从`/dev/vivo_camera_sync`节点直接读原始meta。反正烧了也是他们的板子。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

