draft implementation of alternative CameraBridge via GLES
a simple sample will look like:
```java
public class MainActivity extends Activity implements CameraGLSurfaceView.CameraTextureListener {
CameraGLSurfaceView mView;
ByteBuffer buf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mView = new CameraGLSurfaceView(this, null);
mView.setCameraTextureListener(this);
setContentView(mView);
buf = ByteBuffer.allocateDirect(1920*1080*4);
}
@Override
protected void onPause() {
mView.onPause();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mView.onResume();
}
@Override
public void onCameraViewStarted(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onCameraViewStopped() {
// TODO Auto-generated method stub
}
@Override
public boolean onCameraFrame(int texIn, int texOut, int width, int height) {
Log.i("MAIN", "onCameraFrame");
int w=width, h=height;
/*
// option 1:
// just return 'false' to display texIn on screen
retutn false;
*/
/*
// option 2:
// fast copy texIn to texOut
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texOut);
GLES20.glCopyTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, 0, 0, w, h, 0);
return true;
*/
// option 3:
// read, modify and write back pixels
GLES20.glReadPixels(0, 0, w, h, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buf);
buf.rewind();
// red line
for(int i=0; i<h; i++) {
buf.position(w*4*i+i*4);
buf.put((byte) -1);
buf.position(w*4*i+i*4+4);
buf.put((byte) -1);
}
buf.rewind();
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texOut);
GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, w, h, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buf);
return true;
}
}
```