android 4.0 USB Camera实例(二)应用层
16lz
2021-01-26
上一篇说了HAL层 这一篇具体应用HAL层 实例预览与拍照的功能
首先贴上两个主文件的源码
Fimcgzsd.java
[java] view plain copy
- packagecom.dao.usbcam;
- publicclassFimcgzsd{
- staticpublicnativeintopen(byte[]devname);
- staticpublicnativeintqbuf(intindex);
- staticpublicnativeintstreamon();
- staticpublicnativeintstreamoff();
- staticpublicnativeintdqbuf(byte[]videodata);
- staticpublicnativeintrelease();
- staticpublicnativeintinit(intwidth,intheight,intnumbuf);
- static{
- System.loadLibrary("fimcgzsd");
- }
- }
MainActivity.java
[java] view plain copy
- packagecom.dao.usbcam;
- importjava.io.File;
- importjava.io.FileNotFoundException;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importandroid.app.Activity;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.os.Handler;
- importandroid.text.format.Time;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.view.Window;
- importandroid.view.WindowManager;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.ImageView;
- importandroid.widget.Toast;
- publicclassMainActivityextendsActivity{
- privateImageViewmImag;
- privateintwidth=640;
- privateintheight=480;
- privateStringdevname="/dev/video3";
- privatebyte[]mdata;
- privateHandlermHandler;
- privateintnumbuf=0;
- privateintindex=0;
- privateintret=0;
- publicButtonmcap;
- privateBitmapbitmap;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- 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=newbyte[width*height*numbuf];
- ret=Fimcgzsd.open(devname.getBytes());
- if(ret<0)
- finish();
- ret=Fimcgzsd.init(width,height,numbuf);
- if(ret<0)
- finish();
- ret=Fimcgzsd.streamon();
- if(ret<0)
- finish();
- mHandler=newHandler();
- newStartThread().start();
- mcap.setOnClickListener(newCaptureListener());
- }
- finalRunnablemUpdateUI=newRunnable(){
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- mImag.setImageBitmap(bitmap);
- }
- };
- classStartThreadextendsThread{
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- //super.run();
- while(true){
- index=Fimcgzsd.dqbuf(mdata);
- if(index<0){
- onDestroy();
- break;
- }
- mHandler.post(mUpdateUI);
- bitmap=BitmapFactory.decodeByteArray(mdata,0,width*height);
- Fimcgzsd.qbuf(index);
- }
- }
- }
- publicstaticvoidsaveMyBitmap(BitmapmBitmap){
- Timemtime=newTime();
- mtime.setToNow();
- Filefdir=newFile(Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+"/gzsd/");
- if(!fdir.exists()){
- fdir.mkdir();
- }
- Filef=newFile(Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+"/gzsd/"+mtime.year+mtime.month+mtime.monthDay+mtime.hour+mtime.minute+mtime.second+".png");
- try{
- f.createNewFile();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- FileOutputStreamfOut=null;
- try{
- fOut=newFileOutputStream(f);
- mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
- fOut.flush();
- fOut.close();
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- classCaptureListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- //newCapThread().start();
- //Fimcgzsd.streamoff();
- saveMyBitmap(bitmap);
- //Fimcgzsd.streamon();
- Toast.makeText(MainActivity.this,"CaptureSuccessfully",Toast.LENGTH_LONG).show();
- }
- }
- classCapThreadextendsThread{
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- //super.run();
- saveMyBitmap(bitmap);
- Toast.makeText(MainActivity.this,"CaptureSuccessfully",Toast.LENGTH_LONG).show();
- }
- }
- @Override
- protectedvoidonStop(){
- //TODOAuto-generatedmethodstub
- super.onStop();
- Fimcgzsd.release();
- finish();
- }
- @Override
- protectedvoidonPause(){
- //TODOAuto-generatedmethodstub
- super.onPause();
- Fimcgzsd.release();
- finish();
- }
- @Override
- protectedvoidonDestroy(){
- //TODOAuto-generatedmethodstub
- super.onDestroy();
- Fimcgzsd.release();
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- finish();
- returntrue;
- }
- }
首先open
这里usb camera设备为/dev/video3 为了修改方面所以我把这个参数放在应用层里传到HAL层 分辨率为640*480
然后init
[java] view plain copy
- Fimcgzsd.init(width,height,numbuf);
然后开启视频流
[java] view plain copy
- Fimcgzsd.streamon();
贴上我的效果图
30W像素的摄像头,目前capture似乎还有问题,似乎是驱动有问题 继续研究中...
============================================
作者:hclydao
http://blog.csdn.net/hclydao
版权没有,但是转载请保留此段声明
============================================
更多相关文章
- 解决'keytool' is not recognized as an internal or external c
- Android(安卓)Storage Manager
- Android执行打开文件(PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,V
- android 获取相册图片及路径
- Android(安卓)app开发中获取cpu arm架构信息及执行shell命令方法
- Android(安卓)获取系统时间
- Android在onCreate或者在Fragment的onCreateView中获取控件、屏
- Android(安卓)Bluetooth opp package 学习笔记
- Android: 获取当前线程状态