66
77#include < chrono>
88
9-
10- #define CHECK_BEF_AI_RET_SUCCESS (ret, ...) \
11- if (ret != 0 ){\
12- PRINTF_ERROR (__VA_ARGS__);\
13- }
9+ #include < opencv2/opencv.hpp>
1410
1511namespace agora {
1612 namespace extension {
@@ -21,67 +17,31 @@ namespace agora {
2117
2218 bool WatermarkProcessor::releaseOpenGL () {
2319 const std::lock_guard<std::mutex> lock (mutex_);
24-
25- #if defined(__ANDROID__) || defined(TARGET_OS_ANDROID)
26- if (eglCore_) {
27- if (offscreenSurface_) {
28- eglCore_->releaseSurface (offscreenSurface_);
29- }
30- delete eglCore_;
31- eglCore_ = nullptr ;
32- }
33- #endif
3420 return true ;
3521 }
3622
3723 int WatermarkProcessor::processFrame (agora::rtc::VideoFrameData &capturedFrame) {
38- // PRINTF_INFO("processFrame: w: %d, h: %d, r: %d, enable: %d", capturedFrame.width, capturedFrame.height, capturedFrame.rotation, wmEffectEnabled_);
3924 if (wmEffectEnabled_) {
4025 addWatermark (capturedFrame);
4126 }
4227 return 0 ;
4328 }
4429
4530 void WatermarkProcessor::addWatermark (const agora::rtc::VideoFrameData &capturedFrame) {
46- // cv::Mat image(capturedFrame.height, capturedFrame.width, CV_8U,
47- // (void*)capturedFrame.pixels.data);
48- // double fontSize = image.cols / 800;
49- // if (fontSize == 0.0) {
50- // fontSize = 2.0;
51- // }
52- // cv::Point point(image.rows/2, image.cols/2);
53- // cv::Scalar scalar(255, 0, 0);
54- // cv::Mat textImg = cv::Mat::zeros(image.rows, image.cols, image.type());
55- // cv::putText(textImg, wmStr_, point, cv::FONT_HERSHEY_DUPLEX, fontSize, scalar,3);
56- // cv::flip(textImg, textImg, 0);
57- // image = image + textImg;
31+ cv::Mat image (capturedFrame.height , capturedFrame.width , CV_8U,
32+ (void *)capturedFrame.pixels .data );
33+ double fontSize = image.cols / 400.0 ;
34+ cv::Point point (image.cols /2 , image.rows /2 );
35+ cv::Scalar scalar (255 , 0 , 0 );
36+ cv::Mat textImg = cv::Mat::zeros (image.rows , image.cols , image.type ());
37+ cv::putText (textImg, wmStr_, point, cv::FONT_HERSHEY_DUPLEX, fontSize, scalar, 3 );
38+ cv::flip (textImg, textImg, 1 );
39+ image = image + textImg;
5840 }
5941
6042 int WatermarkProcessor::setParameters (std::string parameter) {
6143 const std::lock_guard<std::mutex> lock (mutex_);
62- // Document d;
63- // d.Parse(parameter.c_str());
64- // if (d.HasParseError()) {
65- // return -ERROR_INVALID_JSON;
66- // }
67- //
68- //
69- // if (d.HasMember("plugin.watermark.wmEffectEnabled")) {
70- // Value& enabled = d["plugin.watermark.wmEffectEnabled"];
71- // if (!enabled.IsBool()) {
72- // return -ERROR_INVALID_JSON_TYPE;
73- // }
74- // wmEffectEnabled_ = enabled.GetBool();
75- // }
76- //
77- // if (d.HasMember("plugin.watermask.wmStr")) {
78- // Value& wmStr = d["plugin.watermask.wmStr"];
79- // if (!wmStr.IsString()) {
80- // return -ERROR_INVALID_JSON_TYPE;
81- // }
82- // wmStr_ = wmStr.GetString();
83- // }
84-
44+
8545 return 0 ;
8646 }
8747
0 commit comments