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