video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-10-28 f2fb5eb58ae50bb35f2d0ae2673a596adc06cb00
bug fixed gb mem leak
2个文件已修改
52 ■■■■■ 已修改文件
csrc/ffmpeg/format/FormatIn.cpp 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/thirdparty/gb28181/include/PsToEs.hpp 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/ffmpeg/format/FormatIn.cpp
@@ -38,19 +38,13 @@
    FormatIn::~FormatIn()
    {
        if(io_ctx_){
            if(read_io_buff_){
                read_io_buff_ = NULL;
            }
            avio_context_free(&io_ctx_);
            io_ctx_ = NULL;
        }
        if(ctx_){
            if (!ctx_->oformat){
                avformat_free_context(ctx_);
            }else{
            if (!(ctx_->flags & AVFMT_FLAG_CUSTOM_IO)){
                avformat_close_input(&ctx_);
            }else{
                avformat_free_context(ctx_);
            }
            ctx_ = NULL;
            if(dec_ctx_){
                avcodec_close(dec_ctx_);
@@ -58,18 +52,23 @@
            }
            
        }
        if (handle_gb28181){
            delete handle_gb28181;
        }
        if(read_io_buff_){
            av_free(read_io_buff_);
            read_io_buff_ = NULL;
        }
        if(io_ctx_){
            avio_context_free(&io_ctx_);
            io_ctx_ = NULL;
        }
    }
////////////////////////////////////////////////////////////////////////
    int FormatIn::openWithCustomIO(void *opaque, read_packet fn, AVDictionary **options/*=NULL*/){
        ctx_ = avformat_alloc_context();
        if(!ctx_){
            logIt("open with custom io create format error\n");
            return -1;
        }
        read_io_buff_ = (uint8_t*)av_malloc(read_io_buff_size_);
        if(!read_io_buff_){
            logIt("open with custom io alloc read io buff error\n");
@@ -81,6 +80,13 @@
            logIt("open with custom io create custom avio error\n");
            return -1;
        }
        ctx_ = avformat_alloc_context();
        if(!ctx_){
            logIt("open with custom io create format error\n");
            return -1;
        }
        ctx_->pb = io_ctx_;
        auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0);
csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -67,6 +67,16 @@
        while (!q.empty()) q.pop_front();
        pthread_mutex_unlock(&mtx);
    }
    void clearAll(std::function<void(T)> fn){
        pthread_mutex_lock(&mtx);
        while (!q.empty()){
            T value = q.front();
            fn(value);
            q.pop_front();
        }
        pthread_mutex_unlock(&mtx);
    }
private:
    deque<T> q;
    pthread_mutex_t mtx;
@@ -87,7 +97,11 @@
    ~GB28181API(){
        printf("GB28181API end!\n");
        m_rtpQueue.clearAll();
        // m_rtpQueue.clearAll();
        m_rtpQueue.clearAll([](frameBuffInfo *info){
            delete[] info->buff;
            delete info;
        });
        deleteCamera();
    }