text: /*
  * Copyright(c) 2019 Intel Corporation
  * SPDX - License - Identifier: BSD - 2 - Clause - Patent
  */
  
  #ifndef EbMotionEstimation_h
  #define EbMotionEstimation_h
  
  #include "EbDefinitions.h"
  #include "EbCodingUnit.h"
  
  #include "EbMotionEstimationProcess.h"
  #include "EbMotionEstimationContext.h"
  #include "EbPictureBufferDesc.h"
  #include "EbSequenceControlSet.h"
  #include "EbReferenceObject.h"
  #include "EbPictureDecisionProcess.h"
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  void uni_pred_averaging(
          uint32_t              pu_index,
          EbBool                chroma,
          uint8_t               firstFracPos,
          uint32_t              pu_width,
          uint32_t              pu_height,
          uint8_t               *firstRefInteger,
          uint8_t               *firstRefPosB,
          uint8_t               *firstRefPosH,
          uint8_t               *firstRefPosJ,
          uint32_t              refBufferStride,
          uint32_t              refBufferFullList0Stride,
          uint8_t               *firstRefTempDst,
          uint8_t               **comp_blk_ptr,
          uint32_t              *comp_blk_ptr_stride,
          EbAsm                 asm_type);
  
  void interpolate_search_region_AVC_chroma(
          MeContext               *context_ptr,
          uint8_t                 *search_region_buffer_cb,
          uint8_t                 *search_region_buffer_cr,
          uint8_t                 **pos_b_buffer_ch,
          uint8_t                 **pos_h_buffer_ch,
          uint8_t                 **pos_j_buffer_ch,
          uint32_t                interpolated_stride_ch,
          uint32_t                interpolated_full_stride_ch,
          uint32_t                search_area_width,
          uint32_t                search_area_height,
          uint32_t                input_bit_depth,
          EbAsm                   asm_type);
  
      extern EbErrorType motion_estimate_lcu(
          PictureParentControlSet   *picture_control_set_ptr,
          uint32_t                       sb_index,
          uint32_t                       sb_origin_x,
          uint32_t                       sb_origin_y,
          MeContext                 *context_ptr,
          EbPictureBufferDesc       *input_ptr);
  
      extern EbErrorType OpenLoopIntraCandidateSearchLcu(
          PictureParentControlSet   *picture_control_set_ptr,
          uint32_t                       sb_index,
          MotionEstimationContext_t   *context_ptr,
          EbPictureBufferDesc       *input_ptr,
          EbAsm                       asm_type);
      extern void decimation_2d(
          uint8_t                   *input_samples,
          uint32_t                   input_stride,
          uint32_t                   input_area_width,
          uint32_t                   input_area_height,
          uint8_t                   *decim_samples,
          uint32_t                   decim_stride,
          uint32_t                   decim_step);
  
      extern void downsample_2d(
          uint8_t                   *input_samples,
          uint32_t                   input_stride,
          uint32_t                   input_area_width,
          uint32_t                   input_area_height,
          uint8_t                   *decim_samples,
          uint32_t                   decim_stride,
          uint32_t                   decim_step);
  
      extern EbErrorType open_loop_intra_search_sb(
          PictureParentControlSet   *picture_control_set_ptr,
          uint32_t                       sb_index,
          MotionEstimationContext_t   *context_ptr,
          EbPictureBufferDesc       *input_ptr,
          EbAsm                       asm_type);
  
      int8_t sort_3_elements(uint32_t a, uint32_t b, uint32_t c);
  #define a_b_c  0
  #define a_c_b  1
  #define b_a_c  2
  #define b_c_a  3
  #define c_a_b  4
  #define c_b_a  5
  
  #define TOP_LEFT_POSITION       0
  #define TOP_POSITION            1
  #define TOP_RIGHT_POSITION      2
  #define RIGHT_POSITION          3
  #define BOTTOM_RIGHT_POSITION   4
  #define BOTTOM_POSITION         5
  #define BOTTOM_LEFT_POSITION    6
  #define LEFT_POSITION           7
  
      // The interpolation is performed using a set of three 4 tap filters
  #define IFShiftAvcStyle         1
  #define F0 0
  #define F1 1
  #define F2 2
  #define MAX_SSE_VALUE 128 * 128 * 255 * 255
  #define  MAX_SAD_VALUE 128*128*255
  
  // Interpolation Filters
      static const int32_t me_if_coeff[3][4] = {
          { -4, 54, 16, -2 }, // F0
          { -4, 36, 36, -4 }, // F1
          { -2, 16, 54, -4 }, // F2
      };
  
      static const uint32_t tab16x16[16] = {
          0, 1, 4, 5,
          2, 3, 6, 7,
          8, 9, 12, 13,
          10, 11, 14, 15
      };
  
      static const uint32_t tab32x32[16] = {
          0, 1,
          2, 3
      };
  
      static const uint32_t tab64x32[16] = {
          0, 1,
      };
  
      static const uint32_t tab32x64[16] = {
          0, 1,
      };
  
      static const uint32_t tab8x8[64] = {
          0, 1, 4, 5, 16, 17, 20, 21,
          2, 3, 6, 7, 18, 19, 22, 23,
          8, 9, 12, 13, 24, 25, 28, 29,
          10, 11, 14, 15, 26, 27, 30, 31,
          32, 33, 36, 37, 48, 49, 52, 53,
          34, 35, 38, 39, 50, 51, 54, 55,
          40, 41, 44, 45, 56, 57, 60, 61,
          42, 43, 46, 47, 58, 59, 62, 63
      };
  
      static const uint32_t tab32x16[8] = {
          0, 2,
          1, 3,
          4, 6,
          5, 7,
      };
  
      static const uint32_t tab16x32[8] = {
          0, 1, 2, 3,
          4, 5, 6, 7,
      };
  
      static const uint32_t tab32x8[16] = {
          0, 4,
          1, 5,
          2, 6,
          3, 7,
          8, 12,
          9, 13,
          10, 14,
          11, 15
      };
  
      static const uint32_t tab8x32[16] = {
          0, 1, 2, 3, 4, 5, 6, 7,
          8, 9, 10, 11, 12, 13, 14, 15
      };
  
      static const uint32_t tab16x8[32] = {
          0, 2, 8, 10,
          1, 3, 9, 11,
          4, 6, 12, 14,
          5, 7, 13, 15,
          16, 18, 24, 26,
          17, 19, 25, 27,
          20, 22, 28, 30,
          21, 23, 29, 31,
      };
  
      static const uint32_t tab8x16[32] = {
          0, 1, 2, 3, 8, 9, 10, 11,
          4, 5, 6, 7, 12, 13, 14, 15,
          16, 17, 18, 19, 24, 25, 26, 27,
          20, 21, 22, 23, 28, 29, 30, 31,
      };
  
      static const uint32_t partition_width[MAX_ME_PU_COUNT] = {
          64,                                                                          // (1)
          32, 32, 32, 32,                                                              // (4)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
  
          //H  Partitions
          64, 64,                                                                      // (2)
          32, 32, 32, 32, 32, 32, 32, 32,                                              // (8)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
  
          //V  Partitions
          32, 32,                                                                      // (2)
          16, 16, 16, 16, 16, 16, 16, 16,                                              // (8)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
  
          // H4 Partitions
          32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,              // (16)
  
          // V4 Partitions
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8                               // (16)
  
          ,64,64,64,64,
           16,16,16,16
      };
  
      static const uint32_t partition_height[MAX_ME_PU_COUNT] = {
          64,                                                                          // (1)
          32, 32, 32, 32,                                                              // (4)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
  
          // H Partitions
          32, 32,                                                                      // (2)
          16, 16, 16, 16, 16, 16, 16, 16,                                              // (8)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
  
          //V  Partitions
          64, 64,                                                                      // (2)
          32, 32, 32, 32, 32, 32, 32, 32,                                              // (8)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
          16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,              // (16)
  
          // H4 Partitions
          8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,                              // (16)
  
          // V4 Partitions
          32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32               // (16)
  
          ,16,16,16,16,
           64,64,64,64
      };
  
      static const uint32_t pu_search_index_map[MAX_ME_PU_COUNT][2] = {
          { 0, 0 },
          { 0, 0 }, { 32, 0 }, { 0, 32 }, { 32, 32 },
          { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 },
          { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 },
          { 0, 32 }, { 16, 32 }, { 32, 32 }, { 48, 32 },
          { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 },
          { 0, 0 }, { 8, 0 }, { 16, 0 }, { 24, 0 }, { 32, 0 }, { 40, 0 }, { 48, 0 }, { 56, 0 },
          { 0, 8 }, { 8, 8 }, { 16, 8 }, { 24, 8 }, { 32, 8 }, { 40, 8 }, { 48, 8 }, { 56, 8 },
          { 0, 16 }, { 8, 16 }, { 16, 16 }, { 24, 16 }, { 32, 16 }, { 40, 16 }, { 48, 16 }, { 56, 16 },
          { 0, 24 }, { 8, 24 }, { 16, 24 }, { 24, 24 }, { 32, 24 }, { 40, 24 }, { 48, 24 }, { 56, 24 },
          { 0, 32 }, { 8, 32 }, { 16, 32 }, { 24, 32 }, { 32, 32 }, { 40, 32 }, { 48, 32 }, { 56, 32 },
          { 0, 40 }, { 8, 40 }, { 16, 40 }, { 24, 40 }, { 32, 40 }, { 40, 40 }, { 48, 40 }, { 56, 40 },
          { 0, 48 }, { 8, 48 }, { 16, 48 }, { 24, 48 }, { 32, 48 }, { 40, 48 }, { 48, 48 }, { 56, 48 },
          { 0, 56 }, { 8, 56 }, { 16, 56 }, { 24, 56 }, { 32, 56 }, { 40, 56 }, { 48, 56 }, { 56, 56 },
          //H  Partitions
          { 0, 0 },
          { 0, 32 },
          { 0, 0 }, { 32, 0 },
          { 0, 16 }, { 32, 16 },
          { 0, 32 }, { 32, 32 },
          { 0, 48 }, { 32, 48 },
          { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 },
          { 0, 8 }, { 16, 8 }, { 32, 8 }, { 48, 8 },
          { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 },
          { 0, 24 }, { 16, 24 }, { 32, 24 }, { 48, 24 },
          { 0, 32 }, { 16, 32 }, { 32, 32 }, { 48, 32 },
          { 0, 40 }, { 16, 40 }, { 32, 40 }, { 48, 40 },
          { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 },
          { 0, 56 }, { 16, 56 }, { 32, 56 }, { 48, 56 },
          //V  Partitions
          { 0, 0 }, { 32, 0 },
          { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 },
          { 0, 32 }, { 16, 32 }, { 32, 32 }, { 48, 32 },
          { 0, 0 }, { 8, 0 }, { 16, 0 }, { 24, 0 }, { 32, 0 }, { 40, 0 }, { 48, 0 }, { 56, 0 },
          { 0, 16 }, { 8, 16 }, { 16, 16 }, { 24, 16 }, { 32, 16 }, { 40, 16 }, { 48, 16 }, { 56, 16 },
          { 0, 32 }, { 8, 32 }, { 16, 32 }, { 24, 32 }, { 32, 32 }, { 40, 32 }, { 48, 32 }, { 56, 32 },
          { 0, 48 }, { 8, 48 }, { 16, 48 }, { 24, 48 }, { 32, 48 }, { 40, 48 }, { 48, 48 }, { 56, 48 },
          // H4 Partitions
          { 0, 0 },  { 32, 0 },
          { 0, 8 },  { 32, 8 },
          { 0, 16 }, { 32, 16 },
          { 0, 24 }, { 32, 24 },
          { 0, 32 }, { 32, 32 },
          { 0, 40 }, { 32, 40 },
          { 0, 48 }, { 32, 48 },
          { 0, 56 }, { 32, 56 },
          // V4 Partitions
          { 0, 0  }, { 8, 0  }, { 16, 0  }, { 24, 0  }, { 32, 0  }, { 40, 0  }, { 48, 0  }, { 56, 0 },
          { 0, 32 }, { 8, 32 }, { 16, 32 }, { 24, 32 }, { 32, 32 }, { 40, 32 }, { 48, 32 }, { 56, 32 },
          { 0, 0},
          { 0, 16},
          { 0, 32},
          { 0, 48},
          { 0, 0}, { 16, 0},{ 32, 0}, { 48, 0}
      };
  
      static const uint32_t in_loop_me_block_width_128_sb[MAX_SS_ME_PU_COUNT] = {
          //4x4 (256)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //8x8 (64)
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          //16x16 (16)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //32x32 (4)
          32,32,32,32,
          32,32,32,32,
          32,32,32,32,
          32,32,32,32,
          //64x64 (1)
          64,64,
          64,64,
          //8x4 (128)
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          //4x8 (128)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //4x16 (64)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //16x4 (64)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //16x8 (32)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //8x16 (32)
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          //32x8 (16)
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          //8x32 (16)
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          //32x16 (8)
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          //16x32 (8)
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          //64x16 (4)
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          //16x64 (4)
          16, 16, 16, 16, 16, 16, 16, 16,
          16, 16, 16, 16, 16, 16, 16, 16,
          //64x32 (2)
          64,64,
          64,64,
          64,64,
          64,64,
          //32x64 (2)
          32,32,32, 32,
          32, 32, 32, 32,
          //128x64 (2)
          128, 128,
          //64x128 (2)
          64, 64,
          128,
      };
  
      static const uint32_t in_loop_me_block_height_128_sb[MAX_SS_ME_PU_COUNT] = {
          //4x4 (256)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //8x8 (64)
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          //16x16 (16)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //32x32 (4)
          32,32,32,32,
          32,32,32,32,
          32,32,32,32,
          32,32,32,32,
          //64x64 (1)
          64,64,
          64,64,
          //8x4 (128)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //4x8 (128)
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
          //4x16 (64)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //16x4 (64)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //16x8 (32)
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,8, 8, 8, 8, 8, 8, 8, 8,
          //8x16 (32)
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          16,16,16,16,16,16,16,16,
          //32x8 (16)
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          //8x32 (16)
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          //32x16 (8)
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          16, 16, 16, 16,16, 16, 16, 16,
          //16x32 (8)
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          32, 32,32, 32,
          //64x16 (4)
          16, 16, 16, 16, 16, 16, 16, 16,
          16, 16, 16, 16, 16, 16, 16, 16,
          //16x64 (4)
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          64,64,
          //64x32 (2)
          32, 32, 32, 32,
          32, 32, 32, 32,
          //32x64 (2)
          64, 64,
          64, 64,
          64, 64,
          64, 64,
          //128x64 (2)
          64, 64,
          //64x128 (2)
  
          128, 128,
          128
      };
  
      static const uint32_t in_loop_me_block_index_128_sb[MAX_SS_ME_PU_COUNT][2] = {
          //4x4
          {0,0},{4,0},{8,0},{12,0},{16,0},{20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},{64,0},{68,0},{72,0},{76,0},{80,0},{84,0},{88,0},{92,0},{96,0},{100,0},{104,0},{108,0},{112,0},{116,0},{120,0},{124,0},
          {0,4},{4,4},{8,4},{12,4},{16,4},{20,4},{24,4},{28,4},{32,4},{36,4},{40,4},{44,4},{48,4},{52,4},{56,4},{60,4},{64,4},{68,4},{72,4},{76,4},{80,4},{84,4},{88,4},{92,4},{96,4},{100,4},{104,4},{108,4},{112,4},{116,4},{120,4},{124,4},
          {0,8},{4,8},{8,8},{12,8},{16,8},{20,8},{24,8},{28,8},{32,8},{36,8},{40,8},{44,8},{48,8},{52,8},{56,8},{60,8},{64,8},{68,8},{72,8},{76,8},{80,8},{84,8},{88,8},{92,8},{96,8},{100,8},{104,8},{108,8},{112,8},{116,8},{120,8},{124,8},
          {0,12},{4,12},{8,12},{12,12},{16,12},{20,12},{24,12},{28,12},{32,12},{36,12},{40,12},{44,12},{48,12},{52,12},{56,12},{60,12},{64,12},{68,12},{72,12},{76,12},{80,12},{84,12},{88,12},{92,12},{96,12},{100,12},{104,12},{108,12},{112,12},{116,12},{120,12},{124,12},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},{64,16},{68,16},{72,16},{76,16},{80,16},{84,16},{88,16},{92,16},{96,16},{100,16},{104,16},{108,16},{112,16},{116,16},{120,16},{124,16},
          {0,20},{4,20},{8,20},{12,20},{16,20},{20,20},{24,20},{28,20},{32,20},{36,20},{40,20},{44,20},{48,20},{52,20},{56,20},{60,20},{64,20},{68,20},{72,20},{76,20},{80,20},{84,20},{88,20},{92,20},{96,20},{100,20},{104,20},{108,20},{112,20},{116,20},{120,20},{124,20},
          {0,24},{4,24},{8,24},{12,24},{16,24},{20,24},{24,24},{28,24},{32,24},{36,24},{40,24},{44,24},{48,24},{52,24},{56,24},{60,24},{64,24},{68,24},{72,24},{76,24},{80,24},{84,24},{88,24},{92,24},{96,24},{100,24},{104,24},{108,24},{112,24},{116,24},{120,24},{124,24},
          {0,28},{4,28},{8,28},{12,28},{16,28},{20,28},{24,28},{28,28},{32,28},{36,28},{40,28},{44,28},{48,28},{52,28},{56,28},{60,28},{64,28},{68,28},{72,28},{76,28},{80,28},{84,28},{88,28},{92,28},{96,28},{100,28},{104,28},{108,28},{112,28},{116,28},{120,28},{124,28},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},{64,32},{68,32},{72,32},{76,32},{80,32},{84,32},{88,32},{92,32},{96,32},{100,32},{104,32},{108,32},{112,32},{116,32},{120,32},{124,32},
          {0,36},{4,36},{8,36},{12,36},{16,36},{20,36},{24,36},{28,36},{32,36},{36,36},{40,36},{44,36},{48,36},{52,36},{56,36},{60,36},{64,36},{68,36},{72,36},{76,36},{80,36},{84,36},{88,36},{92,36},{96,36},{100,36},{104,36},{108,36},{112,36},{116,36},{120,36},{124,36},
          {0,40},{4,40},{8,40},{12,40},{16,40},{20,40},{24,40},{28,40},{32,40},{36,40},{40,40},{44,40},{48,40},{52,40},{56,40},{60,40},{64,40},{68,40},{72,40},{76,40},{80,40},{84,40},{88,40},{92,40},{96,40},{100,40},{104,40},{108,40},{112,40},{116,40},{120,40},{124,40},
          {0,44},{4,44},{8,44},{12,44},{16,44},{20,44},{24,44},{28,44},{32,44},{36,44},{40,44},{44,44},{48,44},{52,44},{56,44},{60,44},{64,44},{68,44},{72,44},{76,44},{80,44},{84,44},{88,44},{92,44},{96,44},{100,44},{104,44},{108,44},{112,44},{116,44},{120,44},{124,44},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},{64,48},{68,48},{72,48},{76,48},{80,48},{84,48},{88,48},{92,48},{96,48},{100,48},{104,48},{108,48},{112,48},{116,48},{120,48},{124,48},
          {0,52},{4,52},{8,52},{12,52},{16,52},{20,52},{24,52},{28,52},{32,52},{36,52},{40,52},{44,52},{48,52},{52,52},{56,52},{60,52},{64,52},{68,52},{72,52},{76,52},{80,52},{84,52},{88,52},{92,52},{96,52},{100,52},{104,52},{108,52},{112,52},{116,52},{120,52},{124,52},
          {0,56},{4,56},{8,56},{12,56},{16,56},{20,56},{24,56},{28,56},{32,56},{36,56},{40,56},{44,56},{48,56},{52,56},{56,56},{60,56},{64,56},{68,56},{72,56},{76,56},{80,56},{84,56},{88,56},{92,56},{96,56},{100,56},{104,56},{108,56},{112,56},{116,56},{120,56},{124,56},
          {0,60},{4,60},{8,60},{12,60},{16,60},{20,60},{24,60},{28,60},{32,60},{36,60},{40,60},{44,60},{48,60},{52,60},{56,60},{60,60},{64,60},{68,60},{72,60},{76,60},{80,60},{84,60},{88,60},{92,60},{96,60},{100,60},{104,60},{108,60},{112,60},{116,60},{120,60},{124,60},
          {0,64},{4,64},{8,64},{12,64},{16,64},{20,64},{24,64},{28,64},{32,64},{36,64},{40,64},{44,64},{48,64},{52,64},{56,64},{60,64},{64,64},{68,64},{72,64},{76,64},{80,64},{84,64},{88,64},{92,64},{96,64},{100,64},{104,64},{108,64},{112,64},{116,64},{120,64},{124,64},
          {0,68},{4,68},{8,68},{12,68},{16,68},{20,68},{24,68},{28,68},{32,68},{36,68},{40,68},{44,68},{48,68},{52,68},{56,68},{60,68},{64,68},{68,68},{72,68},{76,68},{80,68},{84,68},{88,68},{92,68},{96,68},{100,68},{104,68},{108,68},{112,68},{116,68},{120,68},{124,68},
          {0,72},{4,72},{8,72},{12,72},{16,72},{20,72},{24,72},{28,72},{32,72},{36,72},{40,72},{44,72},{48,72},{52,72},{56,72},{60,72},{64,72},{68,72},{72,72},{76,72},{80,72},{84,72},{88,72},{92,72},{96,72},{100,72},{104,72},{108,72},{112,72},{116,72},{120,72},{124,72},
          {0,76},{4,76},{8,76},{12,76},{16,76},{20,76},{24,76},{28,76},{32,76},{36,76},{40,76},{44,76},{48,76},{52,76},{56,76},{60,76},{64,76},{68,76},{72,76},{76,76},{80,76},{84,76},{88,76},{92,76},{96,76},{100,76},{104,76},{108,76},{112,76},{116,76},{120,76},{124,76},
          {0,80},{4,80},{8,80},{12,80},{16,80},{20,80},{24,80},{28,80},{32,80},{36,80},{40,80},{44,80},{48,80},{52,80},{56,80},{60,80},{64,80},{68,80},{72,80},{76,80},{80,80},{84,80},{88,80},{92,80},{96,80},{100,80},{104,80},{108,80},{112,80},{116,80},{120,80},{124,80},
          {0,84},{4,84},{8,84},{12,84},{16,84},{20,84},{24,84},{28,84},{32,84},{36,84},{40,84},{44,84},{48,84},{52,84},{56,84},{60,84},{64,84},{68,84},{72,84},{76,84},{80,84},{84,84},{88,84},{92,84},{96,84},{100,84},{104,84},{108,84},{112,84},{116,84},{120,84},{124,84},
          {0,88},{4,88},{8,88},{12,88},{16,88},{20,88},{24,88},{28,88},{32,88},{36,88},{40,88},{44,88},{48,88},{52,88},{56,88},{60,88},{64,88},{68,88},{72,88},{76,88},{80,88},{84,88},{88,88},{92,88},{96,88},{100,88},{104,88},{108,88},{112,88},{116,88},{120,88},{124,88},
          {0,92},{4,92},{8,92},{12,92},{16,92},{20,92},{24,92},{28,92},{32,92},{36,92},{40,92},{44,92},{48,92},{52,92},{56,92},{60,92},{64,92},{68,92},{72,92},{76,92},{80,92},{84,92},{88,92},{92,92},{96,92},{100,92},{104,92},{108,92},{112,92},{116,92},{120,92},{124,92},
          {0,96},{4,96},{8,96},{12,96},{16,96},{20,96},{24,96},{28,96},{32,96},{36,96},{40,96},{44,96},{48,96},{52,96},{56,96},{60,96},{64,96},{68,96},{72,96},{76,96},{80,96},{84,96},{88,96},{92,96},{96,96},{100,96},{104,96},{108,96},{112,96},{116,96},{120,96},{124,96},
          {0,100},{4,100},{8,100},{12,100},{16,100},{20,100},{24,100},{28,100},{32,100},{36,100},{40,100},{44,100},{48,100},{52,100},{56,100},{60,100},{64,100},{68,100},{72,100},{76,100},{80,100},{84,100},{88,100},{92,100},{96,100},{100,100},{104,100},{108,100},{112,100},{116,100},{120,100},{124,100},
          {0,104},{4,104},{8,104},{12,104},{16,104},{20,104},{24,104},{28,104},{32,104},{36,104},{40,104},{44,104},{48,104},{52,104},{56,104},{60,104},{64,104},{68,104},{72,104},{76,104},{80,104},{84,104},{88,104},{92,104},{96,104},{100,104},{104,104},{108,104},{112,104},{116,104},{120,104},{124,104},
          {0,108},{4,108},{8,108},{12,108},{16,108},{20,108},{24,108},{28,108},{32,108},{36,108},{40,108},{44,108},{48,108},{52,108},{56,108},{60,108},{64,108},{68,108},{72,108},{76,108},{80,108},{84,108},{88,108},{92,108},{96,108},{100,108},{104,108},{108,108},{112,108},{116,108},{120,108},{124,108},
          {0,112},{4,112},{8,112},{12,112},{16,112},{20,112},{24,112},{28,112},{32,112},{36,112},{40,112},{44,112},{48,112},{52,112},{56,112},{60,112},{64,112},{68,112},{72,112},{76,112},{80,112},{84,112},{88,112},{92,112},{96,112},{100,112},{104,112},{108,112},{112,112},{116,112},{120,112},{124,112},
          {0,116},{4,116},{8,116},{12,116},{16,116},{20,116},{24,116},{28,116},{32,116},{36,116},{40,116},{44,116},{48,116},{52,116},{56,116},{60,116},{64,116},{68,116},{72,116},{76,116},{80,116},{84,116},{88,116},{92,116},{96,116},{100,116},{104,116},{108,116},{112,116},{116,116},{120,116},{124,116},
          {0,120},{4,120},{8,120},{12,120},{16,120},{20,120},{24,120},{28,120},{32,120},{36,120},{40,120},{44,120},{48,120},{52,120},{56,120},{60,120},{64,120},{68,120},{72,120},{76,120},{80,120},{84,120},{88,120},{92,120},{96,120},{100,120},{104,120},{108,120},{112,120},{116,120},{120,120},{124,120},
          {0,124},{4,124},{8,124},{12,124},{16,124},{20,124},{24,124},{28,124},{32,124},{36,124},{40,124},{44,124},{48,124},{52,124},{56,124},{60,124},{64,124},{68,124},{72,124},{76,124},{80,124},{84,124},{88,124},{92,124},{96,124},{100,124},{104,124},{108,124},{112,124},{116,124},{120,124},{124,124},
          //8x8
          {0,0},{8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},{64,0},{72,0},{80,0},{88,0},{96,0},{104,0},{112,0},{120,0},
          {0,8},{8,8},{16,8},{24,8},{32,8},{40,8},{48,8},{56,8},{64,8},{72,8},{80,8},{88,8},{96,8},{104,8},{112,8},{120,8},
          {0,16},{8,16},{16,16},{24,16},{32,16},{40,16},{48,16},{56,16},{64,16},{72,16},{80,16},{88,16},{96,16},{104,16},{112,16},{120,16},
          {0,24},{8,24},{16,24},{24,24},{32,24},{40,24},{48,24},{56,24},{64,24},{72,24},{80,24},{88,24},{96,24},{104,24},{112,24},{120,24},
          {0,32},{8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},{64,32},{72,32},{80,32},{88,32},{96,32},{104,32},{112,32},{120,32},
          {0,40},{8,40},{16,40},{24,40},{32,40},{40,40},{48,40},{56,40},{64,40},{72,40},{80,40},{88,40},{96,40},{104,40},{112,40},{120,40},
          {0,48},{8,48},{16,48},{24,48},{32,48},{40,48},{48,48},{56,48},{64,48},{72,48},{80,48},{88,48},{96,48},{104,48},{112,48},{120,48},
          {0,56},{8,56},{16,56},{24,56},{32,56},{40,56},{48,56},{56,56},{64,56},{72,56},{80,56},{88,56},{96,56},{104,56},{112,56},{120,56},
          {0,64},{8,64},{16,64},{24,64},{32,64},{40,64},{48,64},{56,64},{64,64},{72,64},{80,64},{88,64},{96,64},{104,64},{112,64},{120,64},
          {0,72},{8,72},{16,72},{24,72},{32,72},{40,72},{48,72},{56,72},{64,72},{72,72},{80,72},{88,72},{96,72},{104,72},{112,72},{120,72},
          {0,80},{8,80},{16,80},{24,80},{32,80},{40,80},{48,80},{56,80},{64,80},{72,80},{80,80},{88,80},{96,80},{104,80},{112,80},{120,80},
          {0,88},{8,88},{16,88},{24,88},{32,88},{40,88},{48,88},{56,88},{64,88},{72,88},{80,88},{88,88},{96,88},{104,88},{112,88},{120,88},
          {0,96},{8,96},{16,96},{24,96},{32,96},{40,96},{48,96},{56,96},{64,96},{72,96},{80,96},{88,96},{96,96},{104,96},{112,96},{120,96},
          {0,104},{8,104},{16,104},{24,104},{32,104},{40,104},{48,104},{56,104},{64,104},{72,104},{80,104},{88,104},{96,104},{104,104},{112,104},{120,104},
          {0,112},{8,112},{16,112},{24,112},{32,112},{40,112},{48,112},{56,112},{64,112},{72,112},{80,112},{88,112},{96,112},{104,112},{112,112},{120,112},
          {0,120},{8,120},{16,120},{24,120},{32,120},{40,120},{48,120},{56,120},{64,120},{72,120},{80,120},{88,120},{96,120},{104,120},{112,120},{120,120},
          //16x16
          {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},
          {0,16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},
          {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},
          {0,48},{16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},
          {0,64},{16,64},{32,64},{48,64},{64,64},{80,64},{96,64},{112,64},
          {0,80},{16,80},{32,80},{48,80},{64,80},{80,80},{96,80},{112,80},
          {0,96},{16,96},{32,96},{48,96},{64,96},{80,96},{96,96},{112,96},
          {0,112},{16,112},{32,112},{48,112},{64,112},{80,112},{96,112},{112,112},
          //32x32
          {0,0},{32,0},{64,0},{96,0},
          {0,32},{32,32},{64,32},{96,32},
          {0,64},{32,64},{64,64},{96,64},
          {0,96},{32,96},{64,96},{96,96},
          //64x64
          {0,0},{64,0},
          {0,64},{64,64},
          //8x4
          {0,0},{8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},{64,0},{72,0},{80,0},{88,0},{96,0},{104,0},{112,0},{120,0},
          {0,4},{8,4},{16,4},{24,4},{32,4},{40,4},{48,4},{56,4},{64,4},{72,4},{80,4},{88,4},{96,4},{104,4},{112,4},{120,4},
          {0,8},{8,8},{16,8},{24,8},{32,8},{40,8},{48,8},{56,8},{64,8},{72,8},{80,8},{88,8},{96,8},{104,8},{112,8},{120,8},
          {0,12},{8,12},{16,12},{24,12},{32,12},{40,12},{48,12},{56,12},{64,12},{72,12},{80,12},{88,12},{96,12},{104,12},{112,12},{120,12},
          {0,16},{8,16},{16,16},{24,16},{32,16},{40,16},{48,16},{56,16},{64,16},{72,16},{80,16},{88,16},{96,16},{104,16},{112,16},{120,16},
          {0,20},{8,20},{16,20},{24,20},{32,20},{40,20},{48,20},{56,20},{64,20},{72,20},{80,20},{88,20},{96,20},{104,20},{112,20},{120,20},
          {0,24},{8,24},{16,24},{24,24},{32,24},{40,24},{48,24},{56,24},{64,24},{72,24},{80,24},{88,24},{96,24},{104,24},{112,24},{120,24},
          {0,28},{8,28},{16,28},{24,28},{32,28},{40,28},{48,28},{56,28},{64,28},{72,28},{80,28},{88,28},{96,28},{104,28},{112,28},{120,28},
          {0,32},{8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},{64,32},{72,32},{80,32},{88,32},{96,32},{104,32},{112,32},{120,32},
          {0,36},{8,36},{16,36},{24,36},{32,36},{40,36},{48,36},{56,36},{64,36},{72,36},{80,36},{88,36},{96,36},{104,36},{112,36},{120,36},
          {0,40},{8,40},{16,40},{24,40},{32,40},{40,40},{48,40},{56,40},{64,40},{72,40},{80,40},{88,40},{96,40},{104,40},{112,40},{120,40},
          {0,44},{8,44},{16,44},{24,44},{32,44},{40,44},{48,44},{56,44},{64,44},{72,44},{80,44},{88,44},{96,44},{104,44},{112,44},{120,44},
          {0,48},{8,48},{16,48},{24,48},{32,48},{40,48},{48,48},{56,48},{64,48},{72,48},{80,48},{88,48},{96,48},{104,48},{112,48},{120,48},
          {0,52},{8,52},{16,52},{24,52},{32,52},{40,52},{48,52},{56,52},{64,52},{72,52},{80,52},{88,52},{96,52},{104,52},{112,52},{120,52},
          {0,56},{8,56},{16,56},{24,56},{32,56},{40,56},{48,56},{56,56},{64,56},{72,56},{80,56},{88,56},{96,56},{104,56},{112,56},{120,56},
          {0,60},{8,60},{16,60},{24,60},{32,60},{40,60},{48,60},{56,60},{64,60},{72,60},{80,60},{88,60},{96,60},{104,60},{112,60},{120,60},
          {0,64},{8,64},{16,64},{24,64},{32,64},{40,64},{48,64},{56,64},{64,64},{72,64},{80,64},{88,64},{96,64},{104,64},{112,64},{120,64},
          {0,68},{8,68},{16,68},{24,68},{32,68},{40,68},{48,68},{56,68},{64,68},{72,68},{80,68},{88,68},{96,68},{104,68},{112,68},{120,68},
          {0,72},{8,72},{16,72},{24,72},{32,72},{40,72},{48,72},{56,72},{64,72},{72,72},{80,72},{88,72},{96,72},{104,72},{112,72},{120,72},
          {0,76},{8,76},{16,76},{24,76},{32,76},{40,76},{48,76},{56,76},{64,76},{72,76},{80,76},{88,76},{96,76},{104,76},{112,76},{120,76},
          {0,80},{8,80},{16,80},{24,80},{32,80},{40,80},{48,80},{56,80},{64,80},{72,80},{80,80},{88,80},{96,80},{104,80},{112,80},{120,80},
          {0,84},{8,84},{16,84},{24,84},{32,84},{40,84},{48,84},{56,84},{64,84},{72,84},{80,84},{88,84},{96,84},{104,84},{112,84},{120,84},
          {0,88},{8,88},{16,88},{24,88},{32,88},{40,88},{48,88},{56,88},{64,88},{72,88},{80,88},{88,88},{96,88},{104,88},{112,88},{120,88},
          {0,92},{8,92},{16,92},{24,92},{32,92},{40,92},{48,92},{56,92},{64,92},{72,92},{80,92},{88,92},{96,92},{104,92},{112,92},{120,92},
          {0,96},{8,96},{16,96},{24,96},{32,96},{40,96},{48,96},{56,96},{64,96},{72,96},{80,96},{88,96},{96,96},{104,96},{112,96},{120,96},
          {0,100},{8,100},{16,100},{24,100},{32,100},{40,100},{48,100},{56,100},{64,100},{72,100},{80,100},{88,100},{96,100},{104,100},{112,100},{120,100},
          {0,104},{8,104},{16,104},{24,104},{32,104},{40,104},{48,104},{56,104},{64,104},{72,104},{80,104},{88,104},{96,104},{104,104},{112,104},{120,104},
          {0,108},{8,108},{16,108},{24,108},{32,108},{40,108},{48,108},{56,108},{64,108},{72,108},{80,108},{88,108},{96,108},{104,108},{112,108},{120,108},
          {0,112},{8,112},{16,112},{24,112},{32,112},{40,112},{48,112},{56,112},{64,112},{72,112},{80,112},{88,112},{96,112},{104,112},{112,112},{120,112},
          {0,116},{8,116},{16,116},{24,116},{32,116},{40,116},{48,116},{56,116},{64,116},{72,116},{80,116},{88,116},{96,116},{104,116},{112,116},{120,116},
          {0,120},{8,120},{16,120},{24,120},{32,120},{40,120},{48,120},{56,120},{64,120},{72,120},{80,120},{88,120},{96,120},{104,120},{112,120},{120,120},
          {0,124},{8,124},{16,124},{24,124},{32,124},{40,124},{48,124},{56,124},{64,124},{72,124},{80,124},{88,124},{96,124},{104,124},{112,124},{120,124},
          //4x8
          {0,0},{4,0},{8,0},{12,0},{16,0},{20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},{64,0},{68,0},{72,0},{76,0},{80,0},{84,0},{88,0},{92,0},{96,0},{100,0},{104,0},{108,0},{112,0},{116,0},{120,0},{124,0},
          {0,8},{4,8},{8,8},{12,8},{16,8},{20,8},{24,8},{28,8},{32,8},{36,8},{40,8},{44,8},{48,8},{52,8},{56,8},{60,8},{64,8},{68,8},{72,8},{76,8},{80,8},{84,8},{88,8},{92,8},{96,8},{100,8},{104,8},{108,8},{112,8},{116,8},{120,8},{124,8},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},{64,16},{68,16},{72,16},{76,16},{80,16},{84,16},{88,16},{92,16},{96,16},{100,16},{104,16},{108,16},{112,16},{116,16},{120,16},{124,16},
          {0,24},{4,24},{8,24},{12,24},{16,24},{20,24},{24,24},{28,24},{32,24},{36,24},{40,24},{44,24},{48,24},{52,24},{56,24},{60,24},{64,24},{68,24},{72,24},{76,24},{80,24},{84,24},{88,24},{92,24},{96,24},{100,24},{104,24},{108,24},{112,24},{116,24},{120,24},{124,24},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},{64,32},{68,32},{72,32},{76,32},{80,32},{84,32},{88,32},{92,32},{96,32},{100,32},{104,32},{108,32},{112,32},{116,32},{120,32},{124,32},
          {0,40},{4,40},{8,40},{12,40},{16,40},{20,40},{24,40},{28,40},{32,40},{36,40},{40,40},{44,40},{48,40},{52,40},{56,40},{60,40},{64,40},{68,40},{72,40},{76,40},{80,40},{84,40},{88,40},{92,40},{96,40},{100,40},{104,40},{108,40},{112,40},{116,40},{120,40},{124,40},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},{64,48},{68,48},{72,48},{76,48},{80,48},{84,48},{88,48},{92,48},{96,48},{100,48},{104,48},{108,48},{112,48},{116,48},{120,48},{124,48},
          {0,56},{4,56},{8,56},{12,56},{16,56},{20,56},{24,56},{28,56},{32,56},{36,56},{40,56},{44,56},{48,56},{52,56},{56,56},{60,56},{64,56},{68,56},{72,56},{76,56},{80,56},{84,56},{88,56},{92,56},{96,56},{100,56},{104,56},{108,56},{112,56},{116,56},{120,56},{124,56},
          {0,64},{4,64},{8,64},{12,64},{16,64},{20,64},{24,64},{28,64},{32,64},{36,64},{40,64},{44,64},{48,64},{52,64},{56,64},{60,64},{64,64},{68,64},{72,64},{76,64},{80,64},{84,64},{88,64},{92,64},{96,64},{100,64},{104,64},{108,64},{112,64},{116,64},{120,64},{124,64},
          {0,72},{4,72},{8,72},{12,72},{16,72},{20,72},{24,72},{28,72},{32,72},{36,72},{40,72},{44,72},{48,72},{52,72},{56,72},{60,72},{64,72},{68,72},{72,72},{76,72},{80,72},{84,72},{88,72},{92,72},{96,72},{100,72},{104,72},{108,72},{112,72},{116,72},{120,72},{124,72},
          {0,80},{4,80},{8,80},{12,80},{16,80},{20,80},{24,80},{28,80},{32,80},{36,80},{40,80},{44,80},{48,80},{52,80},{56,80},{60,80},{64,80},{68,80},{72,80},{76,80},{80,80},{84,80},{88,80},{92,80},{96,80},{100,80},{104,80},{108,80},{112,80},{116,80},{120,80},{124,80},
          {0,88},{4,88},{8,88},{12,88},{16,88},{20,88},{24,88},{28,88},{32,88},{36,88},{40,88},{44,88},{48,88},{52,88},{56,88},{60,88},{64,88},{68,88},{72,88},{76,88},{80,88},{84,88},{88,88},{92,88},{96,88},{100,88},{104,88},{108,88},{112,88},{116,88},{120,88},{124,88},
          {0,96},{4,96},{8,96},{12,96},{16,96},{20,96},{24,96},{28,96},{32,96},{36,96},{40,96},{44,96},{48,96},{52,96},{56,96},{60,96},{64,96},{68,96},{72,96},{76,96},{80,96},{84,96},{88,96},{92,96},{96,96},{100,96},{104,96},{108,96},{112,96},{116,96},{120,96},{124,96},
          {0,104},{4,104},{8,104},{12,104},{16,104},{20,104},{24,104},{28,104},{32,104},{36,104},{40,104},{44,104},{48,104},{52,104},{56,104},{60,104},{64,104},{68,104},{72,104},{76,104},{80,104},{84,104},{88,104},{92,104},{96,104},{100,104},{104,104},{108,104},{112,104},{116,104},{120,104},{124,104},
          {0,112},{4,112},{8,112},{12,112},{16,112},{20,112},{24,112},{28,112},{32,112},{36,112},{40,112},{44,112},{48,112},{52,112},{56,112},{60,112},{64,112},{68,112},{72,112},{76,112},{80,112},{84,112},{88,112},{92,112},{96,112},{100,112},{104,112},{108,112},{112,112},{116,112},{120,112},{124,112},
          {0,120},{4,120},{8,120},{12,120},{16,120},{20,120},{24,120},{28,120},{32,120},{36,120},{40,120},{44,120},{48,120},{52,120},{56,120},{60,120},{64,120},{68,120},{72,120},{76,120},{80,120},{84,120},{88,120},{92,120},{96,120},{100,120},{104,120},{108,120},{112,120},{116,120},{120,120},{124,120},
          //4x16
          {0,0},{4,0},{8,0},{12,0},{16,0},{20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},{64,0},{68,0},{72,0},{76,0},{80,0},{84,0},{88,0},{92,0},{96,0},{100,0},{104,0},{108,0},{112,0},{116,0},{120,0},{124,0},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},{64,16},{68,16},{72,16},{76,16},{80,16},{84,16},{88,16},{92,16},{96,16},{100,16},{104,16},{108,16},{112,16},{116,16},{120,16},{124,16},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},{64,32},{68,32},{72,32},{76,32},{80,32},{84,32},{88,32},{92,32},{96,32},{100,32},{104,32},{108,32},{112,32},{116,32},{120,32},{124,32},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},{64,48},{68,48},{72,48},{76,48},{80,48},{84,48},{88,48},{92,48},{96,48},{100,48},{104,48},{108,48},{112,48},{116,48},{120,48},{124,48},
          {0,64},{4,64},{8,64},{12,64},{16,64},{20,64},{24,64},{28,64},{32,64},{36,64},{40,64},{44,64},{48,64},{52,64},{56,64},{60,64},{64,64},{68,64},{72,64},{76,64},{80,64},{84,64},{88,64},{92,64},{96,64},{100,64},{104,64},{108,64},{112,64},{116,64},{120,64},{124,64},
          {0,80},{4,80},{8,80},{12,80},{16,80},{20,80},{24,80},{28,80},{32,80},{36,80},{40,80},{44,80},{48,80},{52,80},{56,80},{60,80},{64,80},{68,80},{72,80},{76,80},{80,80},{84,80},{88,80},{92,80},{96,80},{100,80},{104,80},{108,80},{112,80},{116,80},{120,80},{124,80},
          {0,96},{4,96},{8,96},{12,96},{16,96},{20,96},{24,96},{28,96},{32,96},{36,96},{40,96},{44,96},{48,96},{52,96},{56,96},{60,96},{64,96},{68,96},{72,96},{76,96},{80,96},{84,96},{88,96},{92,96},{96,96},{100,96},{104,96},{108,96},{112,96},{116,96},{120,96},{124,96},
          {0,112},{4,112},{8,112},{12,112},{16,112},{20,112},{24,112},{28,112},{32,112},{36,112},{40,112},{44,112},{48,112},{52,112},{56,112},{60,112},{64,112},{68,112},{72,112},{76,112},{80,112},{84,112},{88,112},{92,112},{96,112},{100,112},{104,112},{108,112},{112,112},{116,112},{120,112},{124,112},
          //16x4
          {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},
          {0,4},{16,4},{32,4},{48,4},{64,4},{80,4},{96,4},{112,4},
          {0,8},{16,8},{32,8},{48,8},{64,8},{80,8},{96,8},{112,8},
          {0,12},{16,12},{32,12},{48,12},{64,12},{80,12},{96,12},{112,12},
          {0,16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},
          {0,20},{16,20},{32,20},{48,20},{64,20},{80,20},{96,20},{112,20},
          {0,24},{16,24},{32,24},{48,24},{64,24},{80,24},{96,24},{112,24},
          {0,28},{16,28},{32,28},{48,28},{64,28},{80,28},{96,28},{112,28},
          {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},
          {0,36},{16,36},{32,36},{48,36},{64,36},{80,36},{96,36},{112,36},
          {0,40},{16,40},{32,40},{48,40},{64,40},{80,40},{96,40},{112,40},
          {0,44},{16,44},{32,44},{48,44},{64,44},{80,44},{96,44},{112,44},
          {0,48},{16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},
          {0,52},{16,52},{32,52},{48,52},{64,52},{80,52},{96,52},{112,52},
          {0,56},{16,56},{32,56},{48,56},{64,56},{80,56},{96,56},{112,56},
          {0,60},{16,60},{32,60},{48,60},{64,60},{80,60},{96,60},{112,60},
          {0,64},{16,64},{32,64},{48,64},{64,64},{80,64},{96,64},{112,64},
          {0,68},{16,68},{32,68},{48,68},{64,68},{80,68},{96,68},{112,68},
          {0,72},{16,72},{32,72},{48,72},{64,72},{80,72},{96,72},{112,72},
          {0,76},{16,76},{32,76},{48,76},{64,76},{80,76},{96,76},{112,76},
          {0,80},{16,80},{32,80},{48,80},{64,80},{80,80},{96,80},{112,80},
          {0,84},{16,84},{32,84},{48,84},{64,84},{80,84},{96,84},{112,84},
          {0,88},{16,88},{32,88},{48,88},{64,88},{80,88},{96,88},{112,88},
          {0,92},{16,92},{32,92},{48,92},{64,92},{80,92},{96,92},{112,92},
          {0,96},{16,96},{32,96},{48,96},{64,96},{80,96},{96,96},{112,96},
          {0,100},{16,100},{32,100},{48,100},{64,100},{80,100},{96,100},{112,100},
          {0,104},{16,104},{32,104},{48,104},{64,104},{80,104},{96,104},{112,104},
          {0,108},{16,108},{32,108},{48,108},{64,108},{80,108},{96,108},{112,108},
          {0,112},{16,112},{32,112},{48,112},{64,112},{80,112},{96,112},{112,112},
          {0,116},{16,116},{32,116},{48,116},{64,116},{80,116},{96,116},{112,116},
          {0,120},{16,120},{32,120},{48,120},{64,120},{80,120},{96,120},{112,120},
          {0,124},{16,124},{32,124},{48,124},{64,124},{80,124},{96,124},{112,124},
          //16x8
          {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},
          {0,8},{16,8},{32,8},{48,8},{64,8},{80,8},{96,8},{112,8},
          {0,16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},
          {0,24},{16,24},{32,24},{48,24},{64,24},{80,24},{96,24},{112,24},
          {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},
          {0,40},{16,40},{32,40},{48,40},{64,40},{80,40},{96,40},{112,40},
          {0,48},{16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},
          {0,56},{16,56},{32,56},{48,56},{64,56},{80,56},{96,56},{112,56},
          {0,64},{16,64},{32,64},{48,64},{64,64},{80,64},{96,64},{112,64},
          {0,72},{16,72},{32,72},{48,72},{64,72},{80,72},{96,72},{112,72},
          {0,80},{16,80},{32,80},{48,80},{64,80},{80,80},{96,80},{112,80},
          {0,88},{16,88},{32,88},{48,88},{64,88},{80,88},{96,88},{112,88},
          {0,96},{16,96},{32,96},{48,96},{64,96},{80,96},{96,96},{112,96},
          {0,104},{16,104},{32,104},{48,104},{64,104},{80,104},{96,104},{112,104},
          {0,112},{16,112},{32,112},{48,112},{64,112},{80,112},{96,112},{112,112},
          {0,120},{16,120},{32,120},{48,120},{64,120},{80,120},{96,120},{112,120},
          //8x16
          {0,0},{8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},{64,0},{72,0},{80,0},{88,0},{96,0},{104,0},{112,0},{120,0},
          {0,16},{8,16},{16,16},{24,16},{32,16},{40,16},{48,16},{56,16},{64,16},{72,16},{80,16},{88,16},{96,16},{104,16},{112,16},{120,16},
          {0,32},{8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},{64,32},{72,32},{80,32},{88,32},{96,32},{104,32},{112,32},{120,32},
          {0,48},{8,48},{16,48},{24,48},{32,48},{40,48},{48,48},{56,48},{64,48},{72,48},{80,48},{88,48},{96,48},{104,48},{112,48},{120,48},
          {0,64},{8,64},{16,64},{24,64},{32,64},{40,64},{48,64},{56,64},{64,64},{72,64},{80,64},{88,64},{96,64},{104,64},{112,64},{120,64},
          {0,80},{8,80},{16,80},{24,80},{32,80},{40,80},{48,80},{56,80},{64,80},{72,80},{80,80},{88,80},{96,80},{104,80},{112,80},{120,80},
          {0,96},{8,96},{16,96},{24,96},{32,96},{40,96},{48,96},{56,96},{64,96},{72,96},{80,96},{88,96},{96,96},{104,96},{112,96},{120,96},
          {0,112},{8,112},{16,112},{24,112},{32,112},{40,112},{48,112},{56,112},{64,112},{72,112},{80,112},{88,112},{96,112},{104,112},{112,112},{120,112},
          //32x8
          {0,0},{32,0},{64,0},{96,0},
          {0,8},{32,8},{64,8},{96,8},
          {0,16},{32,16},{64,16},{96,16},
          {0,24},{32,24},{64,24},{96,24},
          {0,32},{32,32},{64,32},{96,32},
          {0,40},{32,40},{64,40},{96,40},
          {0,48},{32,48},{64,48},{96,48},
          {0,56},{32,56},{64,56},{96,56},
          {0,64},{32,64},{64,64},{96,64},
          {0,72},{32,72},{64,72},{96,72},
          {0,80},{32,80},{64,80},{96,80},
          {0,88},{32,88},{64,88},{96,88},
          {0,96},{32,96},{64,96},{96,96},
          {0,104},{32,104},{64,104},{96,104},
          {0,112},{32,112},{64,112},{96,112},
          {0,120},{32,120},{64,120},{96,120},
          //8x32
          {0,0},{8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},{64,0},{72,0},{80,0},{88,0},{96,0},{104,0},{112,0},{120,0},
          {0,32},{8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},{64,32},{72,32},{80,32},{88,32},{96,32},{104,32},{112,32},{120,32},
          {0,64},{8,64},{16,64},{24,64},{32,64},{40,64},{48,64},{56,64},{64,64},{72,64},{80,64},{88,64},{96,64},{104,64},{112,64},{120,64},
          {0,96},{8,96},{16,96},{24,96},{32,96},{40,96},{48,96},{56,96},{64,96},{72,96},{80,96},{88,96},{96,96},{104,96},{112,96},{120,96},
          //32x16
          {0,0},{32,0},{64,0},{96,0},
          {0,16},{32,16},{64,16},{96,16},
          {0,32},{32,32},{64,32},{96,32},
          {0,48},{32,48},{64,48},{96,48},
          {0,64},{32,64},{64,64},{96,64},
          {0,80},{32,80},{64,80},{96,80},
          {0,96},{32,96},{64,96},{96,96},
          {0,112},{32,112},{64,112},{96,112},
          //16x32
          {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},
          {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},
          {0,64},{16,64},{32,64},{48,64},{64,64},{80,64},{96,64},{112,64},
          {0,96},{16,96},{32,96},{48,96},{64,96},{80,96},{96,96},{112,96},
          //64x16
          {0,0},{64,0},
          {0,16},{64,16},
          {0,32},{64,32},
          {0,48},{64,48},
          {0,64},{64,64},
          {0,80},{64,80},
          {0,96},{64,96},
          {0,112},{64,112},
          //16x64
          {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},
          {0,64},{16,64},{32,64},{48,64},{64,64},{80,64},{96,64},{112,64},
          //64x32
          {0,0},{64,0},
          {0,32},{64,32},
          {0,64},{64,64},
          {0,96},{64,96},
          //32x64
          {0,0},{32,0},{64,0},{96,0},
          {0,64},{32,64},{64,64},{96,64},
          //128x64
          {0,0},
          {0,64},
          //64x128
          {0,0},{64,0},
          //128x128
          {0,0}
      };
  
      static const uint32_t in_loop_me_block_width[MAX_SS_ME_PU_COUNT] = {
          //4x4 (256)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //8x8 (64)
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          //16x16 (16)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //32x32 (4)
          32,32,
          32,32,
          //64x64 (1)
          64,
          //8x4 (128)
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          //4x8 (128)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //4x16 (64)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //16x4 (64)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //16x8 (32)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //8x16 (32)
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          //32x8 (16)
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          //8x32 (16)
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          //32x16 (8)
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          //16x32 (8)
          16, 16, 16, 16,
          16, 16, 16, 16,
          //64x16 (4)
          64,
          64,
          64,
          64,
          //16x64 (4)
          16, 16, 16, 16,
          //64x32 (2)
          64,
          64,
          //32x64 (2)
          32,32
      };
  
      static const uint32_t in_loop_me_block_height[MAX_SS_ME_PU_COUNT] = {
          //4x4 (256)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //8x8 (64)
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          //16x16 (16)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //32x32 (4)
          32,32,
          32,32,
          //64x64 (1)
          64,
          //8x4 (128)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //4x8 (128)
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          8,8,8,8,8,8,8,8,
          //4x16 (64)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //16x4 (64)
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
          //16x8 (32)
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          //8x16 (32)
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          16,16,16,16,
          //32x8 (16)
          8, 8, 8, 8, 8, 8, 8, 8,
          8, 8, 8, 8, 8, 8, 8, 8,
          //8x32 (16)
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          //32x16 (8)
          16, 16, 16, 16,
          16, 16, 16, 16,
          //16x32 (8)
          32, 32,
          32, 32,
          32, 32,
          32, 32,
          //64x16 (4)
          16, 16, 16, 16,
          //16x64 (4)
          64,
          64,
          64,
          64,
          //64x32 (2)
          32, 32,
          //32x64 (2)
          64,
          64
      };
  
      static const uint32_t in_loop_me_block_index[MAX_SS_ME_PU_COUNT][2] = {
          //4x4 (256)
          {0,0}, {4,0}, {8,0}, {12,0}, {16,0}, {20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},
          {0,4}, {4,4}, {8,4}, {12,4}, {16,4}, {20,4},{24,4},{28,4},{32,4},{36,4},{40,4},{44,4},{48,4},{52,4},{56,4},{60,4},
          {0,8}, {4,8}, {8,8}, {12,8}, {16,8}, {20,8},{24,8},{28,8},{32,8},{36,8},{40,8},{44,8},{48,8},{52,8},{56,8},{60,8},
          {0,12},{4,12},{8,12},{12,12},{16,12},{20,12},{24,12},{28,12},{32,12},{36,12},{40,12},{44,12},{48,12},{52,12},{56,12},{60,12},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},
          {0,20},{4,20},{8,20},{12,20},{16,20},{20,20},{24,20},{28,20},{32,20},{36,20},{40,20},{44,20},{48,20},{52,20},{56,20},{60,20},
          {0,24},{4,24},{8,24},{12,24},{16,24},{20,24},{24,24},{28,24},{32,24},{36,24},{40,24},{44,24},{48,24},{52,24},{56,24},{60,24},
          {0,28},{4,28},{8,28},{12,28},{16,28},{20,28},{24,28},{28,28},{32,28},{36,28},{40,28},{44,28},{48,28},{52,28},{56,28},{60,28},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},
          {0,36},{4,36},{8,36},{12,36},{16,36},{20,36},{24,36},{28,36},{32,36},{36,36},{40,36},{44,36},{48,36},{52,36},{56,36},{60,36},
          {0,40},{4,40},{8,40},{12,40},{16,40},{20,40},{24,40},{28,40},{32,40},{36,40},{40,40},{44,40},{48,40},{52,40},{56,40},{60,40},
          {0,44},{4,44},{8,44},{12,44},{16,44},{20,44},{24,44},{28,44},{32,44},{36,44},{40,44},{44,44},{48,44},{52,44},{56,44},{60,44},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},
          {0,52},{4,52},{8,52},{12,52},{16,52},{20,52},{24,52},{28,52},{32,52},{36,52},{40,52},{44,52},{48,52},{52,52},{56,52},{60,52},
          {0,56},{4,56},{8,56},{12,56},{16,56},{20,56},{24,56},{28,56},{32,56},{36,56},{40,56},{44,56},{48,56},{52,56},{56,56},{60,56},
          {0,60},{4,60},{8,60},{12,60},{16,60},{20,60},{24,60},{28,60},{32,60},{36,60},{40,60},{44,60},{48,60},{52,60},{56,60},{60,60},
          //8x8 (64)
          {0,0}, {8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},
          {0,8}, {8,8},{16,8},{24,8},{32,8},{40,8},{48,8},{56,8},
          {0,16}, {8,16},{16,16},{24,16},{32,16},{40,16},{48,16},{56,16},
          {0,24}, {8,24},{16,24},{24,24},{32,24},{40,24},{48,24},{56,24},
          {0,32}, {8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},
          {0,40}, {8,40},{16,40},{24,40},{32,40},{40,40},{48,40},{56,40},
          {0,48}, {8,48},{16,48},{24,48},{32,48},{40,48},{48,48},{56,48},
          {0,56}, {8,56},{16,56},{24,56},{32,56},{40,56},{48,56},{56,56},
          //16x16 (16)
          {0,0}, {16,0},{32,0},{48,0},
          {0,16}, {16,16},{32,16},{48,16},
          {0,32}, {16,32},{32,32},{48,32},
          {0,48}, {16,48},{32,48},{48,48},
          //32x32 (4)
          {0, 0}, {32,0},
          {0,32}, {32,32},
          //64x64 (1)
          {0, 0},
          //8x4 (128)
          {0,0}, {8,0},{16,0},{24,0},{32,0},{40,0},{48,0},{56,0},
          {0,4}, {8,4},{16,4},{24,4},{32,4},{40,4},{48,4},{56,4},
          {0,8}, {8,8},{16,8},{24,8},{32,8},{40,8},{48,8},{56,8},
          {0,12}, {8,12},{16,12},{24,12},{32,12},{40,12},{48,12},{56,12},
          {0,16}, {8,16},{16,16},{24,16},{32,16},{40,16},{48,16},{56,16},
          {0,20}, {8,20},{16,20},{24,20},{32,20},{40,20},{48,20},{56,20},
          {0,24}, {8,24},{16,24},{24,24},{32,24},{40,24},{48,24},{56,24},
          {0,28}, {8,28},{16,28},{24,28},{32,28},{40,28},{48,28},{56,28},
          {0,32}, {8,32},{16,32},{24,32},{32,32},{40,32},{48,32},{56,32},
          {0,36}, {8,36},{16,36},{24,36},{32,36},{40,36},{48,36},{56,36},
          {0,40}, {8,40},{16,40},{24,40},{32,40},{40,40},{48,40},{56,40},
          {0,44}, {8,44},{16,44},{24,44},{32,44},{40,44},{48,44},{56,44},
          {0,48}, {8,48},{16,48},{24,48},{32,48},{40,48},{48,48},{56,48},
          {0,52}, {8,52},{16,52},{24,52},{32,52},{40,52},{48,52},{56,52},
          {0,56}, {8,56},{16,56},{24,56},{32,56},{40,56},{48,56},{56,56},
          {0,60}, {8,60},{16,60},{24,60},{32,60},{40,60},{48,60},{56,60},
          //4x8 (128)
          {0,0}, {4,0}, {8,0}, {12,0}, {16,0}, {20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},
          {0,8}, {4,8}, {8,8}, {12,8}, {16,8}, {20,8},{24,8},{28,8},{32,8},{36,8},{40,8},{44,8},{48,8},{52,8},{56,8},{60,8},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},
          {0,24},{4,24},{8,24},{12,24},{16,24},{20,24},{24,24},{28,24},{32,24},{36,24},{40,24},{44,24},{48,24},{52,24},{56,24},{60,24},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},
          {0,40},{4,40},{8,40},{12,40},{16,40},{20,40},{24,40},{28,40},{32,40},{36,40},{40,40},{44,40},{48,40},{52,40},{56,40},{60,40},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},
          {0,56},{4,56},{8,56},{12,56},{16,56},{20,56},{24,56},{28,56},{32,56},{36,56},{40,56},{44,56},{48,56},{52,56},{56,56},{60,56},
          //4x16 (64)
          {0,0}, {4,0}, {8,0}, {12,0}, {16,0}, {20,0},{24,0},{28,0},{32,0},{36,0},{40,0},{44,0},{48,0},{52,0},{56,0},{60,0},
          {0,16},{4,16},{8,16},{12,16},{16,16},{20,16},{24,16},{28,16},{32,16},{36,16},{40,16},{44,16},{48,16},{52,16},{56,16},{60,16},
          {0,32},{4,32},{8,32},{12,32},{16,32},{20,32},{24,32},{28,32},{32,32},{36,32},{40,32},{44,32},{48,32},{52,32},{56,32},{60,32},
          {0,48},{4,48},{8,48},{12,48},{16,48},{20,48},{24,48},{28,48},{32,48},{36,48},{40,48},{44,48},{48,48},{52,48},{56,48},{60,48},
          //16x4 (64)
          {0,0},  {16,0}, {32,0}, {48,0},
          {0,4},  {16,4}, {32,4}, {48,4},
          {0,8},  {16,8}, {32,8}, {48,8},
          {0,12}, {16,12},{32,12},{48,12},
          {0,16}, {16,16},{32,16},{48,16},
          {0,20}, {16,20},{32,20},{48,20},
          {0,24}, {16,24},{32,24},{48,24},
          {0,28}, {16,28},{32,28},{48,28},
          {0,32}, {16,32},{32,32},{48,32},
          {0,36}, {16,36},{32,36},{48,36},
          {0,40}, {16,40},{32,40},{48,40},
          {0,44}, {16,44},{32,44},{48,44},
          {0,48}, {16,48},{32,48},{48,48},
          {0,52}, {16,52},{32,52},{48,52},
          {0,56}, {16,56},{32,56},{48,56},
          {0,60}, {16,60},{32,60},{48,60},
          //16x8 (32)
          {0,0}, {16,0},  {32,0},  {48,0},
          {0,8}, {16,8},  {32,8},  {48,8},
          {0,16},{16,16}, {32,16}, {48,16},
          {0,24},{16,24}, {32,24}, {48,24},
          {0,32},{16,32}, {32,32}, {48,32},
          {0,40},{16,40}, {32,40}, {48,40},
          {0,48},{16,48}, {32,48}, {48,48},
          {0,56},{16,56}, {32,56}, {48,56},
          //8x16 (32)
          { 0,0 },  { 8,0 },  { 16,0 },  { 24,0 },  { 32,0 },  { 40,0 },  { 48,0 },  { 56,0 },
          { 0,16 }, { 8,16 }, { 16,16 }, { 24,16 }, { 32,16 }, { 40,16 }, { 48,16 }, { 56,16 },
          { 0,32 }, { 8,32 }, { 16,32 }, { 24,32 }, { 32,32 }, { 40,32 }, { 48,32 }, { 56,32 },
          { 0,48 }, { 8,48 }, { 16,48 }, { 24,48 }, { 32,48 }, { 40,48 }, { 48,48 }, { 56,48 },
          //32x8 (16)
          { 0,0 }, { 32,0 },
          { 0,8 }, { 32,8 },
          { 0,16 },{ 32,16 },
          { 0,24 },{ 32,24 },
          { 0,32 },{ 32,32 },
          { 0,40 },{ 32,40 },
          { 0,48 },{ 32,48 },
          { 0,56 },{ 32,56 },
          //8x32 (16)
          { 0,0 }, { 8,0 }, { 16,0 }, { 24,0 }, { 32,0 }, { 40,0 }, { 48,0 }, { 56,0 },
          { 0,32 }, { 8,32 }, { 16,32 }, { 24,32 }, { 32,32 }, { 40,32 }, { 48,32 }, { 56,32 },
          //32x16 (8)
          { 0,0 }, { 32,0 },
          { 0,16 }, { 32,16 },
          { 0,32 }, { 32,32 },
          { 0,48 }, { 32,48 },
          //16x32 (8)
          { 0,0 },  { 16,0 },  { 32,0 },  { 48,0 },
          { 0,32 }, { 16,32 }, { 32,32 }, { 48,32 },
          //64x16 (4)
          { 0,0 }, { 0,16 }, { 0,32 }, { 0,48 },
          //16x64 (4)
          { 0,0 }, { 16,0 }, { 32,0 }, { 48,0 },
          //64x32 (2)
          { 0,0 }, { 0,32 },
          //32x64 (2)
          { 0,0 }, { 32,0 },
      };
      // Nader - to be replaced by loock-up table
      /*******************************************
      * get_in_loop_me_info_index
      *   search the correct index of the motion
      *   info that corresponds to the input
      *   md candidate
      *******************************************/
      extern uint32_t get_in_loop_me_info_index(
          uint32_t                  max_me_block,
          uint8_t                is_128_sb,
          const BlockGeom        *blk_geom
      );
  
      static const uint8_t sub_position_type[16] = { 0, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2 };
  
      extern uint32_t compute8x4_sad_kernel(
          uint8_t  *src,                            // input parameter, source samples Ptr
          uint32_t  src_stride,                      // input parameter, source stride
          uint8_t  *ref,                            // input parameter, reference samples Ptr
          uint32_t  ref_stride);
      /*******************************************
      * GetEightHorizontalSearchPointResults_8x8_16x16_PU
      *******************************************/
      extern void get_eight_horizontal_search_point_results_8x8_16x16_pu(
          uint8_t   *src,
          uint32_t   src_stride,
          uint8_t   *ref,
          uint32_t   ref_stride,
          uint32_t  *p_best_sad8x8,
          uint32_t  *p_best_mv8x8,
          uint32_t  *pBestSad16x16,
          uint32_t  *p_best_mv16x16,
          uint32_t   mv,
          uint16_t  *p_sad16x16,
          EbBool     sub_sad);
  
      /*******************************************
      Calcualte SAD for 32x32,64x64 from 16x16
      and check if there is improvement, if yes keep
      the best SAD+MV
      *******************************************/
      extern void get_eight_horizontal_search_point_results_32x32_64x64_pu(
          uint16_t  *p_sad16x16,
          uint32_t  *p_best_sad32x32,
          uint32_t  *p_best_sad64x64,
          uint32_t  *p_best_mv32x32,
          uint32_t  *p_best_mv64x64,
          uint32_t   mv);
  
      /*******************************************
      Calcualte SAD for 16x16 and its 8x8 sublcoks
      and check if there is improvment, if yes keep
      the best SAD+MV
      *******************************************/
      extern void sad_calculation_8x8_16x16(
          uint8_t   *src,
          uint32_t   src_stride,
          uint8_t   *ref,
          uint32_t   ref_stride,
          uint32_t  *p_best_sad8x8,
          uint32_t  *p_best_sad16x16,
          uint32_t  *p_best_mv8x8,
          uint32_t  *p_best_mv16x16,
          uint32_t   mv,
          uint32_t  *p_sad16x16,
          EbBool     sub_sad);
  
      /*******************************************
      Calcualte SAD for 32x32,64x64 from 16x16
      and check if there is improvment, if yes keep
      the best SAD+MV
      *******************************************/
      extern void sad_calculation_32x32_64x64(
          uint32_t  *p_sad16x16,
          uint32_t  *p_best_sad32x32,
          uint32_t  *p_best_sad64x64,
          uint32_t  *p_best_mv32x32,
          uint32_t  *p_best_mv64x64,
          uint32_t   mv);
  
      // Nader - to be replaced by loock-up table
      /*******************************************
      * get_me_info_index
      *   search the correct index of the motion
      *   info that corresponds to the input
      *   md candidate
      *******************************************/
      extern uint32_t get_me_info_index(
          uint32_t         max_me_block,
          const BlockGeom *blk_geom,
          uint32_t         geom_offset_x,
          uint32_t         geom_offset_y);
      void half_pel_refinement_sb(
          PictureParentControlSet *picture_control_set_ptr,
          MeContext *context_ptr,  // input/output parameter, ME context Ptr, used
                                   // to get/update ME results
          uint8_t *refBuffer, uint32_t ref_stride,
          uint8_t *pos_b_buffer,  // input parameter, position "b" interpolated
                                  // search area Ptr
          uint8_t *pos_h_buffer,  // input parameter, position "h" interpolated
                                  // search area Ptr
          uint8_t *pos_j_buffer,  // input parameter, position "j" interpolated
                                  // search area Ptr
          int16_t x_search_area_origin,  // input parameter, search area origin in
                                         // the horizontal direction, used to
                                         // point to reference samples
          int16_t y_search_area_origin,  // input parameter, search area origin in
                                         // the vertical direction, used to point
                                         // to reference samples
          uint32_t integer_mv,           // input parameter, integer MV
          EbAsm asm_type);
  
  #ifdef __cplusplus
  }
  #endif
  #endif // EbMotionEstimation_h
  