C/C++&java communicate with each other 之 video snapshot

场景: android应用层间隔1秒调用底层driver上C API,获取到framebuffer, 提供给android layer业务分析。

TvVideoRecord 主要功能

1. 申请一个ByteBuffer对象frameBuffer

2. 将frameBuffer传给底层c接口jni_getFrameBuffer,  该函数会将TV画面帧填充进去

3. 最后调用接口ITVCaptureVideoListener onSuccess方法,将frameBuffer传给应用层的TvCaptureVideolistenerDemo

做相应处理,如save, 识别等等。

ITVCaptureVideoListener 功能:

业务层TVCaptureVideoListenerDemo实现该接口,可以监听底层capture的情况,获取到frameBuffer并做相应处理,或获知错误情况进行处理

而在jni层处理时,应注意的一些性能和内存泄漏问题

1.

JNI层主动更新java层对象,通过cache jfield来优化频繁调用例如GetFieldID映射java字段到jni.

只需SetIntField。

static int cacheVRegFieldID(JNIEnv* env)

{

jclass clazz = (*env)->FindClass(env, "com/smarttv/tvshare/TvVideoRecord$VideoRegion");

if (0 == clazz) {

__android_log_print(ANDROID_LOG_ERROR, TAGSTR, "FindClass VideoRegion returned 0\n");

return -1;

}

wid  = (*env)->GetFieldID(env, clazz, "mWidth", "I");

hid  = (*env)->GetFieldID(env, clazz, "mHeight", "I");

if (0 == wid || 0 == hid)

{

__android_log_print(ANDROID_LOG_ERROR, TAGSTR, "GetFieldID returned 0\n");

return -1;

}

return 0;

}

2. 容易发生jni层 内存泄漏,如java对象转为C处理时

如GetByteArrayElements, 对应ReleaseByteArrayElements需要调用来释放资源。

GetStringUTFChars-ReleaseStringUTFChars。

时间: 2024-10-05 06:42:31

C/C++&java communicate with each other 之 video snapshot的相关文章

C/C++&java communicate with each other 之 video file-streaming

使用开源通信框架alljoyn来做设备,服务的搜索.发现,通信,详细原理参考 https://allseenalliance.org/developers/learn/core/system-description/advertisement-discovery gstreamer作媒体播放. 有兴趣同学可以看下https://github.com/europelee/AjUtil,简单的多媒体文件流分享(上图即它的architecture) (alljoyn设备.服务通告,发现示意图) 涉及面

How to install JDK (Java Development Kit) on Linux

This tutorial will guide you on how to install JDK (Java Development Kit) on Linux. Since I use Centos 5.4 x86_64 in everyday life, this guide is showing you how to install JDK in Centos 5.4 64bit. It must work in any other Linux distro such as Slack

JAVA B/S通过摄像头采集图片信息解决方案。

在浏览器上调用摄像头.有ACTIVX,FLASH,HTML5,JAVA的.其中ACTIVEX只支持IE不去考虑,HTML5低版本浏览器不支持同样放弃,剩下只有FLASH了.JAVA要重新开发,没时间.网上找了很久,终于找到一个JQUERY的插件可以实现调动视频.上代码: 1.官网下载相关文件 http://www.xarg.org/project/jquery-webcam-plugin/ 2.前端脚步: <script> $(function() { var swfpah="${p

111个知名Java项目集锦,包括url和描述

转:http://www.cnblogs.com/wangs/p/3282183.html 项目名称   项目描述 ASM Java bytecode manipulation framework AspectWerkz AspectWerkz - Dynamic AOP for Java Axis Axis - an implementation of the SOAP (Simple Object Access Protocol) submission to W3C Batik Batik

Java断点续传下载视频

控制层类: package com.grab.video.controller; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEnco

JavaHTTP下载视频

控制层类: package com.grab.video.controller; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEnco

Android_Intent详解

androidactionjavaschemefilterstring 目录(?)[+] 目录 Intent 详解... 1 一. Intent 作用... 1 二. Intent的构成... 1 三. intent的解析... 2 1.动作测试... 2 2.类别测试... 3 3.数据测试... 3 4.简单例子说明... 3 三.Intent的构造函数... 4 5. 总结说明... 5 实 例... 7 Intent 详解 一. Intent 作用 Intent 是一个将要执行的动作的抽

(转)android从应用到驱动之—camera(1)---程序调用流程

一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也

Hibernate多表关系

Hibernate多表关系 hibernate 一对多(多对一) 创建实体 配置ORM映射文件 创建测试文件 双方关系维护 级联操作 外键的维护权管理 双方关系维护.级联操作.外键维护权之间的关系 一对多(多对一) 在一个视频管理的系统中应该包含这样两个表讲课人Speaker.视频Video.其中一个讲课人可以讲多个视频,而一个视频只能属于一个讲课人:在这里Speaker就是一的状态,Video就是多的状态. 创建实体 在Speaker中添加set集合(如果添加list集合需要在配置文件中额外配