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

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

?? context_ini.c

?? 一個簡單的視頻會議VC++MFC工程文件
?? C
字號:

/*!
 *************************************************************************************
 * \file context_ini.c
 *
 * \brief
 *    CABAC context initializations
 *
 * \author
 *    Main contributors (see contributors.h for copyright, address and affiliation details)
 *    - Detlev Marpe                    <marpe@hhi.de>
 *    - Heiko Schwarz                   <hschwarz@hhi.de>
 **************************************************************************************
 */

#define CONTEXT_INI_C

#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <string.h>

#include "defines.h"
#include "global.h"


#include "ctx_tables.h"
#include "cabac.h"

#define DEFAULT_CTX_MODEL   0
#define RELIABLE_COUNT      32.0
#define FRAME_TYPES         4
#define FIXED               0


int                     num_mb_per_slice;
int                     number_of_slices;
int***                  initialized;
int***                  model_number;


double entropy    [128];
double probability[128] =
{
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  0.000000, 0.000000, 0.000000, 0.000000,    0.000000, 0.000000, 0.000000, 0.000000,
  //--------------------------------------------------------------------------------
  0.500000, 0.474609, 0.450507, 0.427629,    0.405912, 0.385299, 0.365732, 0.347159,
  0.329530, 0.312795, 0.296911, 0.281833,    0.267520, 0.253935, 0.241039, 0.228799,
  0.217180, 0.206151, 0.195682, 0.185744,    0.176312, 0.167358, 0.158859, 0.150792,
  0.143134, 0.135866, 0.128966, 0.122417,    0.116200, 0.110299, 0.104698, 0.099381,
  0.094334, 0.089543, 0.084996, 0.080680,    0.076583, 0.072694, 0.069002, 0.065498,
  0.062172, 0.059014, 0.056018, 0.053173,    0.050473, 0.047909, 0.045476, 0.043167,
  0.040975, 0.038894, 0.036919, 0.035044,    0.033264, 0.031575, 0.029972, 0.028450,
  0.027005, 0.025633, 0.024332, 0.023096,    0.021923, 0.020810, 0.019753, 0.018750
};



void create_context_memory ()
{
  int i, j, k;
  int num_mb    = img->FrameSizeInMbs; // number of macroblocks for frame
 
  num_mb_per_slice  = (input->slice_mode==1 ? input->slice_argument : num_mb);
  number_of_slices  = (num_mb + num_mb_per_slice - 1) / num_mb_per_slice;

  if ((initialized  = (int***) malloc (2 * sizeof(int**))) == NULL)
  {
    no_mem_exit ("create_context_memory: initialized");
  }
  if ((model_number = (int***) malloc (2 * sizeof(int**))) == NULL)
  {
    no_mem_exit ("create_context_memory: model_number");
  }

  for (k=0; k<2; k++)
  {
    if ((initialized[k] = (int**) malloc (FRAME_TYPES * sizeof(int*))) == NULL)
    {
      no_mem_exit ("create_context_memory: initialized");
    }
    if ((model_number[k]= (int**) malloc (FRAME_TYPES * sizeof(int*))) == NULL)
    {
      no_mem_exit ("create_context_memory: model_number");
    }

    for (i=0; i<FRAME_TYPES; i++)
    {
      if ((initialized[k][i] = (int*) malloc (number_of_slices * sizeof(int))) == NULL)
      {
        no_mem_exit ("create_context_memory: initialized");
      }
      if ((model_number[k][i]= (int*) malloc (number_of_slices * sizeof(int))) == NULL)
      {
        no_mem_exit ("create_context_memory: model_number");
      }
    }
  }

  //===== set all context sets as "uninitialized" =====
  for (k=0; k<2; k++)
  {
    for (i=0; i<FRAME_TYPES; i++)
    {
      for (j=0; j<number_of_slices; j++)
      {
        initialized[k][i][j] = 0;
      }
    }
  }

  //----- init tables -----
  for( k=0; k<64; k++ )
  {
    probability[k] = 1.0 - probability[127-k];
    entropy    [k] = log10(probability[    k])/log10(2.0);
    entropy[127-k] = log10(probability[127-k])/log10(2.0);
  }
}




