上一页下一页说usb camera uvc标准 顺便说说CMOS一起做 操作基本一至, 前HAL在那里我已经提供了层CMOS相关接口

JNIEXPORT jint JNICALL Java_com_dao_usbcam_Fimcgzsd_yuvtorgb

假设使用和UVC一样的处理 图像显示不出来 所以用第二种方法 同一时候这里使用的是斯道ICOOL210开发板測试的 假设使用CMOS还须要改动一些地方 HAL层改动例如以下

首先添加一个函数例如以下

int select_input(int input)
{
int ret;
ret = ioctl(fd, VIDIOC_S_INPUT, &input);
if (ret) {
printf("xioctl VIDIOC_S_INPUT failed+++++\n");
} return ret;
}

init里调用 init改动例如以下

JNIEXPORT jint JNICALL Java_com_dao_usbcam_Fimcgzsd_init(JNIEnv * env, jclass obj, jint width, jint height,jint numbuf,jint ctype)
{
int ret;
int i;
bufnum = numbuf;
mwidth = width;
mheight = height;
c_type = ctype;
struct v4l2_format fmt;
struct v4l2_capability cap; if(c_type == 2)
select_input(0);
else if(c_type == 3)
select_input(1); ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);
if (ret < 0) {
LOGE("%d :VIDIOC_QUERYCAP failed\n",__LINE__);
return -1;
}
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
LOGE("%d : no capture devices\n",__LINE__);
return -1;
} memset( &fmt, 0, sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if(c_type > 0)
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
else
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565;
if(c_type > 1) {
fmt.fmt.pix.field = V4L2_FIELD_NONE;//V4L2_FIELD_INTERLACED;//V4L2_FIELD_NONE;
fmt.fmt.pix.priv = 1;
}
fmt.fmt.pix.width = width;
fmt.fmt.pix.height = height;
if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0)
{
LOGE("++++%d : set format failed\n",__LINE__);
return -1;
} struct v4l2_requestbuffers req;
req.count = numbuf;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP; ret = ioctl(fd, VIDIOC_REQBUFS, &req);
if (ret < 0) {
LOGE("++++%d : VIDIOC_REQBUFS failed\n",__LINE__);
return -1;
} buffers = calloc(req.count, sizeof(*buffers));
if (!buffers) {
LOGE ("++++%d Out of memory\n",__LINE__);
return -1;
} for(i = 0; i< bufnum; ++i) {
memset(&v4l2_buf, 0, sizeof(v4l2_buf));
v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
v4l2_buf.memory = V4L2_MEMORY_MMAP;
v4l2_buf.index = i;
ret = ioctl(fd , VIDIOC_QUERYBUF, &v4l2_buf);
if(ret < 0) {
LOGE("+++%d : VIDIOC_QUERYBUF failed\n",__LINE__);
return -1;
}
buffers[i].length = v4l2_buf.length;
if ((buffers[i].start = (char *)mmap(0, v4l2_buf.length,
PROT_READ | PROT_WRITE, MAP_SHARED,
fd, v4l2_buf.m.offset)) < 0) {
LOGE("%d : mmap() failed",__LINE__);
return -1;
}
}
rgb = (int *)malloc(sizeof(int) * (mwidth*mheight));
ybuf = (int *)malloc(sizeof(int) * (mwidth*mheight));
return 0;
}

改动地方不是非常多 这里当c_type为2的时候是针对CMOS的接口通道1 为3的时候是通道2

同一时候在

void yuyv422torgb(unsigned char *src,int *mrgb)

最后须要改动下 在測试过程中发现红色和蓝色反了 所以把最后的

        *lrgb++ = 0xff000000 | b1<<16 | g1<<8 | r1;
*lrgb++ = 0xff000000 | b2<<16 | g2<<8 | r2;

改动为

		*lrgb++ = 0xff000000 | r1<<16 | g1<<8 | b1;
*lrgb++ = 0xff000000 | r2<<16 | g2<<8 | b2;

最后 应用里的相关改动例如以下

class StartThread extends Thread {

		@Override
public void run() {
// TODO Auto-generated method stub
//super.run();
while(true) {
index = Fimcgzsd.dqbuf(mdata);
if(index < 0) {
onDestroy();
break;
}
switch(ctype) {
case 0:
mHandler.post(mUpdateUI);
bitmap = BitmapFactory.decodeByteArray(mdata, 0, width * height);
Fimcgzsd.qbuf(index);
break;
case 1:
Fimcgzsd.pixeltobmp(bmp);
mHandler.post(mUpdateUI);
bitmap = bmp;
Fimcgzsd.qbuf(index);
break;
case 2: case 3:
Fimcgzsd.yuvtorgb(mdata, rgb);
mHandler.post(mUpdateUI);
bitmap = Bitmap.createBitmap(rgb,width,height,Bitmap.Config.ARGB_8888);
Fimcgzsd.qbuf(index);
break;
}
}
}

最后应用改动例如以下 这里主要是去实现功能 界面比較简单

CMOS效果例如以下

版权声明:本文博客原创文章。博客,未经同意,不得转载。

android4.0 USB Camera示例(四)CMOS的更多相关文章

