亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mv-search.c

?? h.264官方測試軟件
?? C
?? 第 1 頁 / 共 5 頁
字號:
  if ((spiral_hpel_search_x = (short*)calloc(max_search_points, sizeof(short))) == NULL)
    no_mem_exit("Init_Motion_Search_Module: spiral_hpel_search_x");
  if ((spiral_hpel_search_y = (short*)calloc(max_search_points, sizeof(short))) == NULL)
    no_mem_exit("Init_Motion_Search_Module: spiral_hpel_search_y");
  if ((mvbits = (int*)calloc(2*max_mvd+1, sizeof(int))) == NULL)
    no_mem_exit("Init_Motion_Search_Module: mvbits");
  if ((refbits = (int*)calloc(max_ref, sizeof(int))) == NULL)
    no_mem_exit("Init_Motion_Search_Module: refbits");
  if ((byte_abs = (unsigned int*)calloc(byte_abs_range, sizeof(unsigned int))) == NULL)
    no_mem_exit("Init_Motion_Search_Module: byte_abs");
  
  get_mem4Dint (&motion_cost, 8, 2, img->max_num_references, 4);
  
  //--- set array offsets ---
  mvbits   += max_mvd;
  byte_abs += byte_abs_range/2;
  
  
  //=====   INIT ARRAYS   =====
  //---------------------------
  //--- init array: motion vector bits ---
  mvbits[0] = 1;
  for (bits=3; bits<=max_mv_bits; bits+=2)
  {
    imax = 1    << (bits >> 1);
    imin = imax >> 1;
    
    for (i = imin; i < imax; i++)   mvbits[-i] = mvbits[i] = bits;
  }
  //--- init array: reference frame bits ---
  refbits[0] = 1;
  for (bits=3; bits<=max_ref_bits; bits+=2)
  {
    imax = (1   << ((bits >> 1) + 1)) - 1;
    imin = imax >> 1;
    
    for (i = imin; i < imax; i++)   refbits[i] = bits;
  }
  //--- init array: absolute value ---
  byte_abs[0] = 0;
  for (i=1; i<byte_abs_range/2; i++)   byte_abs[i] = byte_abs[-i] = i;
  //--- init array: search pattern ---
  spiral_search_x[0] = spiral_search_y[0] = 0;
  spiral_hpel_search_x[0] = spiral_hpel_search_y[0] = 0;
  for (k=1, l=1; l<=max(1,search_range); l++)
  {
    for (i=-l+1; i< l; i++)
    {
      spiral_search_x[k] =  i;  spiral_search_y[k] = -l;
      spiral_hpel_search_x[k] =  i<<1;  spiral_hpel_search_y[k++] = -l<<1;
      spiral_search_x[k] =  i;  spiral_search_y[k] =  l;      
      spiral_hpel_search_x[k] =  i<<1;  spiral_hpel_search_y[k++] =  l<<1;
    }
    for (i=-l;   i<=l; i++)
    {
      spiral_search_x[k] = -l;  spiral_search_y[k] =  i;
      spiral_hpel_search_x[k] = -l<<1;  spiral_hpel_search_y[k++] = i<<1;
      spiral_search_x[k] =  l;  spiral_search_y[k] =  i;      
      spiral_hpel_search_x[k] =  l<<1;  spiral_hpel_search_y[k++] = i<<1;
    }
  }
  
#ifdef _FAST_FULL_ME_
  if(!input->FMEnable)
    InitializeFastFullIntegerSearch ();
#endif
}


/*!
 ************************************************************************
 * \brief
 *    Free memory used by motion search
 ************************************************************************
 */
void
Clear_Motion_Search_Module ()
{
  //--- correct array offset ---
  mvbits   -= max_mvd;
  byte_abs -= byte_abs_range/2;
  
  //--- delete arrays ---
  free (spiral_search_x);
  free (spiral_search_y);
  free (spiral_hpel_search_x);
  free (spiral_hpel_search_y);
  free (mvbits);
  free (refbits);
  free (byte_abs);
  free_mem4Dint (motion_cost, 8, 2);
  
#ifdef _FAST_FULL_ME_
  if(!input->FMEnable)
    ClearFastFullIntegerSearch ();
#endif
}



/*!
 ***********************************************************************
 * \brief
 *    Full pixel block motion search
 ***********************************************************************
 */
