From a08e6387a2fe736d23e9541ac00eb3b0a84d2afe Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 19 七月 2017 19:34:21 +0800 Subject: [PATCH] compile --- RtspFace/PL_Paint.cpp | 108 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 75 insertions(+), 33 deletions(-) diff --git a/RtspFace/PL_Paint.cpp b/RtspFace/PL_Paint.cpp index a60b61a..7d33743 100644 --- a/RtspFace/PL_Paint.cpp +++ b/RtspFace/PL_Paint.cpp @@ -2,10 +2,19 @@ #include "MaterialBuffer.h" #include "logger.h" #include "MediaHelper.h" -#include "CvUtil/CvxText.h" #include <string.h> // for memcpy #include <opencv2/core/mat.hpp> #include <opencv2/imgproc.hpp> + +#ifdef ENABLE_WTEXT +#include "CvUtil/CvxText.h" +#endif + +PLPLType::PLPLType(const char* _val_s) +{ + for (int i = 0; i < sizeof(val_s); i++) + val_s[i] = _val_s[i]; +} PLPLType::PLPLType(const wchar_t* _val_s) { @@ -18,8 +27,10 @@ PLPLContext::~PLPLContext() { - delete (CvxText*)cvxText; +#ifdef ENABLE_WTEXT + delete (CvxText*)cvxText; cvxText = nullptr; +#endif } struct PL_Paint_Internal @@ -94,17 +105,13 @@ in->config = *config; } - if(in->config.plplCtx->cvxText != nullptr) +#ifdef ENABLE_WTEXT + if(in->config.plplCtx->cvxText != nullptr) { delete (CvxText*)in->config.plplCtx->cvxText; } - - if(in->config.fontPath.empty()) - { - LOG_ERROR << "fontPath is null!" << LOG_ENDL; - return false; - } - else if (in->config.fontPath == " ") + + if(!in->config.fontPath.empty()) { CvxText* cvxText = new CvxText(in->config.fontPath.c_str()); in->config.plplCtx->cvxText = cvxText; @@ -112,6 +119,7 @@ CvScalar font = cvScalar(40, 1, 0.2, 1); cvxText->setFont(0, &font); } +#endif return true; } @@ -176,6 +184,27 @@ return true; } +bool plplDraw_Rect_RGB565(PLPLContext* plplCtx, MB_Frame* paintMb, int& paramOffset) +{ + int LTX = plplCtx->params[paramOffset + 0].val_i; + int LTY = plplCtx->params[paramOffset + 1].val_i; + int RBX = plplCtx->params[paramOffset + 2].val_i; + int RBY = plplCtx->params[paramOffset + 3].val_i; + paramOffset += 4; + + 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.toY(); + cv::rectangle(rgbMat, cv::Point(LTX, LTY), cv::Point(RBX, RBY), CV_RGB(RGB565, RGB565, RGB565), 4); + + return true; +} + bool plplDraw_Text_YUV420(PLPLContext* plplCtx, MB_Frame* paintMb, int& paramOffset) { return false; @@ -208,6 +237,7 @@ bool plplDraw_WText_NV12(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; @@ -230,6 +260,9 @@ 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) @@ -305,6 +338,8 @@ ret = plplDraw_Rect_YUV420(plplCtx, paintMb, paramOffset); else if (paintMb->type == MB_Frame::MBFT_NV12) ret = plplDraw_Rect_NV12(plplCtx, paintMb, paramOffset); + else if (paintMb->type == MB_Frame::MBFT_RGB565) + ret = plplDraw_Rect_RGB565(plplCtx, paintMb, paramOffset); else ret = false; break; @@ -315,14 +350,18 @@ 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 ret = false; break; case PLPLC_WTEXT: //WTEXT LTX,LTY,"STR" - if (paintMb->type == MB_Frame::MBFT_NV12) + 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 ret = false; break; @@ -332,26 +371,10 @@ return ret; } -/*static*/ bool PL_Paint::pay_breaker_MBFT_YUV(const PipeMaterial* pm, void* args) +/*static*/ bool PL_Paint::pay_breaker_MBFT(const PipeMaterial* pm, void* args) { PL_Paint_Internal* in = (PL_Paint_Internal*)args; - - 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; - if (frame->type != MB_Frame::MBFT_YUV420 && frame->type != MB_Frame::MBFT_NV12) - { - LOG_ERROR << "Only support MBFT_YUV420 and MBFT_NV12" << LOG_ENDL; - in->payError = true; - return false; - } + MB_Frame* frame = (MB_Frame*)pm->buffer; in->lastMbfBuffOrigin.type = frame->type; in->lastMbfBuffOrigin.buffer = frame->buffer; @@ -369,11 +392,30 @@ { PL_Paint_Internal* in = (PL_Paint_Internal*)internal; in->payError = true; - pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_YUV420, PL_Paint::pay_breaker_MBFT_YUV, in); - pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_NV12, PL_Paint::pay_breaker_MBFT_YUV, in); - //#todo support RGB - + 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; + } + return !(in->payError); } -- Gitblit v1.8.0