From 964db3e1a2d6e2ab277da1ffcb27064bd2776848 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期一, 01 十二月 2025 14:53:03 +0800
Subject: [PATCH] 1.添加一个设置水印的aidl接口 2.h264Encoder 设置usbcamera加水印

---
 app/src/main/java/com/anyun/h264/H264Encoder.java |   84 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/app/src/main/java/com/anyun/h264/H264Encoder.java b/app/src/main/java/com/anyun/h264/H264Encoder.java
index 80a992a..2aa6e5d 100644
--- a/app/src/main/java/com/anyun/h264/H264Encoder.java
+++ b/app/src/main/java/com/anyun/h264/H264Encoder.java
@@ -4,11 +4,14 @@
 import android.media.MediaCodecInfo;
 import android.media.MediaFormat;
 import com.anyun.libusbcamera.UsbCamera;
+import com.anyun.libusbcamera.WatermarkParam;
+import com.anyun.h264.model.WatermarkInfo;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -148,6 +151,87 @@
     }
 
     /**
+     * 璁剧疆姘村嵃淇℃伅
+     * @param watermarkInfo 姘村嵃淇℃伅瀵硅薄
+     */
+    public void setWatermarkInfo(WatermarkInfo watermarkInfo) {
+        if (watermarkInfo == null) {
+            Timber.w("WatermarkInfo is null, disabling watermark");
+            usbCamera.enableWatermark(false, null);
+            return;
+        }
+
+        try {
+            // 鏋勫缓姘村嵃鏂囨湰鍒楄〃锛堝垎琛屾樉绀猴紝姣忚涓�涓俊鎭」锛�
+            ArrayList<WatermarkParam> watermarkParams = new ArrayList<>();
+            
+            // 浠庡乏涓婅寮�濮嬶紝姣忚闂撮殧25鍍忕礌
+            int yOffset = 30;
+            int xOffset = 10;
+            
+            // 杞︾墝鍙�
+            if (watermarkInfo.getPlateNumber() != null && !watermarkInfo.getPlateNumber().isEmpty()) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    "杞︾墝:" + watermarkInfo.getPlateNumber()));
+                yOffset += 25;
+            }
+            
+            // 瀛﹀憳濮撳悕
+            if (watermarkInfo.getStudent() != null && !watermarkInfo.getStudent().isEmpty()) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    "瀛﹀憳:" + watermarkInfo.getStudent()));
+                yOffset += 25;
+            }
+            
+            // 鏁欑粌濮撳悕
+            if (watermarkInfo.getCoach() != null && !watermarkInfo.getCoach().isEmpty()) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    "鏁欑粌:" + watermarkInfo.getCoach()));
+                yOffset += 25;
+            }
+            
+            // 浣嶇疆淇℃伅锛堢含搴�,缁忓害锛�
+            if (watermarkInfo.getLongitude() != null && watermarkInfo.getLatitude() != null) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    String.format("浣嶇疆:%.6f,%.6f", watermarkInfo.getLatitude(), watermarkInfo.getLongitude())));
+                yOffset += 25;
+            }
+            
+            // 椹炬牎鍚嶇О
+            if (watermarkInfo.getDrivingSchool() != null && !watermarkInfo.getDrivingSchool().isEmpty()) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    "椹炬牎:" + watermarkInfo.getDrivingSchool()));
+                yOffset += 25;
+            }
+            
+            // 杞﹂��
+            if (watermarkInfo.getSpeed() != null) {
+                watermarkParams.add(new WatermarkParam(xOffset, yOffset, 
+                    String.format("杞﹂��:%.1fkm/h", watermarkInfo.getSpeed())));
+            }
+            
+            if (!watermarkParams.isEmpty()) {
+                // 鍚敤姘村嵃锛屼娇鐢ㄩ粯璁ゅ瓧浣撹矾寰勶紙濡傛灉绯荤粺鏈夊瓧浣撴枃浠讹級
+                // 棰滆壊锛�0-REVERSE锛堝弽鑹诧級锛�1-BLACK锛�2-WHITE锛�3-RED锛�4-GREEN锛�5-BLUE
+                // 瀛椾綋澶у皬銆佸�嶆暟鍙互鏍规嵁闇�瑕佽皟鏁�
+                String fontPath = "/system/fonts/DroidSans.ttf"; // 榛樿瀛椾綋璺緞锛屽鏋滀笉瀛樺湪鍙互浼爊ull
+                usbCamera.enableWatermark(true, fontPath);
+                
+                // 璁剧疆姘村嵃锛氶鑹诧紙2=鐧借壊锛夛紝瀛椾綋澶у皬锛�24锛夛紝鍊嶆暟锛�1锛夛紝鏂囨湰鍒楄〃
+                usbCamera.setWatermark(2, 24, 1, watermarkParams);
+                
+                Timber.d("Watermark set successfully: %s", watermarkInfo);
+            } else {
+                Timber.w("No watermark text to display, disabling watermark");
+                usbCamera.enableWatermark(false, null);
+            }
+        } catch (Exception e) {
+            Timber.e(e, "Failed to set watermark");
+            usbCamera.enableWatermark(false, null);
+        }
+    }
+
+    /**
      * 鍒濆鍖栨憚鍍忓ご鍜岀紪鐮佸櫒
      */
     public boolean initialize(int[] cameraIdRange, String cameraName, int[] resolution, boolean ayCamera) {

--
Gitblit v1.8.0