package com.kofax.kmc.ken.engines.gpu; import android.graphics.Point; import android.graphics.Rect; import android.opengl.GLES20; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.common.primitives.UnsignedBytes; import com.kofax.kmc.ken.engines.data.DocumentDetectionSettings; import com.kofax.kmc.ken.engines.gpu.shaders.BarnsenShader; import com.kofax.kmc.ken.engines.gpu.shaders.GlobalThresholdShader; import com.kofax.kmc.ken.engines.gpu.shaders.LocalAdaptiveThresholdShader; import com.kofax.kmc.ken.engines.gpu.shaders.PassThroughShader; import com.kofax.kmc.ken.engines.gpu.shaders.RgbSobelShader; import com.kofax.kmc.ken.engines.gpu.shaders.ScaleHistogramShader; import com.kofax.kmc.kut.utilities.RectUtil; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes3.dex */ public abstract class e extends ImageProcessor { static final float[] fH = {-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f}; protected OpenGLESContextManager fD; private FloatBuffer fG; private FloatBuffer fK; protected LocalAdaptiveThresholdShader gA; protected BarnsenShader gB; protected PassThroughShader gg; protected RgbSobelShader gx; protected GlobalThresholdShader gy; protected ScaleHistogramShader gz; private FrameBufferTexture fY = null; private FrameBufferTexture gC = null; private FrameBufferTexture gD = null; private FrameBufferTexture gE = null; private ByteBuffer gc = null; private ByteBuffer gd = null; protected float[] gF = null; private int fO = 0; private int fP = 0; private int fZ = 0; private int ga = 0; @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public void processByteData(byte[] bArr, int i, int i2) { } public e() { float[] fArr = fH; FloatBuffer asFloatBuffer = ByteBuffer.allocateDirect(fArr.length << 2).order(ByteOrder.nativeOrder()).asFloatBuffer(); this.fG = asFloatBuffer; asFloatBuffer.put(fArr).position(0); FloatBuffer asFloatBuffer2 = ByteBuffer.allocateDirect(TextureRotationUtil.TEXTURE_ROTATED_270.length << 2).order(ByteOrder.nativeOrder()).asFloatBuffer(); this.fK = asFloatBuffer2; asFloatBuffer2.clear(); this.fK.put(TextureRotationUtil.TEXTURE_ROTATED_270).position(0); } /* JADX INFO: Access modifiers changed from: protected */ public void a(FrameBufferTexture frameBufferTexture) { this.gF = null; V(); FrameBufferTexture frameBufferTexture2 = this.fY; if (frameBufferTexture2 != null) { d(frameBufferTexture, frameBufferTexture2); boolean e = e(this.fY, this.gC); FrameBufferTexture frameBufferTexture3 = this.gC; this.gE = frameBufferTexture3; if (e) { this.gF = b(frameBufferTexture3, (ByteBuffer) null, GPUSettings.getSettings().enableRgbSobelOLC); } } } /* JADX INFO: Access modifiers changed from: protected */ public void b(FrameBufferTexture frameBufferTexture) { this.gF = null; V(); FrameBufferTexture frameBufferTexture2 = this.fY; if (frameBufferTexture2 != null) { if (!f(frameBufferTexture, frameBufferTexture2)) { this.gE = this.fY; return; } ByteBuffer g = g(this.fY, this.gC); FrameBufferTexture frameBufferTexture3 = this.gC; this.gE = frameBufferTexture3; this.gF = b(frameBufferTexture3, g, GPUSettings.getSettings().enableGlobalAdaptiveThresholdOLC); } } /* JADX INFO: Access modifiers changed from: protected */ public void c(FrameBufferTexture frameBufferTexture) { this.gF = null; V(); FrameBufferTexture frameBufferTexture2 = this.fY; if (frameBufferTexture2 != null) { if (!f(frameBufferTexture, frameBufferTexture2)) { this.gE = this.fY; return; } FrameBufferTexture frameBufferTexture3 = this.fY; a(frameBufferTexture3, frameBufferTexture3, this.gC); FrameBufferTexture frameBufferTexture4 = this.fY; this.gE = frameBufferTexture4; this.gF = b(frameBufferTexture4, (ByteBuffer) null, GPUSettings.getSettings().enableLocalAdaptiveThresholdOLC); } } /* JADX INFO: Access modifiers changed from: protected */ public void d(FrameBufferTexture frameBufferTexture) { this.gF = null; V(); FrameBufferTexture frameBufferTexture2 = this.fY; if (frameBufferTexture2 != null) { b(frameBufferTexture, frameBufferTexture2, this.gC); FrameBufferTexture frameBufferTexture3 = this.fY; this.gE = frameBufferTexture3; this.gF = b(frameBufferTexture3, (ByteBuffer) null, GPUSettings.getSettings().enableBarnsenOLC); } } @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public void destroy() { FrameBufferTexture frameBufferTexture = this.fY; if (frameBufferTexture != null) { frameBufferTexture.destroy(); this.fY = null; } FrameBufferTexture frameBufferTexture2 = this.gC; if (frameBufferTexture2 != null) { frameBufferTexture2.destroy(); this.gC = null; } FrameBufferTexture frameBufferTexture3 = this.gD; if (frameBufferTexture3 != null) { frameBufferTexture3.destroy(); this.gD = null; } RgbSobelShader rgbSobelShader = this.gx; if (rgbSobelShader != null) { rgbSobelShader.destroy(); this.gx = null; } GlobalThresholdShader globalThresholdShader = this.gy; if (globalThresholdShader != null) { globalThresholdShader.destroy(); this.gy = null; } ScaleHistogramShader scaleHistogramShader = this.gz; if (scaleHistogramShader != null) { scaleHistogramShader.destroy(); this.gz = null; } LocalAdaptiveThresholdShader localAdaptiveThresholdShader = this.gA; if (localAdaptiveThresholdShader != null) { localAdaptiveThresholdShader.destroy(); this.gA = null; } BarnsenShader barnsenShader = this.gB; if (barnsenShader != null) { barnsenShader.destroy(); this.gB = null; } PassThroughShader passThroughShader = this.gg; if (passThroughShader != null) { passThroughShader.destroy(); this.gg = null; } } private void d(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2) { GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); RgbSobelShader rgbSobelShader = this.gx; GLES20.glUseProgram(rgbSobelShader.getProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture.mTexture); float f = GPUSettings.getSettings().rgbSobelEdgeStrength; GLES20.glUniform1f(rgbSobelShader.getTexelWidthUniform(), 1.0f / frameBufferTexture.mWidth); GLES20.glUniform1f(rgbSobelShader.getTexelHeightUniform(), 1.0f / frameBufferTexture.mHeight); GLES20.glUniform1f(rgbSobelShader.getEdgeStrengthUniform(), f); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); } private boolean e(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2) { GLES20.glFinish(); GLES20.glBindFramebuffer(36160, frameBufferTexture.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight); if (this.gc == null) { ByteBuffer allocateDirect = ByteBuffer.allocateDirect((frameBufferTexture.mWidth * frameBufferTexture.mHeight) << 2); this.gc = allocateDirect; allocateDirect.order(ByteOrder.LITTLE_ENDIAN); } GLES20.glReadPixels(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight, 6408, 5121, this.gc); byte[] array = this.gc.array(); int i = frameBufferTexture.mWidth << 2; int i2 = 0; int i3 = 0; for (int i4 = 0; i4 < frameBufferTexture.mHeight; i4++) { for (int i5 = 0; i5 < i; i5 += 4) { int i6 = array[i3 + i5] & UnsignedBytes.MAX_VALUE; if (i2 < i6) { i2 = i6; } } i3 += i; } float f = i2; float f2 = f / 255.0f >= GPUSettings.getSettings().contrastThreshold ? 255.0f / f : BitmapDescriptorFactory.HUE_RED; GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); GlobalThresholdShader globalThresholdShader = this.gy; GLES20.glUseProgram(globalThresholdShader.getProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture.mTexture); GLES20.glUniform1f(globalThresholdShader.getThresholdUniform(), GPUSettings.getSettings().edgeLowThreshold); GLES20.glUniform1f(globalThresholdShader.getScaleFactorUniform(), f2); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); return ((double) f2) > 0.0d; } private float[] b(FrameBufferTexture frameBufferTexture, ByteBuffer byteBuffer, boolean z) { byte[] bArr; if (byteBuffer != null) { bArr = byteBuffer.array(); } else { GLES20.glFinish(); GLES20.glBindFramebuffer(36160, frameBufferTexture.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight); if (this.gc == null) { ByteBuffer allocateDirect = ByteBuffer.allocateDirect((frameBufferTexture.mWidth * frameBufferTexture.mHeight) << 2); this.gc = allocateDirect; allocateDirect.order(ByteOrder.LITTLE_ENDIAN); } GLES20.glReadPixels(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight, 6408, 5121, this.gc); byte[] array = this.gc.array(); if (this.gd == null) { ByteBuffer allocateDirect2 = ByteBuffer.allocateDirect(frameBufferTexture.mWidth * frameBufferTexture.mHeight); this.gd = allocateDirect2; allocateDirect2.order(ByteOrder.nativeOrder()); } byte[] array2 = this.gd.array(); int i = frameBufferTexture.mWidth; int i2 = frameBufferTexture.mHeight; int i3 = 0; int i4 = 0; while (i3 < i * i2) { array2[i3] = array[i4]; i3++; i4 += 4; } bArr = array2; } float[] fArr = new float[8]; if (this.mSettings == null) { this.mSettings = new DocumentDetectionSettings(); } Rect createTargetRect = RectUtil.createTargetRect(this.mSettings.getTargetFramePaddingPercent(), this.mSettings.getTargetFrameAspectRatio(), this.mSettings.getCenterPoint() != null ? new Point((this.mSettings.getCenterPoint().x * frameBufferTexture.mWidth) / this.fO, (this.mSettings.getCenterPoint().y * frameBufferTexture.mHeight) / this.fP) : null, frameBufferTexture.mWidth, frameBufferTexture.mHeight); if (!GPUImageNativeLibrary.DetectBounds(bArr, frameBufferTexture.mWidth, frameBufferTexture.mHeight, Math.min(((createTargetRect.width() * createTargetRect.height()) / (frameBufferTexture.mWidth * frameBufferTexture.mHeight)) * 0.5f, GPUSettings.getSettings().relativeAreaRatio), GPUSettings.getSettings().maxAspectRatio, (float) this.mSettings.getTargetFrameAspectRatio(), z, fArr)) { return null; } fArr[0] = this.fO * (fArr[0] / frameBufferTexture.mWidth); fArr[1] = this.fP * (fArr[1] / frameBufferTexture.mHeight); fArr[2] = this.fO * (fArr[2] / frameBufferTexture.mWidth); fArr[3] = this.fP * (fArr[3] / frameBufferTexture.mHeight); fArr[4] = this.fO * (fArr[4] / frameBufferTexture.mWidth); fArr[5] = this.fP * (fArr[5] / frameBufferTexture.mHeight); fArr[6] = this.fO * (fArr[6] / frameBufferTexture.mWidth); fArr[7] = this.fP * (fArr[7] / frameBufferTexture.mHeight); return fArr; } private void V() { int i; int i2; if (this.fY != null || (i = this.fZ) == 0 || (i2 = this.ga) == 0) { return; } this.fY = new FrameBufferTexture(i, i2); this.gC = new FrameBufferTexture(this.fZ, this.ga); OpenGLESContextManager openGLESContextManager = new OpenGLESContextManager(); this.fD = openGLESContextManager; this.gx = new RgbSobelShader(openGLESContextManager); this.gy = new GlobalThresholdShader(this.fD); this.gz = new ScaleHistogramShader(this.fD); this.gA = new LocalAdaptiveThresholdShader(this.fD); this.gB = new BarnsenShader(this.fD); this.gg = new PassThroughShader(this.fD); } private boolean f(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2) { GLES20.glFinish(); GLES20.glBindFramebuffer(36160, frameBufferTexture.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight); if (this.gc == null) { ByteBuffer allocateDirect = ByteBuffer.allocateDirect((frameBufferTexture.mWidth * frameBufferTexture.mHeight) << 2); this.gc = allocateDirect; allocateDirect.order(ByteOrder.LITTLE_ENDIAN); } GLES20.glReadPixels(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight, 6408, 5121, this.gc); byte[] array = this.gc.array(); int i = frameBufferTexture.mWidth << 2; int i2 = 0; int i3 = 0; int i4 = 255; for (int i5 = 0; i5 < frameBufferTexture.mHeight; i5++) { for (int i6 = 0; i6 < i; i6 += 4) { int i7 = array[i3 + i6] & UnsignedBytes.MAX_VALUE; if (i7 > i2) { i2 = i7; } if (i7 < i4) { i4 = i7; } } i3 += i; } float f = i2 - i4; float f2 = f / 255.0f >= GPUSettings.getSettings().contrastThreshold ? 255.0f / f : 0.0f; GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); ScaleHistogramShader scaleHistogramShader = this.gz; GLES20.glUseProgram(scaleHistogramShader.getProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture.mTexture); GLES20.glUniform1f(scaleHistogramShader.getMinValueUniform(), i4 / 255.0f); GLES20.glUniform1f(scaleHistogramShader.getScaleFactorUniform(), f2); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); return f2 > BitmapDescriptorFactory.HUE_RED; } private void a(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2, FrameBufferTexture frameBufferTexture3) { LocalAdaptiveThresholdShader localAdaptiveThresholdShader = this.gA; GLES20.glBindFramebuffer(36160, frameBufferTexture3.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture3.mWidth, frameBufferTexture3.mHeight); localAdaptiveThresholdShader.setRadius(GPUSettings.getSettings().localAdaptiveThresholdRadius); GLES20.glUseProgram(localAdaptiveThresholdShader.getFirstPassProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture.mTexture); float f = GPUSettings.getSettings().localAdaptiveThreshold; GLES20.glUniform1f(localAdaptiveThresholdShader.getFirstPassTexelWidthUniform(), 1.0f / frameBufferTexture.mWidth); GLES20.glUniform1f(localAdaptiveThresholdShader.getFirstPassTexelHeightUniform(), BitmapDescriptorFactory.HUE_RED); GLES20.glUniform1f(localAdaptiveThresholdShader.getFirstPassThresholdUniform(), f); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); GLES20.glUseProgram(localAdaptiveThresholdShader.getSecondPassProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture3.mTexture); float f2 = GPUSettings.getSettings().localAdaptiveThreshold; GLES20.glUniform1f(localAdaptiveThresholdShader.getSecondPassTexelWidthUniform(), BitmapDescriptorFactory.HUE_RED); GLES20.glUniform1f(localAdaptiveThresholdShader.getSecondPassTexelHeightUniform(), 1.0f / frameBufferTexture3.mHeight); GLES20.glUniform1f(localAdaptiveThresholdShader.getSecondPassThresholdUniform(), f2); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); } private ByteBuffer g(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2) { int i; GLES20.glFinish(); GLES20.glBindFramebuffer(36160, frameBufferTexture.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight); if (this.gc == null) { ByteBuffer allocateDirect = ByteBuffer.allocateDirect((frameBufferTexture.mWidth * frameBufferTexture.mHeight) << 2); this.gc = allocateDirect; allocateDirect.order(ByteOrder.LITTLE_ENDIAN); } if (this.gd == null) { ByteBuffer allocateDirect2 = ByteBuffer.allocateDirect(frameBufferTexture.mWidth * frameBufferTexture.mHeight); this.gd = allocateDirect2; allocateDirect2.order(ByteOrder.nativeOrder()); } GLES20.glReadPixels(0, 0, frameBufferTexture.mWidth, frameBufferTexture.mHeight, 6408, 5121, this.gc); byte[] array = this.gc.array(); byte[] array2 = this.gd.array(); int i2 = frameBufferTexture.mWidth * frameBufferTexture.mHeight; int i3 = 0; int i4 = 0; while (i3 < i2) { array2[i3] = array[i4]; i3++; i4 += 4; } GPUImageNativeLibrary.OtsyThreshold(array2, frameBufferTexture.mWidth, frameBufferTexture.mHeight, 30.0f, 255.0f); if (GPUSettings.getSettings().showProcessedImageAndBounds) { if (this.gD == null) { this.gD = new FrameBufferTexture(this.fZ, this.ga); } if (this.gD != null) { int i5 = 0; for (int i6 = 0; i6 < i2; i6++) { if (array2[i6] != 0) { array[i5] = -1; array[i5 + 1] = -1; array[i5 + 2] = -1; i = i5 + 4; array[i5 + 3] = -1; } else { array[i5] = 0; array[i5 + 1] = 0; array[i5 + 2] = 0; i = i5 + 4; array[i5 + 3] = -1; } i5 = i; } this.gD.setTextureBuffer(this.gc); GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); GLES20.glUseProgram(this.gg.getProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, this.gD.mTexture); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); } } return this.gd; } private void b(FrameBufferTexture frameBufferTexture, FrameBufferTexture frameBufferTexture2, FrameBufferTexture frameBufferTexture3) { BarnsenShader barnsenShader = this.gB; GLES20.glBindFramebuffer(36160, frameBufferTexture3.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture3.mWidth, frameBufferTexture3.mHeight); barnsenShader.setRadius(GPUSettings.getSettings().barnsenRadius); GLES20.glUseProgram(barnsenShader.getFirstPassProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture.mTexture); float f = GPUSettings.getSettings().barnsenThreshold; GLES20.glUniform1f(barnsenShader.getFirstPassTexelWidthUniform(), 1.0f / frameBufferTexture.mWidth); GLES20.glUniform1f(barnsenShader.getFirstPassTexelHeightUniform(), BitmapDescriptorFactory.HUE_RED); GLES20.glUniform1f(barnsenShader.getFirstPassThresholdUniform(), f); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); GLES20.glBindFramebuffer(36160, frameBufferTexture2.mFrameBuffer); GLES20.glViewport(0, 0, frameBufferTexture2.mWidth, frameBufferTexture2.mHeight); GLES20.glUseProgram(barnsenShader.getSecondPassProgram()); GLES20.glVertexAttribPointer(0, 2, 5126, false, 0, (Buffer) this.fG); GLES20.glEnableVertexAttribArray(0); GLES20.glVertexAttribPointer(1, 2, 5126, false, 0, (Buffer) this.fK); GLES20.glEnableVertexAttribArray(1); GLES20.glBindTexture(3553, frameBufferTexture3.mTexture); float f2 = GPUSettings.getSettings().barnsenThreshold; GLES20.glUniform1f(barnsenShader.getSecondPassTexelWidthUniform(), BitmapDescriptorFactory.HUE_RED); GLES20.glUniform1f(barnsenShader.getSecondPassTexelHeightUniform(), 1.0f / frameBufferTexture3.mHeight); GLES20.glUniform1f(barnsenShader.getSecondPassThresholdUniform(), f2); GLES20.glDrawArrays(5, 0, 4); GLES20.glBindTexture(3553, 0); } @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public void setResizedResolution(int i, int i2) { this.fZ = i; this.ga = i2; } @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public void setPreviewResoution(int i, int i2) { this.fO = i; this.fP = i2; } @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public FrameBufferTexture getProcessedTexture() { return this.gE; } @Override // com.kofax.kmc.ken.engines.gpu.ImageProcessor public float[] getBounds() { return this.gF; } }