video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-10-30 b1ed46392ad11cb454d13fb58d331239252d1546
bug fixed memleak
2个文件已修改
37 ■■■■■ 已修改文件
csrc/ffmpeg/format/FormatIn.cpp 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/thirdparty/gb28181/include/PsToEs.hpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/ffmpeg/format/FormatIn.cpp
@@ -38,29 +38,24 @@
    FormatIn::~FormatIn()
    {
        if(ctx_){
            if (!(ctx_->flags & AVFMT_FLAG_CUSTOM_IO)){
                avformat_close_input(&ctx_);
            }else{
                avformat_free_context(ctx_);
            }
        logIt("free format in");
        if(dec_ctx_){
            avcodec_close(dec_ctx_);
            avcodec_free_context(&dec_ctx_);
            dec_ctx_ = NULL;
        }
        if(ctx_){
            avformat_close_input(&ctx_);
            ctx_ = NULL;
            if(dec_ctx_){
                avcodec_close(dec_ctx_);
                dec_ctx_ = NULL;
            }
        }
        
        if (handle_gb28181){
            delete handle_gb28181;
        }
        if(read_io_buff_){
            av_free(read_io_buff_);
            read_io_buff_ = NULL;
        }
        if(io_ctx_){
            av_freep(&io_ctx_->buffer);
            avio_context_free(&io_ctx_);
            io_ctx_ = NULL;
        }
@@ -89,11 +84,11 @@
        ctx_->pb = io_ctx_;
        auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0);
        if(err != 0){
            logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str());
            return -1;
        }
        // auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0);
        // if(err != 0){
        //     logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str());
        //     return -1;
        // }
        return 0;
    }
csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -42,7 +42,7 @@
        pthread_mutex_lock(&mtx);
        if (q.empty()) {
            gettimeofday(&now, NULL);
            t.tv_sec = now.tv_sec + 5;
            t.tv_sec = now.tv_sec + 3;
            t.tv_nsec = now.tv_usec * 1000;
//            pthread_cond_wait(&cond, &mtx);
            pthread_cond_timedwait(&cond, &mtx, &t);