android linphone中opengl显示的实现
1,java层
在界面中创建GL2JNIView(基类为GLSurfaceView)。
创建对象AndroidVideoWindowImpl,将GL2JNIView作为参数传入构造函数。在该对象中监听GL2JNIView的surface事件(mVideoRenderingView.getHolder().addCallback)。
当surface变化时(如显示窗口大小变化、activity被其他程序遮住),此时触发回调函数:
public void surfaceChanged(SurfaceHolderholder, intformat,
int width, int height)
在该函数中调用LinphoneManager.getLc().setVideoWindow(vw); 将AndroidVideoWindowImpl对象传到c代码层
C代码中对应的函数在mediastreamer2\src\android\android-opengl-display.c中android_display_set_window,
此函数中调用步骤如下:
(1) (*jenv)->CallVoidMethod(jenv,window,ad->set_opengles_display_id,ptr);
其中window为java传过来的AndroidVideoWindowImpl对象;ad->set_opengles_display_id为java 类AndroidVideoWindowImpl成员函数setOpenGLESDisplay;ptr为结构体变量opengles_display,该结构体存储yuv数据,在后面每帧显示时会用到。
(2) 将AndroidVideoWindowImpl赋值给ad->android_video_window
该函数主要完成java和c互换对象指针。这主要是由于opengl刷新每帧视频必须由java层的onDrawFrame来完成,而linphone的视频流在c层接收解码,需要由c函数来触发刷新。
2,c代码层
在android-opengl-display.c的每帧处理函数android_display_process中,
调用(*jenv)->CallVoidMethod(jenv,ad->android_video_window,ad->request_render_id);其中ad->android_video_window为setVideoWindow传过来的AndroidVideoWindowImpl对象;ad->request_render_id为java类AndroidVideoWindowImpl成员函数requestRender
该函数触发opengl刷新一帧,在java层会调用onDrawFrame。
在onDrawFrame函数中调用c代码层的render,参数为第(1)中传到java层的opengles_display结构体。
C代码层对应代码在mediastreamer2\src\utils\opengles_display.c中ogl_display_render函数,在此函数中将opengles_display中yuv数据绘制到opengl surface中。
android linphone中opengl显示的实现的更多相关文章
- 【转】NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。
原文网址:http://blog.csdn.net/hxdanya/article/details/39371759 由于使用了NDK编译的可执行文件在应用中调用,在4.4及之前的版本上一直没出问题. ...
- Android Studio中不能显示svn的上传下载两个图标同时version control为灰,不可点击
最近在接触Android Studio,涉及到svn的配置,因为是先安装的svn,后安装的Android Studio,后边同事告诉我, Android Studio 的SVN安装与其他IDE有很大差 ...
- Android开发实例 Unity显示Toast
Android中的Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击.用户将可能是在中间键入别的东西.Toast类的 ...
- Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
- 【转】【已解决】Android中ActionBar中不显示overflow(就是三个点的那个按钮)--不错
原文网址:http://www.crifan.com/android_actionbar_three_dot_overflow_not_show/ [问题] 折腾: [记录]继续尝试给Android程 ...
- Android : 如何在WebView显示的页面中查找内容
Android : 如何在WebView显示的页面中查找内容 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo WebView是A ...
- Android WebView中显示一张或多张图片
最近需要在平板中显示多张图片,调查了下,决定用WebView(说实话,我还不清楚有没有其他android控件能够显示多张图片的.....), 主要是用HTML的img来显示多张图片. google百度 ...
随机推荐
- rqalpha-自动量化交易系统(一)
因为最近做的东西牵涉到自动计算这一块,在网上搜了一下,基本上python做自动量化交易成了一个趋势,于是花了两天学习一下. 目标很简单,学习,使用. rqalpha看起来是比较成熟的,这儿看重的是自带 ...
- InteliJ Idea pom.xml不自动提示的解决
file–>Settings–>Build,Execute…–>Build Tools–>Maven–>Repositories 会看到类似表格的画面,内容是你的mave ...
- 目标检测之dpm---hog的最优升级版
http://blog.csdn.net/ttransposition/article/details/12966521 http://blog.csdn.net/carson2005/article ...
- SQLException: Column count doesn't match value count at row 1
INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES('value1','value2'); 语句中,前后列数不等造成的 转自: ...
- mothur trim.seqs 去除PCR引物
trim.seqs 有以下几个主要应用: 1)根据barcode 拆分序列: 2)去除PCR引物 3) 去除低质量序列 trim.seqs 在使用时必须输入一个fasta 格式的序列,然后在加至少一个 ...
- Redis Crackit漏洞利用和防护
注意:本文只是阐述该漏洞的利用方式和如何预防.根据职业道德和<中华人民共和国计算机信息系统安全保护条例>,如果发现的别人的漏洞,千万不要轻易入侵,这个是明确的违法的哦!!! 目前Redis ...
- Spring Boot 添加JSP支持【转】
Spring Boot 添加JSP支持 大体步骤: (1) 创建Maven web project: (2) 在pom.xml文件添加依赖: (3) ...
- input框取消光标颜色手机端不生效
<style> input{ color:transparent; } </style> <input value="我要隐藏光标"> //文字 ...
- json字符串使用注意问题
json本身是字符串,即 json字符串 js使用 要把 json字符串 转为 javascript对象 json字符串转为js对象的方法:jquery的parseJSON var str='[{& ...
- Python 多线程相关知识学习
多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...