From a88fc40a16cefc8248baa4b6aab7b7577e0ba4cc Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 19 七月 2017 16:42:37 +0800 Subject: [PATCH] code review --- RtspFace/PL_Paint.cpp | 227 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 121 insertions(+), 106 deletions(-) diff --git a/RtspFace/PL_Paint.cpp b/RtspFace/PL_Paint.cpp index daaca0d..6f724ff 100644 --- a/RtspFace/PL_Paint.cpp +++ b/RtspFace/PL_Paint.cpp @@ -7,6 +7,12 @@ #include <opencv2/core/mat.hpp> #include <opencv2/imgproc.hpp> +~PLPLContext::PLPLContext() +{ + delete (CvxText*)cvxText; + cvxText = nullptr; +} + struct PL_Paint_Internal { uint8_t* buffer; @@ -21,7 +27,7 @@ PL_Paint_Internal() : buffer(nullptr), buffSize(), config(), pmList(), - lastMbfBuffOrigin(), lastMbfBuffCopy(), + lastMbfBuffOrigin(), lastMbfBuffCopy(), payError(true) { } @@ -79,20 +85,17 @@ in->config = *config; } - if(in->config.fontPath.empty()) - { - LOG_ERROR << "fontPath is null!" << LOG_ENDL; - return false; - } - if(in->config.plplCtx->cvxText != nullptr) - { - delete(in->config.plplCtx->cvxText); - } - CvxText* cvxText =new CvxText(in->config.fontPath.c_str()); - in->config.plplCtx->cvxText = cvxText; - cvxText->setBackColor(cvScalar(128, 33, 14)); - CvScalar font = cvScalar(40,1,0.2,1); - cvxText->setFont(0, &font); + if(in->config.fontPath.empty()) + { + LOG_ERROR << "fontPath is null!" << LOG_ENDL; + return false; + } + + if(in->config.plplCtx->cvxText != nullptr) + { + delete (CvxText*)in->config.plplCtx->cvxText; + } + return true; } @@ -121,7 +124,7 @@ // void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) - const PLGH_Color_YUV yuvColor(plplCtx->color_front.toY(), plplCtx->color_front.toU(), plplCtx->color_front.toV()); + const PLGH_Color_YUV yuvColor(plplCtx->color_front.toY(), plplCtx->color_front.toU(), plplCtx->color_front.toV()); cv::rectangle(yMat, cv::Point(LTX, LTY), cv::Point(RBX, RBY), CV_RGB(yuvColor.Y, yuvColor.Y, yuvColor.Y), 4); cv::rectangle(uMat, cv::Point(MH_SUBSAMPLE1(LTX, 2), MH_SUBSAMPLE1(LTY, 2)), cv::Point(MH_SUBSAMPLE1(RBX, 2), MH_SUBSAMPLE1(RBY, 2)), CV_RGB(yuvColor.U, yuvColor.U, yuvColor.U), 2); @@ -145,8 +148,8 @@ // void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) - const uint16_t Y = plplCtx->color_front.toY(); - const uint16_t UV = plplCtx->color_front.toUV(); + const uint16_t Y = plplCtx->color_front.toY(); + const uint16_t UV = plplCtx->color_front.toUV(); cv::rectangle(yMat, cv::Point(LTX, LTY), cv::Point(RBX, RBY), CV_RGB(Y, Y, Y), 4); cv::rectangle(uvMat, cv::Point(MH_SUBSAMPLE1(LTX, 2), MH_SUBSAMPLE1(LTY, 2)), cv::Point(MH_SUBSAMPLE1(RBX, 2), MH_SUBSAMPLE1(RBY, 2)), CV_RGB(UV, UV, UV), 2); @@ -175,109 +178,121 @@ const uint16_t Y = plplCtx->color_front.toY(); const uint16_t UV = plplCtx->color_front.toUV(); - 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)); + 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)); } + bool plplDraw_WText_NV12(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 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_y = (uint8_t*)(paintMb->buffer); - uint8_t* src_uv = (uint8_t*)(src_y + (src_height * src_width)); - cv::Mat yMat(cv::Size(src_width, src_height), CV_8UC1, src_y); - cv::Mat uvMat(cv::Size(MH_SUBSAMPLE1(src_width, 2), MH_SUBSAMPLE1(src_height, 2)), CV_16UC1, src_uv); + int src_width = paintMb->width; + int src_height = paintMb->height; + uint8_t* src_y = (uint8_t*)(paintMb->buffer); + uint8_t* src_uv = (uint8_t*)(src_y + (src_height * src_width)); + cv::Mat yMat(cv::Size(src_width, src_height), CV_8UC1, src_y); + cv::Mat uvMat(cv::Size(MH_SUBSAMPLE1(src_width, 2), MH_SUBSAMPLE1(src_height, 2)), CV_16UC1, src_uv); - // void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) + // void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) - const uint16_t Y = plplCtx->color_front.toY(); - const uint16_t UV = plplCtx->color_front.toUV(); - CvxText* cvText = (CvxText*)plplCtx->cvxText; - cvText->putText(yMat, L"涓枃ABCDabcd", cv::Point(LTX, LTY), CV_RGB(Y, Y, Y)); - cvText->putText(uvMat, L"涓枃ABCDabcd", cv::Point(MH_SUBSAMPLE1(LTX, 2),MH_SUBSAMPLE1(LTY, 2)), CV_RGB(UV, UV, UV)); + if (in->config.plplCtx->cvxText == nullptr) + { + CvxText* cvxText = new CvxText(in->config.fontPath.c_str()); + in->config.plplCtx->cvxText = cvxText; + cvxText->setBackColor(cvScalar(128, 33, 14)); + CvScalar font = cvScalar(40, 1, 0.2, 1); + cvxText->setFont(0, &font); + } + + 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" } + bool plplExecutor_YUV(PL_Paint_Internal *in) { - MB_Frame* paintMb = &(in->lastMbfBuffOrigin); + MB_Frame* paintMb = &(in->lastMbfBuffOrigin); int ret = true; - if (in->config.copyData) - { - if (in->buffer == nullptr) - { - in->buffer = new uint8_t[in->lastMbfBuffOrigin.buffSize]; - in->buffSize = in->lastMbfBuffOrigin.buffSize; - } + if (in->config.copyData) + { + if (in->buffer == nullptr) + { + in->buffer = new uint8_t[in->lastMbfBuffOrigin.buffSize]; + in->buffSize = in->lastMbfBuffOrigin.buffSize; + } - in->lastMbfBuffCopy = in->lastMbfBuffOrigin; - in->lastMbfBuffCopy.buffer = in->buffer; - in->lastMbfBuffCopy.buffSize = in->buffSize; + in->lastMbfBuffCopy = in->lastMbfBuffOrigin; + in->lastMbfBuffCopy.buffer = in->buffer; + in->lastMbfBuffCopy.buffSize = in->buffSize; - memcpy(in->lastMbfBuffCopy.buffer, in->lastMbfBuffOrigin.buffer, in->lastMbfBuffCopy.buffSize); + memcpy(in->lastMbfBuffCopy.buffer, in->lastMbfBuffOrigin.buffer, in->lastMbfBuffCopy.buffSize); - paintMb = &(in->lastMbfBuffCopy); - } + paintMb = &(in->lastMbfBuffCopy); + } - //for (int i=640;i<2000;i++) ((uint8_t*)paintMb->buffer)[i]=255; + //for (int i=640;i<2000;i++) ((uint8_t*)paintMb->buffer)[i]=255; - PLPLContext* plplCtx = in->config.plplCtx; - int paramOffset = 0; - for (int iCmd = 0; iCmd < in->config.plplCtx->cmds.size(); iCmd++) - { - PLPLCmd cmd = plplCtx->cmds[iCmd]; + PLPLContext* plplCtx = in->config.plplCtx; + int paramOffset = 0; + for (int iCmd = 0; iCmd < in->config.plplCtx->cmds.size(); iCmd++) + { + PLPLCmd cmd = plplCtx->cmds[iCmd]; - switch(cmd) - { - case PLPLC_COLOR: - //COLOR F/B,R,G,B,A - if (plplCtx->params[paramOffset + 0].val_i == 'F') - { - plplCtx->color_front = PLGH_Color_RGBA(plplCtx->params[paramOffset + 1].val_i, - plplCtx->params[paramOffset + 2].val_i, - plplCtx->params[paramOffset + 3].val_i, - plplCtx->params[paramOffset + 4].val_i); - paramOffset += 5; - } - else if (plplCtx->params[paramOffset + 0].val_i == 'B') - { - plplCtx->color_back = PLGH_Color_RGBA(plplCtx->params[paramOffset + 1].val_i, - plplCtx->params[paramOffset + 2].val_i, - plplCtx->params[paramOffset + 3].val_i, - plplCtx->params[paramOffset + 4].val_i); - paramOffset += 5; - } - else - { - LOG_WARN << "plpl execute error" << LOG_ENDL; - return false; - } - break; + switch(cmd) + { + case PLPLC_COLOR: + //COLOR F/B,R,G,B,A + if (plplCtx->params[paramOffset + 0].val_i == 'F') + { + plplCtx->color_front = PLGH_Color_RGBA(plplCtx->params[paramOffset + 1].val_i, + plplCtx->params[paramOffset + 2].val_i, + plplCtx->params[paramOffset + 3].val_i, + plplCtx->params[paramOffset + 4].val_i); + paramOffset += 5; + } + else if (plplCtx->params[paramOffset + 0].val_i == 'B') + { + plplCtx->color_back = PLGH_Color_RGBA(plplCtx->params[paramOffset + 1].val_i, + plplCtx->params[paramOffset + 2].val_i, + plplCtx->params[paramOffset + 3].val_i, + plplCtx->params[paramOffset + 4].val_i); + paramOffset += 5; + } + else + { + LOG_WARN << "plpl execute error" << LOG_ENDL; + return false; + } + break; - case PLPLC_FILL: - plplCtx->fill = plplCtx->params[paramOffset + 0].val_i; - paramOffset += 1; - break; + case PLPLC_FILL: + plplCtx->fill = plplCtx->params[paramOffset + 0].val_i; + paramOffset += 1; + break; - case PLPLC_PEN: - plplCtx->pen = PLGH_Pen(plplCtx->params[paramOffset + 0].val_i, plplCtx->params[paramOffset + 1].val_i); - paramOffset += 2; - break; + case PLPLC_PEN: + plplCtx->pen = PLGH_Pen(plplCtx->params[paramOffset + 0].val_i, plplCtx->params[paramOffset + 1].val_i); + paramOffset += 2; + break; - case PLPLC_RECT: - //RECT LTX,LTY,RBX,RBY + case PLPLC_RECT: + //RECT LTX,LTY,RBX,RBY if (paintMb->type == MB_Frame::MBFT_YUV420) ret = plplDraw_Rect_YUV420(plplCtx, paintMb, paramOffset); else if (paintMb->type == MB_Frame::MBFT_NV12) ret = plplDraw_Rect_NV12(plplCtx, paintMb, paramOffset); else ret = false; - break; + break; - case PLPLC_TEXT: + case PLPLC_TEXT: //TEXT LTX,LTY,"STR" if (paintMb->type == MB_Frame::MBFT_YUV420) ret = plplDraw_Text_YUV420(plplCtx, paintMb, paramOffset); @@ -285,17 +300,17 @@ ret = plplDraw_Text_NV12(plplCtx, paintMb, paramOffset); else ret = false; - break; + break; - case PLPLC_WTEXT: - //TEXT LTX,LTY,"STR" - if (paintMb->type == MB_Frame::MBFT_NV12) - ret = plplDraw_WText_NV12(plplCtx, paintMb, paramOffset); - else - ret = false; - break; - } - } + case PLPLC_WTEXT: + //WTEXT LTX,LTY,"STR" + if (paintMb->type == MB_Frame::MBFT_NV12) + ret = plplDraw_WText_NV12(plplCtx, paintMb, paramOffset); + else + ret = false; + break; + } + } return ret; } @@ -337,8 +352,8 @@ { 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); + 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 -- Gitblit v1.8.0