展会信息港展会大全

android 4.0 USB Camera实例(二)应用层
来源:互联网   发布日期:2015-09-29 10:11:20   浏览:1887次  

导读:上一篇说了HAL层 这一篇具体应用HAL层 实例预览与拍照的功能首先贴上两个主文件的源码Fimcgzsd.javapackage com.dao.usbcam;public cla...

上一篇说了HAL层 这一篇具体应用HAL层 实例预览与拍照的功能

首先贴上两个主文件的源码

Fimcgzsd.java

package com.dao.usbcam;

public class Fimcgzsd {

static public native int open(byte[] devname);

static public native int qbuf(int index);

static public native int streamon();

static public native int streamoff();

static public native int dqbuf(byte[] videodata);

static public native int release();

static public native int init(int width, int height,int numbuf);

static {

System.loadLibrary("fimcgzsd");

}

}

这个主要是HAL层的一些接口函数

MainActivity.java

package com.dao.usbcam;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.text.format.Time;

import android.view.Menu;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends Activity {

private ImageView mImag;

private int width = 640;

private int height = 480;

private String devname = "/dev/video3";

private byte[] mdata;

private Handler mHandler;

private int numbuf = 0;

private int index = 0;

private int ret = 0;

public Button mcap;

private Bitmap bitmap;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_main);

mImag = (ImageView)findViewById(R.id.mimg);

mcap = (Button)findViewById(R.id.mcap);

numbuf= 4;

mdata = new byte[width * height * numbuf];

ret = Fimcgzsd.open(devname.getBytes());

if(ret 整体过程 其实很简单

首先open

这里usb camera设备为/dev/video3 为了修改方面所以我把这个参数放在应用层里传到HAL层 分辨率为640*480

然后init

Fimcgzsd.init(width, height, numbuf);传入宽,高 以及 缓冲帧的数目

然后开启视频流

Fimcgzsd.streamon();开另外一个进程 循环获取数据 由于这里获取到的数据直接是jpeg格式的所以 我直接把他转成bmp然后用imageview直接显示 又省了不少事

贴上我的效果图

30W像素的摄像头,目前capture似乎还有问题,似乎是驱动有问题 继续研究中...

============================================

作者:hclydao

http://blog.csdn.net/hclydao

版权没有,但是转载请保留此段声明

============================================

赞助本站

人工智能实验室

相关热词: android开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港