From 8ee0c6b0d9b583ecc68387eeb8fcd458484cc0ac Mon Sep 17 00:00:00 2001
From: dupengyue <dupengyue@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期五, 21 七月 2017 15:40:41 +0800
Subject: [PATCH] 调试接口添加
---
RtspFace/PL_Scale.cpp | 148 +++++++++++++++++++++++++------------------------
1 files changed, 75 insertions(+), 73 deletions(-)
diff --git a/RtspFace/PL_Scale.cpp b/RtspFace/PL_Scale.cpp
index 69b0866..8bc0574 100644
--- a/RtspFace/PL_Scale.cpp
+++ b/RtspFace/PL_Scale.cpp
@@ -2,7 +2,9 @@
#include "MaterialBuffer.h"
#include "logger.h"
#include <libyuv.h>
-#include <android/native_window.h>
+
+#define SUBSAMPLE(v, a) ((((v) + (a) - 1)) / (a))
+
struct PL_Scale_Internal
{
uint8_t* buffer;
@@ -11,12 +13,12 @@
bool payError;
PipeMaterial::PipeMaterialBufferType lastPmType;
- MB_Frame lastFrame;
+ MB_Frame tempFrame;
PL_Scale_Config config;
PL_Scale_Internal() :
buffer(nullptr), buffSize(0), buffSizeMax(0), payError(true),
- lastPmType(PipeMaterial::PMT_NONE), lastFrame(), config()
+ lastPmType(PipeMaterial::PMT_NONE), tempFrame(), config()
{
}
@@ -33,8 +35,8 @@
lastPmType = PipeMaterial::PMT_NONE;
- MB_Frame _lastFrame;
- lastFrame = _lastFrame;
+ MB_Frame _tempFrame;
+ tempFrame = _tempFrame;
PL_Scale_Config _config;
config = _config;
@@ -92,10 +94,9 @@
bool image_scale(PL_Scale_Internal* in,
uint8_t* srcBuffer, MB_Frame::MBFType srcType, uint16_t srcWidth, uint16_t srcHeight)
{
-#define SUBSAMPLE(v, a) ((((v) + (a) - 1)) / (a))
- const int dst_width = in->config.toWidth;
- const int dst_height = in->config.toHeight;
+ const int dst_width = in->config.toWidth;
+ const int dst_height = in->config.toHeight;
size_t dstSizeMax = 0;
if (srcType == MB_Frame::MBFT_YUV420||srcType == MB_Frame::MBFT_NV12)
@@ -139,42 +140,43 @@
in->buffSize = dstSizeMax;
}
- else if (srcType == MB_Frame::MBFT_NV12)
- {
- const uint8_t* src_y = (const uint8_t*)(srcBuffer);
- const uint8_t* src_uv = (const uint8_t*)(src_y + (srcHeight * srcWidth));
- if (srcWidth != dst_width || srcHeight != dst_height)
- {
- // RK3288, 1920->640: 2.8~12ms, avg=4ms
+ else if (srcType == MB_Frame::MBFT_NV12)
+ {
+ const uint8_t* src_y = (const uint8_t*)(srcBuffer);
+ const uint8_t* src_uv = (const uint8_t*)(src_y + (srcHeight * srcWidth));
+ if (srcWidth != dst_width || srcHeight != dst_height)
+ {
+ // RK3288, 1920->640: 2.8~12ms, avg=4ms
- uint8_t* dst_y = (uint8_t*)(in->buffer);
- uint8_t* dst_uv = (uint8_t*)(dst_y + (dst_height * dst_width));
+ uint8_t* dst_y = (uint8_t*)(in->buffer);
+ uint8_t* dst_uv = (uint8_t*)(dst_y + (dst_height * dst_width));
- libyuv::ScalePlane(src_y, srcWidth,
- srcWidth, srcHeight,
- dst_y, dst_width,
- dst_width, dst_height,
- libyuv::kFilterNone);
+ libyuv::ScalePlane(src_y, srcWidth,
+ srcWidth, srcHeight,
+ dst_y, dst_width,
+ dst_width, dst_height,
+ libyuv::kFilterNone);
- libyuv::ScalePlane_16((uint16*)src_uv, SUBSAMPLE(srcWidth, 2),
- SUBSAMPLE(srcWidth, 2), SUBSAMPLE(srcHeight, 2),
- (uint16*)dst_uv, SUBSAMPLE(dst_width, 2),
- SUBSAMPLE(dst_width, 2), SUBSAMPLE(dst_height, 2),
- libyuv::kFilterNone);
- in->buffSize = dstSizeMax;
- }
- else if (srcType == MB_Frame::MBFT_BGRA)
- {
- //#todo
- LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_NV12" << std::endl;
- return false;
- } else
- {
- LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_NV12" << std::endl;
- return false;
- }
- return true;
- }
+ libyuv::ScalePlane_16((uint16*)src_uv, SUBSAMPLE(srcWidth, 2),
+ SUBSAMPLE(srcWidth, 2), SUBSAMPLE(srcHeight, 2),
+ (uint16*)dst_uv, SUBSAMPLE(dst_width, 2),
+ SUBSAMPLE(dst_width, 2), SUBSAMPLE(dst_height, 2),
+ libyuv::kFilterNone);
+ in->buffSize = dstSizeMax;
+ }
+ else if (srcType == MB_Frame::MBFT_BGRA)
+ {
+ //#todo
+ LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_NV12" << std::endl;
+ return false;
+ }
+ else
+ {
+ LOG_ERROR << "srcType only support MBFT_YUV420 and MBFT_NV12" << std::endl;
+ return false;
+ }
+ return true;
+ }
}
bool PL_Scale::pay(const PipeMaterial& pm)
@@ -212,7 +214,7 @@
{
case MB_Frame::MBFT_YUV420:
case MB_Frame::MBFT_BGRA:
- in->lastFrame = *frame;
+ in->tempFrame = *frame;
ret = image_scale(in, (uint8_t*)frame->buffer, frame->type,
frame->width, frame->height);
break;
@@ -222,32 +224,32 @@
}
}
break;
- case PipeMaterial::PMT_PM_LIST:
- {
- // break pm list into single pm(s)
+ case PipeMaterial::PMT_PM_LIST:
+ {
+ // break pm list into single pm(s)
- MB_Frame* ppm = (MB_Frame*)pm.buffer;
- for (size_t i = 0; i < pm.buffSize; i++, ppm++)
- {
- if (ppm->type== PipeMaterial::PMT_FRAME)
- {
- MB_Frame* frame = (MB_Frame*)ppm->buffer;
- switch(frame->type)
- {
- case MB_Frame::MBFT_YUV420:
- case MB_Frame::MBFT_BGRA:
- case MB_Frame::MBFT_NV12:
- in->lastFrame = *frame;
- ret = image_scale(in, (uint8_t*)frame->buffer,frame->type,
- frame->width, frame->height);
- break;
- default:
- LOG_ERROR << "Only support MBFT_YUV420 / MBFT_BGRA" << std::endl;
- return false;
- }
- }
- }
- }break;
+ MB_Frame* ppm = (MB_Frame*)pm.buffer;
+ for (size_t i = 0; i < pm.buffSize; i++, ppm++)
+ {
+ if (ppm->type== PipeMaterial::PMT_FRAME)
+ {
+ MB_Frame* frame = (MB_Frame*)ppm->buffer;
+ switch(frame->type)
+ {
+ case MB_Frame::MBFT_YUV420:
+ case MB_Frame::MBFT_BGRA:
+ case MB_Frame::MBFT_NV12:
+ in->tempFrame = *frame;
+ ret = image_scale(in, (uint8_t*)frame->buffer,frame->type,
+ frame->width, frame->height);
+ break;
+ default:
+ LOG_ERROR << "Only support MBFT_YUV420 / MBFT_BGRA" << std::endl;
+ return false;
+ }
+ }
+ }
+ }break;
default:
LOG_ERROR << "Only support PMT_BYTES / PMT_FRAME" << std::endl;
return false;
@@ -275,16 +277,16 @@
}
break;
case PipeMaterial::PMT_FRAME:
- case PipeMaterial::PMT_PM_LIST:
+ case PipeMaterial::PMT_PM_LIST:
{
newPm.type = PipeMaterial::PMT_FRAME;
- newPm.buffer = &(in->lastFrame);
+ newPm.buffer = &(in->tempFrame);
newPm.buffSize = 0;
- in->lastFrame.buffer = in->buffer;
- in->lastFrame.buffSize = in->buffSize;
- in->lastFrame.width = in->config.toWidth;
- in->lastFrame.height = in->config.toHeight;
+ in->tempFrame.buffer = in->buffer;
+ in->tempFrame.buffSize = in->buffSize;
+ in->tempFrame.width = in->config.toWidth;
+ in->tempFrame.height = in->config.toHeight;
}
break;
default:
--
Gitblit v1.8.0