android8 rk3399 同时支持多个USB摄像头
创始人
2025-05-31 07:39:28

文章目录

  • 一、前文
  • 二、CameraHal_Module.h
  • 三、CameraHal_Module.cpp
  • 四、编译&烧录Image
  • 五、App验证

一、前文

  • Android系统默认支持2个摄像头,一个前置摄像头,一个后置摄像头
  • 需要支持数量更多的摄像头,得修改Android Hal层的代码

在这里插入图片描述

二、CameraHal_Module.h

  • 修改CAMERAS_SUPPORT_MAX
    在这里插入图片描述

三、CameraHal_Module.cpp

  • 修改camera_get_number_of_cameras()函数中变量camInfoTmp[]相关代码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、编译&烧录Image

该部分的修改要生效的话,需要进行全编译

  • ./build.sh
  • ./build.sh mkimage
  • ./build.sh mkupdate

五、App验证

  • AndroidManifest.xml

 
  • MainActivity.java
package com.example.cameraapplication;import androidx.appcompat.app.AppCompatActivity;import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private static final String TAG = MainActivity.class.getSimpleName();Camera camera1, camera2, camera3, camera4;SurfaceHolder surfaceHolder1, surfaceHolder2, surfaceHolder3, surfaceHolder4;SurfaceView surfaceView1, surfaceView2, surfaceView3, surfaceView4;List cameraList = new ArrayList<>();List surfaceHolderList = new ArrayList<>();List surfaceViewList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);surfaceView1 = findViewById(R.id.camera_surface_view1);surfaceView2 = findViewById(R.id.camera_surface_view2);surfaceView3 = findViewById(R.id.camera_surface_view3);surfaceView4 = findViewById(R.id.camera_surface_view4);cameraList.add(camera1);cameraList.add(camera2);cameraList.add(camera3);cameraList.add(camera4);surfaceHolderList.add(surfaceHolder1);surfaceHolderList.add(surfaceHolder2);surfaceHolderList.add(surfaceHolder3);surfaceHolderList.add(surfaceHolder4);surfaceViewList.add(surfaceView1);surfaceViewList.add(surfaceView2);surfaceViewList.add(surfaceView3);surfaceViewList.add(surfaceView4);for(int i=0; iinitCamera(i, cameraList.get(i), surfaceHolderList.get(i), surfaceViewList.get(i));}int number = Camera.getNumberOfCameras();//得到摄像头的个数Toast.makeText(MainActivity.this, "摄像头个数:"+number, Toast.LENGTH_LONG).show();}private void initCamera(int number, Camera camera, SurfaceHolder surfaceHolder, SurfaceView surfaceView){try{camera = Camera.open(number);surfaceHolder = surfaceView.getHolder();surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);final Camera mCamera = camera;surfaceHolder.addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {try {if (mCamera!=null) {mCamera.setPreviewDisplay(surfaceHolder);mCamera.setDisplayOrientation(90);mCamera.startPreview();}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {releaseCamera(mCamera);}});}catch (Exception e){e.printStackTrace();}}/*** 释放相机资源*/private void releaseCamera(Camera camera) {if (camera != null) {camera.setPreviewCallback(null);camera.stopPreview();camera.release();camera = null;}}/*** 释放相机资源*/private void releaseAllCamera() {for(int i=0; iif (cameraList.get(i) != null) {cameraList.get(i).setPreviewCallback(null);cameraList.get(i).stopPreview();cameraList.get(i).release();cameraList.set(i, null);}}}
}
  • activity_main.xml











觉得好,就一键三连呗(点赞+收藏+关注)

相关内容

热门资讯

中际旭创大跌2.32%!易方达... 7月16日,中际旭创股票收盘大跌2.32%,天眼查工商信息显示,中际旭创股份有限公司成立于2005年...
马斯克,推出AI伴侣 日前,马斯克的AI公司xAI更新了旗下聊天机器人Grok,基于Grok 4大模型推出“伴侣”(com...
高三加油作文范文大全(精选6... 高三加油作文范文大全 篇一高三加油作文范文大全高三,是人生中最为紧张和关键的一年。学习的压力、升学的...
泡泡玛特,狂飙!预计业绩暴增超... 7月15日,泡泡玛特(09992.HK)披露正面盈利预告。 公告提到,根据公司目前可得的资料及董事会...
债券基金向久期要收益不再吃香?... 财联社7月16日讯(编辑 李响)向久期要收益不再吃香? 财联社据Wind数据统计,截至7月15日,...