From efa5fe48ebc866ec07a597ef551cf7e13c3b7aba Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期六, 27 七月 2024 17:27:02 +0800
Subject: [PATCH] 更新单摄像头的AR方案

---
 app/src/main/java/com/whyc/widget/Camera2TextureView.java |   93 ++++++++++++++++++++++------------------------
 1 files changed, 45 insertions(+), 48 deletions(-)

diff --git a/app/src/main/java/com/whyc/widget/Camera2TextureView.java b/app/src/main/java/com/whyc/widget/Camera2TextureView.java
index da2743f..c99bcb9 100644
--- a/app/src/main/java/com/whyc/widget/Camera2TextureView.java
+++ b/app/src/main/java/com/whyc/widget/Camera2TextureView.java
@@ -15,6 +15,7 @@
 import android.hardware.camera2.CameraManager;
 import android.hardware.camera2.CameraMetadata;
 import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.params.StreamConfigurationMap;
 import android.media.Image;
 import android.media.ImageReader;
 import android.media.MediaCodec;
@@ -28,6 +29,7 @@
 import android.support.v4.app.ActivityCompat;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.util.Size;
 import android.view.Surface;
 import android.view.TextureView;
 import android.view.View;
@@ -43,6 +45,7 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -50,6 +53,9 @@
 import static android.content.ContentValues.TAG;
 import static android.os.Environment.DIRECTORY_DOCUMENTS;
 
+/**
+ * Record妯″紡涓�,Target = 褰曞儚鍜孖mageReader鍥剧墖
+ */
 public class Camera2TextureView extends TextureView {
 
     private Context mContext;
@@ -114,6 +120,16 @@
         CameraManager cm = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
         try {
             String cameraId = cm.getCameraIdList()[0];
+            /*CameraCharacteristics cameraCharacteristics = cm.getCameraCharacteristics(cameraId);
+            StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+            Size[] outputSizes = map.getOutputSizes(SurfaceTexture.class);
+            Arrays.sort(outputSizes, new Comparator<Size>() {
+                @Override
+                public int compare(Size lhs, Size rhs) {
+                    return Integer.compare(rhs.getWidth(), lhs.getWidth());
+                }
+            });
+            System.out.println(outputSizes);*/
             cm.openCamera(cameraId,mDeviceStateCallback,null);
         }catch (Exception e){
             e.printStackTrace();
@@ -128,11 +144,11 @@
                 surfaceTexture.setDefaultBufferSize(1920, 1080);
                 previewSurface = new Surface(surfaceTexture);
 
-                try {
+                /*try {
                     createPreviewSession();
                 }catch (Exception e){
                     e.printStackTrace();
-                }
+                }*/
             }
 
             @Override
@@ -152,7 +168,7 @@
                 @Override
                 public void onConfigured(@NonNull CameraCaptureSession session) {
                     mCaptureSession = session;
-                    startPreview(mCameraDevice);
+//                    startPreview(mCameraDevice);
                 }
 
                 @Override
@@ -227,6 +243,7 @@
     }
 
     public void createRecorderSession(){
+//        mImageReader = ImageReader.newInstance(1920, 1080, ImageFormat.JPEG, 1);
         mImageReader = ImageReader.newInstance(1920, 1080, ImageFormat.JPEG, 1);
         surfaceForStream = mImageReader.getSurface();
         mImageReader.setOnImageAvailableListener(mImageReaderListener, null);
@@ -247,7 +264,8 @@
                 public void onConfigured(@NonNull CameraCaptureSession session) {
                     mCaptureSession = session;
                     try {
-                        recordRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+//                        recordRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+                        recordRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
 
 //                        recordRequest.addTarget(previewSurface);
                         recordRequest.addTarget(mImageReader.getSurface());
@@ -274,53 +292,32 @@
     }
 
     private ImageReader.OnImageAvailableListener mImageReaderListener = reader -> {
-        /*long now = System.currentTimeMillis();
-        SharedPreferences camera2Time = mContext.getSharedPreferences("camera2Time", Context.MODE_PRIVATE);
-        long lastTime = camera2Time.getLong("time", 0);
-        if (lastTime == 0 || now-lastTime > 1000) {
-            //杩欓噷鍙槸婕旂ずtest
-            llUpText.setVisibility(View.VISIBLE);
-            tvDevice.setText("杩欐槸娴嬭瘯鐨勫姩鎬佽祴鍊�");
-            camera2Time.edit().putLong("time", now).apply();
-
+        try {
+            SharedPreferences camera2Time = mContext.getSharedPreferences("camera2Time", Context.MODE_PRIVATE);
+            long lastTime = camera2Time.getLong("time", 0);
             // 鑾峰彇鍒版媿鐓х殑鍥惧儚鏁版嵁
             Image image = reader.acquireNextImage();
+            long now = image.getTimestamp();
+            long gap = (now - lastTime) / 1000000000;
+            if (lastTime == 0 || gap > 3) {
+                camera2Time.edit().putLong("time", now).apply();
+                //杩欓噷鍙槸婕旂ずtest
+           /* llUpText.setVisibility(View.VISIBLE);
+            tvDevice.setText("杩欐槸娴嬭瘯鐨勫姩鎬佽祴鍊�");*/
+                // 鑾峰彇鍥剧墖鐨勫瓧鑺傛暟缁�
+                ByteBuffer buffer = image.getPlanes()[0].getBuffer();
+                byte[] data = new byte[buffer.remaining()];
+                buffer.get(data);
+                // 閲婃斁鍥惧儚璧勬簮
+                image.close();
 
-            // 鑾峰彇鍥剧墖鐨勫瓧鑺傛暟缁�
-            ByteBuffer buffer = image.getPlanes()[0].getBuffer();
-            byte[] data = new byte[buffer.remaining()];
-            buffer.get(data);
-            // 閲婃斁鍥惧儚璧勬簮
-            image.close();
-
-            // 淇濆瓨鍥剧墖鍒扮浉鍐�
-            saveImageToGallery(data);
-        }else{
-            // 鑾峰彇鍒版媿鐓х殑鍥惧儚鏁版嵁
-            Image image = reader.acquireNextImage();
-            image.close();
-        }*/
-        SharedPreferences camera2Time = mContext.getSharedPreferences("camera2Time", Context.MODE_PRIVATE);
-        long lastTime = camera2Time.getLong("time", 0);
-        // 鑾峰彇鍒版媿鐓х殑鍥惧儚鏁版嵁
-        Image image = reader.acquireNextImage();
-        long now = image.getTimestamp()/1000000000;
-        if (lastTime == 0  || now-lastTime > 5) {
-            camera2Time.edit().putLong("time", now).apply();
-            //杩欓噷鍙槸婕旂ずtest
-            llUpText.setVisibility(View.VISIBLE);
-            tvDevice.setText("杩欐槸娴嬭瘯鐨勫姩鎬佽祴鍊�");
-            // 鑾峰彇鍥剧墖鐨勫瓧鑺傛暟缁�
-            ByteBuffer buffer = image.getPlanes()[0].getBuffer();
-            byte[] data = new byte[buffer.remaining()];
-            buffer.get(data);
-            // 閲婃斁鍥惧儚璧勬簮
-            image.close();
-
-            // 淇濆瓨鍥剧墖鍒扮浉鍐�
-            saveImageToGallery(data);
-        }else{
-            image.close();
+                // 淇濆瓨鍥剧墖鍒扮浉鍐�
+                saveImageToGallery(data);
+            } else {
+                image.close();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
         }
 
     };

--
Gitblit v1.9.1