【问题标题】:Method called after release() when using custom camera使用自定义相机时在 release() 之后调用的方法
【发布时间】:2015-07-23 18:07:02
【问题描述】:

我的应用程序关闭,并在 Renderer 类中发布后调用了错误方法。我进行了搜索,但没有运气...我尝试了一些对其他人有帮助的解决方案(例如 camera.setPreviewCallback(null); )但没有...我仅在带有 OS 4.4.2 的 Samsung Note 10.1 上遇到此问题。在其他设备上它可以正常工作。

这是 ImageRenderer 类中发生错误的地方:(in line camera.setPreviewTexture(mSurfaceTexture);)

public void setUpSurfaceTexture(final Camera camera, final GLSurfaceView surfaceView) {
    runOnDraw(new Runnable() {
        @Override
        public void run() {
            int[] textures = new int[1];
            GLES20.glGenTextures(1, textures, 0);
            mSurfaceTexture = new SurfaceTexture(textures[0]);
            try {                   
                camera.setPreviewTexture(mSurfaceTexture);
                camera.setPreviewCallback(GPUImageRenderer.this);
                camera.startPreview();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

什么会导致这个错误?以及它如何在我尝试过的所有设备上运行,除了这台设备?

错误日志:

01-08 14:52:27.791: E/AndroidRuntime(22887): FATAL EXCEPTION: GLThread 1666
01-08 14:52:27.791: E/AndroidRuntime(22887): Process: jp.co.cyberagent.android.gpuimage.sample, PID: 22887
01-08 14:52:27.791: E/AndroidRuntime(22887): java.lang.RuntimeException: Method called after release()
01-08 14:52:27.791: E/AndroidRuntime(22887):    at android.hardware.Camera.setPreviewTexture(Native Method)
01-08 14:52:27.791: E/AndroidRuntime(22887):    at jp.co.cyberagent.android.gpuimage.GPUImageRenderer$2.run(GPUImageRenderer.java:157)
01-08 14:52:27.791: E/AndroidRuntime(22887):    at jp.co.cyberagent.android.gpuimage.GPUImageRenderer.onDrawFrame(GPUImageRenderer.java:115)
01-08 14:52:27.791: E/AndroidRuntime(22887):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1532)
01-08 14:52:27.791: E/AndroidRuntime(22887):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1249)

【问题讨论】:

标签: android opengl-es camera


【解决方案1】:

我花了一些时间调试它...最后我发现问题与我认为的完全不同...我设置相机的方法之一被调用的次数超出了应有的次数,并导致了所有这些混乱.打开和释放相机的方法顺序有问题。所以实际上每个有这个问题的人都应该做的是仔细调试它的代码。确保在相机释放后您没有使用相机,直到您先打开它。而且您应该始终尝试使用此 camera.setPreviewCallback(null);我们在这里讨论过。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多