android jni 中jstring字符串的转化 和 一些常用数据转化_android jstring-程序员宅基地

技术标签: android  

1、jni层,jstring转化为const char *

const char *tablePath = (env->GetStringUTFChars(tablePath_, 0));

2、jni层 jstring 转化为 char *

char *tablePath = const_cast<char *>(env->GetStringUTFChars(tablePath_, 0));

3、jni 函数中,将字符串string转化未 c++ 字符串string

方法1

std::string getString(JNIEnv *env , jstring jstring1 )
{
    const char *path =NULL;
    path = env->GetStringUTFChars(jstring1, 0);
    std::string spFn(path);
    env->ReleaseStringUTFChars(jstring1, path);
    return spFn;
}

 

方法2

    const char *tablePath = (env->GetStringUTFChars(tablePath_, 0));
    pTable = string(tablePath);
    env->ReleaseStringUTFChars(tablePath_, tablePath);

注意:释放掉 jni层获得java层string的开销

4 jni 相机数据yuv的获取,ByteBuffer 在c++中获得byte的数组指针

java层:

 private ImageReader.OnImageAvailableListener onImageAvailableListener = new ImageReader.OnImageAvailableListener() {
        @Override
        public void onImageAvailable(ImageReader reader) {
        
            Image mImage = reader.acquireLatestImage();
            if(mImage == null)
                return;

                Image.Plane[] planes = mImage.getPlanes();

        ByteBuffer Camera_y = planes[0].getBuffer();
        ByteBuffer Camera_u = planes[1].getBuffer();
        ByteBuffer Camera_v = planes[1].getBuffer();
 cameraData(planes[0].getBuffer(),planes[0].getRowStride() ,planes[0].getPixelStride(),
                        planes[1].getBuffer(),planes[1].getRowStride() ,planes[1].getPixelStride(),
                        planes[2].getBuffer(),planes[2].getRowStride() ,planes[2].getPixelStride(),
                        w,h , tablePath,1f , imageType);


}

}

public static native void cameraData(ByteBuffer Camera_y, int rowStride_y, int pixStride_y,
                                                       ByteBuffer Camera_u, int rowStride_u, int pixStride_u,
                                                       ByteBuffer Camera_v, int rowStride_v, int pixStride_v,
                                                       int width, int height , String tablePath , float progress ,int ImageType);


//Camera_y 、u 、v 是ByteBuffer
Java_com_example_lammy_Camera_cameraData(
        JNIEnv *env, jclass type, jobject Camera_y, jint rowStride_y, jint pixStride_y,
        jobject Camera_u, jint rowStride_u, jint pixStride_u, jobject Camera_v, jint rowStride_v,
        jint pixStride_v, jint width, jint height, jstring tablePath_ , jfloat progress ,jint imageType) {
    char *tablePath = const_cast<char *>(env->GetStringUTFChars(tablePath_, 0));

    jbyte *dataY = (jbyte *) env->GetDirectBufferAddress(Camera_y);
    jbyte *dataU = (jbyte *) env->GetDirectBufferAddress(Camera_u);
    jbyte *dataV = (jbyte *) env->GetDirectBufferAddress(Camera_v);
    unsigned char *y = (unsigned char *) dataY;
    unsigned char *u = (unsigned char *) dataU;
    unsigned char *v = (unsigned char *) dataV;
    ...
}

当然也可以直接传入byte数组,在java层获得,但效率相对低。

java

 byte []buffer_y = new byte[planes[0].getBuffer().remaining()];
                planes[0].getBuffer().get(buffer_y);
                byte []buffer_u = new byte[planes[1].getBuffer().remaining()];
                planes[1].getBuffer().get(buffer_u);
                byte []buffer_v = new byte[planes[2].getBuffer().remaining()];
                planes[2].getBuffer().get(buffer_v);
jbyteArray buffer_y;
jbyte *dataY2 = env->GetByteArrayElements(buffer_y , false);

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangpengzp/article/details/87640809

智能推荐

