From e09e9f8a34cbc99a33dfa9ef1792b0025575c3a8 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期二, 01 八月 2017 11:41:19 +0800
Subject: [PATCH] 

---
 RtspFace/PL_Paint.cpp |   96 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 61 insertions(+), 35 deletions(-)

diff --git a/RtspFace/PL_Paint.cpp b/RtspFace/PL_Paint.cpp
index 7d33743..acfd90c 100644
--- a/RtspFace/PL_Paint.cpp
+++ b/RtspFace/PL_Paint.cpp
@@ -5,7 +5,6 @@
 #include <string.h> // for memcpy
 #include <opencv2/core/mat.hpp>
 #include <opencv2/imgproc.hpp>
-
 #ifdef ENABLE_WTEXT
 #include "CvUtil/CvxText.h"
 #endif
@@ -199,7 +198,7 @@
 
     // void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)
 
-    const uint16_t RGB565 =  plplCtx->color_front.toY();
+    const uint16_t RGB565 =  plplCtx->color_front.toRGB565();
     cv::rectangle(rgbMat, cv::Point(LTX, LTY), cv::Point(RBX, RBY), CV_RGB(RGB565, RGB565, RGB565), 4);
 
     return true;
@@ -231,14 +230,58 @@
 
 	cv::putText(yMat, TXT, cv::Point(LTX, LTY), CV_FONT_HERSHEY_COMPLEX, 1, CV_RGB(Y, Y, Y));
 	cv::putText(uvMat, TXT, cv::Point(MH_SUBSAMPLE1(LTX, 2), MH_SUBSAMPLE1(LTY, 2)), CV_FONT_HERSHEY_COMPLEX, 0.5, CV_RGB(UV, UV, UV));
-	
+
 	return true;
+}
+
+bool plplDraw_Text_RGB565(PLPLContext* plplCtx, MB_Frame* paintMb, int& paramOffset)
+{
+    int LTX = plplCtx->params[paramOffset + 0].val_i;
+    int LTY = plplCtx->params[paramOffset + 1].val_i;
+    const char* TXT = plplCtx->params[paramOffset + 2].val_s;
+    paramOffset += 3;
+
+    int src_width = paintMb->width;
+    int src_height = paintMb->height;
+    uint8_t* src_rgb = (uint8_t*)(paintMb->buffer);
+    cv::Mat rgbMat(cv::Size(src_width, src_height), CV_16UC1, src_rgb);
+
+    const uint16_t RGB565 =  plplCtx->color_front.toRGB565();
+    cv::putText(rgbMat, TXT, cv::Point(LTX, LTY), CV_FONT_HERSHEY_COMPLEX, 1, CV_RGB(RGB565, RGB565, RGB565));
+
+    return true;
+}
+
+bool plplDraw_WText_RGB565(PLPLContext* plplCtx, MB_Frame* paintMb, int& paramOffset)
+{
+#ifdef ENABLE_WTEXT
+	int LTX = plplCtx->params[paramOffset + 0].val_i;
+	int LTY = plplCtx->params[paramOffset + 1].val_i;
+	const char* WTXT = plplCtx->params[paramOffset + 2].val_s;
+	paramOffset += 3;
+
+	int src_width = paintMb->width;
+	int src_height = paintMb->height;
+    uint8_t* src_rgb = (uint8_t*)(paintMb->buffer);
+    cv::Mat rgbMat(cv::Size(src_width, src_height), CV_16UC1, src_rgb);
+
+	// void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)
+
+    const uint16_t RGB565 =  plplCtx->color_front.toRGB565();
+
+	CvxText* cvText = (CvxText*)plplCtx->cvxText;
+	cvText->putText(rgbMat, (const wchar_t*)WTXT, cv::Point(LTX, LTY), CV_RGB(RGB565, RGB565, RGB565));
+
+	return true;
+#else
+    return false;
+#endif
 }
 
 bool plplDraw_WText_NV12(PLPLContext* plplCtx, MB_Frame* paintMb, int& paramOffset)
 {
 #ifdef ENABLE_WTEXT
-	int LTX = plplCtx->params[paramOffset + 0].val_i;
+    int LTX = plplCtx->params[paramOffset + 0].val_i;
 	int LTY = plplCtx->params[paramOffset + 1].val_i;
 	const char* WTXT = plplCtx->params[paramOffset + 2].val_s;
 	paramOffset += 3;
@@ -254,18 +297,18 @@
 
 	const uint16_t Y =  plplCtx->color_front.toY();
 	const uint16_t UV = plplCtx->color_front.toUV();
-	
+
 	CvxText* cvText = (CvxText*)plplCtx->cvxText;
 	cvText->putText(yMat, (const wchar_t*)WTXT, cv::Point(LTX, LTY), CV_RGB(Y, Y, Y)); // L"涓枃ABCDabcd"
 	cvText->putText(uvMat, (const wchar_t*)WTXT, cv::Point(MH_SUBSAMPLE1(LTX, 2), MH_SUBSAMPLE1(LTY, 2)), CV_RGB(UV, UV, UV)); // L"涓枃ABCDabcd"
-	
+
 	return true;
 #else
     return false;
 #endif
 }
 