void free_context_memory ()
{
  int i, k;

  for (k=0; k<2; k++)
  {
    for (i=0; i<FRAME_TYPES; i++)
    {
      free (initialized [k][i]);
      free (model_number[k][i]);
    }
    free (initialized [k]);
    free (model_number[k]);
  }
  free (initialized);
  free (model_number);
}






#define BIARI_CTX_INIT2(ii,jj,ctx,tab,num) \
{ \
  for (i=0; i<ii; i++) \
  for (j=0; j<jj; j++) \
  { \
    if      (img->type==I_SLICE)  biari_init_context (&(ctx[i][j]), &(tab ## _I[num][i][j][0])); \
    else                            biari_init_context (&(ctx[i][j]), &(tab ## _P[num][i][j][0])); \
  } \
}
#define BIARI_CTX_INIT1(jj,ctx,tab,num) \
{ \
  for (j=0; j<jj; j++) \
  { \
    if      (img->type==I_SLICE)  biari_init_context (&(ctx[j]), &(tab ## _I[num][0][j][0])); \
    else                            biari_init_context (&(ctx[j]), &(tab ## _P[num][0][j][0])); \
  } \
}



void SetCtxModelNumber ()
{
  int frame_field = img->field_picture;
  int img_type    = img->type;
  int ctx_number  = img->currentSlice->start_mb_nr / num_mb_per_slice;

  if(img->type==I_SLICE)
  {
    img->model_number=DEFAULT_CTX_MODEL;
    return;
  }
  if(input->context_init_method==FIXED)
  {
    img->model_number=input->model_number;
    return;
  }

  if (initialized [frame_field][img_type][ctx_number])
  {
    img->model_number = model_number[frame_field][img_type][ctx_number];
  }
  else if (ctx_number && initialized[frame_field][img_type][ctx_number-1])
  {
    img->model_number = model_number[frame_field][img_type][ctx_number-1];
  }
  else
  {
    img->model_number = DEFAULT_CTX_MODEL;
  }
}



void init_contexts ()
{
  MotionInfoContexts*  mc = img->currentSlice->mot_ctx;
  TextureInfoContexts* tc = img->currentSlice->tex_ctx;
  int i, j;

  //--- motion coding contexts ---
  BIARI_CTX_INIT2 (3, NUM_MB_TYPE_CTX,   mc->mb_type_contexts,     INIT_MB_TYPE,    img->model_number);
  BIARI_CTX_INIT2 (2, NUM_B8_TYPE_CTX,   mc->b8_type_contexts,     INIT_B8_TYPE,    img->model_number);
  BIARI_CTX_INIT2 (2, NUM_MV_RES_CTX,    mc->mv_res_contexts,      INIT_MV_RES,     img->model_number);
  BIARI_CTX_INIT2 (2, NUM_REF_NO_CTX,    mc->ref_no_contexts,      INIT_REF_NO,     img->model_number);
  BIARI_CTX_INIT1 (   NUM_DELTA_QP_CTX,  mc->delta_qp_contexts,    INIT_DELTA_QP,   img->model_number);
  BIARI_CTX_INIT1 (   NUM_MB_AFF_CTX,    mc->mb_aff_contexts,      INIT_MB_AFF,     img->model_number);

  //--- texture coding contexts ---
  BIARI_CTX_INIT1 (                 NUM_IPR_CTX,  tc->ipr_contexts,     INIT_IPR,       img->model_number);
  BIARI_CTX_INIT1 (                 NUM_CIPR_CTX, tc->cipr_contexts,    INIT_CIPR,      img->model_number);
  BIARI_CTX_INIT2 (3,               NUM_CBP_CTX,  tc->cbp_contexts,     INIT_CBP,       img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_BCBP_CTX, tc->bcbp_contexts,    INIT_BCBP,      img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_MAP_CTX,  tc->map_contexts,     INIT_MAP,       img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_LAST_CTX, tc->last_contexts,    INIT_LAST,      img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_ONE_CTX,  tc->one_contexts,     INIT_ONE,       img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_ABS_CTX,  tc->abs_contexts,     INIT_ABS,       img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_MAP_CTX,  tc->fld_map_contexts, INIT_FLD_MAP,   img->model_number);
  BIARI_CTX_INIT2 (NUM_BLOCK_TYPES, NUM_LAST_CTX, tc->fld_last_contexts,INIT_FLD_LAST,  img->model_number);
}





double XRate (BiContextTypePtr ctx, const int* model)
{
  int     ctx_state, mod_state;
  double  weight, xr = 0.0;
  int     qp = img->qp;

  weight    = min (1.0, (double)ctx->count/(double)RELIABLE_COUNT);

  mod_state = ((model[0]*qp)>>4)+model[1];
  mod_state = min (max (0, mod_state), 127);
  ctx_state = (ctx->MPS ? 64+ctx->state : 63-ctx->state);

  xr -= weight * probability[    ctx_state] * entropy[    mod_state];
  xr -= weight * probability[127-ctx_state] * entropy[127-mod_state];

  return xr;
}

#define ADD_XRATE2(ii,jj,ctx,tab,num) \
{ \
  for (i=0; i<ii; i++) \
  for (j=0; j<jj; j++) \
  { \
    if      (img->type==I_SLICE)  xr += XRate (&(ctx[i][j]), &(tab ## _I[num][i][j][0])); \
    else                            xr += XRate (&(ctx[i][j]), &(tab ## _P[num][i][j][0])); \
  } \
}
#define ADD_XRATE1(jj,ctx,tab,num) \
{ \
  for (j=0; j<jj; j++) \
  { \
    if      (img->type==I_SLICE)  xr += XRate (&(ctx[j]), &(tab ## _I[num][0][j][0])); \
    else                            xr += XRate (&(ctx[j]), &(tab ## _P[num][0][j][0])); \
  } \
}


void GetCtxModelNumber (int* mnumber, MotionInfoContexts* mc, TextureInfoContexts* tc)
{
  int     model, j, i;
  int     num_models = (img->type==I_SLICE ? NUM_CTX_MODELS_I : NUM_CTX_MODELS_P);
  double  xr, min_xr = 1e30;

  for (model=0; model<num_models; model++)
  {
    xr = 0.0;
    //--- motion coding contexts ---
    ADD_XRATE2 (3, NUM_MB_TYPE_CTX,   mc->mb_type_contexts,     INIT_MB_TYPE,   model);
    ADD_XRATE2 (2, NUM_B8_TYPE_CTX,   mc->b8_type_contexts,     INIT_B8_TYPE,   model);
    ADD_XRATE2 (2, NUM_MV_RES_CTX,    mc->mv_res_contexts,      INIT_MV_RES,    model);
    ADD_XRATE2 (2, NUM_REF_NO_CTX,    mc->ref_no_contexts,      INIT_REF_NO,    model);
    ADD_XRATE1 (   NUM_DELTA_QP_CTX,  mc->delta_qp_contexts,    INIT_DELTA_QP,  model);
    ADD_XRATE1 (   NUM_MB_AFF_CTX,    mc->mb_aff_contexts,      INIT_MB_AFF,    model);
    //--- texture coding contexts ---
    ADD_XRATE1 (                  NUM_IPR_CTX,  tc->ipr_contexts,       INIT_IPR,       model);
    ADD_XRATE1 (                  NUM_CIPR_CTX, tc->cipr_contexts,      INIT_CIPR,      model);
    ADD_XRATE2 (3,                NUM_CBP_CTX,  tc->cbp_contexts,       INIT_CBP,       model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_BCBP_CTX, tc->bcbp_contexts,      INIT_BCBP,      model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_MAP_CTX,  tc->map_contexts,       INIT_MAP,       model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_LAST_CTX, tc->last_contexts,      INIT_LAST,      model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_ONE_CTX,  tc->one_contexts,       INIT_ONE,       model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_ABS_CTX,  tc->abs_contexts,       INIT_ABS,       model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_MAP_CTX,  tc->fld_map_contexts,   INIT_FLD_MAP,   model);
    ADD_XRATE2 (NUM_BLOCK_TYPES,  NUM_LAST_CTX, tc->fld_last_contexts,  INIT_FLD_LAST,  model);

    if (xr<min_xr)
    {
      min_xr    = xr;
      *mnumber  = model;
    }
  }
}

#undef ADD_XRATE2
#undef ADD_XRATE1






void store_contexts ()
{
  int frame_field = img->field_picture;
  int img_type    = img->type;
  int ctx_number  = img->currentSlice->start_mb_nr / num_mb_per_slice;

  if( input->context_init_method )
  {
    initialized [frame_field][img_type][ctx_number] = 1;
    GetCtxModelNumber (model_number[frame_field][img_type]+ctx_number, img->currentSlice->mot_ctx, img->currentSlice->tex_ctx);
  }
  else
  {
    // do nothing
  }
}


void update_field_frame_contexts (int field)
{
  int i, j;

  if (field)
  {
    // set frame contexts
    for (j=0; j<FRAME_TYPES; j++)
    {
      for (i=0; i<number_of_slices; i++)
      {
        initialized [0][j][i] = initialized [1][j][i>>1];
        model_number[0][j][i] = model_number[1][j][i>>1];
      }
    }
  }
  else
  {
    // set field contexts
    for (j=0; j<FRAME_TYPES; j++)
    {
      for (i=0; i<((number_of_slices+1)>>1); i++)
      {
        initialized [1][j][i] = initialized [0][j][i<<1];
        model_number[1][j][i] = model_number[0][j][i<<1];
      }
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久不卡8050| 免费成人在线观看视频| 亚洲va在线va天堂| 国产精品中文欧美| 欧美日韩亚洲高清一区二区| 欧美www视频| 亚洲国产视频a| 国产999精品久久久久久| 欧美日韩国产在线播放网站| 国产精品久久夜| 久久激情综合网| 777色狠狠一区二区三区| 亚洲欧美色综合| 国产精品中文字幕欧美| 91麻豆精品国产91久久久资源速度 | 国产一区三区三区| 欧美日韩国产综合久久| 亚洲精品国产一区二区精华液| 激情文学综合网| 日韩一区二区免费在线观看| 亚洲一区二区精品久久av| 成人一区二区三区中文字幕| 欧美va亚洲va在线观看蝴蝶网| 亚洲国产cao| 欧美色图片你懂的| 亚洲动漫第一页| 欧美体内she精高潮| 亚洲欧美日韩中文播放| 捆绑调教一区二区三区| 欧美一区二区美女| 另类小说一区二区三区| 日韩一区二区免费高清| 日韩av电影免费观看高清完整版| 欧美中文字幕一二三区视频| 亚洲日本乱码在线观看| 国产成人av电影在线播放| 久久久亚洲午夜电影| 精品亚洲欧美一区| 欧美成人三级在线| 紧缚捆绑精品一区二区| 欧美成人欧美edvon| 国产一区二区调教| 日本一区二区视频在线| 成人av网站在线观看免费| 中文一区一区三区高中清不卡| 国产成人午夜精品影院观看视频| 久久麻豆一区二区| 成人av电影在线| 亚洲精品中文字幕乱码三区| 91极品美女在线| 亚洲国产精品嫩草影院| 51午夜精品国产| 精品一区二区三区视频| 国产午夜久久久久| 91亚洲国产成人精品一区二区三 | 婷婷六月综合网| 欧美日韩三级一区二区| 美女视频第一区二区三区免费观看网站 | 91精品国产入口| 国产又黄又大久久| 最新国产の精品合集bt伙计| 91国内精品野花午夜精品| 日韩av一区二区三区四区| 欧美变态tickle挠乳网站| 成人毛片视频在线观看| 亚洲国产视频在线| 精品sm捆绑视频| 91在线观看高清| 丝袜国产日韩另类美女| 久久精品亚洲麻豆av一区二区 | 亚洲欧美在线视频| 精品视频一区三区九区| 国产在线观看一区二区| 日韩毛片在线免费观看| 精品欧美黑人一区二区三区| hitomi一区二区三区精品| 五月综合激情网| 国产精品国产三级国产aⅴ中文 | 97久久超碰国产精品电影| 日韩在线一区二区| 亚洲欧洲无码一区二区三区| 宅男噜噜噜66一区二区66| av成人免费在线观看| 日韩高清欧美激情| 亚洲精选一二三| 日本一区二区在线不卡| 欧美一区二区在线观看| 色综合天天做天天爱| 国产伦精品一区二区三区免费迷| 一区二区三区久久久| 国产午夜精品久久| 日韩免费观看高清完整版| 91福利精品第一导航| 国产福利视频一区二区三区| 日韩极品在线观看| 伊人婷婷欧美激情| 国产精品久久久久久久久图文区 | 亚洲国产经典视频| 日韩欧美国产电影| 欧美三级电影一区| 91欧美一区二区| 丰满放荡岳乱妇91ww| 另类小说一区二区三区| 日韩av成人高清| 午夜精品视频在线观看| 亚洲免费av高清| 日韩美女啊v在线免费观看| 久久久99精品久久| 精品日产卡一卡二卡麻豆| 91精品国产欧美一区二区18 | 91丝袜高跟美女视频| 成人性生交大合| 国产sm精品调教视频网站| 极品尤物av久久免费看| 久久激五月天综合精品| 九九久久精品视频| 久久精品av麻豆的观看方式| 蜜臀av性久久久久蜜臀av麻豆| 视频一区在线视频| 婷婷开心激情综合| 免费一级片91| 免费精品视频最新在线| 免费视频一区二区| 蜜臀国产一区二区三区在线播放| 日韩黄色在线观看| 男人的j进女人的j一区| 理论电影国产精品| 久久国产精品99久久久久久老狼| 青椒成人免费视频| 国产一区福利在线| 成人综合婷婷国产精品久久免费| 国产91露脸合集magnet| 色综合天天狠狠| 欧美日韩精品欧美日韩精品| 777精品伊人久久久久大香线蕉| 欧美一级黄色片| 2021中文字幕一区亚洲| 久久精品亚洲精品国产欧美kt∨| 国产亚洲精品资源在线26u| 一区在线观看视频| 亚洲一区av在线| 免费成人美女在线观看.| 国产在线视频不卡二| 成人av电影在线观看| 欧美日韩综合色| 精品99一区二区| 一区在线播放视频| 免费日本视频一区| 成人免费看黄yyy456| 在线一区二区三区| 精品国产三级电影在线观看| 国产精品亲子乱子伦xxxx裸| 亚洲午夜久久久久久久久电影院| 免费成人av在线播放| 成a人片国产精品| 777a∨成人精品桃花网| 国产三级一区二区三区| 亚洲电影一级黄| 国产剧情一区在线| 欧美视频一区二区三区四区| 精品不卡在线视频| 亚洲夂夂婷婷色拍ww47| 国产主播一区二区三区| 欧美人狂配大交3d怪物一区| 久久久国产一区二区三区四区小说| 亚洲男人的天堂av| 国内精品不卡在线| 欧美老肥妇做.爰bbww视频| 国产欧美日韩精品在线| 秋霞午夜av一区二区三区| 91网站最新网址| 国产精品素人视频| 久久福利资源站| 欧美日本在线观看| 亚洲女爱视频在线| 成人午夜碰碰视频| 精品精品欲导航| 日本aⅴ免费视频一区二区三区| av影院午夜一区| 中文字幕免费一区| 国产乱码精品一区二区三 | 日韩av成人高清| www.久久久久久久久| 久久久高清一区二区三区| 美女视频黄久久| 在线精品观看国产| 亚洲欧洲www| 久久国产精品99精品国产| 欧美精品色综合| 国产精品久久久久久福利一牛影视| 免费观看在线色综合| 国产凹凸在线观看一区二区| 欧美日韩亚洲综合一区| 久久亚洲精品国产精品紫薇| 蜜桃av噜噜一区| 欧美另类一区二区三区| 自拍av一区二区三区| 91麻豆自制传媒国产之光| 欧美韩国日本一区| 国产一区福利在线|