package cn.com.basic.face.util; import android.graphics.Bitmap; import android.util.Base64; import android.util.Log; import android.view.Surface; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import cn.com.basic.face.base.BaseApplication; import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.fragment.RegisterFragment; import cn.com.basic.face.service.SurveillanceMng; /** * Created by houxiao on 2017/3/21 0021. */ class NativeImgIdx { public int offset; public int size; public int type; public int width; public int height; } class RefByteArray { public byte[] arr; public byte[][] arr2; } public class RtspFaceNative { //cn.com.basic.face.util.RtspFaceNative public static native void init(); public static native void setLocalIP(String ipaddr); public static native void setSurface(int cameraIdx, Surface surface); public static native boolean createPlayer(int cameraIdx, String uri); public static native void shutdown(int cameraIdx); // typedef void (* Java_com_example_nativecodec_NativeCodec_FaceCallback_func)(int cameraIdx, int count); public static native boolean setFaceCallback(int cameraIdx, String className, String funcName); public static native void lockFace(int cameraIdx); public static native void releaseFace(int cameraIdx); public static native int getFaceList(int cameraIdx, int dbId, RefByteArray faceListPb); //public static native ArrayList getFaceImages(int cameraIdx, RefByteArray faceImages); public static native ArrayList getFaceImages(int cameraIdx); public static native void dbgFaceAdd(NativeImg faceImage); public static native String dbgGetLog(); public static int COMPANY_ID = 1001; public static void faceCallBack(int cameraIdx, int count) { Log.i("@@@", "RtspFaceNative.faceCallBack, cameraIdx=" + cameraIdx + ", count=" + count); // something else if (count <= 0) return; lockFace(cameraIdx); RefByteArray faceListPb = new RefByteArray(); try { COMPANY_ID = Integer.parseInt(BaseApplication.getInstance().getDevice().getDeviceCompanyId()); } catch (Exception e) { COMPANY_ID = 0; } int s = getFaceList(cameraIdx, COMPANY_ID, faceListPb); Log.i("@@@", "RtspFaceNative.faceCallBack, getFaceList, cameraIdx=" + cameraIdx + ", size=" + s); //RefByteArray faceImages = new RefByteArray(); //ArrayList faceImagesIdx = getFaceImages(cameraIdx, faceImages); //int c = 0; //if (faceImagesIdx != null) // c = faceImagesIdx.size(); //Log.i("@@@", "RtspFaceNative.faceCallBack, getFaceImages, cameraIdx=" + cameraIdx + ", count=" + c); ArrayList faceImages = getFaceImages(cameraIdx); int c = 0; if (faceImages != null) c = faceImages.size(); Log.i("@@@", "RtspFaceNative.faceCallBack, getFaceImages, cameraIdx=" + cameraIdx + ", count=" + c); for (int i = 0; i < c; i++) { Log.i("@@@", "cameraIdx=" + cameraIdx + ", i=" + i + ", size=" + faceImages.get(i).size+ ", w=" + faceImages.get(i).width + ", h=" + faceImages.get(i).height + ", image[0]=" + faceImages.get(i).image[0] + ", image[1]=" + faceImages.get(i).image[1]); if (i == 0) { //Bitmap bitmap = Bitmap.createBitmap(faceImages.get(i).width, faceImages.get(i).height, Bitmap.Config.RGB_565); //ByteBuffer byteBuffer = ByteBuffer.wrap(faceImages.get(i).image, 0, faceImages.get(i).size); //bitmap.copyPixelsFromBuffer(byteBuffer); //NativeCodec.setFaceDrawable(bitmap); //NativeCodec.setFaceDrawable(faceImages.get(i)); } } try{ List bitmapList = new ArrayList(); for (int i = 0; i < faceImages.size(); i++) { NativeImg item = faceImages.get(i); SurveillanceQueryItem surveillanceQueryItem = new SurveillanceQueryItem(); int offset = 0; int size = item.size; Bitmap bitmap = Bitmap.createBitmap(item.width,item.height, Bitmap.Config.ARGB_8888); ByteBuffer byteBuffer = ByteBuffer.wrap(item.image, offset, size); bitmap.copyPixelsFromBuffer(byteBuffer); // String str = Base64.encodeToString(item.image, offset, size, Base64.DEFAULT); // System.out.println(str.length()); // System.out.println(str); // surveillanceQueryItem.setBase64Image(str); surveillanceQueryItem.setNativeImg(item); surveillanceQueryItem.setBitmap(bitmap); surveillanceQueryItem.setWidth(item.width+""); surveillanceQueryItem.setHeight(item.height+""); bitmapList.add(surveillanceQueryItem); } SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+""); }catch(Exception e){ e.printStackTrace(); } releaseFace(cameraIdx); } }