int                                               //  ==> minimum motion cost after search
FullPelBlockMotionSearch (pel_t**   orig_pic,     // <--  original pixel values for the AxB block
                          short     ref,          // <--  reference frame (0... or -1 (backward))
                          int       list,         // <--  current list
                          int       pic_pix_x,    // <--  absolute x-coordinate of regarded AxB block
                          int       pic_pix_y,    // <--  absolute y-coordinate of regarded AxB block
                          int       blocktype,    // <--  block type (1-16x16 ... 7-4x4)
                          short     pred_mv_x,    // <--  motion vector predictor (x) in sub-pel units
                          short     pred_mv_y,    // <--  motion vector predictor (y) in sub-pel units
                          short*    mv_x,         // <--> in: search center (x) / out: motion vector (x) - in pel units
                          short*    mv_y,         // <--> in: search center (y) / out: motion vector (y) - in pel units
                          int       search_range, // <--  1-d search range in pel units
                          int       min_mcost,    // <--  minimum motion cost (cost for center or huge value)
                          int       lambda_factor)       // <--  lagrangian parameter for determining motion cost
{
  int   pos, cand_x, cand_y, y, x4, mcost;
  
  pel_t *orig_line, *ref_line;
  pel_t *(*get_ref_line)(int, pel_t*, int, int, int, int);
  
  int   list_offset   = img->mb_data[img->current_mb_nr].list_offset; 
  pel_t *ref_pic      = listX[list+list_offset][ref]->imgY_11;
  int   img_width     = listX[list+list_offset][ref]->size_x;
  int   img_height    = listX[list+list_offset][ref]->size_y;
  
  int   best_pos      = 0;                                        // position with minimum motion cost
  int   max_pos       = (2*search_range+1)*(2*search_range+1);    // number of search positions
  int   blocksize_y   = input->blc_size[blocktype][1];            // vertical block size
  int   blocksize_x   = input->blc_size[blocktype][0];            // horizontal block size
  int   blocksize_x4  = blocksize_x >> 2;                         // horizontal block size in 4-pel units
  int   pred_x        = (pic_pix_x << 2) + pred_mv_x;       // predicted position x (in sub-pel units)
  int   pred_y        = (pic_pix_y << 2) + pred_mv_y;       // predicted position y (in sub-pel units)
  int   center_x      = pic_pix_x + *mv_x;                        // center position x (in pel units)
  int   center_y      = pic_pix_y + *mv_y;                        // center position y (in pel units)
  int   check_for_00  = (blocktype==1 && !input->rdopt && img->type!=B_SLICE && ref==0);
  
  int  apply_weights = ( (active_pps->weighted_pred_flag && (img->type == P_SLICE || img->type == SP_SLICE)) ||
    (active_pps->weighted_bipred_idc && (img->type == B_SLICE)));  
  
  //===== Use weighted Reference for ME ====
  if (apply_weights && input->UseWeightedReferenceME)
    ref_pic       = listX[list+list_offset][ref]->imgY_11_w;
  else
    ref_pic       = listX[list+list_offset][ref]->imgY_11;
  
  //===== set function for getting reference picture lines =====
  if ((center_x > search_range) && (center_x < img_width -1-search_range-blocksize_x) &&
    (center_y > search_range) && (center_y < img_height-1-search_range-blocksize_y)   )
  {
    get_ref_line = FastLineX;
  }
  else
  {
    get_ref_line = UMVLineX;
  }
  
  
  //===== loop over all search positions =====
  for (pos=0; pos<max_pos; pos++)
  {
    //--- set candidate position (absolute position in pel units) ---
    cand_x = center_x + spiral_search_x[pos];
    cand_y = center_y + spiral_search_y[pos];
    
    //--- initialize motion cost (cost for motion vector) and check ---
    mcost = MV_COST (lambda_factor, 2, cand_x, cand_y, pred_x, pred_y);
    if (check_for_00 && cand_x==pic_pix_x && cand_y==pic_pix_y)
    {
      mcost -= WEIGHTED_COST (lambda_factor, 16);
    }
    if (mcost >= min_mcost)   continue;
    
    //--- add residual cost to motion cost ---
    for (y=0; y<blocksize_y; y++)
    {
      ref_line  = get_ref_line (blocksize_x, ref_pic, cand_y+y, cand_x, img_height, img_width);
      orig_line = orig_pic [y];
      
      for (x4=0; x4<blocksize_x4; x4++)
      {
        mcost += byte_abs[ *orig_line++ - *ref_line++ ];
        mcost += byte_abs[ *orig_line++ - *ref_line++ ];
        mcost += byte_abs[ *orig_line++ - *ref_line++ ];
        mcost += byte_abs[ *orig_line++ - *ref_line++ ];
      }
      
      if (mcost >= min_mcost)
      {
        break;
      }
    }
    
    //--- check if motion cost is less than minimum cost ---
    if (mcost < min_mcost)
    {
      best_pos  = pos;
      min_mcost = mcost;
    }
  }
  
  
  //===== set best motion vector and return minimum motion cost =====
  if (best_pos)
  {
    *mv_x += spiral_search_x[best_pos];
    *mv_y += spiral_search_y[best_pos];
  }
  return min_mcost;
}
                          
                          
#ifdef _FAST_FULL_ME_
/*!
 ***********************************************************************
 * \brief
 *    Fast Full pixel block motion search
 ***********************************************************************
 */
