之前在进行项目开发时,有碰到 Android 9.0 三方app whatsapp 拍照预览分辨率过低 现象,但是拍照出来的照片是清晰的, 查看log发现priview-size过低导致预览模糊,而picture-size则是正常的1080p.
问题解决:尝试过在 camxtitian7xcontext.cpp中删除所用的preview-size, 然后发现其还是调用了其他也较低的size,所以问题解决方案是在framework层获取whatsapp等其他app的包名,给它们返回几组固定的size,
grep "connect call"发现wahtsapp的包名为 “com.whatsapp”,使用的是camera api2 – hal3框架,所以需要在
framework/base/core/java/android/hardware/camera2/params/StreamConfigurationMap.java 文件中修改,追溯流程发现其是在如下函数中获取所支持的size ,所以做了如下修改,之后此问题fix,希望有所帮助.
添加包名:
+import android.util.Log;
+import android.app.ActivityThread;
public <T> Size[] getOutputSizes(Class<T> klass) {
if (isOutputSupportedFor(klass) == false) {
return null;
}
String packageName = ActivityThread.currentOpPackageName();
Size[] sizes =getInternalFormatSizes(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
HAL_DATASPACE_UNKNOWN,/*output*/true, /*highRes*/false);
if(packageName != null && (packageName.equals("com.whatsapp")))
{
Size size1 = new Size(4000,3000);
Size size2 = new Size(4000,2250);
Size size3 = new Size(1920,1440);
Size size4 = new Size(1920,1080);
Size size5 = new Size(1280,720);
Size[] whatsapp_size = {size1,size2,size3,size4,size5};
return whatsapp_size;
}
return sizes;
}