| | |
| | | pkt.id = id++; |
| | | } |
| | | pkt.data = data; |
| | | if(data != nullptr) { |
| | | cacheAVPacket(data->getAVPacket()); |
| | | } |
| | | |
| | | run_worker(in.get(), pkt); |
| | | if(!data){ |
| | |
| | | info.file_frame_index = index; |
| | | info.file_path = path; |
| | | list_rec_.emplace_back(info); |
| | | logIt("list rec files count : %d", list_rec_.size()); |
| | | } |
| | | } |
| | | |
| | |
| | | index = info.file_frame_index; |
| | | path = info.file_path; |
| | | list_rec_.pop_front(); |
| | | logIt("go get info index: %d, file: %s\n", index, path.c_str()); |
| | | } |
| | | |
| | | ////////decoder |
| | |
| | | auto p = list_pic_.front(); |
| | | *data = p.data; *w = p.w; *h = p.h; |
| | | list_pic_.pop_front(); |
| | | } |
| | | |
| | | void Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){ |
| | | std::lock_guard<std::mutex> l(mutex_avpkt_); |
| | | if(list_avpkt_.empty()){ |
| | | return; |
| | | } |
| | | auto pkt = list_avpkt_.front(); |
| | | *key = pkt.flags & AV_PKT_FLAG_KEY; |
| | | *size = pkt.size; |
| | | *pktData = (unsigned char *)malloc(*size); |
| | | memcpy(*pktData, pkt.data, pkt.size); |
| | | |
| | | list_avpkt_.pop_front(); |
| | | } |
| | | void Wrapper::cacheAVPacket(const AVPacket &pkt){ |
| | | std::lock_guard<std::mutex> l(mutex_pic_); |
| | | while(list_avpkt_.size() > 10){ |
| | | // printf("cacheAVPacket drop packets!!!!!!!!!!\n"); |
| | | for(int i = 0; i < 5; i++){ |
| | | list_avpkt_.pop_front(); |
| | | } |
| | | } |
| | | list_avpkt_.emplace_back(pkt); |
| | | } |
| | | |
| | | void Wrapper::run_worker(ffwrapper::FormatIn *in, avpacket &pkt){ |
| | |
| | | } |
| | | *size = pkt.size + extradata_size; |
| | | *out = (unsigned char *)malloc(*size); |
| | | |
| | | |
| | | memcpy(*out, extra, extradata_size); |
| | | memcpy(*out + extradata_size, pkt.data, pkt.size); |
| | | |