diff --git a/samples/android/tutorial-4-opencl/jni/GLrender.cpp b/samples/android/tutorial-4-opencl/jni/GLrender.cpp index 9e9342af3..194fc4f91 100644 --- a/samples/android/tutorial-4-opencl/jni/GLrender.cpp +++ b/samples/android/tutorial-4-opencl/jni/GLrender.cpp @@ -1,6 +1,8 @@ #include #include +#include + #include "common.hpp" float vertices[] = { @@ -60,6 +62,10 @@ GLuint FBO = 0; GLuint texOES = 0; int texWidth = 0, texHeight = 0; +enum ProcMode {PROC_MODE_CPU=1, PROC_MODE_OCL_DIRECT=2, PROC_MODE_OCL_OCV=3}; + +ProcMode procMode = PROC_MODE_CPU; + static inline void deleteTex(GLuint* tex) { if(tex && *tex) @@ -223,12 +229,9 @@ void drawFrameOrig() void procCPU(char* buff, int w, int h) { int64_t t = getTimeMs(); - for(int i=0; i - + + + + diff --git a/samples/android/tutorial-4-opencl/res/menu/menu.xml b/samples/android/tutorial-4-opencl/res/menu/menu.xml new file mode 100644 index 000000000..2b317e20f --- /dev/null +++ b/samples/android/tutorial-4-opencl/res/menu/menu.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/MyGLSurfaceView.java b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/MyGLSurfaceView.java index 2a97ac5b8..8556b4181 100644 --- a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/MyGLSurfaceView.java +++ b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/MyGLSurfaceView.java @@ -1,8 +1,10 @@ package org.opencv.samples.tutorial4; +import android.app.Activity; import android.content.Context; import android.opengl.GLSurfaceView; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.SurfaceHolder; import android.widget.TextView; @@ -53,4 +55,11 @@ public class MyGLSurfaceView extends GLSurfaceView { mRenderer.onPause(); super.onPause(); } + + @Override + public boolean onTouchEvent(MotionEvent e) { + if(e.getAction() == MotionEvent.ACTION_DOWN) + ((Activity)getContext()).openOptionsMenu(); + return true; + } } diff --git a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/NativeGLRenderer.java b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/NativeGLRenderer.java index dfd0a2489..40eef1e6a 100644 --- a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/NativeGLRenderer.java +++ b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/NativeGLRenderer.java @@ -6,8 +6,14 @@ public class NativeGLRenderer { System.loadLibrary("opencv_java3"); System.loadLibrary("JNIrender"); } + + public static final int PROCESSING_MODE_CPU = 1; + public static final int PROCESSING_MODE_OCL_DIRECT = 2; + public static final int PROCESSING_MODE_OCL_OCV = 3; + public static native int initGL(); public static native void closeGL(); public static native void drawFrame(); public static native void changeSize(int width, int height); + public static native void setProcessingMode(int mode); } diff --git a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Tutorial4Activity.java b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Tutorial4Activity.java index 3557189df..cda66df7c 100644 --- a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Tutorial4Activity.java +++ b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Tutorial4Activity.java @@ -3,6 +3,9 @@ package org.opencv.samples.tutorial4; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; @@ -10,6 +13,7 @@ import android.widget.TextView; public class Tutorial4Activity extends Activity { private MyGLSurfaceView mView; + private TextView mProcMode; @Override public void onCreate(Bundle savedInstanceState) { @@ -27,7 +31,14 @@ public class Tutorial4Activity extends Activity { mView = (MyGLSurfaceView) findViewById(R.id.my_gl_surface_view); TextView tv = (TextView)findViewById(R.id.fps_text_view); mView.setFpsTextView(tv); - } + mProcMode = (TextView)findViewById(R.id.proc_mode_text_view); + runOnUiThread(new Runnable() { + public void run() { + mProcMode.setText("Processing mode: CPU"); + } + }); + + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_CPU); } @Override protected void onPause() { @@ -40,4 +51,43 @@ public class Tutorial4Activity extends Activity { super.onResume(); mView.onResume(); } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.cpu: + runOnUiThread(new Runnable() { + public void run() { + mProcMode.setText("Processing mode: CPU"); + } + }); + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_CPU); + return true; + case R.id.ocl_direct: + runOnUiThread(new Runnable() { + public void run() { + mProcMode.setText("Processing mode: OpenCL direct"); + } + }); + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_OCL_DIRECT); + return true; + case R.id.ocl_ocv: + runOnUiThread(new Runnable() { + public void run() { + mProcMode.setText("Processing mode: OpenCL via OpenCV (TAPI)"); + } + }); + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_OCL_OCV); + return true; + default: + return false; + } + } } \ No newline at end of file