基于V4L2驱动程序的USB摄像头Android(JNI)的编写(三)
来源:互联网 发布:便签的元数据 编辑:程序博客网 时间:2024/05/16 06:31
在上两篇文章基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)和基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)中,我详细介绍了如何配置V4L2的环境、设置捕获视频数据的格式,以及视频流数据捕获的过程。但是由于我们捕获到的视频数据是YUYV422格式的,那么在这一篇文章中,我将主要介绍如何将YUYV422格式的数据转换成ARGB格式的数据,同时将ARGB格式数据转换成bitmap格式并上传给上层应用程序。
YUYV转ARGB
在YUYV422格式的数据转换成ARGB格式数据,我们这里采用了一个比较通用的转换函数。源代码如下:
上面的函数是YUYV422转ARGB数据格式的一个固定写法,当然里面的framesize的大小是要根据实际大小进行改变的。同时还要注意rgb指针是一个全局变量,这里通过将rgb指针指向的值赋给lrgb指针,那么rgb指针所指向的值便和lrgb指针指向的值一同变化了。ARGB转Bitmap
经过上面一步的yuyv422toABGRY函数,我们已经得到了32位的ARGB格式数据,但得到的ARGB数据并不能直接显示在屏幕上,虽然我们已经离这一步很近了,但是我们还是得做最后一步的转换,即将ARGB转换为Bitmap格式的数据。
要进行这一步的转换,这里我们要引入一个新的JNI头文件,bitmap.h
LOCAL_LDLIBS` += `-ljnigraphics
在这个头文件中,有一个非常重要的结构体AndroidBitmapInfo,还有几个重要的方法AndroidBitmap_getInfo、AndroidBitmap_lockPixels、AndroidBitmap_unlockPixels首先是结构体AndroidBitmapInfo,顾名思义该结构体实际上就是对Android的bitmap对象的一种简单描述,如bitmap的长、宽、像素数据格式等等。
下面介绍这三个方法以及如何使用
- AndroidBitmap_getInfo: 该函数的作用是通过给其传入bitmap参数,从而获取该bitmap的AndroidBitmapInfo描述符。
- AndroidBitmap_lockPixels:对bitmap像素缓存上锁(确保不会有多个进程同时进来这一步修改pixels数据),其实就是获取该bitmap的像素缓存的pixels的地址
- AndroidBitmap_unlockPixels:在使用完AndroidBitmap_lockPixels获取到该bitmap的像素缓存pixels地址之后,我们会对pixels指向的值进行修改,我们的ARGB数据值传递给pixels也是在这里进行的。修改完之后我们便会调用AndroidBitmap_unlockPixels方法,对bitmap进行解锁。
下面详细介绍如何实现ARGB转Bitmap的
- 第一步:在Android上层应用程序中设定好bitmap对象,设定的内容包括,长、宽、像素格式
- 第二步:编写jni程序
通过上面两步,这个时候bitmap已经存满的视频数据了,现在在上层应用程序就可以通过调用方法来进行显示了。
阅读全文
0 0
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(三)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(三)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)
- 基于V4L2框架的linux驱动程序编写
- USB驱动程序的编写
- 采用V4L2读取的USB摄像头
- Android NDK基于V4L2驱动使用USB摄像头
- 利用V4L2编写的USB摄像头程序1【经OK6410验证成功】
- 利用V4L2编写的USB摄像头程序2【经OK6410验证成功】
- 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集
- 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集
- (原创)基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集(非常好)
- 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集
- 基于Linux的v4l2视频架构驱动编写(三)
- ActiveMQ消息处理机制-Queue方式
- CodeChef:Hasan and boring classes(组合数学 & 字符串)
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)
- hdu 1217 floyd
- Mapped Statements collection already contains value for com.xxxDao.findList
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(三)
- 声纹识别技术简介——化繁为简的艺术
- MySql常见数据库引擎特点
- 【Spring Cloud】Hystrix 防御机制
- 自测一个小技巧解决手机端304 not modified问题
- OGG(oracle golden date)简单部署ORACLE 11g-ORACLE 11g
- 浅谈网络处理器
- Vue实践--指令和事件
- Javase—java基础