android c摄像头v4l2,android v4l2 摄像头 ,不基于camera框架

前一段事件做了一个在android平板上跑usb摄像头的程序,该程序不许要camera框架,仅仅是调用了jni,其实和大部分

播放器的原理一样,只不过一个数据是从视频文件中读取出来的,而一个是从camera摄像头里面取出来的。

具体代码不能贴出来但是我可以把原理说一下,你们按照这个过程就可以搞定了,你可以拿作设计的方案,最起码我可以告诉你

这个方案是可行的。

要想一块平板能够支持usb摄像头,首先你得有usb口,因为大多没有usb口的设备都是只支持usb slave 而不支持usb host

而我们需要的是usb host,第二你的平板中要有相应的摄像头驱动,一般的通用摄像头都是v4l2+uvc 2个框架模块。

这里我得友情提示一下了,如果你作的是系统性的 ,肯定是ok的,如果你作的是apk,这里就有一个问题了,因为当摄像头

设备被设别的时候,有些厂家会把自动生成的设备节点的权限设定为不可读,这样你可以放弃了,所以你得有心里准备。

如果以上问题都没有问题,那么下面的就可以走入正题了,首先从摄像头取出数据,然后对每一帧进行解码,然后转换成RGB565

,最后直接丢到surface的画布上就行了。路线是  读数据-》解码-》转换RGB565-》丢给surface。

怎么解码转码就不多说了,但是上来肯定要解码,一半的图片传输数据都是被压缩过的。下面说一下怎么丢给surface的问题,开始我们

是用C++创建的surface对象,然后用lock,unlock进行数据的推送,这样肯定是没问题的,如果你都是靠命令运行的话,但是如果做成apk

你会发现从java端用的jni是没有权限创建surface的,所以c++创建surface是行不通的。

那么就只能在java层创建一个surfcaeview,然后把对象传到jni层,以指针的形式,同时把surfaceview的2个重要函数lock,unlockAndpost(名字

可能不对),也以指针的形式传到jni层,这样在jni 层就可以对java的surface进行数据的操作了。

按照我说的是肯定行的通的,但是得满足我所说的条件,还有一点就是如果是用ffmpeg软解码,帧率可能有点慢,这和surface的大小,图片的分辨率都有关系

,好了就说这么多了,具体的操作得你们自己研究了,你要学会如何用c层如何调java。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值