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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pred.c

?? 基于H.263的圖像壓縮編解碼的C源碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  yvec = (bdy == 0 ? (TRB-TRD) *  mvy / TRD : TRB * mvy / TRD + bdy - mvy);

  /* Luma */

  FindBiDirLimits(xvec,&xstart,&xstop,nh);
  FindBiDirLimits(yvec,&ystart,&ystop,nv);

  BiDirPredBlock(xstart,xstop,ystart,ystop,xvec,yvec, recon_P,pred,16);

  return;
}

/**********************************************************************
 *
 *	Name:	       FindBiDirChrPredPB
 *	Description:   Finds the bi-dir. chroma prediction in PB-frame 
 *                     prediction
 *	
 *	Input:	       pointer to future recon. data, current positon,
 *                     MV structure and pred. structure to fill
 *
 ***********************************************************************/

void FindBiDirChrPredPB(MB_Structure *recon_P, int dx, int dy, 
        MB_Structure *pred)
{
  int xstart,xstop,ystart,ystop;

  FindBiDirChromaLimits(dx,&xstart,&xstop);
  FindBiDirChromaLimits(dy,&ystart,&ystop);

  BiDirPredBlock(xstart,xstop,ystart,ystop,dx,dy,
         &recon_P->Cb[0][0], &pred->Cb[0][0],8);
  BiDirPredBlock(xstart,xstop,ystart,ystop,dx,dy,
         &recon_P->Cr[0][0], &pred->Cr[0][0],8);

  return;
}

void FindBiDirLimits(int vec, int *start, int *stop, int nhv)
{

  /* limits taken from C loop in section G5 in H.263 */
  *start = mmax(0,(-vec+1)/2 - nhv*8);
  *stop = mmin(7,15-(vec+1)/2 - nhv*8);

  return;

}
  
void FindBiDirChromaLimits(int vec, int *start, int *stop)
{

  /* limits taken from C loop in section G5 in H.263 */
  *start = mmax(0,(-vec+1)/2);
  *stop = mmin(7,7-(vec+1)/2);

  return;
}


void BiDirPredBlock(int xstart, int xstop, int ystart, int ystop,
            int xvec, int yvec, int *recon, int *pred, int bl)
{
  int i,j,pel;
  int xint, yint;
  int xh, yh;

  xint = xvec>>1;
  xh = xvec - 2*xint;
  yint = yvec>>1;
  yh = yvec - 2*yint;

  if (!xh && !yh) {
    for (j = ystart; j <= ystop; j++) {
      for (i = xstart; i <= xstop; i++) {
        pel = *(recon +(j+yint)*bl + i+xint);
        *(pred + j*bl + i) = (mmin(255,mmax(0,pel)) + *(pred + j*bl + i))>>1;
      }
    }
  }
  else if (!xh && yh) {
    for (j = ystart; j <= ystop; j++) {
      for (i = xstart; i <= xstop; i++) {
        pel = (*(recon +(j+yint)*bl + i+xint)       + 
               *(recon +(j+yint+yh)*bl + i+xint) + 1)>>1;
        *(pred + j*bl + i) = (pel + *(pred + j*bl + i))>>1;
      }
    }
  }
  else if (xh && !yh) {
    for (j = ystart; j <= ystop; j++) {
      for (i = xstart; i <= xstop; i++) {
        pel = (*(recon +(j+yint)*bl + i+xint)       + 
               *(recon +(j+yint)*bl + i+xint+xh) + 1)>>1;
        *(pred + j*bl + i) = (pel + *(pred + j*bl + i))>>1;
      }
    }
  }
  else { /* xh && yh */
    for (j = ystart; j <= ystop; j++) {
      for (i = xstart; i <= xstop; i++) {
        pel = (*(recon +(j+yint)*bl + i+xint)       + 
               *(recon +(j+yint+yh)*bl + i+xint) + 
               *(recon +(j+yint)*bl + i+xint+xh) + 
               *(recon +(j+yint+yh)*bl + i+xint+xh)+2)>>2;
        *(pred + j*bl + i) = (pel + *(pred + j*bl + i))>>1;
      }
    }
  }
  return;
}

/**********************************************************************
 *
 *      Name:           DoPredChrom_P
 *	Description:	Does the chrominance prediction for P-frames
 *	
 *      Input:          motionvectors for each field,
 *                      current position in image,
 *                      pointers to current and previos image,
 *                      pointer to pred_error array,
 *                      (int) field: 1 if field coding
 *        
 *	Side effects:	fills chrom-array in pred_error structure
 *
 ***********************************************************************/