-bool plplExecutor_YUV(PL_Paint_Internal *in)
+bool plpl_executor(PL_Paint_Internal *in)
 {
 	MB_Frame* paintMb = &(in->lastMbfBuffOrigin);
 	int ret = true;
@@ -350,8 +393,8 @@
 					ret = plplDraw_Text_YUV420(plplCtx, paintMb, paramOffset);
 				else if (paintMb->type == MB_Frame::MBFT_NV12)
 					ret = plplDraw_Text_NV12(plplCtx, paintMb, paramOffset);
-                //else if (paintMb->type == MB_Frame::MBFT_RGB565)
-                //    ret = plplDraw_Text_RGB565(plplCtx, paintMb, paramOffset);
+                else if (paintMb->type == MB_Frame::MBFT_RGB565)
+                    ret = plplDraw_Text_RGB565(plplCtx, paintMb, paramOffset);
 				else
 					ret = false;
 				break;
@@ -360,8 +403,8 @@
 				//WTEXT LTX,LTY,"STR"
                 if (paintMb->type == MB_Frame::MBFT_NV12)
 					ret = plplDraw_WText_NV12(plplCtx, paintMb, paramOffset);
-                //else if (paintMb->type == MB_Frame::MBFT_RGB565)
-                //    ret = plplDraw_WText_RGB565(plplCtx, paintMb, paramOffset);
+                else if (paintMb->type == MB_Frame::MBFT_RGB565)
+                    ret = plplDraw_WText_RGB565(plplCtx, paintMb, paramOffset);
 				else
 					ret = false;
 				break;
@@ -383,7 +426,7 @@
 	in->lastMbfBuffOrigin.height = frame->height;
 	in->lastMbfBuffOrigin.pts = frame->pts;
 
-	in->payError = !plplExecutor_YUV(in);
+	in->payError = !plpl_executor(in);
 
 	return false;
 }
@@ -392,29 +435,12 @@
 {
 	PL_Paint_Internal* in = (PL_Paint_Internal*)internal;
 	in->payError = true;
-
-    if (pm.type != PipeMaterial::PMT_FRAME)
-    {
-        LOG_ERROR << "Only support PMT_FRAME" << LOG_ENDL;
-        return false;
-    }
-
-    if (pm.buffer == nullptr)
-        return false;
-
-    MB_Frame* frame = (MB_Frame*)pm.buffer;
-    switch(frame->type)
-    {
-        case MB_Frame::MBFT_YUV420:
-        case MB_Frame::MBFT_NV12:
-        case MB_Frame::MBFT_RGB565:
-            pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_RGB565, PL_Paint::pay_breaker_MBFT, in);
-            return !(in->payError);
-        default:
-            LOG_ERROR << "Only support MBFT_YUV420 / MBFT_NV12 / MBFT_RGB565" << LOG_ENDL;
-            in->payError = true;
-            break;
-    }
+	if (in->payError)
+		pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_YUV420, PL_Paint::pay_breaker_MBFT, in);
+	if (in->payError)
+		pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_NV12, PL_Paint::pay_breaker_MBFT, in);
+	if (in->payError)
+		pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_RGB565, PL_Paint::pay_breaker_MBFT, in);
 
 	return !(in->payError);
 }

--
Gitblit v1.8.0