int                                                   //  ==> minimum motion cost after search
FastFullPelBlockMotionSearch (pel_t**   orig_pic,     // <--  not used
                              short     ref,          // <--  reference frame (0... or -1 (backward))
                              int       list,
                              int       pic_pix_x,    // <--  absolute x-coordinate of regarded AxB block
                              int       pic_pix_y,    // <--  absolute y-coordinate of regarded AxB block
                              int       blocktype,    // <--  block type (1-16x16 ... 7-4x4)
                              short     pred_mv_x,    // <--  motion vector predictor (x) in sub-pel units
                              short     pred_mv_y,    // <--  motion vector predictor (y) in sub-pel units
                              short*    mv_x,         //  --> motion vector (x) - in pel units
                              short*    mv_y,         //  --> motion vector (y) - in pel units
                              int       search_range, // <--  1-d search range in pel units
                              int       min_mcost,    // <--  minimum motion cost (cost for center or huge value)
                              int       lambda_factor)       // <--  lagrangian parameter for determining motion cost
{
  int   pos, offset_x, offset_y, cand_x, cand_y, mcost;
  
  int   max_pos       = (2*search_range+1)*(2*search_range+1);              // number of search positions
  int   best_pos      = 0;                                                  // position with minimum motion cost
  int   block_index;                                                        // block index for indexing SAD array
  distpel*  block_sad;                                                          // pointer to SAD array
  
  block_index   = (pic_pix_y-img->opix_y)+((pic_pix_x-img->opix_x)>>2); // block index for indexing SAD array
  block_sad     = BlockSAD[list][ref][blocktype][block_index];         // pointer to SAD array
  
  //===== set up fast full integer search if needed / set search center =====
  if (!search_setup_done[list][ref])
  {
    SetupFastFullPelSearch (ref, list);
  }
  
  offset_x = search_center_x[list][ref] - img->opix_x;
  offset_y = search_center_y[list][ref] - img->opix_y;
  
  //===== cost for (0,0)-vector: it is done before, because MVCost can be negative =====
  if (!input->rdopt)
  {
    mcost = block_sad[pos_00[list][ref]] + MV_COST (lambda_factor, 2, 0, 0, pred_mv_x, pred_mv_y);
    
    if (mcost < min_mcost)
    {
      min_mcost = mcost;
      best_pos  = pos_00[list][ref];
    }
  }
  
  //===== loop over all search positions =====
  for (pos=0; pos<max_pos; pos++, block_sad++)
  {
    //--- check residual cost ---
    if (*block_sad < min_mcost)
    {
      //--- get motion vector cost ---
      cand_x = offset_x + spiral_search_x[pos];
      cand_y = offset_y + spiral_search_y[pos];
      mcost  = *block_sad;
      mcost += MV_COST (lambda_factor, 2, cand_x, cand_y, pred_mv_x, pred_mv_y);
      
      //--- check motion cost ---
      if (mcost < min_mcost)
      {
        min_mcost = mcost;
        best_pos  = pos;
      }
    }
  }
  
  //===== set best motion vector and return minimum motion cost =====
  *mv_x = offset_x + spiral_search_x[best_pos];
  *mv_y = offset_y + spiral_search_y[best_pos];
  return min_mcost;
}
#endif


/*!
 ***********************************************************************
 * \brief
 *    Calculate SA(T)D
 ***********************************************************************
 */