void DoPredChrom_P(int x_curr, int y_curr, int dx, int dy,
           PictImage *curr, PictImage *prev, 
           MB_Structure *pred_error)
{
  int m,n;

  int x, y, ofx, ofy, pel, lx;
  int xint, yint;
  int xh, yh;

  lx = (mv_outside_frame ? pels/2 + (long_vectors?32:16) : pels/2);

  x = x_curr>>1;
  y = y_curr>>1;

  xint = dx>>1;
  xh = dx & 1;
  yint = dy>>1;
  yh = dy & 1;

  if (!xh && !yh) {
    for (n = 0; n < 8; n++) {
      for (m = 0; m < 8; m++) {

        ofx = x + xint + m;
        ofy = y + yint + n;
        pel=*(prev->Cr+ofx    + (ofy   )*lx);
        pred_error->Cr[n][m] = (int)(*(curr->Cr + x+m + (y+n)*cpels) - pel);

        pel=*(prev->Cb+ofx    + (ofy   )*lx);
        pred_error->Cb[n][m] = (int)(*(curr->Cb + x+m + (y+n)*cpels) - pel);
      }
    }
  }
  else if (!xh && yh) {
    for (n = 0; n < 8; n++) {
      for (m = 0; m < 8; m++) {

        ofx = x + xint + m;
        ofy = y + yint + n;
        pel=(*(prev->Cr+ofx    + (ofy   )*lx)+
             *(prev->Cr+ofx    + (ofy+yh)*lx) + 1)>>1;

        pred_error->Cr[n][m] = 
          (int)(*(curr->Cr + x+m + (y+n)*cpels) - pel);

        pel=(*(prev->Cb+ofx    + (ofy   )*lx)+
             *(prev->Cb+ofx    + (ofy+yh)*lx) + 1)>>1;

        pred_error->Cb[n][m] = 
          (int)(*(curr->Cb + x+m + (y+n)*cpels) - pel);
      
      }
    }
  }
  else if (xh && !yh) {
    for (n = 0; n < 8; n++) {
      for (m = 0; m < 8; m++) {

        ofx = x + xint + m;
        ofy = y + yint + n;
        pel=(*(prev->Cr+ofx    + (ofy   )*lx)+
             *(prev->Cr+ofx+xh + (ofy   )*lx) + 1)>>1;

        pred_error->Cr[n][m] = 
          (int)(*(curr->Cr + x+m + (y+n)*cpels) - pel);

        pel=(*(prev->Cb+ofx    + (ofy   )*lx)+
             *(prev->Cb+ofx+xh + (ofy   )*lx) + 1)>>1;

        pred_error->Cb[n][m] = 
          (int)(*(curr->Cb + x+m + (y+n)*cpels) - pel);
      
      }
    }
  }
  else { /* xh && yh */
    for (n = 0; n < 8; n++) {
      for (m = 0; m < 8; m++) {
        ofx = x + xint + m;
        ofy = y + yint + n;
        pel=(*(prev->Cr+ofx    + (ofy   )*lx)+
             *(prev->Cr+ofx+xh + (ofy   )*lx)+
             *(prev->Cr+ofx    + (ofy+yh)*lx)+
             *(prev->Cr+ofx+xh + (ofy+yh)*lx)+
             2)>>2;

        pred_error->Cr[n][m] = 
          (int)(*(curr->Cr + x+m + (y+n)*cpels) - pel);

        pel=(*(prev->Cb+ofx    + (ofy   )*lx)+
             *(prev->Cb+ofx+xh + (ofy   )*lx)+
             *(prev->Cb+ofx    + (ofy+yh)*lx)+
             *(prev->Cb+ofx+xh + (ofy+yh)*lx)+
             2)>>2;

        pred_error->Cb[n][m] = 
          (int)(*(curr->Cb + x+m + (y+n)*cpels) - pel);
      
      }
    }
  }
  return;
}

/**********************************************************************
 *
 *      Name:         FindHalfPel
 *      Description:  Find the optimal half pel prediction
 *	
 *	Input:        position, vector, array with current data
 *                    pointer to previous interpolated luminance,
 *
 *	Returns:
 *
 ***********************************************************************/


