From 5e9814a090f20c2b9c39d6efdc9a732b6097ee7d Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期一, 24 七月 2017 20:12:53 +0800
Subject: [PATCH] aaa

---
 RtspFace/PL_AndroidSurfaceViewRender.cpp |   94 ++++++++++++++++++++++++++++------------------
 1 files changed, 57 insertions(+), 37 deletions(-)

diff --git a/RtspFace/PL_AndroidSurfaceViewRender.cpp b/RtspFace/PL_AndroidSurfaceViewRender.cpp
index 9e7596e..16a453a 100644
--- a/RtspFace/PL_AndroidSurfaceViewRender.cpp
+++ b/RtspFace/PL_AndroidSurfaceViewRender.cpp
@@ -130,6 +130,9 @@
 
 bool convert_yuv420_origin_to_render(PL_ASVR_Internal* in)
 {
+	if (in->config.directlyDisplay)
+		return true;
+
     int src_width = in->lastMbfBuffOrigin.width;
     int src_height = in->lastMbfBuffOrigin.height;
     const uint8_t* src_y = (const uint8_t*)(in->lastMbfBuffOrigin.buffer);
@@ -249,35 +252,11 @@
 	return true;
 }
 
-bool convert_rgb565_origin_to_render(PL_ASVR_Internal *in) {
-
-    ANativeWindow* window = (ANativeWindow*)(in->config.windowSurface);
-    int widow_width = ANativeWindow_getWidth(window);
-    int window_height = ANativeWindow_getHeight(window);
-    int src_width = in->lastMbfBuffOrigin.width;
-    int src_height = in->lastMbfBuffOrigin.height;
-    if (src_width != widow_width || src_height != window_height)
-    {
-        uint8_t* src = (uint8_t*)in->lastMbfBuffOrigin.buffer;
-        uint8_t* dst = (uint8_t*)in->buffer1;
-        libyuv::ScalePlane_16((uint16*)src, src_width,
-                              src_width, src_height,
-                              (uint16*)dst, widow_width,
-                              widow_width, window_height,
-                              libyuv::kFilterNone);
-        in->buff1Size = widow_width * window_height * 2;
-        memcpy(in->buffer, in->buffer1, in->buff1Size);
-        in->buffSize = in->buff1Size;
-    }
-    else
-    {
-        memcpy(in->buffer, in->lastMbfBuffOrigin.buffer, in->lastMbfBuffOrigin.buffSize);
-        in->buffSize = in->lastMbfBuffOrigin.buffSize;
-    }
-	return true;
-}
 bool convert_nv12_origin_to_render(PL_ASVR_Internal* in)
 {
+	if (in->config.directlyDisplay)
+		return true;
+
     if (false)
     {//#test test nv12 on yuv420 frame
         const int src_width = in->lastMbfBuffOrigin.width;
@@ -409,6 +388,42 @@
     return true;
 }
 
+bool convert_rgb565_origin_to_render(PL_ASVR_Internal *in)
+{
+	if (in->config.directlyDisplay)
+		return true;
+
+	ANativeWindow* window = (ANativeWindow*)(in->config.windowSurface);
+	int src_width = in->lastMbfBuffOrigin.width;
+	int src_height = in->lastMbfBuffOrigin.height;
+
+	const int dst_width = (in->config.scaleToWidth <= 0 ? in->nativeWindowStride : in->config.scaleToWidth);
+	const int dst_height = (in->config.scaleToHeight <= 0 ? in->nativeWindowHeight : in->config.scaleToHeight);
+
+	if (src_width != dst_width || src_height != dst_height)
+	{
+		uint8_t* src = (uint8_t*)in->lastMbfBuffOrigin.buffer;
+		uint8_t* dst = (uint8_t*)in->buffer1;
+		libyuv::ScalePlane_16((uint16*)src, src_width,
+							  src_width, src_height,
+							  (uint16*)dst, dst_width,
+							  dst_width, dst_height,
+							  libyuv::kFilterNone);
+		in->buff1Size = dst_width * dst_height * 2;
+		memcpy(in->buffer, in->buffer1, in->buff1Size);
+		in->buffSize = in->buff1Size;
+	}
+	else
+	{
+		if (!in->config.directlyDisplay)
+		{
+			memcpy(in->buffer, in->lastMbfBuffOrigin.buffer, in->lastMbfBuffOrigin.buffSize);
+			in->buffSize = in->lastMbfBuffOrigin.buffSize;
+		}
+	}
+	return true;
+}
+
 bool render_surface(PL_ASVR_Internal* in)
 {
 	ANativeWindow* window = (ANativeWindow*)(in->config.windowSurface);
@@ -422,18 +437,23 @@
 			bitsSize = buffer.stride * buffer.height * 2;
 		else
 			bitsSize = buffer.stride * buffer.height;
-		
-		if (bitsSize > in->buffSize)
+
+		if (in->config.directlyDisplay)
+			memcpy(buffer.bits, in->lastMbfBuffOrigin.buffer,  bitsSize);
+		else
 		{
-			LOG_WARN << "surface buffer truncated" << LOG_ENDL;
-			bitsSize = in->buffSize;
-		}
-		else if (bitsSize < in->buffSize)
-		{
-			LOG_WARN << "in buffer truncated" << LOG_ENDL;
+			if (bitsSize > in->buffSize)
+			{
+				LOG_WARN << "surface buffer truncated" << LOG_ENDL;
+				bitsSize = in->buffSize;
+			}
+			else if (bitsSize < in->buffSize)
+			{
+				LOG_WARN << "in buffer truncated" << LOG_ENDL;
+			}
+			memcpy(buffer.bits, in->buffer, bitsSize);
 		}
 
-		memcpy(buffer.bits, in->buffer,  bitsSize);
 		ANativeWindow_unlockAndPost(window);
 	}
     else
@@ -512,7 +532,7 @@
     if (in->payError)
         pm.breake(PipeMaterial::PMT_FRAME_LIST, MB_Frame::MBFT_YUV420, PL_AndroidSurfaceViewRender::pay_breaker_MBFT_YUV, in);
     if (in->payError)
-	pm.breake(PipeMaterial::PMT_FRAME_LIST, MB_Frame::MBFT_NV12, PL_AndroidSurfaceViewRender::pay_breaker_MBFT_YUV, in);
+		pm.breake(PipeMaterial::PMT_FRAME_LIST, MB_Frame::MBFT_NV12, PL_AndroidSurfaceViewRender::pay_breaker_MBFT_YUV, in);
 	if (in->payError)
 		pm.breake(PipeMaterial::PMT_FRAME, MB_Frame::MBFT_YUV420, PL_AndroidSurfaceViewRender::pay_breaker_MBFT_YUV, in);
 	if (in->payError)

--
Gitblit v1.8.0