OpenGL ES 2不适用于Android API23

时间:2016-09-13 08:39:15

标签: android opengl-es opencv4android

在我的应用程序中,我正在做一些图像像素操作。 我的代码基于THIS示例。

我所做的唯一改变是将FRAGMENT_SHADER更改为灰度,它看起来像这样:

private static final String FRAGMENT_SHADER =
        "#extension GL_OES_EGL_image_external : require\n" +
        "precision mediump float;\n" +      // highp here doesn't seem to matter
        "varying vec2 vTextureCoord;\n" +
        "uniform samplerExternalOES sTexture;\n" +
        "void main() {\n" +
        "    vec4 tc = texture2D(sTexture, vTextureCoord);\n" +
        "    gl_FragColor.r = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "    gl_FragColor.g = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "    gl_FragColor.b = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "}\n";

问题: 我录制了一个来自Galaxy s7设备的视频,录制后我拍摄了录制的视频,我正在从2个不同的设备(Galaxy S7和Galaxy s3)读取第一帧,我发现像素值之间的像素值完全不同设备

有人知道为什么会这样吗?为了解决这个问题,我该怎么做,因为我的算法由于这种差异而失败了?

更新

这是我得到的差异的例子。

Gaaxy S3: 矩阵的一部分 213,214,212,214,216,212,213,212,212,212,213,214,214,214,213,213,214,214,214,214,212,213,212,213,212, 214,214,212,212,210,211,210,211,210,211,211,214,211,214,213,213,214,214,216,216,216,215,215,216,212, 213,213,214,213,213,212,211,209,209,207,208,208,210,211,209,207,209,210,217,219,216,209,209,210,210, 210,211,209,207,205,205,206,210,210,220,211,202,210,211,206,206,209,210,211,213,219,222,216,217,217 < / p>

非零像素数:1632816

所有像素的总和:3.1834445E8

Galaxy S7: Matrix与Galaxy 3的相同部分 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164 / p>

非零像素数:1063680

所有像素的总和:1.6593408E8

UPDATE2:

我发现收到的图像绝对毁了,但视频录制得很好。 这是Galaxy S3的好照片: enter image description here

这是我从Galaxy S7获得的图像(相同帧#) enter image description here

我根本不知道这里发生什么,但我知道所有Marshmallow设备(Galaxy S6,S7和华为)的最后一张图片是相同的

1 个答案:

答案 0 :(得分:1)

经过一周的努力寻找解决方案后,确实找到了!

正如我所说,我基于bigflake示例,在此示例中,有一个选项可以反转框架,并在示例中说明了所做的事情。

通过将反转更改为false,问题得以解决。

我真的很感激,如果有人可以向我解释框架倒置的原因,以及为什么决定将其设置为&#34; true&#34;默认情况下。

谢谢你的帮助!

这是我所做的改变,如果它不够清楚:

outputSurface.drawImage(false);