From 32f931c4f22a6970df71419ab94b6abb85876b22 Mon Sep 17 00:00:00 2001
From: whycxzp <glperry@163.com>
Date: 星期二, 30 七月 2024 15:28:17 +0800
Subject: [PATCH] 优化线程

---
 app/src/main/java/com/whyc/widget/Camera2TextureView4.java |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/app/src/main/java/com/whyc/widget/Camera2TextureView4.java b/app/src/main/java/com/whyc/widget/Camera2TextureView4.java
index c593d08..836b1cf 100644
--- a/app/src/main/java/com/whyc/widget/Camera2TextureView4.java
+++ b/app/src/main/java/com/whyc/widget/Camera2TextureView4.java
@@ -37,6 +37,8 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import static android.os.Environment.DIRECTORY_DOCUMENTS;
 
@@ -76,6 +78,8 @@
     //涓婚〉闈㈢殑瑙嗗浘
     private LinearLayout llUpText;
     private TextView tvDevice;
+
+    ExecutorService imageExecutor = Executors.newSingleThreadExecutor();
 
     public Camera2TextureView4(Context context) {
         super(context,null);
@@ -284,22 +288,24 @@
 
         //        Image imageCopy = ImageReader.newInstance(videoWidth, videoHeight, ImageFormat.YUV_420_888, 1).acquireLatestImage();
         byte[] nv12 = new byte[I420size];
-        byte[] nv21 = new byte[I420size];
+//        byte[] nv21 = new byte[I420size];
 
         YUVUtil.YUVToNV21_NV12(image, nv12, videoWidth, videoHeight, "NV12");
         long now = image.getTimestamp();
         image.close();
         //鍥剧墖鎴浘
-        SharedPreferences camera2Time = mContext.getSharedPreferences("camera2Time", Context.MODE_PRIVATE);
-        long lastTime = camera2Time.getLong("time", 0);
-        long secondsGap = (now - lastTime) / 1000000000;
-        if (lastTime == 0 || secondsGap > 2) {
-            camera2Time.edit().putLong("time", now).apply();
-            //闇�瑕佸皢nv12杞寲涓簄v21鍚庤繘琛屽浘鐗囧瓨鍌�
-            nv21 = convertNV12toNV21(nv12);
-            Bitmap bitmap = BitmapUtil.nv21ToBitmap(nv21, videoWidth, videoHeight);
-            BitmapUtil.saveBitmapToFile(bitmap);
-        }
+        imageExecutor.execute(() -> {
+            SharedPreferences camera2Time = mContext.getSharedPreferences("camera2Time", Context.MODE_PRIVATE);
+            long lastTime = camera2Time.getLong("time", 0);
+            long secondsGap = (now - lastTime) / 1000000000;
+            if (lastTime == 0 || secondsGap > 2) {
+                camera2Time.edit().putLong("time", now).apply();
+                //闇�瑕佸皢nv12杞寲涓簄v21鍚庤繘琛屽浘鐗囧瓨鍌�
+                byte[] nv21 = convertNV12toNV21(nv12);
+                Bitmap bitmap = BitmapUtil.nv21ToBitmap(nv21, videoWidth, videoHeight);
+                BitmapUtil.saveBitmapToFile(bitmap);
+            }
+        });
 
         // 鎻愪氦鏁版嵁缁橫ediaCodec
         try {
@@ -440,7 +446,7 @@
 
     private void stopPreviewThreadHandler(){
         //棰勮鐨勫鐞嗙嚎绋�
-        try {
+       /* try {
             previewThread.quitSafely();
             previewThread.join();
         } catch (InterruptedException e) {
@@ -448,7 +454,7 @@
         }finally {
             previewThread = null;
             previewThreadHandler = null;
-        }
+        }*/
     }
 
     private void initThreadHandlerForRecording() {

--
Gitblit v1.9.1