【问题标题】:Android camera preview not working via surfaceTextureAndroid相机预览无法通过surfaceTexture工作
【发布时间】:2015-05-19 20:18:17
【问题描述】:

我正在尝试通过 openGL 在 Android 上绘制相机预览。预览纹理是通过 SurfaceTexture 作为外部 EGL 图像获得的,然后我使用一个相当简单的着色器来绘制它:

#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES sTexture;
varying vec2 texCoord;
    void main() {
    gl_FragColor = texture2D(sTexture,texCoord);
}

在 nexus 5 上,它适用于高达 1280x960 的所有预览图像。但是对于最大的 2:1920x1080 和 1600x1200,屏幕只是空白。我在通过 camera.getSupportedPreviewSizes 获得的相机中设置了预览大小,因此我不会尝试设置相机不支持的任何内容。

    public  List<Camera.Size>  getSupportedResolutions()
    {
        List<Camera.Size> previewSizes = mCamera.getParameters().getSupportedPreviewSizes();
        List<Camera.Size> pictureSizes = mCamera.getParameters().getSupportedPictureSizes();

        pictureSizes.retainAll(previewSizes);

        return pictureSizes;
    }

 private void setResolution(int position)
    {
        List<Camera.Size> res = getSupportedResolutions();

        Camera.Parameters p =  mCamera.getParameters();
        p.setPictureSize(res.get(position).width, res.get(position).height);
        p.setPreviewSize(res.get(position).width, res.get(position).height);

        mCamera.setParameters(p);
    }

任何建议这些决议可能会出现什么问题?也许opengl中的某种大小限制?

【问题讨论】:

  • 有一个最大纹理大小,您可以查询:stackoverflow.com/questions/8573178。但是,这可能比您的相机图像大得多。我不知道“外部”纹理是否有单独的限制。如果您只是将它们直接发送到 TextureView(内部使用 SurfaceTexture)或 SurfaceView(不使用),这些较大的分辨率是否有效?
  • 我发现了问题所在。如果预览尺寸大于我的表面视图的尺寸,我只是设置了不正确的视口。通过 (0, screenW) , (0, screenH) 固定它可以解决问题。外部图像没有单独的限制,这完全是我的错
  • 你应该把它写下来作为答案——stackoverflow.com/help/self-answer

标签: android opengl-es android-camera external glsurfaceview


【解决方案1】:

我发现了问题所在。如果预览尺寸大于我的表面视图的尺寸,我只是设置了不正确的视口。通过 (0, screenW) , (0, screenH) 固定它可以解决问题。外部图像没有单独的限制,这完全是我的错

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多