From eb68a1e3ad5fb24b4c674b8f2fd529b8302c7d97 Mon Sep 17 00:00:00 2001 From: pans <pans@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 30 十二月 2016 13:48:14 +0800 Subject: [PATCH] --- RtspFace/PL_AVFrameBGRA.cpp | 64 +++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 18 deletions(-) diff --git a/RtspFace/PL_AVFrameBGRA.cpp b/RtspFace/PL_AVFrameBGRA.cpp index e59a8a7..4b0ba9e 100644 --- a/RtspFace/PL_AVFrameBGRA.cpp +++ b/RtspFace/PL_AVFrameBGRA.cpp @@ -1,4 +1,6 @@ #include "PL_AVFrameBGRA.h" +#include "MaterialBuffer.h" +#include "logger.h" extern "C" { @@ -11,16 +13,16 @@ struct PL_AVFrameBGRA_Internal { - uint8_t buffer[1920*1080*4]; + uint8_t buffer[1920*1080*4];//#todo size_t buffSize; size_t buffSizeMax; - - AVFormatContext* pAVFormatContext;//#todo delete + MB_Frame lastFrame; + bool payError; PL_AVFrameBGRA_Internal() : - buffSize(0), buffSizeMax(sizeof(buffer)), - pAVFormatContext(nullptr), payError(true) + buffSize(0), buffSizeMax(sizeof(buffer)), lastFrame(), + payError(true) { } @@ -32,6 +34,9 @@ { buffSize = 0; payError = true; + + MB_Frame _lastFrame; + lastFrame = _lastFrame; } }; @@ -55,8 +60,6 @@ PL_AVFrameBGRA_Internal* in = (PL_AVFrameBGRA_Internal*)internal; in->reset(); - in->pAVFormatContext = avformat_alloc_context(); - return true; } @@ -72,12 +75,28 @@ { PL_AVFrameBGRA_Internal* in = (PL_AVFrameBGRA_Internal*)internal; - AVFrame* pAVFrame = (AVFrame*)pm.buffer; + if (pm.type != PipeMaterial::PMT_FRAME) + { + LOG(ERROR) << "PL_AVFrameBGRA::pay only support PMT_FRAME"; + return false; + } + + if (pm.buffer == nullptr) + return false; + + MB_Frame* frame = (MB_Frame*)pm.buffer; + if (frame->type != MB_Frame::MBFT_PTR_AVFRAME) + { + LOG(ERROR) << "PL_AVFrameBGRA::pay only support MBFT_PTR_AVFRAME"; + return false; + } + + AVFrame* pAVFrame = (AVFrame*)frame->buffer; if (pAVFrame == nullptr) return false; - int height = pAVFrame->height; - int width = pAVFrame->width; + const int height = pAVFrame->height; + const int width = pAVFrame->width; //int I420ToBGRA(const uint8* src_y, int src_stride_y, // const uint8* src_u, int src_stride_u, @@ -93,13 +112,21 @@ in->buffSize = in->buffSizeMax; //in->buffer readly + + in->lastFrame.type = MB_Frame::MBFT_BGRA; + in->lastFrame.buffer = in->buffer; + in->lastFrame.buffSize = in->buffSize; + in->lastFrame.width = width; + in->lastFrame.height = height; + in->lastFrame.pts = frame->pts; - static size_t f=0; - char fname[50]; - sprintf(fname, "%u.bgra", ++f); - FILE * pFile = fopen (fname,"wb"); - fwrite (in->buffer , sizeof(char), in->buffSize, pFile); - fclose(pFile); + //#test + //static size_t f=0; + //char fname[50]; + //sprintf(fname, "%u.bgra", ++f); + //FILE * pFile = fopen (fname,"wb"); + //fwrite (in->buffer , sizeof(char), in->buffSize, pFile); + //fclose(pFile); return true; } @@ -108,8 +135,9 @@ { PL_AVFrameBGRA_Internal* in = (PL_AVFrameBGRA_Internal*)internal; - pm.buffer = in->buffer; - pm.buffSize = in->buffSize; + pm.type = PipeMaterial::PMT_FRAME; + pm.buffer = &(in->lastFrame); + pm.buffSize = 0; pm.former = this; return true; } -- Gitblit v1.8.0