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

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

?? decoder.c

?? 一個簡單的視頻會議VC++MFC工程文件
?? C
?? 第 1 頁 / 共 2 頁
字號:

/*! 
 *************************************************************************************
 * \file decoder.c
 *
 * \brief
 *    Contains functions that implement the "decoders in the encoder" concept for the
 *    rate-distortion optimization with losses.
 * \date
 *    October 22nd, 2001
 *
 * \author
 *    Main contributors (see contributors.h for copyright, address and 
 *    affiliation details)
 *    - Dimitrios Kontopodis                    <dkonto@eikon.tum.de>
 *************************************************************************************
 */

#include <stdlib.h>
#include <memory.h>

#include "global.h"
#include "refbuf.h"
#include "image.h"

/*! 
 *************************************************************************************
 * \brief
 *    decodes one 8x8 partition
 *
 * \note
 *    Gives the expected value in the decoder of one 8x8 block. This is done based on the 
 *    stored reconstructed residue decs->resY[][], the reconstructed values imgY[][]
 *    and the motion vectors. The decoded 8x8 block is moved to decs->decY[][].
 *************************************************************************************
 */
void decode_one_b8block (int decoder, int mbmode, int b8block, int b8mode, int b8ref)
{
  int i,j,block_y,block_x,bx,by;
  int ref_inx = (IMG_NUMBER-1)%img->num_reference_frames;

  int mv[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE];
  int resY_tmp[MB_BLOCK_SIZE][MB_BLOCK_SIZE];

  int i0 = (b8block%2)<<3,   i1 = i0+8,   bx0 = i0>>2,   bx1 = bx0+2;
  int j0 = (b8block/2)<<3,   j1 = j0+8,   by0 = j0>>2,   by1 = by0+2;

  if (img->type==I_SLICE)
  {
    for(i=i0;i<i1;i++)
    for(j=j0;j<j1;j++)
    {
      decs->decY[decoder][img->pix_y+j][img->pix_x+i]=enc_picture->imgY[img->pix_y+j][img->pix_x+i];
    }
  }
  else
  {
    if (mbmode==0 && (img->type==P_SLICE || (img->type==B_SLICE && img->nal_reference_idc>0)))
    {
      for(i=i0;i<i1;i++)
      for(j=j0;j<j1;j++)
      {
        resY_tmp[j][i]=0;
      }
      for (by=by0; by<by1; by++)
      for (bx=bx0; bx<bx1; bx++)
      {
        mv[0][by][bx] = mv[1][by][bx] = 0;
      }
    }
    else
    {
      if (b8mode>=1 && b8mode<=7)
      {
        for (by=by0; by<by1; by++)
        for (bx=bx0; bx<bx1; bx++)
        {
          mv[0][by][bx] = img->all_mv[bx][by][LIST_0][b8ref][b8mode][0];
          mv[1][by][bx] = img->all_mv[bx][by][LIST_0][b8ref][b8mode][1];
        }
      }
      else
      {
        for (by=by0; by<by1; by++)
        for (bx=bx0; bx<bx1; bx++)
        {
          mv[0][by][bx] = mv[1][by][bx] = 0;
        }
      }
          
      for(i=i0;i<i1;i++)
      for(j=j0;j<j1;j++)
      {
        resY_tmp[j][i]=decs->resY[j][i];
      }
    }

    // Decode Luminance
    if ((b8mode>=1 && b8mode<=7) || (mbmode==0 && (img->type==P_SLICE || (img->type==B_SLICE && img->nal_reference_idc>0))))
    {
      for (by=by0; by<by1; by++)
      for (bx=bx0; bx<bx1; bx++)
      {
        block_x = img->block_x+bx;
        block_y = img->block_y+by;
        if (img->type == B_SLICE && enc_picture != enc_frame_picture)
          ref_inx = (IMG_NUMBER-b8ref-2)%img->num_reference_frames;

        Get_Reference_Block (decs->decref[decoder][ref_inx],
                             block_y, block_x,
                             mv[0][by][bx],
                             mv[1][by][bx],
                             decs->RefBlock);
        for (j=0; j<4; j++)
        for (i=0; i<4; i++)
        {
          /*
          if (decs->RefBlock[j][i] != UMVPelY_14 (mref[ref_inx],
                                                  (block_y*4+j)*4+mv[1][by][bx],
                                                  (block_x*4+i)*4+mv[0][by][bx]))
          ref_inx = (img->number-ref-1)%img->num_reference_frames;
          */
          decs->decY[decoder][block_y*4+j][block_x*4+i] = resY_tmp[by*4+j][bx*4+i] + decs->RefBlock[j][i];
        }
      }
    }
    else 
    {
      // Intra Refresh - Assume no spatial prediction
      for(i=i0;i<i1;i++)
      for(j=j0;j<j1;j++)
      {
        decs->decY[decoder][img->pix_y+j][img->pix_x+i] = enc_picture->imgY[img->pix_y+j][img->pix_x+i];
      }
    }
  }
}


