在我的应用中,我正在做一些图像像素操作。
我的代码基于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、214、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

非零像素数:1632816

所有像素的总和:3.1834445E8

Galaxy S7:
与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

非零像素数:1063680

所有像素的总和:1.6593408E8

Update2:

我发现收到的图像完全毁了,但视频录制得很好。
这是Galaxy S3的好图像:
android - OpenGL ES 2在Android API 23上不起作用-LMLPHP

这是我从Galaxy S7获得的图像(相同的帧号)
android - OpenGL ES 2在Android API 23上不起作用-LMLPHP

我完全不知道这里会发生什么,但我知道所有棉花糖设备(Galaxy S6,S7和华为)的最后一张图片都相同

最佳答案

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

正如我所说,我基于bigflake示例,在此示例中,有一个选项可以反转框架,在示例中,该操作已完成。

通过将invert更改为false,可以解决问题。

如果有人能向我解释帧反转的原因,以及为什么决定将其默认设置为“true”,我将不胜感激。

感谢您的所有帮助!

如果还不够清楚,这就是我所做的更改:

outputSurface.drawImage(false);

10-07 21:25