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

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

?? erc_do_i.c

?? TML的參考源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
 *      Number of blocks belonging to a MB, when counting
 *      in vertical/horizontal direction. (Y:2 U,V:1)
 ************************************************************************
 */
int ercCollectColumnBlocks( int predBlocks[], int currRow, int currColumn, int *condition, int maxRow, int maxColumn, int step )
{
  int srcCounter = 0, threshold = ERC_BLOCK_CORRUPTED;
  
  memset( predBlocks, 0, 8*sizeof(int) );
  
  /* in this case, row > 0 and row < 17 */
  if ( condition[ (currRow-1)*maxColumn + currColumn ] > threshold ) 
  {
    predBlocks[4] = 1;
    srcCounter++;
  }
  if ( condition[ (currRow+step)*maxColumn + currColumn ] > threshold ) 
  {
    predBlocks[6] = 1;
    srcCounter++;
  }
  
  return srcCounter;
}

/*!
 ************************************************************************
 * \brief
 *      Core for the Intra blocks concealment.
 *      It is called for each color component (Y,U,V) seperately
 *      Finds the corrupted blocks and calls pixel interpolation functions 
 *      to correct them, one block at a time.
 *      Scanning is done vertically and each corrupted column is corrected
 *      bi-directionally, i.e., first block, last block, first block+1, last block -1 ...
 * \param lastColumn  
 *      Number of block columns in the frame
 * \param lastRow     
 *      Number of block rows in the frame
 * \param recfr
 *      Reconstructed frame buffer
 * \param picSizeX
 *      Width of the frame in pixels
 * \param condition
 *      The block condition (ok, lost) table
 ************************************************************************
 */
static void concealBlocks( int lastColumn, int lastRow, int comp, frame *recfr, int32 picSizeX, int *condition )
{
  int row, column, srcCounter = 0,  thr = ERC_BLOCK_CORRUPTED,
      lastCorruptedRow = -1, firstCorruptedRow = -1, currRow = 0, 
      areaHeight = 0, i = 0, smoothColumn = 0;
  int predBlocks[8], step = 1;
  
  /* in the Y component do the concealment MB-wise (not block-wise):
  this is useful if only whole MBs can be damaged or lost */
  if ( comp == 0 )
    step = 2;
  else
    step = 1;
  
  for ( column = 0; column < lastColumn; column += step ) 
  {
    for ( row = 0; row < lastRow; row += step ) 
    {
      if ( condition[row*lastColumn+column] <= thr ) 
      {
        firstCorruptedRow = row;
        /* find the last row which has corrupted blocks (in same continuous area) */
        for ( lastCorruptedRow = row+step; lastCorruptedRow < lastRow; lastCorruptedRow += step ) 
        {
          /* check blocks in the current column */
          if ( condition[ lastCorruptedRow*lastColumn + column ] > thr ) 
          {
            /* current one is already OK, so the last was the previous one */
            lastCorruptedRow -= step;
            break;
          }
        }
        if ( lastCorruptedRow >= lastRow ) 
        {
          /* correct only from above */
          lastCorruptedRow = lastRow-step;
          for ( currRow = firstCorruptedRow; currRow < lastRow; currRow += step ) 
          {
            srcCounter = ercCollect8PredBlocks( predBlocks, currRow, column, condition, lastRow, lastColumn, step, 1 );
          
            switch( comp ) 
            {
            case 0 :
              ercPixConcealIMB( recfr->yptr, currRow, column, predBlocks, picSizeX, 2 );
              break;
            case 1 :
              ercPixConcealIMB( recfr->uptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
            case 2 :
              ercPixConcealIMB( recfr->vptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
            }
            
            if ( comp == 0 ) 
            {
              condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + 1] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn + 1] = ERC_BLOCK_CONCEALED;
            }
            else 
            {
              condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;
            }
            
          }
          row = lastRow;
        } 
        else if ( firstCorruptedRow == 0 ) 
        {
          /* correct only from below */
          for ( currRow = lastCorruptedRow; currRow >= 0; currRow -= step ) 
          {
            srcCounter = ercCollect8PredBlocks( predBlocks, currRow, column, condition, lastRow, lastColumn, step, 1 );
            
            switch( comp ) 
            {
            case 0 :
              ercPixConcealIMB( recfr->yptr, currRow, column, predBlocks, picSizeX, 2 );
              break;
            case 1 :
              ercPixConcealIMB( recfr->uptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
            case 2 :
              ercPixConcealIMB( recfr->vptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
            }
            
            if ( comp == 0 ) 
            {
              condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + 1] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn + 1] = ERC_BLOCK_CONCEALED;
            }
            else 
            {
              condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;
            }
            
          }
          
          row = lastCorruptedRow+step;
        }
        else 
        {
          /* correct bi-directionally */
          
          row = lastCorruptedRow+step;
          areaHeight = lastCorruptedRow-firstCorruptedRow+step;
          
          /* 
          *  Conceal the corrupted area switching between the up and the bottom rows 
          */
          for ( i = 0; i < areaHeight; i += step ) 
          {
            if ( i % 2 ) 
            {
              currRow = lastCorruptedRow;
              lastCorruptedRow -= step;
            }
            else 
            {
              currRow = firstCorruptedRow;
              firstCorruptedRow += step;
            }
            
            if (smoothColumn > 0) 
            {
              srcCounter = ercCollectColumnBlocks( predBlocks, currRow, column, condition, lastRow, lastColumn, step );
            }
            else 
            {
              srcCounter = ercCollect8PredBlocks( predBlocks, currRow, column, condition, lastRow, lastColumn, step, 1 );
            }
            
            switch( comp ) 
            {
            case 0 :
              ercPixConcealIMB( recfr->yptr, currRow, column, predBlocks, picSizeX, 2 );
              break;
              
            case 1 :
              ercPixConcealIMB( recfr->uptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
              
            case 2 :
              ercPixConcealIMB( recfr->vptr, currRow, column, predBlocks, (picSizeX>>1), 1 );
              break;
            }
            
            if ( comp == 0 ) 
            {
              condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + 1] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn] = ERC_BLOCK_CONCEALED;
              condition[ currRow*lastColumn+column + lastColumn + 1] = ERC_BLOCK_CONCEALED;
            }
            else 
            {
              condition[ currRow*lastColumn+column ] = ERC_BLOCK_CONCEALED;
            }
          }
        }

        lastCorruptedRow = -1;
        firstCorruptedRow = -1;

      }
    }
  }
}

