织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

如何在jni层(HAL层)进行直接显示

落鹤生 发布于 2012-03-16 09:47 点击:次 
为了提高刷屏效率,研究了下直接在HAL层刷屏的方法。另外一个好处是这样的能够支持使用YUV 数据直接刷屏。(依赖系统支持)
TAG:

为了提高刷屏效率,研究了下直接在HAL层刷屏的方法。另外一个好处是这样的能够支持使用YUV 数据直接刷屏。(依赖系统支持)

1:使用surfaceview,并按你要求设置surface的格式和颜色格式

    holder.setFormat,holder.setType,注在Android2.0以后,貌似这个方法只支持565了,也没有细看源代码,不知道为什么。

2:在surfaceCreated函数里面,得到surface 对象,并通过JNI 传到HAL层

3:JNI 初始化的时候,得到android/view/Surface里面的一个field: mSurface

4:在JNI 函数里面,mSurface的对应的c指针 

     sp<Surface> mysurface = (Surface *)env->GetIntField(surface, s_fields.surface);

5:这样就可以使用了这个mysurface了。

 if(mysurface->isValid())
 {   
  //log_to_file("display"); 
  Surface::SurfaceInfo info;
    /* get data */
  MByte *pSrc;
  MByte* pDisplay;
 
  status_t err = mysurface->lock(&info, true);
  if(err == 0)
  {
    int width = info.w;
      int height = info.h;
   int s = info.s;
    pDisplay = (MByte*)info.bits;

   // Do something... 

    mysurface->unlockAndPost();
   LOGE("width %d height %d info.bits %d info.s %d", width,height, (int)info.bits, info.s);

  }else
           LOGE("mysurface->lock error, return %d########", err);
 }
 else
   LOGE("mysurface->isValid error########");

6: 注意,需要include Surface.h IMemory.h 并link 相应库

using namespace android; 也是必须的。

(chenji001)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15837.html]
本文出处:CSDN博客 作者:chenji001 原文
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容