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

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

?? mot_est.c

?? encoder 視頻會議 視頻編碼算法 源程序
?? C
字號:
#include"sim.h"/********************************************************************** * *	函數名:MotionEstimation *	函數功能:估計編碼塊的所有運動向量 *	函數輸入:curr:當前幀圖像數據的指針
 *			  prev:上一幀圖像數據的指針
 *			  x_curr:當前幀圖像分片的位置(水平方向)
 *			  y_curr:當前幀圖像分片的位置(豎直方向)
 *			  xoff:編碼宏塊的水平位置
 *			  yoff:編碼宏塊的豎直位置
 *			  seek_dist:運動估計的搜索區域
 *			  MV:運動向量
 *			  SAD_0:宏塊的SAD值 *	函數返回值:編碼宏塊中運動向量信息 ***********************************************************************/void MotionEstimation(unsigned char *curr, unsigned char *prev, int x_curr,              int y_curr, int xoff, int yoff, int seek_dist,               MotionVector *MV[6][MBR+1][MBC+2], int *SAD_0){  int Min_FRAME[5];  MotionVector MV_FRAME[5];  unsigned char *act_block,*aa,*ii;  unsigned char *search_area, *adv_search_area = NULL, *zero_area = NULL;  int sxy,i,k,j,l;  int ihigh,ilow,jhigh,jlow,h_length,v_length;  int adv_ihigh,adv_ilow,adv_jhigh,adv_jlow,adv_h_length,adv_v_length;  int xmax,ymax,block,sad,lx;  int adv_x_curr, adv_y_curr,xvec,yvec;  xmax = pels;  ymax = lines;  sxy = seek_dist;  if (!long_vectors) {    /* 以零向量為中心的最大搜索區域 */    sxy = mmin(15, sxy);    }  else {    /* 以預測為中心的最大擴展搜索范圍*/    sxy = mmin(15 - (2*DEF_8X8_WIN+1), sxy);        /* 對任意8x8和16x16的編碼塊,只有那些處在運動向量預測
	   周圍15x15的窗口區域的運動向量才能被傳送出來。 */    xoff = mmin(16,mmax(-16,xoff));    yoff = mmin(16,mmax(-16,yoff));  }  /* 通常不需要檢查(xoff + x_curr)的點是否在圖像幀之外,這是因為
     擴展運動區域總是同非限制性的MV模式同時使用 */  lx = (mv_outside_frame ? pels + (long_vectors?64:32) : pels);  ilow = x_curr + xoff - sxy;  ihigh = x_curr + xoff + sxy;  jlow = y_curr + yoff - sxy;  jhigh = y_curr + yoff + sxy;  if (!mv_outside_frame) {    if (ilow<0) ilow = 0;    if (ihigh>xmax-16) ihigh = xmax-16;    if (jlow<0) jlow = 0;    if (jhigh>ymax-16) jhigh = ymax-16;  }
  /* 編碼塊和運動估計搜索區域 */  h_length = ihigh - ilow + 16;  v_length = jhigh - jlow + 16;  act_block = LoadArea(curr, x_curr, y_curr, 16, 16, pels);  search_area = LoadArea(prev, ilow, jlow, h_length, v_length, lx);  for (k = 0; k < 5; k++) {    Min_FRAME[k] = INT_MAX;    MV_FRAME[k].x = 0;    MV_FRAME[k].y = 0;    MV_FRAME[k].x_half = 0;    MV_FRAME[k].y_half = 0;  }  /* 零向量搜索 */  if (x_curr-ilow         < 0        || y_curr-jlow         < 0        ||      x_curr-ilow+MB_SIZE > h_length || y_curr-jlow+MB_SIZE > v_length) {    /* 防止零向量跳出搜索區域的有效面積 */    zero_area = LoadArea(prev, x_curr, y_curr, 16, 16, lx);    *SAD_0 = SAD_Macroblock(zero_area, act_block, 16, Min_FRAME[0]) -       PREF_NULL_VEC;    free(zero_area);  }  else {    /* 零向量位于搜索區域內 */    ii = search_area + (x_curr-ilow) + (y_curr-jlow)*h_length;    *SAD_0 = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]) -       PREF_NULL_VEC;  }  /* 如果xoff和yoff等于0,即SAD_0成為最佳的編碼塊SAD值,那么零向量
     在所有模式下都可傳送,而不需要考慮MV預測值是怎么樣的。*/  if (xoff == 0 && yoff == 0) {    Min_FRAME[0] = *SAD_0;    MV_FRAME[0].x = 0;    MV_FRAME[0].y = 0;  }
  /* 如果xoff或yoff不等于0,那么系統使用擴展的MV搜索范圍。*/  else {    ii = search_area + (x_curr+xoff-ilow) + (y_curr+yoff-jlow)*h_length;    Min_FRAME[0] = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]);    MV_FRAME[0].x = xoff;    MV_FRAME[0].y = yoff;  }  /* 盤旋搜索 */  for (l = 1; l <= sxy; l++) {    i = x_curr + xoff - l;    j = y_curr + yoff - l;    for (k = 0; k < 8*l; k++) {      if (i>=ilow && i<=ihigh && j>=jlow && j<=jhigh) {        /* 16x16整數個像素MV */        ii = search_area + (i-ilow) + (j-jlow)*h_length;        sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]);        if (sad < Min_FRAME[0]) {          MV_FRAME[0].x = i - x_curr;          MV_FRAME[0].y = j - y_curr;          Min_FRAME[0] = sad;        }      }      if      (k<2*l) i++;      else if (k<4*l) j++;      else if (k<6*l) i--;      else            j--;    }        }  if (advanced) {    /* 以8x8的區域為中心尋找16x16的運動向量,這里仍然采用全局搜索的方法。
	   這樣做的原因:1)這種方法更快;2)這種方法能得到更好的結果;3)如
	   果運用了擴展的MV搜索范圍,那么在運動向量預測周圍的搜索范圍將會降低
	   限制。*/    xvec = MV_FRAME[0].x;    yvec = MV_FRAME[0].y;        if (!long_vectors) {      if (xvec > 15 - DEF_8X8_WIN) { xvec =  15 - DEF_8X8_WIN ;}      if (yvec > 15 - DEF_8X8_WIN) { yvec =  15 - DEF_8X8_WIN ;}      if (xvec < -15 + DEF_8X8_WIN) { xvec =  -15 + DEF_8X8_WIN ;}      if (yvec < -15 + DEF_8X8_WIN) { yvec =  -15 + DEF_8X8_WIN ;}    }    adv_x_curr = x_curr  + xvec;    adv_y_curr = y_curr  + yvec;    sxy = DEF_8X8_WIN;    adv_ilow = adv_x_curr - sxy;    adv_ihigh = adv_x_curr + sxy;    adv_jlow = adv_y_curr - sxy;    adv_jhigh = adv_y_curr + sxy;    adv_h_length = adv_ihigh - adv_ilow + 16;    adv_v_length = adv_jhigh - adv_jlow + 16;    adv_search_area = LoadArea(prev, adv_ilow, adv_jlow,                adv_h_length, adv_v_length, lx);    for (block = 0; block < 4; block++) {      ii = adv_search_area + (adv_x_curr-adv_ilow) + ((block&1)<<3) +         (adv_y_curr-adv_jlow + ((block&2)<<2) )*adv_h_length;      aa = act_block + ((block&1)<<3) + ((block&2)<<2)*16;      Min_FRAME[block+1] = SAD_Block(ii,aa,adv_h_length,Min_FRAME[block+1]);      MV_FRAME[block+1].x = MV_FRAME[0].x;      MV_FRAME[block+1].y = MV_FRAME[0].y;    }    /* 盤旋搜索 */    for (l = 1; l <= sxy; l++) {      i = adv_x_curr - l;      j = adv_y_curr - l;      for (k = 0; k < 8*l; k++) {        if (i>=adv_ilow && i<=adv_ihigh && j>=adv_jlow && j<=adv_jhigh) {                    /* 8x8整數個像素MV */          for (block = 0; block < 4; block++) {            ii = adv_search_area + (i-adv_ilow) + ((block&1)<<3) +               (j-adv_jlow + ((block&2)<<2) )*adv_h_length;            aa = act_block + ((block&1)<<3) + ((block&2)<<2)*16;            sad = SAD_Block(ii, aa, adv_h_length, Min_FRAME[block+1]);            if (sad < Min_FRAME[block+1]) {              MV_FRAME[block+1].x = i - x_curr;              MV_FRAME[block+1].y = j - y_curr;              Min_FRAME[block+1] = sad;            }          }                  }        if      (k<2*l) i++;        else if (k<4*l) j++;        else if (k<6*l) i--;        else            j--;      }          }  }  i = x_curr/MB_SIZE+1;  j = y_curr/MB_SIZE+1;  if (!advanced) {    MV[0][j][i]->x = MV_FRAME[0].x;    MV[0][j][i]->y = MV_FRAME[0].y;    MV[0][j][i]->min_error = Min_FRAME[0];  }  else {    for (k = 0; k < 5; k++) {      MV[k][j][i]->x = MV_FRAME[k].x;      MV[k][j][i]->y = MV_FRAME[k].y;      MV[k][j][i]->min_error = Min_FRAME[k];    }  }  free(act_block);  free(search_area);  if (advanced)    free(adv_search_area);  return;}/********************************************************************** * *	函數名:LoadArea *	函數功能:利用一個方塊區域的圖像數據填充矩陣 *	函數輸入:im:圖像塊數據指針
 *			  x:圖像塊的水平位置
 *			  y:圖像塊的豎直位置
 *			  x_size:矩陣的水平尺寸
 *			  y_size:矩陣的豎直尺寸
 *			  lx:輔助變量,將矩陣和圖像的訪問形式轉換為一維數組形式 *	函數返回值:圖像區域數據指針  ***********************************************************************/unsigned char *LoadArea(unsigned char *im, int x, int y,         int x_size, int y_size, int lx){  unsigned char *res = (unsigned char *)malloc(sizeof(char)*x_size*y_size);  unsigned char *in;  unsigned char *out;  int i = x_size;  int j = y_size;  in = im + (y*lx) + x;  out = res;  while (j--) {    while (i--)      *out++ = *in++;    i = x_size;    in += lx - x_size;  };  return res;}/********************************************************************** * *	函數名:SAD_Macroblock *	函數功能:計算一個運動向量的SAD值 *	函數輸入值:ii:當前搜索區域的數據指針
 *				act_block:當前的編碼塊
 *				h_length:編碼塊高度值
 *				Min_FRAME:當前幀最小的SAD值
 *  函數返回值:宏塊運動向量的SAD值  ***********************************************************************/int SAD_Macroblock(unsigned char *ii, unsigned char *act_block,           int h_length, int Min_FRAME){  int i;  int sad = 0;  unsigned char *kk;  kk = act_block;  i = 16;  while (i--) {    sad += (abs(*ii     - *kk     ) +abs(*(ii+1 ) - *(kk+1) )            +abs(*(ii+2) - *(kk+2) ) +abs(*(ii+3 ) - *(kk+3) )            +abs(*(ii+4) - *(kk+4) ) +abs(*(ii+5 ) - *(kk+5) )            +abs(*(ii+6) - *(kk+6) ) +abs(*(ii+7 ) - *(kk+7) )            +abs(*(ii+8) - *(kk+8) ) +abs(*(ii+9 ) - *(kk+9) )            +abs(*(ii+10)- *(kk+10)) +abs(*(ii+11) - *(kk+11))            +abs(*(ii+12)- *(kk+12)) +abs(*(ii+13) - *(kk+13))            +abs(*(ii+14)- *(kk+14)) +abs(*(ii+15) - *(kk+15)) );    ii += h_length;    kk += 16;    if (sad > Min_FRAME)      return INT_MAX;  }   return sad;}int SAD_Block(unsigned char *ii, unsigned char *act_block,              int h_length, int min_sofar){  int i;  int sad = 0;  unsigned char *kk;  kk = act_block;  i = 8;  while (i--) {    sad += (abs(*ii     - *kk     ) +abs(*(ii+1 ) - *(kk+1) )            +abs(*(ii+2) - *(kk+2) ) +abs(*(ii+3 ) - *(kk+3) )            +abs(*(ii+4) - *(kk+4) ) +abs(*(ii+5 ) - *(kk+5) )            +abs(*(ii+6) - *(kk+6) ) +abs(*(ii+7 ) - *(kk+7) ));    ii += h_length;    kk += 16;    if (sad > min_sofar)      return INT_MAX;  }   return sad;}int SAD_MB_Bidir(unsigned char *ii, unsigned char *aa, unsigned char *bb,          int width, int min_sofar){  int i, sad = 0;  unsigned char *ll, *kk;  kk = aa;  ll = bb;  i = 16;  while (i--) {    sad += (abs(*ii     - ((*kk    + *ll    )>>1)) +            abs(*(ii+1) - ((*(kk+1)+ *(ll+1))>>1)) +            abs(*(ii+2) - ((*(kk+2)+ *(ll+2))>>1)) +            abs(*(ii+3) - ((*(kk+3)+ *(ll+3))>>1)) +            abs(*(ii+4) - ((*(kk+4)+ *(ll+4))>>1)) +            abs(*(ii+5) - ((*(kk+5)+ *(ll+5))>>1)) +            abs(*(ii+6) - ((*(kk+6)+ *(ll+6))>>1)) +            abs(*(ii+7) - ((*(kk+7)+ *(ll+7))>>1)) +            abs(*(ii+8) - ((*(kk+8)+ *(ll+8))>>1)) +            abs(*(ii+9) - ((*(kk+9)+ *(ll+9))>>1)) +            abs(*(ii+10) - ((*(kk+10)+ *(ll+10))>>1)) +            abs(*(ii+11) - ((*(kk+11)+ *(ll+11))>>1)) +            abs(*(ii+12) - ((*(kk+12)+ *(ll+12))>>1)) +            abs(*(ii+13) - ((*(kk+13)+ *(ll+13))>>1)) +            abs(*(ii+14) - ((*(kk+14)+ *(ll+14))>>1)) +            abs(*(ii+15) - ((*(kk+15)+ *(ll+15))>>1)));    ii += width;    kk += width;    ll += width;    if (sad > min_sofar)      return INT_MAX;  }   return sad;}int SAD_MB_integer(int *ii, int *act_block, int h_length, int min_sofar){  int i, sad = 0, *kk;  kk = act_block;  i = 16;  while (i--) {    sad += (abs(*ii     - *kk     ) +abs(*(ii+1 ) - *(kk+1) )            +abs(*(ii+2) - *(kk+2) ) +abs(*(ii+3 ) - *(kk+3) )            +abs(*(ii+4) - *(kk+4) ) +abs(*(ii+5 ) - *(kk+5) )            +abs(*(ii+6) - *(kk+6) ) +abs(*(ii+7 ) - *(kk+7) )            +abs(*(ii+8) - *(kk+8) ) +abs(*(ii+9 ) - *(kk+9) )            +abs(*(ii+10)- *(kk+10)) +abs(*(ii+11) - *(kk+11))            +abs(*(ii+12)- *(kk+12)) +abs(*(ii+13) - *(kk+13))            +abs(*(ii+14)- *(kk+14)) +abs(*(ii+15) - *(kk+15)) );    ii += h_length;    kk += 16;    if (sad > min_sofar)      return INT_MAX;  }   return sad;}/********************************************************************** * *	函數名:FindMB
 *  函數功能:從當前視頻幀中找出一個編碼宏塊
 *  函數輸入:x:所要尋找的宏塊的水平位置
 *			  y:所要尋找的宏塊的豎直位置
 *			  image:視頻幀的數據指針
 *			  MB:一個空的16x16大小的二維數組,存放宏塊的數據 ***********************************************************************/void FindMB(int x, int y, unsigned char *image, int MB[16][16]){  int n;  register int m;  for (n = 0; n < MB_SIZE; n++)    for (m = 0; m < MB_SIZE; m++)      MB[n][m] = *(image + x+m + (y+n)*pels);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久久99999| 欧美日韩国产高清一区二区| 日本在线不卡一区| 一区二区三区精品| 一区二区三区.www| 亚洲亚洲精品在线观看| 亚洲激情自拍偷拍| 亚洲h在线观看| 另类中文字幕网| 狠狠狠色丁香婷婷综合激情| 国产在线乱码一区二区三区| 国产精品一区不卡| 91在线一区二区| 91精品91久久久中77777| 欧洲一区二区三区在线| 精品视频1区2区| 欧美变态口味重另类| 欧美国产丝袜视频| 亚洲欧美另类在线| 天天av天天翘天天综合网色鬼国产 | 久久er99热精品一区二区| 久久精品国产色蜜蜜麻豆| 国产精品自拍毛片| 色综合久久天天| 欧美一区二区三区影视| 国产日韩欧美制服另类| 亚洲精品一二三| 麻豆精品久久久| 99在线视频精品| 日韩一区二区三区在线视频| 久久综合九色综合97婷婷女人| 国产精品白丝在线| 免费在线观看不卡| 91蜜桃视频在线| 精品国产91乱码一区二区三区 | 亚洲欧美激情在线| 蜜臀va亚洲va欧美va天堂| 成人国产电影网| 91精品国产91久久久久久一区二区| 久久蜜桃av一区二区天堂 | 久久久精品人体av艺术| 日韩毛片在线免费观看| 美女一区二区视频| 欧美影院午夜播放| 欧美激情综合五月色丁香| 视频一区视频二区在线观看| 国产xxx精品视频大全| 欧美一区二区三区婷婷月色| 日韩毛片一二三区| 激情综合网激情| 69堂成人精品免费视频| 亚洲人成网站在线| 粉嫩13p一区二区三区| 日韩午夜激情av| 午夜视黄欧洲亚洲| 欧美这里有精品| 亚洲欧美日韩电影| 成人国产精品免费观看视频| 久久久亚洲综合| 久久精品国产一区二区三区免费看 | 亚洲综合免费观看高清完整版| 国产福利一区在线观看| 精品免费99久久| 麻豆精品一区二区av白丝在线| 欧洲精品一区二区| 一区二区三区 在线观看视频| 成人综合婷婷国产精品久久蜜臀| 欧美变态口味重另类| 日本aⅴ免费视频一区二区三区| 在线观看91精品国产入口| 亚洲欧洲另类国产综合| 99re成人精品视频| 成人欧美一区二区三区视频网页| 国产91丝袜在线播放九色| 久久久精品2019中文字幕之3| 精品一区二区三区日韩| 精品国产一区二区三区av性色| 久久精品国产99国产精品| 精品欧美一区二区三区精品久久| 麻豆久久久久久久| www精品美女久久久tv| 国产成人午夜视频| 成人免费在线播放视频| 色丁香久综合在线久综合在线观看| 亚洲欧美欧美一区二区三区| 欧美日韩一区二区在线观看视频| 亚洲丶国产丶欧美一区二区三区| 欧美色偷偷大香| 六月丁香综合在线视频| 久久久三级国产网站| 成人av在线电影| 一区二区三区美女| 日韩精品一区在线观看| 国产精品18久久久久| 亚洲私人黄色宅男| 欧美视频完全免费看| 精品一区二区影视| 国产精品久久久久久久久免费丝袜 | 欧美成人a∨高清免费观看| 国产精品资源在线看| 亚洲精品日产精品乱码不卡| 欧美三级日本三级少妇99| 日韩电影在线一区| 国产精品区一区二区三区| 欧美视频一区在线| 国产电影精品久久禁18| 亚洲国产三级在线| 国产喂奶挤奶一区二区三区| 欧美在线看片a免费观看| 久久激情五月激情| 一区二区国产视频| 精品国产伦一区二区三区观看方式 | 欧美浪妇xxxx高跟鞋交| 狠狠色丁香婷婷综合| 亚洲激情欧美激情| 久久久久国产一区二区三区四区 | av动漫一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品精品国产高清a毛片牛牛| 91视频免费看| 国精产品一区一区三区mba视频| 亚洲精品久久7777| 国产日韩欧美精品综合| 欧美一区二区三区人| 在线中文字幕不卡| 成人av在线播放网站| 国产综合久久久久久鬼色| 亚洲国产人成综合网站| 国产精品美女久久久久久 | 91国产福利在线| 国产成人精品亚洲777人妖 | 日韩精品一区二区三区在线观看 | 国产91对白在线观看九色| 美洲天堂一区二卡三卡四卡视频| 一区二区三区欧美激情| 亚洲色图.com| 中文av字幕一区| 国产网红主播福利一区二区| 欧美xfplay| 7777精品伊人久久久大香线蕉的 | av成人动漫在线观看| 国产成人8x视频一区二区| 久久精品72免费观看| 蜜桃久久久久久| 老司机午夜精品99久久| 青青草原综合久久大伊人精品 | 在线看一区二区| 在线观看视频一区二区| 在线观看中文字幕不卡| 色综合久久中文字幕| 91国产精品成人| 欧美日韩亚洲丝袜制服| 欧美三级韩国三级日本三斤| 欧美私模裸体表演在线观看| 欧洲色大大久久| 欧美日韩成人高清| 日韩精品一区二区三区四区视频| 51精品秘密在线观看| 欧美成人精品福利| 国产亚洲欧洲997久久综合| 国产日韩欧美综合在线| 亚洲欧洲中文日韩久久av乱码| 亚洲日本乱码在线观看| 一区二区三区中文在线| 五月天亚洲婷婷| 国产一区不卡精品| thepron国产精品| 欧美日韩亚洲不卡| 欧美一级欧美一级在线播放| 欧美xxx久久| 一区在线观看视频| 日韩国产欧美视频| 国产毛片精品国产一区二区三区| av一区二区三区| 欧美福利视频一区| 精品成人一区二区| 亚洲日本电影在线| 天堂在线亚洲视频| 国产精品亚洲视频| 欧美色窝79yyyycom| 精品成人在线观看| 亚洲综合久久久久| 久久国产综合精品| 色婷婷久久一区二区三区麻豆| 7777精品伊人久久久大香线蕉| 精品久久久久久久人人人人传媒| 中文字幕国产一区二区| 午夜久久久久久久久久一区二区| 久久99精品久久久久婷婷| 99久久精品国产一区| 精品久久国产老人久久综合| 亚洲人精品一区| 国产精品一区二区久激情瑜伽| 欧美日韩另类国产亚洲欧美一级| 精品99999| 偷拍亚洲欧洲综合| 色菇凉天天综合网| 国产精品热久久久久夜色精品三区| 午夜激情综合网| 91美女在线视频|