package cn.com.basic.face.util; import android.util.Log; import android.view.Surface; import android.graphics.Bitmap; import java.util.Date; import java.util.List; import cn.com.basic.face.base.BaseApplication; import cn.com.basic.face.discern.common.CommonVariables; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.service.SurveillanceMng; import cn.com.basic.face.service.sqlite.SurveillanceDao; import java.nio.ByteBuffer; import java.util.ArrayList; /** * Created by houxiao on 2017/3/21 0021. */ class NativeImgIdx { public int st_track_id; 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 surfaceRender); 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 native void dbgSetStfaceLicense(String lic); //public static native void dbgReadTexture(); public static native void setCaptureSurface(Surface surfaceCapture); public static native void startCapturePlayer(String uri); public static native void stopCapturePlayer(); public static native ArrayList getCaptureImages(); public static native void teleCall(String phoneNumber); public static native void teleHang(); public static native void setFaceLabel(int cameraIdx, int stTrackId, String label); 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().getAndroidDevice().getCompanyId()); } 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); try{ List bitmapList = new ArrayList(); for (int i = 0; i < faceImages.size(); i++) { NativeImg item = faceImages.get(i); SurveillanceQueryItem surveillanceQueryItem = new SurveillanceQueryItem(); surveillanceQueryItem.setStTrackId(item.st_track_id); int offset = 0; int size = item.size; Bitmap bitmap = Bitmap.createBitmap(item.width,item.height, Bitmap.Config.RGB_565); ByteBuffer byteBuffer = ByteBuffer.wrap(item.image, offset, size); bitmap.copyPixelsFromBuffer(byteBuffer); surveillanceQueryItem.setNativeImg(item); surveillanceQueryItem.setBitmap(bitmap); surveillanceQueryItem.setWidth(item.width+""); surveillanceQueryItem.setHeight(item.height+""); surveillanceQueryItem.setCreateTime(new Date()); surveillanceQueryItem.setInOrOutCamera(cameraIdx+""); if (!BaseApplication.getInstance().networkAvailable()) { surveillanceQueryItem.setRegisterOrCheckIn(CommonVariables.Surveillance.OFFLINE_SURVEILLANCE_ITEM_TYPE); } bitmapList.add(surveillanceQueryItem); } if (BaseApplication.getInstance().networkAvailable()) { SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+"", new byte[]{}); } else { SurveillanceMng.getInstance().addOfflineBitmap(bitmapList,faceListPb.arr,cameraIdx+""); } }catch(Exception e){ e.printStackTrace(); } releaseFace(cameraIdx); } }