int
SATD (int* diff, int use_hadamard)
{
  int k, satd = 0, m[16], d[16];
  
  if (use_hadamard)
  {
    /*===== hadamard transform =====*/
    m[ 0] = diff[ 0] + diff[12];
    m[ 1] = diff[ 1] + diff[13];
    m[ 2] = diff[ 2] + diff[14];
    m[ 3] = diff[ 3] + diff[15];
    m[ 4] = diff[ 4] + diff[ 8];
    m[ 5] = diff[ 5] + diff[ 9];
    m[ 6] = diff[ 6] + diff[10];
    m[ 7] = diff[ 7] + diff[11];
    m[ 8] = diff[ 4] - diff[ 8];
    m[ 9] = diff[ 5] - diff[ 9];
    m[10] = diff[ 6] - diff[10];
    m[11] = diff[ 7] - diff[11];
    m[12] = diff[ 0] - diff[12];    
    m[13] = diff[ 1] - diff[13];        
    m[14] = diff[ 2] - diff[14];            
    m[15] = diff[ 3] - diff[15];
    
    d[ 0] = m[ 0] + m[ 4];
    d[ 1] = m[ 1] + m[ 5];
    d[ 2] = m[ 2] + m[ 6];
    d[ 3] = m[ 3] + m[ 7];
    d[ 4] = m[ 8] + m[12];
    d[ 5] = m[ 9] + m[13];
    d[ 6] = m[10] + m[14];
    d[ 7] = m[11] + m[15];
    d[ 8] = m[ 0] - m[ 4];
    d[ 9] = m[ 1] - m[ 5];
    d[10] = m[ 2] - m[ 6];
    d[11] = m[ 3] - m[ 7];
    d[12] = m[12] - m[ 8];
    d[13] = m[13] - m[ 9];
    d[14] = m[14] - m[10];
    d[15] = m[15] - m[11];
    
    m[ 0] = d[ 0] + d[ 3];
    m[ 1] = d[ 1] + d[ 2];
    m[ 2] = d[ 1] - d[ 2];
    m[ 3] = d[ 0] - d[ 3];
    m[ 4] = d[ 4] + d[ 7];
    m[ 5] = d[ 5] + d[ 6];
    m[ 6] = d[ 5] - d[ 6];
    m[ 7] = d[ 4] - d[ 7];
    m[ 8] = d[ 8] + d[11];
    m[ 9] = d[ 9] + d[10];
    m[10] = d[ 9] - d[10];
    m[11] = d[ 8] - d[11];
    m[12] = d[12] + d[15];
    m[13] = d[13] + d[14];
    m[14] = d[13] - d[14];
    m[15] = d[12] - d[15];
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av福利| 午夜精彩视频在线观看不卡| 91捆绑美女网站| 日本一不卡视频| 国产精品久久久久久久久搜平片 | 中文字幕在线一区免费| 欧美午夜电影一区| 国产成人免费视频网站| 日本va欧美va瓶| 亚洲免费大片在线观看| 久久久精品日韩欧美| 欧美日韩国产高清一区二区三区| 国产成a人亚洲| 精品制服美女久久| 亚洲v日本v欧美v久久精品| 国产精品久久久久婷婷| 久久久99精品免费观看不卡| 在线成人免费观看| 欧美婷婷六月丁香综合色| 不卡的电视剧免费网站有什么| 久久不见久久见免费视频7| 亚洲 欧美综合在线网络| 17c精品麻豆一区二区免费| 久久久91精品国产一区二区精品 | 欧美三级在线播放| 人禽交欧美网站| 欧美伦理电影网| 国产在线一区观看| 最近日韩中文字幕| 日韩欧美亚洲一区二区| 国产白丝网站精品污在线入口 | 美女视频黄久久| 欧美精品日韩精品| 国产不卡高清在线观看视频| 午夜电影网一区| 欧美午夜精品久久久久久超碰 | 国产精品国产自产拍高清av| 精品国产乱码久久久久久1区2区| 这里是久久伊人| 在线免费观看不卡av| 热久久久久久久| 中文字幕乱码亚洲精品一区| 欧美精品v国产精品v日韩精品| 国产成人午夜视频| 亚洲.国产.中文慕字在线| 中文字幕欧美区| 日韩一区二区三区在线| 91久久精品国产91性色tv| 麻豆精品久久精品色综合| 一区二区理论电影在线观看| 欧美激情在线观看视频免费| 日韩欧美国产三级电影视频| 欧美日韩一区二区在线观看| 91网页版在线| 成人性生交大片免费| 成人av免费在线观看| 一区二区三区中文字幕| 精品久久五月天| 欧美日韩成人综合天天影院 | 久久成人精品无人区| 国产丝袜欧美中文另类| 综合中文字幕亚洲| 成人夜色视频网站在线观看| 日本一区二区三区久久久久久久久不 | 日韩一区二区三区视频在线| 精品三级在线观看| 国产日韩欧美综合一区| 亚洲女同ⅹxx女同tv| 午夜精品爽啪视频| 色婷婷综合五月| 成人毛片视频在线观看| 99久久久精品| 欧美性三三影院| 久久综合久久鬼色中文字| 国产成人免费视| 色综合天天天天做夜夜夜夜做| 欧美日韩一卡二卡三卡| 在线不卡免费欧美| 久久国产乱子精品免费女| 国产一区二区三区高清播放| 3atv一区二区三区| 美女国产一区二区三区| 欧美一区二区黄色| 国内精品伊人久久久久av影院| 成人av网站在线| 欧美午夜寂寞影院| 中文字幕一区免费在线观看| 亚洲激情五月婷婷| 免费高清视频精品| 91精品久久久久久久久99蜜臂| 99久久婷婷国产综合精品电影| 一区二区三区精密机械公司| 日韩主播视频在线| 成人一二三区视频| 日韩视频一区二区三区| 亚洲欧美日韩国产综合| 久久97超碰国产精品超碰| 色哟哟精品一区| 久久久久久免费网| 天堂成人免费av电影一区| 成人激情免费视频| 日韩久久久精品| 亚洲福利一二三区| 日韩欧美国产不卡| 国产精品一区二区久久精品爱涩| 亚洲猫色日本管| 亚洲激情男女视频| 国产电影精品久久禁18| 91精品国产综合久久精品| 亚洲久草在线视频| 国产成人av资源| 精品国免费一区二区三区| 亚洲欧美日韩国产综合在线| 成人久久视频在线观看| 亚洲一区自拍偷拍| 国产精品羞羞答答xxdd| 日韩女优毛片在线| 色菇凉天天综合网| 亚瑟在线精品视频| 欧美午夜一区二区三区免费大片| 一区二区三区在线播放| 91福利区一区二区三区| 亚洲国产美女搞黄色| 欧美日韩在线播放一区| eeuss鲁片一区二区三区在线看| 欧美一区二区日韩| 亚洲mv在线观看| 欧美日韩日日摸| 亚洲一区二区视频在线| 91浏览器在线视频| 亚洲女厕所小便bbb| av激情亚洲男人天堂| 亚洲色图一区二区| 91性感美女视频| 亚洲精品国产精华液| 在线亚洲+欧美+日本专区| 亚洲精品va在线观看| 日本韩国一区二区| 午夜精品影院在线观看| 欧美日本国产一区| 奇米四色…亚洲| 欧美成人一区二区三区在线观看| 老色鬼精品视频在线观看播放| 欧美电影免费观看高清完整版在线观看 | 午夜激情久久久| 欧美精品高清视频| 美日韩一级片在线观看| 日韩精品一区二区在线| 国产在线精品一区二区三区不卡| 欧美精品一区二区三区蜜桃 | 日本一区中文字幕| 精品久久国产字幕高潮| 国产成人精品一区二区三区四区| 国产喷白浆一区二区三区| 99久久精品国产精品久久| 一区二区视频在线| 欧美伦理视频网站| 国产精品一区二区黑丝| 国产精品久久久久一区二区三区 | 亚洲成人在线观看视频| 91精品国产综合久久精品麻豆| 激情图片小说一区| 中文字幕一区二区三区乱码在线| av不卡在线观看| 香港成人在线视频| 精品成人一区二区| 99久久婷婷国产综合精品电影| 性感美女久久精品| 欧美日韩国产另类不卡| 欧美在线观看视频在线| 91精品久久久久久蜜臀| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本不卡在线视频| 日本欧美一区二区| 精品一区二区在线观看| 蜜桃av噜噜一区| 国产一区二区影院| 成人免费毛片高清视频| 豆国产96在线|亚洲| 国产一区欧美一区| 91麻豆国产精品久久| 欧美精品第1页| 综合久久综合久久| 高清不卡在线观看| 1000精品久久久久久久久| 欧美三级乱人伦电影| 国产精品123| 亚洲v日本v欧美v久久精品| 欧美激情资源网| 欧美一区日韩一区| 91小视频在线免费看| 精东粉嫩av免费一区二区三区| 亚洲美女屁股眼交3| 久久人人97超碰com| 欧美日韩国产首页| 99精品偷自拍| 国产精品12区| 黄色精品一二区| 午夜欧美一区二区三区在线播放| 国产精品盗摄一区二区三区|