• Andrey Pavlenko's avatar
    draft implementation of alternative CameraBridge via GLES · 8e088d38
    Andrey Pavlenko authored
    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;
    	}
    }
    ```
    8e088d38
Name
Last commit
Last update
3rdparty Loading commit data...
apps Loading commit data...
cmake Loading commit data...
data Loading commit data...
doc Loading commit data...
include Loading commit data...
modules Loading commit data...
platforms Loading commit data...
samples Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.tgitconfig Loading commit data...
CMakeLists.txt Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...