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