void FindHalfPel(int x, int y, MotionVector *fr, unsigned char *prev, 
         int *curr, int bs, int comp)
{
  int i, m, n;
  int half_pel;
  int start_x, start_y, stop_x, stop_y, new_x, new_y, lx;
  int min_pos;
  int AE, AE_min;
  Point search[9];

  start_x = -1;
  stop_x = 1;
  start_y = -1;
  stop_y = 1;

  new_x = x + fr->x;
  new_y = y + fr->y;

  new_x += ((comp&1)<<3);
  new_y += ((comp&2)<<2);

  lx = (mv_outside_frame ? pels + (long_vectors?64:32) : pels);

  /* Make sure that no addressing is outside the frame */
  if (!mv_outside_frame) {
    if ((new_x) <= 0) 
      start_x = 0;
    if ((new_y) <= 0) 
      start_y = 0;
    if ((new_x) >= (pels-bs)) 
      stop_x = 0;
    if ((new_y) >= (lines-bs)) 
      stop_y = 0;
  }

  search[0].x = 0;        search[0].y = 0;
  search[1].x = start_x;        search[1].y = start_y; /*   1 2 3   */
  search[2].x = 0;        search[2].y = start_y; /*   4 0 5   */
  search[3].x = stop_x;        search[3].y = start_y; /*   6 7 8   */
  search[4].x = start_x;        search[4].y = 0;
  search[5].x = stop_x;        search[5].y = 0;
  search[6].x = start_x;        search[6].y = stop_y;
  search[7].x = 0;        search[7].y = stop_y;
  search[8].x = stop_x;        search[8].y = stop_y;

  AE_min = INT_MAX;
  min_pos = 0;
  for (i = 0; i < 9; i++) {
    AE = 0;
    for (n = 0; n < bs; n++) {
      for (m = 0; m < bs; m++) {
        /* Find absolute error */
        half_pel = *(prev + 2*new_x + 2*m + search[i].x +
             (2*new_y + 2*n + search[i].y)*lx*2);
        AE += abs(half_pel - *(curr + m + n*16));
      }
    }
    /*
     * if (i == 0 && fr->x == 0 && fr->y == 0 && bs == 16) 
     * AE -= PREF_NULL_VEC;
     */
    if (AE < AE_min) {
      AE_min = AE;
      min_pos = i;
    }
  }

  /* Store optimal values */
  fr->min_error = AE_min;
  fr->x_half = search[min_pos].x;
  fr->y_half = search[min_pos].y;
        
  return;
}

/**********************************************************************
 *
 *      Name:           FindPred
 *	Description:	Find the prediction block
 *	
 *      Input:          position, vector, array for prediction
 *                      pointer to previous interpolated luminance,
 *
 *	Side effects:	fills array with prediction
 *
 ***********************************************************************/


void FindPred(int x, int y, MotionVector *fr, unsigned char *prev, 
              int *pred, int bs, int comp)
{
  int m, n;
  int new_x, new_y;
  int lx;

  lx = (mv_outside_frame ? pels + (long_vectors?64:32) : pels);

  new_x = x + fr->x;
  new_y = y + fr->y;

  new_x += ((comp&1)<<3);
  new_y += ((comp&2)<<2);


  /* Fill pred. data */
  for (n = 0; n < bs; n++) {
    for (m = 0; m < bs; m++) {
      /* Find interpolated pixel-value */
      *(pred + m + n*16) = *(prev + (new_x + m)*2 + fr->x_half +
             ((new_y + n)*2 + fr->y_half)*lx*2);
    }	
  }
  return;
}

/**********************************************************************
 *
 *      Name:           FindPredOBMC
 *	Description:	Find the OBMC prediction block
 *	
 *      Input:          position, vector, array for prediction
 *                      pointer to previous interpolated luminance,
 *
 *	Returns:
 *	Side effects:	fills array with prediction
 *
 ***********************************************************************/