  1. android4.0 USB Camera示例(五个辅助)jpg压缩

    前的最后一个 我们说,一个直接yuv变成jpg该功能 但是转换不成功 主要功能是yuv420转jpg的 根据研究发现 yuv420的序列是这种 YYYY YYYY UVUV 而yuv422的隔行扫描的 ...

  2. android4.0 USB Camera实例(三)UVC

    前面我写了两篇文章说明了zc301的实现 详细请看 http://blog.csdn.net/hclydao/article/details/21235919 以下顺便把通用的USB也写上 前面的ZC ...

  3. android4.0 4.1 4.2 4.3 4.4新特性

    http://blog.csdn.net/kaiyang45/article/details/7179349 4.0 http://digi.tech.qq.com/a/20120628/000827 ...

  4. 一个Activity掌握Android4.0新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...

  5. Android4.0新控件

    谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常用的新控件有下面5种.  1. Switch的使用 Switch顾名思义,就是开关的意思,有开和关两种状态. 当Swit ...

  6. Ffmpeg 获取USB Camera 视频流

    本文讲述的案例是如何通过Ffmpeg实现从USB Camera中获取视频流并将视频流保存到MP4文件. 本文亦适用于从USB Camera 获取视频流并将视频流转发到rtmp服务的案例,二者基本的原理 ...

  7. 51全志R58平台Android4.4下Camera的HAL层修改

    51全志R58平台Android4.4下Camera的HAL层修改 2018/11/7 15:20 版本:V1.0 开发板:SC5806 1.系统编译: (略) 2.全志R58平台Android4.4 ...

  8. QT210 Android4.0源码编译和烧录文档整理

    开发环境说明: Ubuntu 12.04 LTS 32bit 源码文件目录: 勤研光盘2013-5-4\4.0 https://github.com/jackyh (建议在Linux环境下通过git下 ...

  9. android4.0蓝牙使能的详细解析

    本文详细分析了android4.0 中蓝牙使能的过程,相比较android2.3,4.0中的蓝牙最大的差别在于UI上on/off的伪开关.在android4.0中加入了 adapter的状态机.所谓的 ...

随机推荐

  1. 9、基于Linux的v4l2视频架构应用编写

    Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设备文件名为: /dev/video0 . 视频采集基本步骤流程如下: 打开视频设备,设置视频设备属性及采 ...

  2. 【BZOJ 3675】[Apio2014]序列分割

    [链接] 链接 [题意] 在这里输入题意 [题解] 模拟一下样例. 会发现.切的顺序不影响最后的答案. 只要切点确定了. 答案就确定了. 则设f[i][j]表示前i段,第i段保留到j的最大值. \(f ...

  3. php资源集

    php资源集 一.php资源网站 1.php中文网(js特效,模板,软件工具下载,课程) www.php.cn js特效下载_js特效代码_js特效大全-php中文网免费下载站http://www.p ...

  4. 使用Nexus搭建Maven仓库

    1.目的 通过建立自己的私服,能够减少中央仓库负荷.节省外网宽带.加速maven构建.自己部署构件等,从而高效的使用maven,nexus是当前流行的Maven仓库管理软件. 2.下载nexus 2. ...

  5. 判断文件是否存在的另一种方法 _access 和 _waccess

    函数原型: int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); 示例代码 ...

  6. 卡特兰(Catalan)数列

    卡特兰数又称卡塔兰数,英文名 Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为 : 1 ...

  7. java获取访问路径、域名、项目名、请求入参

    废话不多说(这句不是废话吗>>),直接提出可以运行的类,你放到一个web项目访问下就知道了. //测试页面-跳转到输入数据的form表单 public String test1(){ Ac ...

  8. [NPM] Create a node script to replace a complex npm script

    In this lesson we will look at pulling out complex npm script logic into an external JavaScript file ...

  9. js 进阶 10 js选择器大全

    js 进阶 10 js选择器大全 一.总结 一句话总结:和css选择器很像 二.JQuery选择器 原生javaScript中,只能使用getELementById().getElementByNam ...

  10. mybatis结合log4j打印SQL日志

    mybatis结合log4j打印SQL日志 1.Maven引用jar包 默认的mybatis不能打印出SQL日志,不便于查看调试,须要结合log4jdbc-log4j2就能够完整的输入SQL的调试信息 ...