video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-07-30 8fb24547e4d068cdcd491e59ddc451b3a252ea4b
csrc/buz/recorder.cpp
@@ -17,15 +17,15 @@
namespace cffmpeg_wrap{
    namespace buz{
        Recorder::Recorder(FormatIn *in)
        Recorder::Recorder(FormatIn *in, const std::string &id)
        :in_(in)
        ,out_(NULL)
        ,maxduration(30 * 25)
        ,minduration(10 * 25)
        ,end_frame(minduration)
        ,cur_frame(-1)
        ,thread_(nullptr)
        ,stop_recorder_(false)
        ,id_(id)
        ,id_frame_(0)
        ,file_frame_index_(-1)
        ,file_path_("")
@@ -33,13 +33,8 @@
        {}
        Recorder::~Recorder(){
            if(thread_){
                stop_recorder_.store(true);
                cv_.notify_one();
                thread_->join();
            }
            if(out_)
                delete out_;
            stop_recorder_.store(true);
            cv_.notify_one();
        }
        int Recorder::init_writer(){
@@ -59,6 +54,7 @@
        void Recorder::start_writer(){
            if (cur_frame == 0) {
                srandom(time(NULL));
                file_path_ = dir_ + "/" + std::to_string(random()) + ".mp4";
                out_->JustWriter(in_->getStream(), file_path_.c_str());
                logIt("start record %s", file_path_.c_str());
@@ -86,6 +82,9 @@
        void Recorder::end_writer(){
            if(cur_frame == -1) return;
            out_->endWriter();
            logIt("INDEX %d, FILE %s, CURFrame %d, ENDFrame %d\n",
                 file_frame_index_, file_path_.c_str(), cur_frame, end_frame);
            //reinit cur_frame clear list pkt
            {
                std::lock_guard<std::mutex> locker(mutex_pkt_);
@@ -95,10 +94,9 @@
            }
            //callback to frame index and path
            if(func_rec_info_){
                func_rec_info_(file_frame_index_, file_path_);
                logIt("recoder index %d, file name %s\n", file_frame_index_, file_path_.c_str());
                func_rec_info_(id_,file_frame_index_, file_path_);
            }else{
                logIt("recorder has no func_rec_info");
                // logIt("recorder has no func_rec_info");
            }
        }
@@ -147,13 +145,13 @@
                    }
                }
            }
            if (out_){
                delete out_;
                out_ = NULL;
            }
        }
        int Recorder::Run(const char* output, const int mind, const int maxd){
            if(thread_){
                logIt("recorder already run");
                return 0;
            }
            dir_ = output;
            int ret = init_writer();
@@ -171,9 +169,9 @@
            logIt("min %d max %d endcount %d", minduration, maxduration, end_frame);    
            thread_.reset(new std::thread([&]{
            std::thread([&]{
                run_thread();
            }));
            }).detach();
            return 0;
        }
@@ -191,6 +189,7 @@
                    end_frame = maxduration;
                }
            }
            logIt("FIRE REC FRAME ID: %lld", id);
            return 0;
        }
@@ -220,6 +219,7 @@
                cv_.notify_one();
            }
            logIt("CACHE PACKET FRAME ID %lld", pkt.id);
            return 0;
        }