void FindPredOBMC(int x, int y, MotionVector *MV[6][MBR+1][MBC+2], 
          unsigned char *prev, int *pred, int comp, int PB)
{
  int m, n;
  int pc,pt,pb,pr,pl;
  int nxc,nxt,nxb,nxr,nxl;
  int nyc,nyt,nyb,nyr,nyl;
  int xit,xib,xir,xil;
  int yit,yib,yir,yil;
  int vect,vecb,vecr,vecl;
  int c8,t8,l8,r8;
  int ti8,li8,ri8;
  int xmb, ymb, lx;
  MotionVector *fc,*ft,*fb,*fr,*fl;

  int Mc[8][8] = {
    {4,5,5,5,5,5,5,4},
    {5,5,5,5,5,5,5,5},
    {5,5,6,6,6,6,5,5},
    {5,5,6,6,6,6,5,5},
    {5,5,6,6,6,6,5,5},
    {5,5,6,6,6,6,5,5},
    {5,5,5,5,5,5,5,5},
    {4,5,5,5,5,5,5,4},
  };
  int Mt[8][8] = {
    {2,2,2,2,2,2,2,2},
    {1,1,2,2,2,2,1,1},
    {1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,1,1},
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
  };
  int Mb[8][8] = {
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0},
    {1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,1,1},
    {1,1,2,2,2,2,1,1},
    {2,2,2,2,2,2,2,2},
  };
  int Mr[8][8] = {
    {0,0,0,0,1,1,1,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,2,2},
    {0,0,0,0,1,1,1,2},
  };
  int Ml[8][8] = {
    {2,1,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,2,1,1,0,0,0,0},
    {2,1,1,1,0,0,0,0},
  };

  xmb = x/MB_SIZE+1;
  ymb = y/MB_SIZE+1;

  lx = (mv_outside_frame ? pels + (long_vectors?64:32) : pels);

  c8  = (MV[0][ymb][xmb]->Mode == MODE_INTER4V ? 1 : 0);

  t8  = (MV[0][ymb-1][xmb]->Mode == MODE_INTER4V ? 1 : 0);
  ti8 = (MV[0][ymb-1][xmb]->Mode == MODE_INTRA ? 1 : 0);
  ti8 = (MV[0][ymb-1][xmb]->Mode == MODE_INTRA_Q ? 1 : ti8);

  l8  = (MV[0][ymb][xmb-1]->Mode == MODE_INTER4V ? 1 : 0);
  li8 = (MV[0][ymb][xmb-1]->Mode == MODE_INTRA ? 1 : 0);
  li8 = (MV[0][ymb][xmb-1]->Mode == MODE_INTRA_Q ? 1 : li8);
  
  r8  = (MV[0][ymb][xmb+1]->Mode == MODE_INTER4V ? 1 : 0);
  ri8 = (MV[0][ymb][xmb+1]->Mode == MODE_INTRA ? 1 : 0);
  ri8 = (MV[0][ymb][xmb+1]->Mode == MODE_INTRA_Q ? 1 : ri8);

  if (PB) {
    ti8 = li8 = ri8 = 0;
  }

  switch (comp+1) {

  case 1:
    vect = (ti8 ? (c8 ? 1 : 0) : (t8 ? 3 : 0)); 
    yit  = (ti8 ? ymb : ymb - 1); 
    xit = xmb;

    vecb = (c8 ? 3 : 0) ; yib = ymb; xib = xmb;

    vecl = (li8 ? (c8 ? 1 : 0) : (l8 ? 2 : 0)); 
    yil = ymb; 
    xil = (li8 ? xmb : xmb-1);

    vecr = (c8 ? 2 : 0) ; yir = ymb; xir = xmb;

    /* edge handling */
    if (ymb == 1) {
      yit = ymb;
      vect = (c8 ? 1 : 0);
    }
    if (xmb == 1) {
      xil = xmb;
      vecl = (c8 ? 1 : 0);
    }
    break;
  
  case 2:
    vect = (ti8 ? (c8 ? 2 : 0) : (t8 ? 4 : 0)); 
    yit = (ti8 ? ymb : ymb-1); 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大片在线观看| 日本伊人色综合网| 国产欧美日韩精品一区| 精品第一国产综合精品aⅴ| 7777精品伊人久久久大香线蕉的 | 亚洲柠檬福利资源导航| 国产精品久久久久桃色tv| 日本一区二区动态图| 中文字幕免费不卡| 国产精品动漫网站| 最新成人av在线| 一个色综合网站| 亚洲第一福利一区| 日韩精彩视频在线观看| 日韩国产精品91| 久久国产精品第一页| 黄网站免费久久| 国产成人精品免费| 99久久精品免费观看| 国产午夜精品一区二区三区嫩草| 精品av久久707| 久久亚洲综合色| 国产精品美女视频| 亚洲黄色小视频| 午夜视频一区二区| 精品综合久久久久久8888| 国内成人免费视频| 91在线观看一区二区| 91黄视频在线| 日韩一级欧美一级| 久久久午夜电影| 亚洲色图视频网| 午夜精品成人在线视频| 精彩视频一区二区三区| av一区二区三区四区| 欧美性色aⅴ视频一区日韩精品| 欧美电影在哪看比较好| 欧美在线观看一区| 日韩欧美不卡一区| 中文字幕在线观看不卡视频| 99久久久免费精品国产一区二区| 在线观看不卡一区| 精品三级av在线| 久久久国产午夜精品| 26uuu色噜噜精品一区| 国产精品久久久久天堂| 亚洲成人av资源| 国产永久精品大片wwwapp| 97aⅴ精品视频一二三区| 69精品人人人人| 国产精品麻豆久久久| 亚洲bdsm女犯bdsm网站| 国产69精品久久99不卡| 日本乱人伦一区| 久久综合狠狠综合久久综合88 | 久久久久久久久久久黄色| 国产精品第四页| 免费在线观看视频一区| 99久久婷婷国产精品综合| 日韩一区二区三区视频在线| 国产精品久久久久久久久动漫 | 日韩中文字幕1| 成a人片亚洲日本久久| 69成人精品免费视频| 综合欧美一区二区三区| 精品一区二区三区在线观看国产 | 色综合久久88色综合天天免费| 91精品国产综合久久国产大片| 国产精品网站在线播放| 日韩成人午夜电影| 色婷婷综合五月| 久久精品无码一区二区三区| 天天色天天操综合| 91社区在线播放| 国产女同互慰高潮91漫画| 99久久免费国产| 亚洲精品一区二区三区在线观看| 亚洲一区二区三区美女| 国产999精品久久久久久绿帽| 91精品黄色片免费大全| 一区二区三区av电影| 国产成a人亚洲精| 精品成人佐山爱一区二区| 亚洲电影激情视频网站| 91网上在线视频| 中文字幕av在线一区二区三区| 青青草一区二区三区| 欧美日韩中文字幕精品| 亚洲同性gay激情无套| 国产91清纯白嫩初高中在线观看 | 国产目拍亚洲精品99久久精品| 日本欧美一区二区在线观看| 欧美视频日韩视频在线观看| 中文字幕亚洲成人| a级高清视频欧美日韩| 国产亚洲欧美中文| 国产真实乱对白精彩久久| 欧美一区二区三区免费大片| 亚洲h在线观看| 欧美羞羞免费网站| 亚洲在线中文字幕| 日本韩国一区二区| 亚洲综合小说图片| 在线观看网站黄不卡| 一区二区三区四区在线| 一本一道综合狠狠老| 亚洲欧美另类久久久精品| 成人视屏免费看| 国产精品久久夜| 暴力调教一区二区三区| 国产精品久久毛片| 97se亚洲国产综合自在线不卡| 亚洲特黄一级片| 色综合夜色一区| 亚洲图片有声小说| 欧美一三区三区四区免费在线看 | 欧美日本国产一区| 日日夜夜精品视频免费| 日韩一区二区三区高清免费看看| 日韩成人dvd| www激情久久| 国产成人av一区二区| 中文字幕av资源一区| 94-欧美-setu| 亚洲激情综合网| 欧美伦理影视网| 精品一区二区免费视频| 久久久久久毛片| 99v久久综合狠狠综合久久| 亚洲免费色视频| 91精品福利在线一区二区三区| 精品一区二区日韩| 国产精品大尺度| 欧美系列日韩一区| 麻豆一区二区三| 中文无字幕一区二区三区| 91美女片黄在线观看91美女| 亚洲成av人片| 精品国产成人系列| 91网站在线播放| 日韩不卡一区二区| 国产日韩精品一区二区三区在线| 99re成人精品视频| 日韩国产精品久久久| 久久精子c满五个校花| 色婷婷激情综合| 免费成人在线观看| 亚洲欧美综合色| 欧美精选一区二区| 国产成人午夜视频| 亚洲一区二区三区在线看| 精品久久一区二区三区| 91麻豆文化传媒在线观看| 日韩成人免费电影| 亚洲欧洲三级电影| 欧美一区二区三级| 97精品电影院| 久久99蜜桃精品| 一区二区三区色| 久久久www免费人成精品| 欧美视频在线观看一区| 国产一区福利在线| 亚洲成人免费在线| 中文字幕+乱码+中文字幕一区| 欧美肥妇free| 不卡av在线免费观看| 免费观看30秒视频久久| 亚洲欧洲另类国产综合| 欧美一级高清片| 色综合色综合色综合色综合色综合 | 欧美日韩一二区| 成人久久18免费网站麻豆| 日本va欧美va欧美va精品| 自拍偷拍欧美精品| 久久亚洲二区三区| 欧美日韩黄视频| 99国产精品99久久久久久| 极品少妇xxxx精品少妇偷拍| 亚洲国产精品尤物yw在线观看| 国产精品素人视频| 日韩精品一区二区三区视频在线观看| 91啦中文在线观看| 国产成人午夜精品影院观看视频 | 成人免费高清视频在线观看| 免费精品视频在线| 亚洲大片一区二区三区| 国产精品不卡在线观看| 久久久久久久久久看片| 日韩女同互慰一区二区| 欧美日韩国产123区| 91久久精品一区二区三| av亚洲精华国产精华| 国产精品一区二区在线观看不卡| 奇米色一区二区| 五月婷婷综合网| 成人夜色视频网站在线观看| 久久国产日韩欧美精品| 免费在线观看精品| 免费美女久久99| 日本vs亚洲vs韩国一区三区|