video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-08-01 f6172eaa5f78d2af04e8e99fdf26b2b0ad4994d6
csrc/wrapper.cpp
@@ -56,6 +56,12 @@
            delete bridge_; bridge_ = NULL;
        }
    
        map_rec_.clear();
        list_rec_pkt_.clear();
        for(auto &i : list_pic_){
            free(i.data);
        }
    }
    void Wrapper::ScalePicture(const int w, const int h, const int flags){
@@ -199,7 +205,7 @@
                        avpacket p = {k.data, k.id};
                        i.second.rec->CachePacket(p);
                    }
                    logIt("start rec %d frames", list_rec_pkt_.size());
                    logIt("START REC %d FRAMES", list_rec_pkt_.size());
                }
            }else if (i.second.rec){
                i.second.rec->CachePacket(pkt);
@@ -240,13 +246,13 @@
    }
    //////////////recorder
    std::shared_ptr<Recorder> Wrapper::init_recorder(FormatIn *in, std::string id,std::string dir, const int mind, const int maxd){
    std::shared_ptr<Recorder> Wrapper::init_recorder(FormatIn *in, std::string id, std::string dir, const int mind, const int maxd){
        if(!in){
            logIt("Init wrapper first");
            return nullptr;
        }
        auto rec = std::make_shared<Recorder>(in, id);
        auto rec = std::make_shared<Recorder>(in, id.c_str());
        rec->SetCallback([&](std::string &id, int &index, std::string &path){
            cache_rec_info(id, index, path);
@@ -267,6 +273,7 @@
    void Wrapper::BuildRecorder(const char* id, const char *output, const int mindur, const int maxdur){
        std::string rid(id);
        std::string dir(output);
        auto fn = [=](FormatIn *in){
            return init_recorder(in, rid, dir, mindur, maxdur);
        };
@@ -286,7 +293,6 @@
                iter->second.rec->FireRecorder(id);
            }
        }
        logIt("FIRE REC %s, FRAME ID: %d", sid, id);
    }
    void Wrapper::cache_rec_info(std::string &id, int &index, std::string &path){
@@ -300,10 +306,11 @@
        struct record_file_info info;
        info.file_frame_index = index;
        info.file_path = path;
        info.rec_id = id;
        list_rec_.emplace_back(info);
        list_rec_map_[path] = id;
        logIt("list rec files count : %d", list_rec_.size());
        map_rec_.erase(id);
        logIt("LIST REC FILES COUNT : %d", list_rec_.size());
    }
    void Wrapper::GetInfoRecorder(int &index, std::string &path){
@@ -317,6 +324,9 @@
        index = info.file_frame_index;
        path = info.file_path;
        list_rec_.pop_front();
        if (map_rec_.find(info.rec_id) != map_rec_.end())
            map_rec_.erase(info.rec_id);
        // logIt("go get info index: %d, file: %s\n", index, path.c_str());
    }
@@ -327,6 +337,8 @@
            ret = iter->second;
            list_rec_map_.erase(iter);
        }
        return ret;
    }
    ////////decoder