• JM8.6中的运动搜索:BlockSAD数组的理解,SetupLargrBlocks函数理解


    JM8.6中的运动搜索:BlockSAD数组的理解,SetupLargrBlocks函数理解

    整象素搜索主要包括3个函数SetupFastFullPelSearch,SetMotionVectorPredictor,SetupLargerBlocks, 都位于文件mv_search.c中间。

    int *****BlockSAD; //!< SAD for all blocksize, ref. frames and motion vectors

    BlockSAD[list][ img->max_num_references+1][8][16][ max_pos]    

    BlockSAD用于根据4x4块来计算其他大块的SAD

    从对BlockSAD进行分配空间的函数可以看出: InitializeFastFullIntegerSearch

    通过对函数void SetupLargerBlocks (int list, int refindex, int max_pos)的分析可以得到

    (1) BlockSAD的初始化

    InitializeFastFullIntegerSearch函数中对BlockSAD进行空间的分配

    (2)BlockSAD的计算

    然后再函数SetupFastFullPelSearch中进行整像素搜索,计算SAD,即在下面的双重循环内

    (3) BlockSAD的再计算

    在函数SetupLargerBlocks ,根据已经计算出的164x4块来组成其他大小的块,比如4x8, 8x4,8x8等等

    对于BlockSAD[list][ref][8][16][maxpos]

    BlockSAD[list][ref][4x4][0,1,2,3,4,5…..15][maxpos]

    BlockSAD[list][ref][4x8][0,1,2,3,

    8, 9, 10, 11][maxpos]

    BlockSAD[list][ref][8x4][0,2,4,6

    8 ,10,12,14][maxpos]

    BlockSAD[list][ref][8x8][0,2

    8,10 ][maxpos]

    BlockSAD[list][ref][8x16][0,2][maxpos]

    BlockSAD[list][ref][16x8][0,8][maxpos]

    BlockSAD[list][ref][16x16][0][maxpos]

    currMB->mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2]; // [forw,backw][block_y][block_x][x,y]

    全局变量:motion_cost[8:blocktype][2][img->max_num_references+1][4:block8x8]

    这儿的block8x8是指的blocktype所包含的块数:16x16包含一个,16x8包含2,8x16包含2,P8x8包含4

    BlockSAD是针对整像素的, 整像素搜索使用的是SAD为代价的,

    而在分像素进行搜索时, 代价使用SATD(根据是否设置hadamard), 所以不会用到数组BlockSAD, 重新分别对9个点进行计算SATD

    img: int ****cofAC; //!< AC coefficients [8x8block][4x4block][level/run][scan_pos]

    int ***cofDC; //!< DC coefficients [yuv][level/run][scan_pos]

  • 相关阅读:
    智能网关de_GWD的一次排障经历
    盛唐领土争夺战读后感
    Unreal Open Day游记
    虚幻4随笔7 未知的未来
    虚幻4随笔6 Object和序列化
    虚幻4随笔5 使用中的一些发现
    虚幻4随笔4 从工程开始
    松口气,近一段时间的工作学习情况
    虚幻4随笔 三 从UE3到UE4
    关卡原型制作思路
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2616875.html
Copyright © 2020-2023  润新知