From 43b76e548b04871d0535a6b6affa4b31782d2db3 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Thu, 27 Aug 2015 13:28:09 +0300 Subject: [PATCH] adding `NO_PROCESSING` (i.e. just preview) mode --- .../android/tutorial-4-opencl/jni/CLprocessor.cpp | 7 +++++++ samples/android/tutorial-4-opencl/jni/GLrender.cpp | 6 ++++-- samples/android/tutorial-4-opencl/res/menu/menu.xml | 1 + .../opencv/samples/tutorial4/NativeGLRenderer.java | 1 + .../opencv/samples/tutorial4/Tutorial4Activity.java | 12 ++++++++++-- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/samples/android/tutorial-4-opencl/jni/CLprocessor.cpp b/samples/android/tutorial-4-opencl/jni/CLprocessor.cpp index dcad18e267..bf4f25c40b 100644 --- a/samples/android/tutorial-4-opencl/jni/CLprocessor.cpp +++ b/samples/android/tutorial-4-opencl/jni/CLprocessor.cpp @@ -79,6 +79,7 @@ void dumpCLinfo() cl::Context theContext; cl::CommandQueue theQueue; cl::Program theProgB2B, theProgI2B, theProgI2I; +bool haveOpenCL = false; void initCL() { @@ -100,6 +101,7 @@ void initCL() try { + haveOpenCL = false; cl::Platform p = cl::Platform::getDefault(); std::string ext = p.getInfo(); if(ext.find("cl_khr_gl_sharing") == std::string::npos) @@ -124,6 +126,7 @@ void initCL() LOGD("OpenCV+OpenCL works OK!"); else LOGE("Can't init OpenCV with OpenCL TAPI"); + haveOpenCL = true; } catch(cl::Error& e) { @@ -147,6 +150,8 @@ void closeCL() #define GL_TEXTURE_2D 0x0DE1 void procOCL_I2I(int texIn, int texOut, int w, int h) { + if(!haveOpenCL) return; + LOGD("procOCL_I2I(%d, %d, %d, %d)", texIn, texOut, w, h); cl::ImageGL imgIn (theContext, CL_MEM_READ_ONLY, GL_TEXTURE_2D, 0, texIn); cl::ImageGL imgOut(theContext, CL_MEM_WRITE_ONLY, GL_TEXTURE_2D, 0, texOut); @@ -179,6 +184,8 @@ void procOCL_I2I(int texIn, int texOut, int w, int h) void procOCL_OCV(int tex, int w, int h) { + if(!haveOpenCL) return; + int64_t t = getTimeMs(); cl::ImageGL imgIn (theContext, CL_MEM_READ_ONLY, GL_TEXTURE_2D, 0, tex); std::vector < cl::Memory > images(1, imgIn); diff --git a/samples/android/tutorial-4-opencl/jni/GLrender.cpp b/samples/android/tutorial-4-opencl/jni/GLrender.cpp index 05b796ff36..d3e09de36f 100644 --- a/samples/android/tutorial-4-opencl/jni/GLrender.cpp +++ b/samples/android/tutorial-4-opencl/jni/GLrender.cpp @@ -63,9 +63,9 @@ 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}; +enum ProcMode {PROC_MODE_NO_PROC=0, PROC_MODE_CPU=1, PROC_MODE_OCL_DIRECT=2, PROC_MODE_OCL_OCV=3}; -ProcMode procMode = PROC_MODE_CPU; +ProcMode procMode = PROC_MODE_NO_PROC; static inline void deleteTex(GLuint* tex) { @@ -298,6 +298,7 @@ extern "C" void drawFrame() switch(procMode) { + case PROC_MODE_NO_PROC: drawFrameOrig(); break; case PROC_MODE_CPU: drawFrameProcCPU(); break; case PROC_MODE_OCL_DIRECT: drawFrameProcOCL(); break; case PROC_MODE_OCL_OCV: drawFrameProcOCLOCV(); break; @@ -366,6 +367,7 @@ extern "C" void setProcessingMode(int mode) { switch(mode) { + case PROC_MODE_NO_PROC: procMode = PROC_MODE_NO_PROC; break; case PROC_MODE_CPU: procMode = PROC_MODE_CPU; break; case PROC_MODE_OCL_DIRECT: procMode = PROC_MODE_OCL_DIRECT; break; case PROC_MODE_OCL_OCV: procMode = PROC_MODE_OCL_OCV; break; diff --git a/samples/android/tutorial-4-opencl/res/menu/menu.xml b/samples/android/tutorial-4-opencl/res/menu/menu.xml index 2b317e20f7..a737e39d2c 100644 --- a/samples/android/tutorial-4-opencl/res/menu/menu.xml +++ b/samples/android/tutorial-4-opencl/res/menu/menu.xml @@ -1,6 +1,7 @@ + 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 40eef1e6a9..8d9216c97c 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 @@ -7,6 +7,7 @@ public class NativeGLRenderer { System.loadLibrary("JNIrender"); } + public static final int PROCESSING_MODE_NO_PROCESSING = 0; 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; 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 cda66df7c4..56b416c808 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 @@ -34,11 +34,11 @@ public class Tutorial4Activity extends Activity { mProcMode = (TextView)findViewById(R.id.proc_mode_text_view); runOnUiThread(new Runnable() { public void run() { - mProcMode.setText("Processing mode: CPU"); + mProcMode.setText("Processing mode: No processing"); } }); - NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_CPU); } + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_NO_PROCESSING); } @Override protected void onPause() { @@ -62,6 +62,14 @@ public class Tutorial4Activity extends Activity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + case R.id.no_proc: + runOnUiThread(new Runnable() { + public void run() { + mProcMode.setText("Processing mode: No Processing"); + } + }); + NativeGLRenderer.setProcessingMode(NativeGLRenderer.PROCESSING_MODE_NO_PROCESSING); + return true; case R.id.cpu: runOnUiThread(new Runnable() { public void run() {