Используйте samplerExternalOES для чтения кадра и доступа к каналу RGB непосредственно в OpenTOK SDK? - PullRequest
0 голосов
/ 11 марта 2019

Пример Custom-Video-Driver для Opentok-android-sdk с использованием текстуры YUV и преобразованием их в канал RGB.

private String vertexShaderCode = "uniform mat4 uMVPMatrix;"
            + "attribute vec4 aPosition;\n"
            + "attribute vec2 aTextureCoord;\n"
            + "varying vec2 vTextureCoord;\n" + "void main() {\n"
            + "  gl_Position = uMVPMatrix * aPosition;\n"
            + "  vTextureCoord = aTextureCoord;\n" + "}\n";

private String fragmentShaderCode = "precision mediump float;\n"
            + "uniform sampler2D Ytex;\n"
            + "uniform sampler2D Utex,Vtex;\n"
            + "varying vec2 vTextureCoord;\n"
            + "void main(void) {\n"
            + "  float nx,ny,r,g,b,y,u,v;\n"
            + "  mediump vec4 txl,ux,vx;"
            + "  nx=vTextureCoord[0];\n"
            + "  ny=vTextureCoord[1];\n"
            + "  y=texture2D(Ytex,vec2(nx,ny)).r;\n"
            + "  u=texture2D(Utex,vec2(nx,ny)).r;\n"
            + "  v=texture2D(Vtex,vec2(nx,ny)).r;\n"

            + "  y=1.0-1.1643*(y-0.0625);\n" // this line produces the inverted effect
            //+ "  y=1.1643*(y-0.0625);\n"  // use this line instead if you want to have normal colors

            + "  u=u-0.5;\n" + "  v=v-0.5;\n" + "  r=y+1.5958*v;\n"
            + "  g=y-0.39173*u-0.81290*v;\n" + "  b=y+2.017*u;\n"
            + "  gl_FragColor=vec4(r,g,b,1.0);\n" + "}\n";

В настоящее время я могу изменить канал RGB и выполнить некоторую базовую обработку изображения, например серуюшкала, перевернутый цвет.Однако я хочу использовать текстуру samplerExternalOES для прямого доступа к каналу RGB для обработки изображений и свертка .

Может ли кадр, возвращаемый OpenTOK, использовать samplerExternalOES, аналогично следующему:

 private static final String FRAGMENT_SHADER_EXT_BW =
            "#extension GL_OES_EGL_image_external : require\n" +  
                    "precision mediump float;\n" + //using medium precision
                    "varying vec2 vTextureCoord;\n" +//texture coordinate
                    "uniform samplerExternalOES sTexture;\n" + //sampler texture type
                    "void main() {\n" +
                    "    vec4 tc = texture2D(sTexture, vTextureCoord);\n" +
                    "    float color = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
                    "    gl_FragColor = vec4(color, color, color, 1.0);\n" +
                    "}\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...