Closed bad-copy closed 3 years ago
这一点我确实考虑到了(参见HookMain.java:142行),同时,被API30抛弃的openCamera也在130行考虑到了 老版的API我测试没啥问题(抖音没啥问题,谷歌翻译Fail,支付宝扫描二维码显示启动摄像头失败,三星系统相机也是打不开),但我找不到问题在哪(我确定我在createCaptureSession里修改了那个Arraylist)
修正一下,谷歌翻译拍照是闪退 这是一个第三方相机demo的崩溃日志 Name : 相机 Build version: 1.0 Build date: 1979-11-30 00:00:00 Current date: 2021-08-23 20:54:33 Device: Samsung SM-A6060
Stack trace:
java.lang.UnsupportedOperationException: The producer output buffer format 0x7fa30c06 doesn't match the ImageReader's configured buffer format 0x21.
at android.media.ImageReader.nativeImageSetup(Native Method)
at android.media.ImageReader.acquireNextSurfaceImage(ImageReader.java:464)
at android.media.ImageReader.acquireNextImage(ImageReader.java:518)
at android.media.ImageReader.acquireLatestImage(ImageReader.java:411)
at com.smewise.camera2.manager.Session.getByteFromReader(Session.java:84)
at com.smewise.camera2.manager.CameraSession$1.onImageAvailable(CameraSession.java:288)
at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:812)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8512)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1139)
从中看到,真正原因可能是格式问题,但是那个16进制的格式代码,在ImageFormat类里根本查不到。
谷歌相机崩溃的原因可能就是Mediaplayer在作为内容提供者向ImageReader提供内容时格式对不上,导致了这个问题 我把mediaplayer的prepare那条给注释掉了,谷歌相机不崩溃了,但是其他应用也提示无法开启摄像头(imagereader一直没有内容更新) 所以解决方案:换一个新的内容提供者,能兼容imagereader的。
你提到的问题跟我讲的可能不是同一个问题。
在我的测试环境下,只需要改一下版本号就可以正常预览了: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // 这里改成这样 XposedHelpers.findAndHookMethod("android.hardware.camera2.CameraManager", lpparam.classLoader, "openCamera", String.class,java.util.concurrent.Executor.class , CameraDevice.StateCallback.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); c2_state_callback = param.args[2].getClass(); XposedBridge.log("2位参数初始化相机,类:"+c2_state_callback.toString()); process_camera2_init(c2_state_callback); } }); }
你提到的问题跟我讲的可能不是同一个问题。
在我的测试环境下,只需要改一下版本号就可以正常预览了: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // 这里改成这样 XposedHelpers.findAndHookMethod("android.hardware.camera2.CameraManager", lpparam.classLoader, "openCamera", String.class,java.util.concurrent.Executor.class , CameraDevice.StateCallback.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); c2_state_callback = param.args[2].getClass(); XposedBridge.log("2位参数初始化相机,类:"+c2_state_callback.toString()); process_camera2_init(c2_state_callback); } }); }
如果你方便的话,那请帮忙发一个pull request。
你好,我又发现一个bug,但我目前无法解决,由于没有联系方式,我重新打开了这个issue。
在QQ应用中,扫描功能中有个翻译选项,当我点击拍照时,存在HOOK遗漏的现象(有时候是整个帧遗漏,有的时候是半帧),如图
这就是丢半帧的清空,上半部分是我瞎画的,下半部分是真实摄像头。
我目前对此没有解决的思路(隔壁微信就没有这个问题),想请问你有没有啥好方案。
缓冲区数据刷新太快导致,每次制裁一下缓冲区就好了,12的release就针对这个修复了
openCamera(String cameraId, Executor executor, CameraDevice.StateCallback callback) 这个从Android P开始才有的,之前的版本都没有。
如果不做处理的话,会报以下错误: submitRequestList - cannot use a surface that wasn't configured
导致无法显示内容。