diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2ed440f..e016e34 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -31,6 +31,7 @@
+
GetByteArrayElements(yuv, 0);
- jint * _bgra = env->GetIntArrayElements(bgra, 0);
+ cv::Mat& myuv = *(cv::Mat*)addrMatIn;
+ cv::Mat& mbgr = *(cv::Mat*)addrMatOut;
jint * _codes = env->GetIntArrayElements(codes, 0);
- log(TAG, "Converting native data to OpenCV Mats.");
-
- cv::Mat myuv(height + height/2, width, CV_8UC1, (unsigned char *)_yuv);
- cv::Mat mbgra(height, width, CV_8UC4, (unsigned char *)_bgra);
-
log(TAG, "Converting color space before processing.");
- cv::Mat mbgr(height, width, CV_8UC3);
- cv::Mat gray;
- cv::cvtColor(myuv, mbgr, CV_YUV420sp2BGR);
+ cv::cvtColor(myuv, mbgr, CV_RGB2BGR);
log(TAG, "Finding markers.");
nxtar::getAllMarkers(vCodes, mbgr);
@@ -73,14 +64,8 @@ const char * TAG = "CVPROC_NATIVE";
}
vCodes.clear();
- log(TAG, "Converting color space after processing.");
- cv::cvtColor(mbgr, gray, CV_BGR2GRAY);
- cv::cvtColor(gray, mbgra, CV_GRAY2BGRA, 4);
-
log(TAG, "Releasing native data.");
env->ReleaseIntArrayElements(codes, _codes, 0);
- env->ReleaseIntArrayElements(bgra, _bgra, 0);
- env->ReleaseByteArrayElements(yuv, _yuv, 0);
}
}
diff --git a/src/ve/ucv/ciens/ccg/nxtar/MainActivity.java b/src/ve/ucv/ciens/ccg/nxtar/MainActivity.java
index 3aa3988..932ba51 100644
--- a/src/ve/ucv/ciens/ccg/nxtar/MainActivity.java
+++ b/src/ve/ucv/ciens/ccg/nxtar/MainActivity.java
@@ -16,11 +16,13 @@
package ve.ucv.ciens.ccg.nxtar;
import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
+import org.opencv.android.Utils;
+import org.opencv.core.Mat;
+import org.opencv.imgproc.Imgproc;
import ve.ucv.ciens.ccg.nxtar.interfaces.CVProcessor;
import ve.ucv.ciens.ccg.nxtar.interfaces.MulticastEnabler;
@@ -28,8 +30,8 @@ import ve.ucv.ciens.ccg.nxtar.interfaces.Toaster;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
+import android.graphics.BitmapFactory;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Bundle;
@@ -53,14 +55,14 @@ public class MainActivity extends AndroidApplication implements Toaster, Multica
private BaseLoaderCallback loaderCallback;
private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- static{
- System.loadLibrary("cvproc");
- /*if (!OpenCVLoader.initDebug()){
+ /*static{
+ if (!OpenCVLoader.initDebug()){
Gdx.app.exit();
- }*/
- }
+ }
+ System.loadLibrary("cvproc");
+ }*/
- public native void getMarkerCodesAndLocations(int w, int h, byte[] yuv, int[] rgba, int[] codes);
+ public native void getMarkerCodesAndLocations(long inMat, long outMat, int[] codes);
@Override
public void onCreate(Bundle savedInstanceState){
@@ -89,6 +91,7 @@ public class MainActivity extends AndroidApplication implements Toaster, Multica
public void onManagerConnected(int status){
switch(status){
case LoaderCallbackInterface.SUCCESS:
+ System.loadLibrary("cvproc");
ocvOn = true;
break;
default:
@@ -150,16 +153,21 @@ public class MainActivity extends AndroidApplication implements Toaster, Multica
public CVData processFrame(byte[] frame, int w, int h) {
if(ocvOn){
int codes[] = new int[15];
- int [] pData = new int[w * h];
- Bitmap mFrame = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- Bitmap tFrame = BitmapFactory.decodeByteArray(frame, 0, frame.length);
- ByteBuffer buffer = ByteBuffer.allocate(tFrame.getByteCount());
+ Bitmap tFrame, mFrame;
- tFrame.copyPixelsToBuffer(buffer);
+ tFrame = BitmapFactory.decodeByteArray(frame, 0, frame.length);
- getMarkerCodesAndLocations(w, h, buffer.array(), pData, codes);
+ Mat inImg = new Mat();
+ Mat outImg = new Mat();
+ Utils.bitmapToMat(tFrame, inImg);
- mFrame.setPixels(pData, 0, w, 0, 0, w, h);
+ getMarkerCodesAndLocations(inImg.getNativeObjAddr(), outImg.getNativeObjAddr(), codes);
+
+ Mat temp = new Mat();
+ Imgproc.cvtColor(outImg, temp, Imgproc.COLOR_BGR2RGB);
+
+ mFrame = Bitmap.createBitmap(temp.cols(), temp.rows(), Bitmap.Config.RGB_565);
+ Utils.matToBitmap(temp, mFrame);
mFrame.compress(CompressFormat.JPEG, 100, outputStream);
CVData data = new CVData();