From 900cad1c378136885f131922c763095e0e12dcdc Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期二, 25 七月 2017 14:20:30 +0800
Subject: [PATCH]
---
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