/*! 
 *************************************************************************************
 * \brief
 *    decodes one macroblock
 *************************************************************************************
 */
void decode_one_mb (int decoder, Macroblock* currMB)
{
  /*
  decode_one_b8block (decoder, currMB->mb_type, 0, currMB->b8mode[0], refFrArr[img->block_y+0][img->block_x+0]);
  decode_one_b8block (decoder, currMB->mb_type, 1, currMB->b8mode[1], refFrArr[img->block_y+0][img->block_x+2]);
  decode_one_b8block (decoder, currMB->mb_type, 2, currMB->b8mode[2], refFrArr[img->block_y+2][img->block_x+0]);
  decode_one_b8block (decoder, currMB->mb_type, 3, currMB->b8mode[3], refFrArr[img->block_y+2][img->block_x+2]);
  */
}

/*! 
 *************************************************************************************
 * \brief
 *    Finds the reference MB given the decoded reference frame
 * \note
 *    This is based on the function UnifiedOneForthPix, only it is modified to
 *    be used at the "many decoders in the encoder" RD optimization. In this case
 *    we dont want to keep full upsampled reference frames for all decoders, so
 *    we just upsample when it is necessary.
 * \param imY
 *    The frame to be upsampled
 * \param block_y
 *    The row of the block, whose prediction we want to find
 * \param block_x
 *    The column of the block, whose prediction we want to track
 * \param mvhor
 *    Motion vector, horizontal part
 * \param mvver
 *    Motion vector, vertical part
 * \param out
 *    Output: The prediction for the block (block_y, block_x)
 *************************************************************************************
 */
void Get_Reference_Block(byte **imY, 
                         int block_y, 
                         int block_x, 
                         int mvhor, 
                         int mvver, 
                         byte **out)
{
  int i,j,y,x;

  y = block_y * BLOCK_SIZE * 4 + mvver;
  x = block_x * BLOCK_SIZE * 4 + mvhor;

  for (j=0; j<BLOCK_SIZE; j++)
    for (i=0; i<BLOCK_SIZE; i++)
      out[j][i] = Get_Reference_Pixel(imY, y+j*4, x+i*4);
}

/*! 
 *************************************************************************************
 * \brief
 *    Finds a pixel (y,x) of the upsampled reference frame
 * \note
 *    This is based on the function UnifiedOneForthPix, only it is modified to
 *    be used at the "many decoders in the encoder" RD optimization. In this case
 *    we dont want to keep full upsampled reference frames for all decoders, so
 *    we just upsample when it is necessary.
 *************************************************************************************
 */
