美文网首页
av1代码学习10---encode_tiles(),av1_e

av1代码学习10---encode_tiles(),av1_e

作者: 青吟乐 | 来源:发表于2020-06-23 17:26 被阅读0次

    1,函数功能

    按照cpi中对tile的划分情况依次编码每个tile,即调用av1_encode_tile()进行tiles的编码,注意,从av1_encode_tile开始就定义了关于运动搜索的数目变量和网格搜索的命中数目变量,也就是说对tile的运动搜索有初始化了

    2,代码学习

    encode_tiles()

    static void encode_tiles(AV1_COMP *cpi) {
      AV1_COMMON *const cm = &cpi->common;
      const int tile_cols = cm->tile_cols;
      const int tile_rows = cm->tile_rows;
      int tile_col, tile_row;
    
      if (cpi->tile_data == NULL || cpi->allocated_tiles < tile_cols * tile_rows)
        av1_alloc_tile_data(cpi);
    
      av1_init_tile_data(cpi);
      //根据tile划分依次编码每个tile
      for (tile_row = 0; tile_row < tile_rows; ++tile_row) {
        for (tile_col = 0; tile_col < tile_cols; ++tile_col) {
          TileDataEnc *const this_tile =
              &cpi->tile_data[tile_row * cm->tile_cols + tile_col];
          cpi->td.intrabc_used = 0;
          cpi->td.deltaq_used = 0;
          cpi->td.mb.e_mbd.tile_ctx = &this_tile->tctx;
          cpi->td.mb.tile_pb_ctx = &this_tile->tctx;
          av1_encode_tile(cpi, &cpi->td, tile_row, tile_col);
          cpi->intrabc_used |= cpi->td.intrabc_used;
          cpi->deltaq_used |= cpi->td.deltaq_used;
        }
      }
    }
    

    av1_encode_tile()

    /*初始化above context后调用*av1_encode_sb_row()*完成每个SB行的编码。*/
    void av1_encode_tile(AV1_COMP *cpi, ThreadData *td, int tile_row,
                         int tile_col) {
      AV1_COMMON *const cm = &cpi->common;
      TileDataEnc *const this_tile =
          &cpi->tile_data[tile_row * cm->tile_cols + tile_col];
      const TileInfo *const tile_info = &this_tile->tile_info;
      int mi_row;
    
      av1_inter_mode_data_init(this_tile);
    
      av1_zero_above_context(cm, &td->mb.e_mbd, tile_info->mi_col_start,
                             tile_info->mi_col_end, tile_row);
      av1_init_above_context(cm, &td->mb.e_mbd, tile_row);
    
      // 设置指向每线程运动搜索计数器的指针。
      this_tile->m_search_count = 0;   // 运动搜索命中数.
      this_tile->ex_search_count = 0;  // Exhaustive mesh search hits.彻底的网格搜索命中
      td->mb.m_search_count_ptr = &this_tile->m_search_count;
      td->mb.ex_search_count_ptr = &this_tile->ex_search_count;
    
      cfl_init(&td->mb.e_mbd.cfl, &cm->seq_params);
    
      av1_crc32c_calculator_init(&td->mb.mb_rd_record.crc_calculator);
    
      for (mi_row = tile_info->mi_row_start; mi_row < tile_info->mi_row_end;
           mi_row += cm->seq_params.mib_size) {
        av1_encode_sb_row(cpi, td, tile_row, tile_col, mi_row);
      }
    }
    

    相关文章

      网友评论

          本文标题:av1代码学习10---encode_tiles(),av1_e

          本文链接:https://www.haomeiwen.com/subject/zdihfktx.html