video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2020-09-17 48a70bb5b8b4d2daf24462d94fcc1bc3e3f85858
csrc/ffmpeg/format/FormatIn.cpp
@@ -28,6 +28,7 @@
   ,dec_ctx_(NULL)
   ,vs_idx_(-1)
   ,as_idx_(-1)
   ,prop_(NULL)
   ,hw_accl_(hw)
   ,io_ctx_(NULL)
   ,read_io_buff_(NULL)
@@ -36,9 +37,28 @@
   ,fps_(25.0)
   {}
   FormatIn::FormatIn(const VideoProp &prop, bool hw/*=true*/)
   :ctx_(NULL)
   ,dec_ctx_(NULL)
   ,vs_idx_(-1)
   ,as_idx_(-1)
   ,prop_(NULL)
   ,hw_accl_(hw)
   ,io_ctx_(NULL)
   ,read_io_buff_(NULL)
   ,read_io_buff_size_(32768)
   ,handle_gb28181(NULL)
   ,fps_(25.0)
   {
      prop_ = new VideoProp;
      *prop_ = prop;
   }
   FormatIn::~FormatIn()
   {
      logIt("free format in");
      if (prop_) delete prop_;
      if(dec_ctx_){
         avcodec_close(dec_ctx_);
         avcodec_free_context(&dec_ctx_);
@@ -56,7 +76,7 @@
      if(io_ctx_){
         av_freep(&io_ctx_->buffer);
         avio_context_free(&io_ctx_);
         av_freep(&io_ctx_);
         io_ctx_ = NULL;
      }
@@ -159,7 +179,7 @@
               }else if(in->avg_frame_rate.num >=1 && in->avg_frame_rate.den >= 1){
                   fps_ = av_q2d(in->avg_frame_rate);
               } 
            logIt("in stream video fps %f, time_base: %d : %d", fps_, in->time_base.num, in->time_base.den);
            logIt("in stream video fps %f, time_base: %d : %d, size: %dx%d", fps_, in->time_base.num, in->time_base.den, in->codecpar->width, in->codecpar->height);
         }
         if (type == AVMEDIA_TYPE_AUDIO){
            auto in = ctx_->streams[i];
@@ -194,7 +214,11 @@
      for (int i = 0; i < 2; ++i)
      {
         if(hw_accl_){
                idle_gpu = gpu::getGPUPrior(300, 1024, 0);
                idle_gpu = gpu::getGPUPrior(350, 896, 0);
                // idle_gpu = gpu::getGPU(300);
               if (prop_->gpu_index_ > -1){
                   idle_gpu = prop_->gpu_index_;
               }
                if(idle_gpu < 0){
                    logIt("NO GPU RESOURCE TO DECODE");
                    hw_accl_ = false;