From ecd2e0277d2eea8ddfb79bee0a84273a5871f14b Mon Sep 17 00:00:00 2001
From: dupengyue <dupengyue@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 20 七月 2017 14:46:10 +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