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