From f04b2e05a32f810ebe66b7b3a15f37b532ce2dc0 Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期四, 22 十二月 2016 17:27:31 +0800 Subject: [PATCH] add pl emements --- RtspFace/PL_AVFrameYUV420.cpp | 96 ++++++++++++++++++++++++++--------------------- 1 files changed, 53 insertions(+), 43 deletions(-) diff --git a/RtspFace/PL_AVFrameYUV420.cpp b/RtspFace/PL_AVFrameYUV420.cpp index 5927ce5..1384218 100644 --- a/RtspFace/PL_AVFrameYUV420.cpp +++ b/RtspFace/PL_AVFrameYUV420.cpp @@ -12,11 +12,9 @@ uint8_t buffer[1920*1080*3]; size_t buffSize; size_t buffSizeMax; - bool payError; AVFrameYUV420_Internal() : - buffSize(0), buffSizeMax(sizeof(buffer)), - payError(false) + buffSize(0), buffSizeMax(sizeof(buffer)) { } @@ -27,7 +25,6 @@ void reset() { buffSize = 0; - payError = false; } }; @@ -64,52 +61,65 @@ { AVFrameYUV420_Internal* in = (AVFrameYUV420_Internal*)internal; - int picSize = in->pAVCodecContext->height * in->pAVCodecContext->width; - in->buffSize = picSize * 1.5; - - int height = in->pAVFrame->height; - int width = in->pAVFrame->width; - - // write yuv420 - int a=0; - for (int i = 0; i < height; i++) - { - memcpy(in->buffer + a, in->pAVFrame->data[0] + i * in->pAVFrame->linesize[0], width); - a += width; - } - for (int i=0; i<height/2; i++) - { - memcpy(in->buffer + a, in->pAVFrame->data[1] + i * in->pAVFrame->linesize[1], width / 2); - a += width / 2; - } - for (int i=0; i<height/2; i++) - { - memcpy(in->buffer + a, in->pAVFrame->data[2] + i * in->pAVFrame->linesize[2], width / 2); - a += width / 2; - } - - //in->buffer readly - - //static size_t f=0; - //char fname[50]; - //sprintf(fname, "%u.yuv420", ++f); - //FILE * pFile = fopen (fname,"wb"); - //fwrite (in->buffer , sizeof(char), in->buffSize, pFile); - //fclose(pFile); + AVFrame* pAVFrame = (AVFrame*)pm.buffer; + if (pAVFrame == nullptr) + return false; + int picSize = pAVFrame->height * pAVFrame->width; + in->buffSize = picSize * 1.5; + + int height = pAVFrame->height; + int width = pAVFrame->width; + + uint8_t* pBuff = in->buffer; - return in->payError; + memcpy(pBuff, pAVFrame->data[0], height * width); + pBuff += height * width; + + memcpy(pBuff, pAVFrame->data[1], height * width / 4); + pBuff += height * width / 4; + + memcpy(pBuff, pAVFrame->data[2], height * width / 4); + pBuff += height * width / 4; + + in->buffSize = pBuff - in->buffer; + + // write yuv420 + //int a=0; + //for (int i = 0; i < height; i++) + //{ + // memcpy(in->buffer + a, pAVFrame->data[0] + i * pAVFrame->linesize[0], width); + // a += width; + //} + //for (int i=0; i<height/2; i++) + //{ + // memcpy(in->buffer + a, pAVFrame->data[1] + i * pAVFrame->linesize[1], width / 2); + // a += width / 2;//#todo 4 + //} + //for (int i=0; i<height/2; i++) + //{ + // memcpy(in->buffer + a, pAVFrame->data[2] + i * pAVFrame->linesize[2], width / 2); + // a += width / 2; + //} + + //in->buffer readly + + //static size_t f=0; + //char fname[50]; + //sprintf(fname, "%u.yuv420", ++f); + //FILE * pFile = fopen (fname,"wb"); + //fwrite (in->buffer , sizeof(char), in->buffSize, pFile); + //fclose(pFile); + + return true; } bool PL_AVFrameYUV420::gain(PipeMaterial& pm) { AVFrameYUV420_Internal* in = (AVFrameYUV420_Internal*)internal; - if (!in->payError) - { - pm.buffer = in->buffer; - pm.buffSize = in->buffSize; - } + pm.buffer = in->buffer; + pm.buffSize = in->buffSize; pm.former = this; - return in->payError; + return true; } -- Gitblit v1.8.0