From a2d19baaa3996bc63edc042230074fb84a2433a1 Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期二, 03 十二月 2019 19:57:03 +0800 Subject: [PATCH] 修改bug --- csrc/wrapper.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 44 insertions(+), 10 deletions(-) diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp index af25ea4..cd82a90 100644 --- a/csrc/wrapper.cpp +++ b/csrc/wrapper.cpp @@ -46,6 +46,8 @@ ,gb_(0) ,cpu_(0) ,run_dec_(false) + ,run_stream_(true) + ,run_rec_(false) ,thread_(nullptr) ,stop_stream_(false) ,stream_(nullptr) @@ -63,6 +65,8 @@ ,gb_(0) ,cpu_(0) ,run_dec_(false) + ,run_stream_(true) + ,run_rec_(false) ,thread_(nullptr) ,stop_stream_(false) ,stream_(nullptr) @@ -150,7 +154,7 @@ stream_ = new stream(in, 3 * in->getFPS()); // stream_->AudioSwitch(audio_); - + decoder_ = new decoder(in); rec_->Load(in); @@ -166,9 +170,9 @@ p.pts = p.dts = AV_NOPTS_VALUE; } int flag = 0; - if (stream_) stream_->SetPacket(pkt); - if (decoder_ && run_dec_) flag = decoder_->SetFrame(pkt); - if (rec_->Loaded()) rec_->SetPacket(pkt); + if (run_stream_ && stream_) stream_->SetPacket(pkt); + if (run_dec_ && decoder_) flag = decoder_->SetFrame(pkt); + if (run_rec_ && rec_->Loaded()) rec_->SetPacket(pkt); return flag; } @@ -202,7 +206,7 @@ int64_t v_id = id; int64_t a_id = id; - bool exist = access(input_url_.c_str(), 0) == 0 ? true : false; + bool exist = access(input_url_.c_str(), 0) == 0; while(!stop_stream_.load()){ auto data(std::make_shared<CodedData>()); @@ -249,6 +253,10 @@ rec_->SetRecMinCacheTime(mind); } + void Wrapper::OpenRecorder(){ + run_rec_ = true; + } + void Wrapper::BuildRecorder(const char* id, const char *output, const int64_t &fid, const int mindur, const int maxdur, const bool audio){ bool a = audio; if (gb_) a = false; @@ -261,7 +269,6 @@ [=]{rec_->NewRec(rid.c_str(), dir.c_str(), fid, mindur, maxdur, a);}; } } - int Wrapper::FireRecorder(const char* sid,const int64_t &id){ if (rec_->Loaded()){ rec_->FireRecSignal(sid, id); @@ -274,7 +281,7 @@ } } ////////decoder - void Wrapper::BuildDecoder(){ + void Wrapper::OpenDecoder(){ run_dec_ = true; } @@ -284,6 +291,10 @@ } } + void Wrapper::CloseStream(){ + run_stream_ = false; + } + void Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){ if (stream_){ stream_->GetPacket(pktData, size, key); @@ -307,12 +318,13 @@ int fps; int br; int gi; + int pix_fmt; int flag; cvbridge *bridge; } PicEncoder; void *CreateEncoder(const int w, const int h, const int fps, const int br, - const int scale_flag, const int gi){ + const int pix_fmt, const int scale_flag, const int gi){ PicEncoder *e = (PicEncoder*)malloc(sizeof(PicEncoder)); e->enc = NULL; @@ -321,6 +333,7 @@ e->fps = fps; e->br = br; e->gi = gi; + e->pix_fmt = pix_fmt; e->flag = scale_flag; e->bridge = NULL; @@ -356,11 +369,11 @@ if (e->bridge == NULL){ e->bridge = new cvbridge( - w, h, AV_PIX_FMT_BGR24, + w, h, e->pix_fmt, e->w, e->h, ctx->pix_fmt, e->flag); } - AVFrame *bgr_frame = cvbridge::fillFrame(in, w, h, AV_PIX_FMT_BGR24); + AVFrame *bgr_frame = cvbridge::fillFrame(in, w, h, e->pix_fmt); AVFrame *frame = e->bridge->convert2Frame(bgr_frame); av_frame_free(&bgr_frame); @@ -390,5 +403,26 @@ return flag; } + + int GetGb28181Pic(const char *rtspUrl, char *retData, int *retDataLen){ + int ret = 0; + std::string fn = rtspUrl; + + auto handle_gb28181 = new GB28181API; + if(handle_gb28181->addCamera(fn) == -1){ + delete(handle_gb28181); + logIt("do addCamera Error\n"); + return -1; + } + + int retLen = handle_gb28181->capturePic(handle_gb28181, retData, retDataLen); + if(retLen == 0){ + logIt("do capturePic failed:%d"); + ret = -1; + } + + handle_gb28181->deleteCamera(); + return ret; + } } -- Gitblit v1.8.0