| | |
| | | } |
| | | } |
| | | |
| | | void Wrapper::run_worker(ffwrapper::FormatIn *in, std::shared_ptr<ffwrapper::CodedData> data, int64_t &id){ |
| | | int Wrapper::run_worker(ffwrapper::FormatIn *in, std::shared_ptr<ffwrapper::CodedData> data, int64_t &id){ |
| | | if (gb_){ |
| | | AVPacket &pkt = data->getAVPacket(); |
| | | pkt.pts = pkt.dts = AV_NOPTS_VALUE; |
| | | } |
| | | int flag = 0; |
| | | if (stream_) stream_->SetPacket(data, id); |
| | | if (decoder_ && run_dec_) decoder_->SetFrame(data, id); |
| | | if (decoder_ && run_dec_) flag = decoder_->SetFrame(data, id); |
| | | if (rec_->Loaded()) rec_->SetPacket(data, id); |
| | | |
| | | return flag |
| | | } |
| | | |
| | | void Wrapper::deinit_worker(){ |
| | |
| | | id++; |
| | | continue; |
| | | } |
| | | |
| | | run_worker(in.get(), data, id); |
| | | // decode error |
| | | if (run_worker(in.get(), data, id) == -1){ |
| | | break; |
| | | } |
| | | usleep(wTime); |
| | | |
| | | id++; |
| | |
| | | if(in->decode(frm, &data->getAVPacket()) == 0){ |
| | | *w = frm->width; |
| | | *h = frm->height; |
| | | pic = (unsigned char*)malloc(frm->width * frm->height * 3); |
| | | bridge_->copyPicture(pic, frm); |
| | | pic = bridge_->convert2Data(frm); |
| | | break; |
| | | } |
| | | } |
| | |
| | | PicEncoder *e = (PicEncoder*)hdl; |
| | | auto ctx = e->enc->getCodecContext(); |
| | | |
| | | if (e->bridge == NULL){ |
| | | AVPixelFormat pix_fmt = AV_PIX_FMT_BGR24; |
| | | if (e->bridge == NULL){ |
| | | e->bridge = new cvbridge( |
| | | w, h, AV_PIX_FMT_BGR24, |
| | | e->w, e->h, ctx->pix_fmt, e->flag); |
| | | } |
| | | |
| | | AVFrame *frame = e->bridge->getAVFrame(in, w, h); |
| | | AVFrame *frame = cvbridge::fillFrame(in, w, h, pix_fmt); |
| | | AVPacket *pkt = av_packet_alloc(); |
| | | |
| | | auto flag = e->enc->encode(pkt, frame); |
| | |
| | | |
| | | auto b = c->b; |
| | | |
| | | AVFrame *tmp_frm = av_frame_alloc(); |
| | | tmp_frm->format = (AVPixelFormat)c->srcF; |
| | | tmp_frm->width = c->srcW; |
| | | tmp_frm->height = c->srcH; |
| | | AVFrame *tmp_frm = cvbridge::fillFrame(src, c->srcW, c->srcH, c->srcF); |
| | | if (!tmp_frm) return NULL; |
| | | |
| | | //create a AVPicture frame from the opencv Mat input image |
| | | int ret = avpicture_fill((AVPicture *)tmp_frm, |
| | | (uint8_t *)src, |
| | | (AVPixelFormat)tmp_frm->format, |
| | | tmp_frm->width, |
| | | tmp_frm->height); |
| | | |
| | | unsigned char *picData = NULL; |
| | | if (ret > 0){ |
| | | picData = (unsigned char*)malloc(c->dstW * c->dstH * 3); |
| | | b->copyPicture(picData, tmp_frm); |
| | | } |
| | | unsigned char *picData = b->convert2Data(tmp_frm); |
| | | |
| | | av_frame_free(&tmp_frm); |
| | | |