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

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

?? skl_mpg4_enc.cpp

?? mpeg4編解碼器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        Level2 = Level1 + 1;        Tbl_L1      = (Level1>=-24) ? B16_17_Code_Len[Level1^-1]      : Code_Len0;        Tbl_L2      = (Level2>=-24) ? B16_17_Code_Len[Level2^-1]      : Code_Len0;        Tbl_L1_Last = (Level1>=- 6) ? B16_17_Code_Len_Last[Level1^-1] : Code_Len0;        Tbl_L2_Last = (Level2>=- 6) ? B16_17_Code_Len_Last[Level2^-1] : Code_Len0;      }      const SKL_UINT32 Dist1 = Lambda*dQ1*dQ1;      const SKL_UINT32 Dist2 = Lambda*dQ2*dQ2;      const int dDist21 = Dist2-Dist1;      for(int Run=i-Run_Start; Run>0; --Run)      {        const SKL_UINT32 Cost_Base = Dist1 + Run_Costs[i-Run];// for sub-optimal (but slightly worth it, speed-wise) search, uncomment the following://        if (Cost_Base>=Best_Cost) continue;        SKL_UINT32 Cost1, Cost2;        int bLevel;        Cost1 = Cost_Base + (Tbl_L1[Run-1]<<16);        Cost2 = Cost_Base + (Tbl_L2[Run-1]<<16) + dDist21;        if (Cost2<Cost1) { Cost1 = Cost2; bLevel = Level2; }        else bLevel = Level1;        if (Cost1<Best_Cost)        {          Best_Cost = Cost1;          Nodes[i].Run   = Run;          Nodes[i].Level = bLevel;        }        Cost1 = Cost_Base + (Tbl_L1_Last[Run-1]<<16);        Cost2 = Cost_Base + (Tbl_L2_Last[Run-1]<<16) + dDist21;        if (Cost2<Cost1) { Cost1 = Cost2; bLevel = Level2; }        else bLevel = Level1;        if (Cost1<Last_Cost)        {          Last_Cost  = Cost1;          Last.Run   = Run;          Last.Level = bLevel;          Last_Node  = i;        }      }      if (DBG==1) {        Run_Costs[i] = Best_Cost;        printf( "Costs #%2d: ", i);        for(j=-1;j<=Non_Zero;++j) {          if (j==Run_Start)            printf( " %3.0d|", Run_Costs[j]>>12 );          else if (j>Run_Start && j<i) printf( " %3.0d|", Run_Costs[j]>>12 );          else if (j==i)               printf( "(%3.0d)", Run_Costs[j]>>12 );          else                         printf( "  - |" );        }        printf( "<%3.0d %2d %d>", Min_Cost>>12, Nodes[i].Level, Nodes[i].Run );        printf( "  Last:#%2d {%3.0d %2d %d}", Last_Node, Last_Cost>>12, Last.Level, Last.Run );        printf( " AC:%3.0d Dist0:%3d Dist(%2d):%3d Dist(%2d):%3d", AC, Dist0>>12, Level1, Dist1>>12, Level2, Dist2>>12 );        printf( "\n" );      }    }    else       // Very very high levels, with no chance of being optimizable => Simply pick best Run.    {      Best_Cost = 0xf0000000;      for(int Run=i-Run_Start; Run>0; --Run)      {        const SKL_UINT32 Cost = (30<<16) + Run_Costs[i-Run];    // 30 bits + no distortion        if (Cost<Best_Cost)        {          Best_Cost = Cost;          Nodes[i].Run   = Run;          Nodes[i].Level = Level1;        }        if (Cost<Last_Cost)        {          Last_Cost  = Cost;          Last.Run   = Run;          Last.Level = Level1;          Last_Node  = i;        }      }    }    Run_Costs[i] = Best_Cost;    if (Best_Cost < Min_Cost + Dist0) {      Min_Cost = Best_Cost;      Run_Start = i;    }    else    {        // as noticed by Michael Niedermayer (michaelni at gmx.at), there's        // a code shorter by 1 bit for a larger run (!), same level. We give        // it a chance by not moving the left barrier too much.      while( Run_Costs[Run_Start]>Min_Cost+(1<<16) )        Run_Start++;        // spread on preceding coeffs the cost incurred by skipping this one      for(j=Run_Start; j<i; ++j) Run_Costs[j] += Dist0;      Min_Cost += Dist0;    }  }  if (DBG) {    Last_Cost = Evaluate_Cost(Out, Zigzag, Non_Zero, Lambda);    if (DBG==1) {      printf( "=> " );      for(i=0; i<=Non_Zero; ++i) printf( "[%3.0d] ", Out[Zigzag[i]] );      printf( "\n" );   }  }  if (Last_Node<0)    return -1;       // reconstruct optimal sequence backward with surviving paths  SKL_BZERO(Out, 64*sizeof(*Out));  Out[Zigzag[Last_Node]] = Last.Level;  i = Last_Node - Last.Run;  while(i>=0) {    Out[Zigzag[i]] = Nodes[i].Level;    i -= Nodes[i].Run;  }  if (DBG) {    SKL_UINT32 Cost = Evaluate_Cost(Out, Zigzag, Non_Zero, Lambda);    if (DBG==1) {      printf( "<= " );       for(i=0; i<=Last_Node; ++i) printf( "[%3.0d] ", Out[Zigzag[i]] );      printf( "\n--------------------------------\n" );    }    if (Cost>Last_Cost) printf( "!!! %d > %d\n", Cost, Last_Cost );  }  return Last_Node;}#undef DBG////////////////////////////////////////////////////////////// Main decimation calls////////////////////////////////////////////////////////////void SKL_MP4_ENC_I::Decimate_Intra(SKL_INT16 * const Out,                                    SKL_INT16 * const In,                                    SKL_INT32 Q, SKL_INT32 DC_Q) const{  Quant_Ops.Dct(In);  Quant_Ops.Quant_Intra(Out, In, Q_Intra, Q, DC_Q);// this is WRONG 2 out of 3 times, due to DC/AC prediction//  if (_Use_Trellis && Trellis_Quantize(Out, Q, SKL_MP4_I::Scan_Order[0]+1, 62)<0)//    return;  Quant_Ops.Dequant_Intra(In, Out, Q_Intra, Q, DC_Q);}int SKL_MP4_ENC_I::Decimate_Inter(SKL_INT16 * const Out,                                   SKL_INT16 * const In,                                   const SKL_INT32 Q) const{  Quant_Ops.Dct(In);  int SAV = Quant_Ops.Quant_Inter(Out, In, Q_Inter, Q);  if (SAV<_Inter_Coding_Threshold) return 0;  if (_Use_Trellis && Trellis_Quantize(Out, Q, SKL_MP4_I::Scan_Order[0], 63)<0)    return 0;  Quant_Ops.Dequant_Inter(In, Out, Q_Inter, Q, 0xff);  return SAV;}//////////////////////////////////////////////////////////// Macroblock params polishing//////////////////////////////////////////////////////////const int SKL_MB_ENC::Map_To_Type[SKL_MAP_LAST] ={  SKL_MB_SKIPPED, SKL_MB_INTRA, SKL_MB_INTER /*(GMC)*/,   SKL_MB_INTER, SKL_MB_INTER, SKL_MB_INTER4V};static inline void Set_dMV(SKL_MV dMV, const SKL_MV MVo){    // dMV contains predictor  dMV[0] = MVo[0] - dMV[0];  dMV[1] = MVo[1] - dMV[1];}void SKL_MB_ENC::Substract_Prediction(){  SKL_ASSERT(MB_Type<=SKL_MB_INTER4V && Field_Pred==0);    // INTER or INTER4V  Predict_Motion_Vector_Blk0( dMVs[0], &MVs[0], MVs-1 );  Set_dMV(dMVs[0], MVs[0]);  if (MB_Type==SKL_MB_INTER4V)  {    Predict_Motion_Vector( dMVs[1], &MVs[1], 1 );    Set_dMV(dMVs[1], MVs[ 1]);    Predict_Motion_Vector( dMVs[2], &MVs2[0], 2 );    Set_dMV(dMVs[2], MVs2[0]);    Predict_Motion_Vector( dMVs[3], &MVs2[1], 3 );    Set_dMV(dMVs[3], MVs2[1]);  }}void SKL_MB_ENC::Substract_Field_Prediction(){  SKL_ASSERT(MB_Type<SKL_MB_INTER4V && Field_Pred==1);  // INTER+field only  Predict_Motion_Vector_Blk0( dMVs[0], &MVs[0], MVs-1 );  dMVs[0][1] /= 2;               // Both fields use the same predictor  MVs[0][1] >>= 1;               // descale to field-MV...  MVs[1][1] >>= 1;               // Scale will be restored after coding.  SKL_COPY_MV(dMVs[1], dMVs[0]);  Set_dMV(dMVs[0], MVs[0]);  Set_dMV(dMVs[1], MVs[1]);}void SKL_MB_ENC::Set_Final_Params(){    // update dQ  if (Map[Pos].dQ) {    dQuant = Map[Pos].dQ;    Prev_Quant = Quant;    Quant += dQuant;    SKL_ASSERT(Quant>=1 && Quant<=31);  }  else dQuant = 0;    // set up field params  if (VOL->Interlace) {    if (VOL->Interlace&0x3) Set_Field_DCT( (Map[Pos].Flags&1)!=0 );    else SKL_ASSERT(Field_DCT==0);    if (VOL->Interlace&0xc)  {      if (Map[Pos].Type==SKL_MAP_16x8) {        Field_Pred = 1;        Field_Dir = ((MVs[0][1]&1)<<1) | ((MVs[1][1]&1)^1);        Substract_Field_Prediction();      }      else Field_Pred = 0;    }    else SKL_ASSERT(Field_Pred==0);   }  else SKL_ASSERT(Field_DCT==-1 && Field_Pred==0);  if (MB_Type!=SKL_MB_INTRA && !MC_Sel && !Field_Pred)    Substract_Prediction();}//////////////////////////////////////////////////////////// I-MB codingvoid SKL_MB_ENC::Encode_Intra(SKL_FBB * const Bits, SKL_INT16 In[12*64], int Is_I_VOP){  SKL_INT16 *C;  int blk;  const int * Zigzags[6];  int Pred_Dirs[6];  Use_AC_Pred = Select_DC_AC_Pred(In, Pred_Dirs);  Cbp = 0;  C = In;  for(blk=0; blk<6; ++blk)  {    Zigzags[blk] = Use_AC_Pred ? SKL_MP4_I::Scan_Order[Pred_Dirs[blk]]                               : SKL_MP4_I::Scan_Order[0];    Last[blk] = Find_Last(C, Zigzags[blk], 63);    Cbp <<= 1;    if (Last[blk]>0) Cbp |= 1;    C += 64;  }    // time to really set the MB_Type  if (dQuant!=0) {    SKL_ASSERT(MB_Type!=SKL_MB_INTER4V);    MB_Type += 1;  // INTRA->INTRA_Q or INTER->INTER_Q  }  const SKL_VLC *VLC;  if (Is_I_VOP) VLC = &MCBPC_Intra_B6[ MB_Type-3 ][ Cbp & 3 ];  else VLC = &MCBPC_Inter_B7[ MB_Type ][ Cbp & 3 ];  Bits->Put_Bits( VLC->Val, VLC->Len );  Bits->Put_Bits( Use_AC_Pred, 1 );  int CbpY = Cbp >> 2;  if (MB_Type<=SKL_MB_INTER_Q) CbpY ^= 0x0f;  VLC = &CBPY_B8[ CbpY ];  Bits->Put_Bits( VLC->Val, VLC->Len );  if (dQuant!=0)  { /* INTRA_Q or INTER_Q */     SKL_ASSERT(dQuant>=-2 && dQuant<=2);    Bits->Put_Bits( DQuant_Tab[dQuant+2], 2 );  }  if (Field_DCT>=0)     // interlace?    Bits->Put_Bits( Field_DCT, 1 );  const SKL_SAFE_INT Pos2 = Bits->Write_Bit_Pos();    C = In;  for(blk=0; blk<6; ++blk)  {      // TODO: DC_Thresh here...    Write_DC_Coeff(Bits, C[0], (blk<4));  // DC-coeff    if (Last[blk]>0)      Write_Coeffs( Bits, C, Zigzags[blk]+1, Last[blk]-1, B16_17_Tabs[1]);    C += 64;  }  Texture_Bits += Bits->Write_Bit_Pos() - Pos2;  Store_Zero_MV();}//////////////////////////////////////////////////////////// P-MB codingvoid SKL_MB_ENC::Encode_Inter(SKL_FBB * const Bits, SKL_INT16 In[12*64], int Fwd_Code){  SKL_ASSERT(MB_Type <= SKL_MB_INTER4V);    // time to really set the MB_Type  if (dQuant!=0) {    SKL_ASSERT(MB_Type<SKL_MB_INTER4V);    MB_Type = SKL_MB_INTER_Q;  }  const SKL_VLC *VLC;  VLC = &MCBPC_Inter_B7[ MB_Type ][ Cbp & 3 ];  Bits->Put_Bits( VLC->Val, VLC->Len );  if (MB_Type<=SKL_MB_INTER_Q && VOL->Is_S_VOP() && VOL->Sprite_Mode==SPRITE_GMC)     Bits->Put_Bits(MC_Sel, 1);  VLC = &CBPY_B8[ (Cbp>>2) ^ 0xf ];  Bits->Put_Bits( VLC->Val, VLC->Len );  if (dQuant!=0) {  /* INTER_Q */    SKL_ASSERT(dQuant>=-2 && dQuant<=2);    Bits->Put_Bits( DQuant_Tab[dQuant+2], 2 );  }  if (Field_DCT>=0)   // interlace?  (this costs 0.1% in file size)  {    if (Cbp!=0) Bits->Put_Bits( Field_DCT, 1 );    if (MB_Type<=SKL_MB_INTER_Q && !MC_Sel)  /* INTER or INTER_Q */    {      Bits->Put_Bits( Field_Pred, 1 );      if (Field_Pred)        Bits->Put_Bits( Field_Dir&3, 2 ); // Fwd Top/Bottom field select.    }      // Note: no field pred for INTER4V or INTRA, or GMC  }  if (!MC_Sel)    // no vector for GMC  {    const SKL_SAFE_INT Pos = Bits->Write_Bit_Pos();    Write_Vector(Bits, dMVs[0], Fwd_Code);    if (MB_Type==SKL_MB_INTER4V)    {      Write_Vector(Bits, dMVs[1], Fwd_Code);      Write_Vector(Bits, dMVs[2], Fwd_Code);      Write_Vector(Bits, dMVs[3], Fwd_Code);    }    else  /*  INTER or INTER_Q */    {      if (Field_Pred)        Write_Vector(Bits, dMVs[1], Fwd_Code);    }    MV_Bits += Bits->Write_Bit_Pos() - Pos;  }  const SKL_SAFE_INT Pos2 = Bits->Write_Bit_Pos();    SKL_INT16 *C = In;  for(int blk=0; blk<6; ++blk) {    if (Last[blk]>=0)      Write_Coeffs( Bits, C, SKL_MP4_I::Scan_Order[0], Last[blk], B16_17_Tabs[0]);    C += 64;  }  Texture_Bits += Bits->Write_Bit_Pos() - Pos2;  Set_Not_Intra();}//////////////////////////////////////////////////////////// B-MB codingvoid SKL_MB_ENC::Encode_Inter_B(SKL_FBB * const Bits, SKL_INT16 In[12*64],                                int Fwd_Code, int Bwd_Code){  int ModB1 = (B_Type==SKL_MB_DIRECT && dMVs[0][0]==0 && dMVs[0][1]==0);  if (Cbp==0) {    if (ModB1)      Bits->Put_Bits( 1, 1 );   // ModB1    else      Bits->Put_Bits( 1, 2 );   // ModB2  }  else {    Bits->Put_Bits( 0, 2 );     // ModB1/B2    Bits->Put_Bits( Cbp, 6 );    if (B_Type!=SKL_MB_DIRECT) {      if (dQuant==-2) Bits->Put_Bits( 2, 2 );      else if (dQuant==2) Bits->Put_Bits( 3, 2 );      else {        SKL_ASSERT(dQuant==0);        Bits->Put_Bits( 0, 1 );      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合久久久久久久久久久久| 欧美怡红院视频| 色婷婷av一区二区三区软件 | 国产一区二区日韩精品| 成人综合在线观看| 欧美日韩国产精品自在自线| 国产亚洲精品超碰| 亚洲成人777| 97久久精品人人做人人爽| 欧美一卡二卡在线观看| 亚洲精品视频在线| 国产不卡视频在线播放| 日韩欧美一区在线| 亚洲一区二区三区在线| 成人sese在线| 久久视频一区二区| 日本成人在线电影网| 91久久人澡人人添人人爽欧美| 精品国产制服丝袜高跟| 日韩国产精品久久| 欧美调教femdomvk| 一区二区在线观看不卡| 成人av网站在线| 亚洲国产精品成人综合| 国产在线播精品第三| 7878成人国产在线观看| 一级特黄大欧美久久久| 成人不卡免费av| 国产精品萝li| 成人一级黄色片| 久久久99精品久久| av一区二区三区在线| 欧美精品一区二区三区蜜桃视频| 午夜一区二区三区在线观看| 91年精品国产| 亚洲欧洲韩国日本视频| 成人动漫一区二区三区| 国产精品久久久久四虎| www.亚洲人| 亚洲欧洲成人自拍| 97se亚洲国产综合自在线观| 欧美激情一区二区| 成人性视频免费网站| 中文字幕在线免费不卡| 色综合天天综合网天天看片| 综合av第一页| 在线欧美日韩精品| 午夜视频在线观看一区二区三区| 欧美日韩一二三| 亚洲超碰97人人做人人爱| 欧美日韩中文精品| 免费在线看成人av| 精品久久人人做人人爰| 国产馆精品极品| 国产午夜精品理论片a级大结局 | 日日骚欧美日韩| 欧美不卡一区二区三区四区| 国产在线视频精品一区| 国产精品视频九色porn| 色欧美88888久久久久久影院| 亚洲午夜三级在线| 亚洲精品在线一区二区| www.亚洲免费av| 丝袜美腿成人在线| 久久精品一区四区| 91久久免费观看| 日本va欧美va瓶| 国产午夜精品久久久久久免费视| 99久久精品免费观看| 亚洲第一福利视频在线| 精品国产人成亚洲区| 99re热视频精品| 美洲天堂一区二卡三卡四卡视频| 久久精品这里都是精品| 欧美体内she精高潮| 国产一区二区主播在线| 亚洲精品欧美激情| 国产喂奶挤奶一区二区三区| 欧美在线观看你懂的| 国产一区在线看| 亚洲成人免费影院| 欧美激情综合网| 在线播放视频一区| 粉嫩av亚洲一区二区图片| 午夜精品福利一区二区蜜股av| 久久久久久**毛片大全| 欧美色图片你懂的| 成人黄色一级视频| 久久99九九99精品| 亚洲午夜久久久久久久久电影院 | 免费在线欧美视频| 亚洲色图.com| 欧美韩日一区二区三区| 91精品中文字幕一区二区三区| av一二三不卡影片| 久久精品国产成人一区二区三区 | 亚洲国产视频网站| 国产精品麻豆99久久久久久| 精品国产乱码久久久久久1区2区 | 成人中文字幕电影| 久久爱www久久做| 香蕉乱码成人久久天堂爱免费| 国产精品久久久久久久久久久免费看| 日韩欧美资源站| 欧美日韩免费一区二区三区| 91在线免费视频观看| 国产a视频精品免费观看| 加勒比av一区二区| 奇米精品一区二区三区在线观看一| 中文字幕一区二区三区av| 久久精品在这里| 久久精品男人天堂av| 94-欧美-setu| 成人高清免费观看| aa级大片欧美| 99视频精品在线| 99久久精品免费| 91小宝寻花一区二区三区| 成人网在线播放| 国产不卡视频在线播放| 国产suv精品一区二区883| 国产成a人亚洲| 成人免费精品视频| 成人黄页毛片网站| 91丨九色porny丨蝌蚪| 91麻豆精东视频| 日本韩国精品在线| 欧美色精品天天在线观看视频| 91欧美一区二区| 欧美日韩一区国产| 9191久久久久久久久久久| 日韩一本二本av| 久久综合九色综合欧美98| 中文字幕精品综合| 亚洲色欲色欲www| 亚洲黄色录像片| 天堂资源在线中文精品| 日韩黄色在线观看| 国产原创一区二区| 9l国产精品久久久久麻豆| 色久综合一二码| 欧美一区二区免费视频| 久久综合色8888| 成人免费小视频| 午夜精品aaa| 国产99久久久国产精品| 99国产精品久久久久久久久久 | 一区二区三区四区激情 | 91麻豆精品国产91久久久久久 | 麻豆成人免费电影| 国产suv一区二区三区88区| 91免费小视频| 欧美一区二区三区四区在线观看| 精品久久一区二区| 一区二区三区欧美视频| 免费观看日韩av| a在线播放不卡| 日韩一区二区三| 亚洲品质自拍视频网站| 久久99热国产| 91网站在线播放| 精品日韩欧美在线| 亚洲品质自拍视频| 国产精品亚洲人在线观看| 欧美性感一类影片在线播放| 精品国精品自拍自在线| 一区二区三区在线视频观看58 | 国产亚洲va综合人人澡精品 | 国产精品午夜春色av| 亚洲一区二区三区激情| 亚洲成人tv网| 国产成人超碰人人澡人人澡| 欧美日韩一区不卡| 国产目拍亚洲精品99久久精品| 图片区小说区国产精品视频| 成人免费av网站| 精品国产精品网麻豆系列 | 亚洲国产精品国自产拍av| 男女男精品视频| 欧美无人高清视频在线观看| 国产精品美女久久久久高潮| 捆绑调教一区二区三区| caoporm超碰国产精品| 欧美精品一区二区三区四区| 婷婷久久综合九色综合绿巨人| 成人av网站在线观看免费| 精品日韩欧美在线| 日本va欧美va精品发布| 欧美影片第一页| 亚洲综合色婷婷| 97超碰欧美中文字幕| 中文字幕日韩av资源站| 国产精品亚洲一区二区三区妖精| 欧美成人国产一区二区| 天天做天天摸天天爽国产一区 | 亚洲午夜精品网| 日本高清免费不卡视频| 国产精品久久国产精麻豆99网站| 国产麻豆精品一区二区| 久久久一区二区三区|