linux 命令学习_ls `pwd`/*-程序员宅基地

文章浏览阅读6.5k次。作为一个程序员,我们在进行项目部署和运维时,经常会用到一些linux命令,可是这些命令老是忘记,每次用到的时候都要去谷歌百度,很是麻烦!这不,为了自己使用方便,对常见的linux命令进行了系统的总结,以便在用到时能够快速地找到相关命令,同时有需要的朋友也可以参考搜藏该篇文章!文章对讲到的每个命令都有详细的参数解释,并且给出一些常用例子,因此也非常适合用来学习!全文命令分为以下6个模块:1、常用系统工作命令2、系统状态检测命令3、工作目录切换命令4、文本文件编辑命令5、文件目录管理命令6、打包._ls `pwd`/*

javax.servlet.ServletException: Servlet[SpringMvc]的Servlet.init()引发异常处理-程序员宅基地

文章浏览阅读2.9w次,点赞10次,收藏16次。javax.servlet.ServletException: Servlet[SpringMvc]的Servlet.init()引发异常处理分析错误描述错误原因分析原因解决办法分析关于javax.servlet.ServletException: Servlet[SpringMvc]的Servlet.init()引发异常处理情况Servlet[SpringMvc]的Servlet.init()引发异常错误描述Servlet[SpringMvc]的Servlet.init()引发异常创建Ser_javax.servlet.servletexception: servlet[springmvc]的servlet.init()引发异常

centos7 文件搜索、文件内容搜索、管道_centos7搜索变量属于那个文件-程序员宅基地

文章浏览阅读1.9k次。1、文件搜索find 可以找到你想要的文件格式: find [目录] [选项] [选项值]目录:去哪找,可以不写,默认代表当前目录选项:怎么找 >> -name 按照名字找 可以使用通配符 -size 按照大小找 单位为 kmg 10k(等于10k) +10k(大于10k) -10k(小于10k) -user 按照用户名 -group 按照组名 -maxdepth -minde_centos7搜索变量属于那个文件

keepalived + lvs集群_lvs client在lb节点请求vip-程序员宅基地

文章浏览阅读115次。1.keepalived是什么? keepalived是集群管理中保障集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障 2.keepalived 工作原理keepalived是以**VRRP**协议为实现基础的,VRRP全称Virtual Route Redundancy Protocol,即**虚拟路由冗余协议** ..._lvs client在lb节点请求vip

Spring AOP 原理 (面试必备)_springaop实现原理面试-程序员宅基地

文章浏览阅读5.9w次,点赞21次,收藏179次。一、AOP是什么? AOP的全称是Aspect Orient Programming,即面向切面编程。是对OOP(Object Orient Programming)的一种补充,战门用于处理一些具有横切性质的服务。常常用于日志输出、安全控制等。 上面说到是对OOP的一种补充,具体补充的是什么呢?考虑一种情况,如果我们需要在所有方法执行前打印一句日志,按照OOP的处理思想,我们需要..._springaop实现原理面试

shell脚本特殊变量意义_在shell脚本里下面哪些特殊符号可以用来表示所有向脚本传递的参数-程序员宅基地

文章浏览阅读358次。Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数特殊变量列表变量 含义$0 当前脚本的文件名$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。$# 传递给脚本或函数的参数个数。$* 传递给脚本或函数的所有参数。$@ 传递给脚本或函数的所有参数。被双引号(&amp;amp;amp;amp;quot; &amp;amp;amp;amp;quot;)包含时,与 $* _在shell脚本里下面哪些特殊符号可以用来表示所有向脚本传递的参数

随便推点

vue3中借助 pdfjs-dist 实现pdf文件展示、文本选中功能及使用过程中部分问题处理_vue3对pdf文件操作文件选取-程序员宅基地

文章浏览阅读2.6k次,点赞30次,收藏30次。一、文件预览1、安装 `pdfjs-dist` ,此处指定版本为 `2.16.105`2、`html` 结构内容3、`js` 功能实现:4、可能出现的问题(1) 部分字体出现乱码或浏览器控制台出现警告二、文本选中1、功能实现2、可能出现的问题:(1) 页面文字可选中,但文本不可见(2) 浏览器控制台报错 `Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'dispatch_vue3对pdf文件操作文件选取

二叉树的先序+中序+后序的遍历非递归版本_后序遍历,第一个访问的节点-程序员宅基地

文章浏览阅读139次。先序遍历递归版本很简单,学习一下非递归的写法。先遍历根节点,再遍历左儿子,最后遍历右儿子def preOrder(root): # 返回先序遍历序列 if not root: return [] p = root res = [] stack = [] while stack or p: ..._后序遍历,第一个访问的节点

springboot+mybatis+dubbo+redis简单整合_springboot、dubbo和mybatisplus和redis搭建工程如何自动生成pom依赖-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏11次。一、创建一个接口maven项目 里面存放服务的接口与实体类,在本地仓库安装(install)一下接口服务,目录结构User就是简单的pojo实体类,在UserService中提供了两个接口方法package com.fhh.springboot.service;import com.fhh.springboot.Entity.User1;/** * 功能描述:(..._springboot、dubbo和mybatisplus和redis搭建工程如何自动生成pom依赖

FAT32分区被格式化了数据恢复方法-程序员宅基地

文章浏览阅读681次。恢复背景--早上不小心将FAT32分区格式化,需要恢复格式化之前的数据,但现在这个盘是空盘了,如图 已用空间16KB ,总容量30GB . 为什么格式化了 ,已用空间还有16KB呢。 这是因为FAT32文件系统格式化时 会对根目录清零 ,根目录占用一个簇的大小,所以这里看到已用空间占了16KB。 有的电脑可能会看到格式化后占用8KB或者32KB,原因都一样 只是因为格式化时..._2、如果不小心将u盘的fat32文件系统中数据格式化了,我们可以采用哪些工具恢复。若要手工恢复使用winhex工具,恢复的思路是什么?

安装mysql服务出现Install/Remove of the Service Denied!问题,即使管理员启动cmd也无效_install/remove of the service denied! that operati-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏20次。在禁用 UAC 后,系统将不再提示 UAC 提示框,直接以管理员权限运行命令,从而避免了 UAC 的干扰。但是,禁用 UAC 会降低系统的安全性,因为这会使得恶意软件有更大的机会在计算机上运行和执行操作,因此不建议在正式生产环境中禁用 UAC。UAC(用户帐户控制)是 Windows 操作系统的一项安全特性,用于控制用户在计算机上的活动,以减少恶意软件或病毒的危害。在Windows系统下,如果你是以管理员身份运行cmd,但是仍然无法安装MySQL服务,可能是因为系统的用户账户控制(UAC)设置的问题。_install/remove of the service denied! that operation should be made by an us

ensp查看历史配置命令_eNSP常用命令.doc-程序员宅基地

文章浏览阅读1.5k次。eNSP常用命令3、acl命令格式基本/高级 ACL 支持:acl [ ipv6 ] acl-number { inbound | outbound }undo acl [ ipv6 ] acl-number { inbound | outbound }二层 ACL 支持:acl acl-number inboundundo acl acl-number inbound功能:acl 命令用来引用访..._ensp历史命令查看

推荐文章

热门文章

相关标签