/*!
 ************************************************************************
 * \brief
 *      Does the actual pixel based interpolation for block[]
 *      using weighted average
 * \param src[] 
 *      pointers to neighboring source blocks
 * \param block     
 *      destination block
 * \param blockSize
 *      16 for Y, 8 for U/V components
 * \param frameWidth
 *      Width of the frame in pixels
 ************************************************************************
 */
static void pixMeanInterpolateBlock( byte *src[], byte *block, int blockSize, int frameWidth )
{
  int row, column, k, tmp, srcCounter = 0, weight = 0, bmax = blockSize - 1;
  
  k = 0;
  for ( row = 0; row < blockSize; row++ ) 
  {
    for ( column = 0; column < blockSize; column++ ) 
    {
      tmp = 0;
      srcCounter = 0;
      /* above */
      if ( src[4] != NULL )   
      {
        weight = blockSize-row;
        tmp += weight * (*(src[4]+bmax*frameWidth+column));
        srcCounter += weight;
      }
      /* left */
      if ( src[5] != NULL )   
      {
        weight = blockSize-column;
        tmp += weight * (*(src[5]+row*frameWidth+bmax));
        srcCounter += weight;
      }
      /* below */
      if ( src[6] != NULL )   
      {
        weight = row+1;
        tmp += weight * (*(src[6]+column));
        srcCounter += weight;
      }
      /* right */
      if ( src[7] != NULL )   
      {
        weight = column+1;
        tmp += weight * (*(src[7]+row*frameWidth));
        srcCounter += weight;
      }

      if ( srcCounter > 0 )
        block[ k + column ] = (byte)(tmp/srcCounter);
      else 
        block[ k + column ] = 127;
    }
    k += frameWidth;
  }
  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久一区二区三区| 欧美久久久久久久久久| 蜜臀久久久久久久| 亚洲一区二区在线免费看| 亚洲欧美激情插 | 久久精品人人做人人综合 | 欧美日韩一区小说| 色偷偷一区二区三区| 91在线一区二区三区| 9i在线看片成人免费| 色婷婷久久综合| 色国产精品一区在线观看| 在线观看欧美精品| 欧美精品亚洲一区二区在线播放| 91精品国产色综合久久不卡电影 | 色综合视频一区二区三区高清| 不卡一二三区首页| 日本乱人伦一区| 9191成人精品久久| 欧美电视剧免费观看| 国产欧美日韩在线看| 亚洲欧洲日韩一区二区三区| 亚洲精品免费在线观看| 欧美aaaaa成人免费观看视频| 蜜臀久久久久久久| 成人免费精品视频| 精品视频123区在线观看| 91精品国产综合久久精品图片| 亚洲精品在线免费观看视频| 中文字幕av一区 二区| 亚洲精品国产视频| 久久er99精品| 91影院在线观看| 欧美一区二区视频免费观看| 国产人伦精品一区二区| 亚洲国产一区视频| 国产精品一区免费视频| 在线观看国产日韩| 久久中文娱乐网| 亚洲一级在线观看| 激情深爱一区二区| 在线观看免费成人| 中文字幕第一区| 日本美女一区二区三区视频| 丰满少妇在线播放bd日韩电影| 欧美自拍偷拍午夜视频| 2022国产精品视频| 视频一区视频二区中文| 成人h版在线观看| 日韩视频一区二区在线观看| 亚洲另类春色国产| 国产精品亚洲人在线观看| 欧美私模裸体表演在线观看| 亚洲国产成人在线| 国精品**一区二区三区在线蜜桃| 欧美在线你懂得| 国产精品久久久久国产精品日日 | 精品一二线国产| 欧美日韩免费观看一区二区三区| 欧美国产成人精品| 激情偷乱视频一区二区三区| 在线播放91灌醉迷j高跟美女| 亚洲欧美一区二区视频| 国产精品一二三四五| 日韩午夜激情视频| 日韩精品高清不卡| 欧美中文字幕久久| 亚洲午夜免费电影| 色88888久久久久久影院按摩| 国产精品毛片久久久久久| 国产一区二区三区高清播放| 精品国产青草久久久久福利| 青青草91视频| 欧美电影免费观看高清完整版 | |精品福利一区二区三区| 成人午夜视频福利| 久久精品日韩一区二区三区| 国产成人日日夜夜| 国产人伦精品一区二区| 高清不卡一区二区在线| 国产视频911| 波多野结衣精品在线| 中文字幕一区二| 91蜜桃免费观看视频| 亚洲精品伦理在线| 在线观看免费亚洲| 日本一道高清亚洲日美韩| 91精品国产麻豆| 久久成人精品无人区| 久久蜜桃一区二区| 成人深夜福利app| 亚洲另类在线视频| 69堂亚洲精品首页| 激情久久五月天| 国产精品天干天干在观线| 99久久国产综合色|国产精品| 亚洲激情综合网| 91精品国产综合久久精品app| 美国毛片一区二区| 国产精品久久久久久久第一福利 | 亚洲一区av在线| 精品三级在线看| 成人app网站| 视频一区视频二区中文| 欧美精品一区二区三区久久久| 国产成人三级在线观看| 一区二区三区91| 亚洲精品一区二区三区影院| 成人av在线网| 日韩成人精品在线观看| 欧美高清一级片在线观看| 91成人网在线| 国产精品影视网| 亚洲国产另类精品专区| 久久久久9999亚洲精品| 欧美视频精品在线| www.欧美日韩| 六月丁香婷婷色狠狠久久| 中文字幕在线不卡视频| 欧美一卡二卡在线| 99re66热这里只有精品3直播 | 欧美日韩一区三区| 韩国av一区二区三区在线观看| 亚洲美女精品一区| 26uuu国产在线精品一区二区| 日本久久精品电影| 国产高清亚洲一区| 五月天婷婷综合| 中文字幕亚洲区| 337p粉嫩大胆色噜噜噜噜亚洲| 色综合天天天天做夜夜夜夜做| 国产在线精品视频| 丝袜美腿亚洲综合| 亚洲欧美日韩国产手机在线 | 蜜臀久久久99精品久久久久久| 亚洲欧洲三级电影| 国产免费成人在线视频| 日韩午夜激情视频| 欧美日韩精品久久久| 欧美自拍偷拍一区| 91丨九色porny丨蝌蚪| 国产成人免费视频网站| 免费看日韩精品| 日韩国产欧美在线视频| 亚洲综合清纯丝袜自拍| 亚洲色图在线视频| 日韩毛片在线免费观看| 欧美韩国一区二区| 亚洲国产精品高清| 国产精品美女一区二区在线观看| 久久综合五月天婷婷伊人| 国产精品麻豆视频| |精品福利一区二区三区| 中文字幕在线免费不卡| 亚洲色图第一区| 国产精品视频线看| 久久免费精品国产久精品久久久久| 国产一区二区三区电影在线观看| 亚洲亚洲人成综合网络| 日韩国产在线观看一区| 日日夜夜精品视频天天综合网| 久久综合九色综合97_久久久| 欧美亚洲综合久久| 国产一区二区免费在线| 亚洲成人动漫精品| 亚洲裸体xxx| 亚洲国产精品一区二区www | 一区二区三区视频在线看| 精品国产精品网麻豆系列| 亚洲色图在线播放| 国产精品日韩精品欧美在线| 国产日韩欧美a| 精品在线免费观看| 欧美三级在线播放| 亚洲视频中文字幕| 国产乱淫av一区二区三区 | 91免费版pro下载短视频| 欧美电视剧免费全集观看| 亚洲第一av色| 色综合视频在线观看| 国产女人水真多18毛片18精品视频| 视频在线观看国产精品| 欧美日韩一区二区欧美激情| 亚洲香蕉伊在人在线观| 五月天中文字幕一区二区| 国内精品伊人久久久久av影院| 欧美午夜精品理论片a级按摩| 亚洲影院在线观看| 日本福利一区二区| 亚洲综合无码一区二区| 欧美日韩在线精品一区二区三区激情| 中文字幕在线不卡视频| 91视频在线观看免费| 天堂va蜜桃一区二区三区漫画版| 欧美日韩精品电影| 琪琪久久久久日韩精品| 欧美精品一区二区在线播放| 国产成人在线视频网址| 亚洲高清在线视频| 国产乱对白刺激视频不卡|