- 头文件引入相当于复制代码
typedef _JNIEnv JNIEnv; typedef _JavaVM JavaVM;
typedef const struct JNINativeInterface* JNIEnv; typedef const struct JNIInvokeInterface* JavaVM;
jniEnv里面的方法
jint jstring jdouble
常量指针:const在之前,指针的地址可以修改,值不能修改 指针常量:const在之后
1 open.cv mat.java -> mat.cpp
public class Mat { //java对象
public final long nativeObj;
public Mat(){
nativeObj = n_Mat(rows,cols,type); //c++创建对象,返回一个long (c++首地址),
//下次操作,传回首地址,就可以找到原来的对象
}
public static native long n_Mat(int rows,int cols,int type);
}
2 Parcel为了实现共享内存
1 处理方式一般两种,一种补救, 2第二种就是抛出异常对象给java
GetArrayElements 和ReleaseArrayElements成对使用
jbyte* data = env->GetByteArrayElements(array, NULL);
if (data != NULL) { memcpy(buffer, data, len);
env->ReleaseByteArrayElements(array, data, JNI_ABORT); }
GetArrayRegion单独使用,
表示事先在C/C++中创建一个缓存区,然后将Java中的原始数组拷贝到缓冲区中去
env->GetByteArrayRegion(array, 0, len, buffer); 1 优点
只需要一个JNI调用而不是两个, 减少开销. 不需要对原始数据进行限制或者额外的拷贝数据 减少开发者的风险(不会有在某些出错后忘记释放的风险)
https://www.cnblogs.com/Allen-rg/p/6999360.html
1.1 static_cast 静态转换 用于基本数据类型之间的转换,如把int转换成char 1.2 const_cast 常量转换 用于修改常量的值 1.3 reinterpret_cat 强制类型转换 ,用于转换任意类型 1.4 dynamic_cast 动态转换 ,更安全,转换成功返回类型,失败返回空 , 必须要包含多态类型和 static_cast 很类似,但是更安全
https://github.com/yangkun19921001/AVEditor https://github.com/yangkun19921001/AVSample
https://github.com/ZLMediaKit/ZLMediaKit
https://blog.csdn.net/tkwxty/article/details/103539392
https://blog.csdn.net/weaiken/article/details/88085360
Android 实现 Ocr手机号扫描 https://blog.csdn.net/mr_sk/article/details/79077271
Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案) https://blog.csdn.net/mr_sk/article/details/72877492
http://events.jianshu.io/p/1ba0763ba024
scan_all_pmts, 扫描全部的ts流的"Program Map Table"表。