byte Get_Reference_Pixel(byte **imY, int y_pos, int x_pos)
{

  int dx, x;
  int dy, y;
  int maxold_x,maxold_y;

  int result = 0, result1, result2;
  int pres_x;
  int pres_y; 

  int tmp_res[6];

  static const int COEF[6] = {
    1, -5, 20, 20, -5, 1
  };


  dx = x_pos&3;
  dy = y_pos&3;
  x_pos = (x_pos-dx)/4;
  y_pos = (y_pos-dy)/4;
  maxold_x = img->width-1;
  maxold_y = img->height-1;

  if (dx == 0 && dy == 0) { /* fullpel position */
    result = imY[max(0,min(maxold_y,y_pos))][max(0,min(maxold_x,x_pos))];
  }
  else { /* other positions */

    if (dy == 0) {

      pres_y = max(0,min(maxold_y,y_pos));
      for(x=-2;x<4;x++) {
        pres_x = max(0,min(maxold_x,x_pos+x));
        result += imY[pres_y][pres_x]*COEF[x+2];
      }

      result = max(0, min(255, (result+16)/32));

      if (dx == 1) {
        result = (result + imY[pres_y][max(0,min(maxold_x,x_pos))])/2;
      }
      else if (dx == 3) {
        result = (result + imY[pres_y][max(0,min(maxold_x,x_pos+1))])/2;
      }
    }
    else if (dx == 0) {

      pres_x = max(0,min(maxold_x,x_pos));
      for(y=-2;y<4;y++) {
        pres_y = max(0,min(maxold_y,y_pos+y));
        result += imY[pres_y][pres_x]*COEF[y+2];
      }

      result = max(0, min(255, (result+16)/32));

      if (dy == 1) {
        result = (result + imY[max(0,min(maxold_y,y_pos))][pres_x])/2;
      }
      else if (dy == 3) {
        result = (result + imY[max(0,min(maxold_y,y_pos+1))][pres_x])/2;
      }
    }
    else if (dx == 2) {

      for(y=-2;y<4;y++) {
        result = 0;
        pres_y = max(0,min(maxold_y,y_pos+y));
        for(x=-2;x<4;x++) {
          pres_x = max(0,min(maxold_x,x_pos+x));
          result += imY[pres_y][pres_x]*COEF[x+2];
        }
        tmp_res[y+2] = result;
      }

      result = 0;
      for(y=-2;y<4;y++) {
        result += tmp_res[y+2]*COEF[y+2];
      }

      result = max(0, min(255, (result+512)/1024));

      if (dy == 1) {
        result = (result + max(0, min(255, (tmp_res[2]+16)/32)))/2;
      }
      else if (dy == 3) {
        result = (result + max(0, min(255, (tmp_res[3]+16)/32)))/2;
      }
    }
    else if (dy == 2) {

      for(x=-2;x<4;x++) {
        result = 0;
        pres_x = max(0,min(maxold_x,x_pos+x));
        for(y=-2;y<4;y++) {
          pres_y = max(0,min(maxold_y,y_pos+y));
          result += imY[pres_y][pres_x]*COEF[y+2];
        }
        tmp_res[x+2] = result;
      }

      result = 0;
      for(x=-2;x<4;x++) {
        result += tmp_res[x+2]*COEF[x+2];
      }

      result = max(0, min(255, (result+512)/1024));

      if (dx == 1) {
        result = (result + max(0, min(255, (tmp_res[2]+16)/32)))/2;
      }
      else {
        result = (result + max(0, min(255, (tmp_res[3]+16)/32)))/2;
      }
    }
    else {

      result = 0;
      pres_y = dy == 1 ? y_pos : y_pos+1;
      pres_y = max(0,min(maxold_y,pres_y));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av网站免费线看精品| 欧美一级国产精品| 久久精品一区四区| 免费一级片91| 欧美一区二区大片| 日日欢夜夜爽一区| 欧美丰满少妇xxxxx高潮对白| 亚洲日本一区二区| 91丨porny丨户外露出| 国产精品国产自产拍高清av| 国产一区二区三区不卡在线观看 | 国产丝袜在线精品| 精东粉嫩av免费一区二区三区| 欧美一级黄色大片| 久久成人av少妇免费| 欧美一区三区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美美女一区二区在线观看| 亚洲福利电影网| 欧美私人免费视频| 丝袜亚洲另类丝袜在线| 国产91精品免费| 国产精品乱子久久久久| 91成人免费在线| 欧美大片在线观看| 亚洲最新在线观看| 欧美成人午夜电影| 99精品国产99久久久久久白柏| 亚洲欧美日本韩国| 日韩欧美一卡二卡| av亚洲精华国产精华精华| 一区二区三区四区高清精品免费观看 | 一二三区精品福利视频| 欧美老年两性高潮| 成年人网站91| 日本美女一区二区| 国产精品美女视频| 欧美一区二区三区视频| 成人av资源站| 蜜臀久久99精品久久久久久9 | 在线一区二区三区四区五区 | 久久久美女艺术照精彩视频福利播放| 99精品视频在线观看| 一区二区激情小说| 国产三级三级三级精品8ⅰ区| 在线观看免费亚洲| 国产成人精品亚洲777人妖 | 国产成人精品亚洲日本在线桃色| 亚洲成人福利片| 国产精品欧美精品| 精品成人一区二区三区四区| 欧美午夜在线观看| 成人污视频在线观看| 麻豆国产精品一区二区三区| 亚洲精品免费在线播放| 中文字幕电影一区| 26uuu国产在线精品一区二区| 欧美日韩国产区一| 欧美在线观看一区二区| 99天天综合性| 福利91精品一区二区三区| 秋霞影院一区二区| 午夜精品爽啪视频| 一个色在线综合| 亚洲自拍偷拍麻豆| 中文字幕亚洲一区二区av在线| 精品国产电影一区二区| 666欧美在线视频| 欧美日韩色一区| 欧美午夜精品久久久久久孕妇| 国产精品综合二区| 国产综合色视频| 国内精品第一页| 精品一区二区三区影院在线午夜| 五月综合激情网| 亚洲成人第一页| 亚洲国产欧美在线| 一区二区三区欧美| 亚洲午夜激情网站| 日本中文在线一区| 免费高清在线视频一区·| 日本成人在线网站| 精品一区二区三区蜜桃| 蜜臀va亚洲va欧美va天堂 | 国产福利不卡视频| 国产成人在线色| 成人精品免费看| 不卡视频免费播放| 91女厕偷拍女厕偷拍高清| 粉嫩久久99精品久久久久久夜 | 亚洲va欧美va人人爽午夜 | 免费一级片91| 婷婷中文字幕一区三区| 日韩二区在线观看| 九九精品一区二区| 粉嫩蜜臀av国产精品网站| 成人avav影音| 99久久精品一区| 欧美色图在线观看| 欧美一卡二卡在线观看| 精品va天堂亚洲国产| 国产欧美久久久精品影院| 亚洲视频免费在线| 偷拍与自拍一区| 激情欧美日韩一区二区| 国产在线精品一区二区夜色| 成人开心网精品视频| 欧美日韩精品一区二区天天拍小说| 日韩一级免费观看| xf在线a精品一区二区视频网站| 国产三级久久久| 亚洲国产裸拍裸体视频在线观看乱了| 五月天激情综合| 国产福利一区二区三区视频| 色噜噜狠狠成人网p站| 8x福利精品第一导航| 久久精品一区二区三区av| 亚洲男人天堂av| 极品美女销魂一区二区三区免费| 成人sese在线| 日韩午夜精品电影| 中文字幕中文字幕在线一区 | 欧美精品一区二区高清在线观看 | 日韩在线观看一区二区| 国产成人夜色高潮福利影视| 在线看不卡av| 久久男人中文字幕资源站| 亚洲视频免费在线| 精品亚洲国内自在自线福利| 国产伦精品一区二区三区视频青涩| 三级欧美韩日大片在线看| 成人激情校园春色| 日韩一区二区精品葵司在线| 亚洲色图19p| 国产乱妇无码大片在线观看| 欧美精品日韩一本| 日韩美女啊v在线免费观看| 精品午夜一区二区三区在线观看| 色综合天天做天天爱| 国产亚洲欧美中文| 日韩高清电影一区| 一本久久精品一区二区| 欧美激情一区三区| 麻豆精品一区二区综合av| 色综合av在线| 欧美激情一区二区三区四区| 蜜桃一区二区三区在线观看| 色猫猫国产区一区二在线视频| 久久精品亚洲乱码伦伦中文| 亚洲尤物在线视频观看| 色婷婷av一区| 国产精品美女久久久久高潮| 国产真实乱偷精品视频免| 91精品久久久久久久99蜜桃| 亚洲美女视频在线观看| 成人污污视频在线观看| 久久久久99精品一区| 韩国三级在线一区| 日韩女同互慰一区二区| 亚洲成人激情av| 精品视频999| 亚洲已满18点击进入久久| 色综合天天综合网国产成人综合天| 日本一区二区三区在线观看| 国产麻豆精品在线| 久久色在线视频| 亚洲第一在线综合网站| 91福利精品第一导航| 国产色产综合色产在线视频| 久久99精品久久久久久| 91精品国产综合久久精品app| 午夜婷婷国产麻豆精品| 欧美顶级少妇做爰| 免费视频一区二区| 欧美xxxx在线观看| 国产一区二区三区免费在线观看| 精品成人佐山爱一区二区| 国产一级精品在线| 欧美国产国产综合| 97久久久精品综合88久久| 亚洲精品久久7777| 精品视频免费在线| 免费欧美日韩国产三级电影| 日韩精品一区在线| 国产精品小仙女| 成人欧美一区二区三区小说| 色综合色狠狠天天综合色| 亚洲综合一区在线| 色欧美日韩亚洲| 日韩电影免费在线观看网站| 精品av综合导航| 成人国产视频在线观看| 亚洲精品va在线观看| 欧美一区二区网站| 国产成人免费视频精品含羞草妖精 | 日韩综合在线视频| 日韩欧美国产麻豆| 精一区二区三区| 国产精品久久久久一区二区三区共 | 日韩av电影免费观看高清完整版 |