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_H264Decoder.cpp | 67 ++++++++++----------------------- 1 files changed, 21 insertions(+), 46 deletions(-) diff --git a/RtspFace/PL_H264Decoder.cpp b/RtspFace/PL_H264Decoder.cpp index b27918c..9f51b43 100644 --- a/RtspFace/PL_H264Decoder.cpp +++ b/RtspFace/PL_H264Decoder.cpp @@ -12,18 +12,19 @@ struct H264Decoder_Internal { - uint8_t buffer[1920*1080*3]; - size_t buffSize; - size_t buffSizeMax; + //uint8_t buffer[1920*1080*3]; + //size_t buffSize; + //size_t buffSizeMax; bool fmtp_set_to_context; bool payError; AVCodecContext* pAVCodecContext; - AVFrame* pAVFrame; + AVFrame* pAVFrame;//#todo delete H264Decoder_Internal() : - buffSize(0), buffSizeMax(sizeof(buffer)), fmtp_set_to_context(false), - payError(false), + //buffSize(0), buffSizeMax(sizeof(buffer)), + fmtp_set_to_context(false), + payError(true), pAVCodecContext(nullptr), pAVFrame(nullptr) { } @@ -34,9 +35,9 @@ void reset() { - buffSize = 0; + //buffSize = 0; fmtp_set_to_context = false; - payError = false; + payError = true; } }; @@ -171,47 +172,20 @@ if(frameFinished) { // decode ok - - 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); + return true; } else + { printf("incomplete frame\n"); + return false; + } } bool PL_H264Decoder::pay(const PipeMaterial& pm) { H264Decoder_Internal* in = (H264Decoder_Internal*)internal; + + in->payError = true; if (!in->fmtp_set_to_context) { @@ -237,8 +211,9 @@ in->fmtp_set_to_context = true; } - in->payError = decodeH264(in, pm.buffer, pm.buffSize); - return in->payError; + bool ret = decodeH264(in, pm.buffer, pm.buffSize); + in->payError = !ret; + return ret; } bool PL_H264Decoder::gain(PipeMaterial& pm) @@ -247,9 +222,9 @@ if (!in->payError) { - pm.buffer = in->buffer; - pm.buffSize = in->buffSize; + pm.buffer = (uint8_t*)in->pAVFrame;//in->buffer; + pm.buffSize = sizeof(uint8_t*);//in->buffSize; } pm.former = this; - return in->payError; + return !in->payError; } -- Gitblit v1.8.0