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

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

?? skl_mpg4_v12.cpp

?? mpeg4編解碼器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
inline static int Read_MPEG2_Escape(SKL_FBB *FBB) {  int Val = FBB->Get_Bits(12);  if ((Val&2047)==0) return 0;  // error  if (Val>=2048) Val -= 4096;  return Val;}//////////////////////////////////////////////////////////// -- MPEG-1 intra blockstatic void Read_Intra_Block_MPEG1(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){  const int * const Scan = SKL_MP4_I::Scan_Order[0]+64;    // Note: sometimes, EOB occurs *exactly* at the end, for i==0.    // We need to parse it however. That's why we're not using    // a loop like "while(i<0)", but "while(1)" instead.    // Note2: We unroll the Huffman table searching, because:    //  * EOB is only present on the 1rst chunk    //  * ESC is only present on the second    //  * Only the last chunk requires full 16bits    // We re-ordered the search in a (small) logarithmic search    // Note3: For code-cache coherency and branch prediction, we put    // the 'Ok:' code *first*  SKL_FBB_DECL;  SKL_FBB_START(*FBB);  SKL_FBB_LOAD_WORD(16);  const SKL_DCT_VLC *Tab = 0;  int i = -63;  while(1)  {    if (Bits>=0x28000000) {      Tab = Tab_B14_AC_0 -  5 + (Bits>>(16+11));Ok:      if ((i += Tab->Run)>=0) break;  // EOB      SKL_INT32 Val = Tab->Level;      Bits_Left -= Tab->Len+1;      Bits <<= Tab->Len;      if (Bits&0x80000000) Val = -Val;      Bits <<= 1;      SKL_FBB_LOAD_WORD(16);      Out[Scan[i++]] = Val;      continue;    }    else if (Bits>=0x08000000) {      Tab = Tab_B14_AC_1 -  4 + (Bits>>(16+8));      goto Ok;    }    else if (Bits>=0x00800000) {      if (Bits>=0x04000000) // ESC code only      {          // parse away 6bits for ESC code and 6bits for 'Skip' value        SKL_UINT32 Skip = (Bits >> (32-12)) & 0x3f;        if ((i += Skip)>=0) break;  // error        SKL_FBB_DISCARD_SAFE( 6+6 );//        inlined version of 'Read_MPEG1_Escape()'        SKL_FBB_LOAD_WORD(16);        SKL_INT32 Val = SKL_FBB_BITS_SIGNED(8);        SKL_FBB_DISCARD_SAFE(8);        if ((Val&0x7f)==0)  // Val=0 or 128        {          Val = SKL_FBB_BITS(8) + 2*Val;          SKL_FBB_DISCARD_SAFE(8);        }        Out[Scan[i++]] = Val;        SKL_FBB_LOAD_WORD(16);        continue;      }      else {        if (Bits>=0x02000000)          Tab = Tab_B14_AC_2 -  8 + (Bits>>(16+6));        else /* (Bits>=0x00800000) */          Tab = Tab_B14_AC_3 - 16 + (Bits>>(16+3));        goto Ok;      }    }    else {      if (Bits>=0x00200000) {        Tab = Tab_B14_AC_4 - 16 + (Bits>>(16+1));        goto Ok;      }      else if (Bits>=0x00100000) {        Tab = Tab_B14_AC_5 - 16 + (Bits>>(16+0));        SKL_FBB_LOAD_WORD(17);        goto Ok;      }      /* else -> error */    }    break;  /* error */  }  SKL_FBB_DISCARD_SAFE(Tab->Len);  SKL_FBB_STOP(*FBB);}staticvoid Read_Intra_Block_DType_MPEG1(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){ /* nothing to do */ }//////////////////////////////////////////////////////////// MPEG-1 Inter blockstaticint Read_Inter_Block_MPEG1(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){  const int * const Scan = SKL_MP4_I::Scan_Order[0]+64;  SKL_FBB Local;  Local.Copy(FBB);  const SKL_DCT_VLC *Tab;  int i = -64;  int Rows = 0x00;    // we decode the first coeff DC the usual way. No optim worth.  Local.Check_Bits(16 + 1);  Tab = Skl_DCT_VLC_Search( B14_DC_Chunks, Local.Bits );  if (Tab->Run<0) goto ESC_Code;  else goto Ok;  while(1)  {    if (Local.Bits>=0x28000000)  {      Tab = Tab_B14_AC_0 - 5 + (Local.Bits>>(16+11));Ok:      if ((i += Tab->Run)>=0) break; // EOB      int Val = Tab->Level;      Local.Bits_Left -= Tab->Len+1;      Local.Bits <<= Tab->Len;      if (Local.Bits&0x80000000) Val = -Val;      Local.Bits <<= 1;      Local.Check_Bits_Word(16);      const int j = Scan[i++];      Out[j] = Val;      Rows |= SKL_MP4_I::Row_From_Index[j];      continue;    }    else if (Local.Bits>=0x08000000) {      Tab = Tab_B14_AC_1 - 4 + (Local.Bits>>(16+8));      goto Ok;    }    else if (Local.Bits>=0x00800000) {      if (Local.Bits>=0x04000000) // ESC code only      {ESC_Code:          // parse away 6bits for ESC code and 6bits for 'Skip' value        SKL_UINT32 Skip = (Local.Bits >> (32-12)) & 0x3f;        if ((i += Skip)>=0) break;  // error        Local.Discard_Safe( 6+6 );        int Val = Read_MPEG1_Escape(&Local);            Out[Scan[i++]] = Val;        Local.Check_Bits_Word(16);        continue;      }      else {        if (Local.Bits>=0x02000000)          Tab = Tab_B14_AC_2 - 8 + (Local.Bits>>(16+6));        else /*(Local.Bits>=0x00800000)*/          Tab = Tab_B14_AC_3 - 16 + (Local.Bits>>(16+3));        goto Ok;      }    }    else {      if (Local.Bits>=0x00200000) {        Tab = Tab_B14_AC_4 - 16 + (Local.Bits>>(16+1));        goto Ok;      }      else if (Local.Bits>=0x00100000) {        Tab = Tab_B14_AC_5 - 16 + (Local.Bits>>(16+0));        Local.Check_Bits(17);   // loads 1 more byte        goto Ok;      }      /* else -> error */    }    break; /* error */  }// Error:  Local.Discard_Safe(Tab->Len);  FBB->Copy(&Local);  return Rows;}//////////////////////////////////////////////////////////// -- MPEG-2 intra blockstaticvoid Read_Intra_Block_B14_MPEG2(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){  const int * const Scan = MB->Scan_Order;  SKL_FBB Local;  Local.Copy(FBB);  SKL_INT32 Mismatch = Out[0];  int i = -63;  while(1)  {    int Val;    Local.Check_Bits(16);    const SKL_DCT_VLC *Tab = Skl_DCT_VLC_Search( B14_AC_Chunks, Local.Bits );    if (Tab->Run<0) // ESC    {        // parse away 6bits for ESC code and 6bits for 'Skip' value      SKL_UINT32 Skip = (Local.Bits >> (32-12)) & 0x3f;      i += Skip;      if (i>=0) break;  // error      Local.Discard_Safe( 6+6 );      Val = Read_MPEG2_Escape(&Local);    }    else {      Local.Discard_Word(Tab->Len);      i += Tab->Run;      if (i>=0) break;  // EOB2      Val = Tab->Level;      if (Local.Get_Bits(1)) Val = -Val;    }    Out[Scan[i++]] = Val;    Mismatch ^= Val;  }  Out[63] ^= Mismatch & 1;  FBB->Copy(&Local);}staticvoid Read_Intra_Block_B15_MPEG2(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){  const int * const Scan = MB->Scan_Order;  SKL_FBB Local;  Local.Copy(FBB);  SKL_INT32 Mismatch = Out[0];  int i = -63;  while(1)  {    int Val;    Local.Check_Bits(16);    const SKL_DCT_VLC *Tab = Skl_DCT_VLC_Search( B15_AC_Chunks, Local.Bits );    if (Tab->Run<0) // ESC    {        // parse away 6bits for ESC code and 6bits for 'Skip' value      SKL_UINT32 Skip = (Local.Bits >> (32-12)) & 0x3f;      i += Skip;      if (i>=0) break;  // error      Local.Discard_Safe( 6+6 );      Val = Read_MPEG2_Escape(&Local);    }    else {      Local.Discard_Word(Tab->Len);      i += Tab->Run;      if (i>=0) break;  // EOB2      Val = Tab->Level;      if (Local.Get_Bits(1)) Val = -Val;    }    Out[Scan[i++]] = Val;    Mismatch ^= Val;  }  Out[63] ^= Mismatch & 1;  FBB->Copy(&Local);}//////////////////////////////////////////////////////////// MPEG-2 Inter blockstaticint Read_Inter_Block_MPEG2(SKL_FBB *FBB, SKL_MB2 *MB, SKL_INT16 *Out){  const int * const Scan = MB->Scan_Order;  SKL_FBB Local;  Local.Copy(FBB);  Local.Check_Bits(16);  const SKL_DCT_VLC *Tab = Skl_DCT_VLC_Search( B14_DC_Chunks, Local.Bits );  int i = -64;  int Rows = 0x00;  while(1)  {    int Val;    SKL_ASSERT(Tab!=0);    if (Tab->Run<0) // ESC    {        // parse away 6bits (=Tab->Len) for ESC code        // and 6bits for 'Skip' value      SKL_UINT32 Skip = (Local.Bits >> (32-12)) & 0x3f;      i += Skip;      if (i>=0) break;  // error      Local.Discard_Safe( 6+6 /*Tab->Len+6*/ );      Val = Read_MPEG2_Escape(&Local);    }    else {      Local.Discard_Word(Tab->Len);      i += Tab->Run;      if (i>=0) break;  // EOB      Val = Tab->Level;      if (Local.Get_Bits(1)) Val = -Val;    }    const int j = Scan[i++];    Out[j] = Val;    Rows |= SKL_MP4_I::Row_From_Index[j];      // next lump    Local.Check_Bits(16);    Tab = Skl_DCT_VLC_Search( B14_AC_Chunks, Local.Bits );  }  FBB->Copy(&Local);  return Rows;}//////////////////////////////////////////////////////////// ISO/IEC 13818-2 section 7.2 -> 7.5// -- Intra blocksinline void SKL_MB2::Decode_Intra_Macroblock(){  SKL_INT16 Base[7*64+SKL_ALIGN];  SKL_INT16 * const In = (SKL_INT16*)SKL_ALIGN_PTR(Base, SKL_ALIGN);  SKL_INT16 *Out = In + 1*64;  SKL_ASSERT(Is_Intra());  if (!Has_Concealment_MV())  {    Reset_Fwd(); // reset all PMV    Reset_Bwd();  }  else // read concealment motion vectors  {    if (Is_MPEG1()) Read_Motion_Vectors_MPEG1(this, 0);    else if (Motion()==MC_FIELD) Read_Field_Motion_Vectors(this, 0);    else Read_Motion_Vectors(this, 0);    SKL_COPY_MV(PMV[1][0], PMV[0][0]);    SKL_COPY_MV(PMV[1][1], PMV[0][1]);    FBB->Discard(1); // marker bit  }  for(int blk=0; blk<6; ++blk)  {    VOL->Quant_Ops.Zero(In);    const int cc = (blk<4) ? 0 : blk-3;    DC[cc] += Read_DC_Diff_MPEG2(FBB, DCT_Chunks[cc]);    In[0] = DC[cc];    Read_Intra(FBB, this, In);    VOL->Quant_Ops.Dequant_Intra(Out, In, VOL->Q_Intra, Quant, DC_Q);    Out += 64;  }  Copy_16To8(In+1*64);      // ISO/IEC 11172-2 section 2.4.2.7 & 2.4.3.6  if (VOL->Is_D_VOP()) FBB->Get_Bits(1);}//////////////////////////////////////////////////////////// -- Inter blocksinline void SKL_MB2::Decode_Inter_Macroblock(){  SKL_ASSERT(!Is_Intra());  Reset_DC();  // note in 7.2.1  if (VOL->Is_P_VOP() && !Is_Forward()) // section 7.6.3.5  {    Reset_Fwd();  // only reset fwd pmv    Copy_Fwd();   // simply copy    Reset_Motion_Type();  }  else if (Has_Motion())   // section 6.2.5  {    if (Is_MPEG1())  Predict_MPEG1();    else {      switch (Motion()) {        case MC_NONE:  /* aieee! */        break;        case MC_FIELD:          Predict_Fields();        break;        case MC_FRAME:          Predict_Frame();        break;        case MC_DMV:          Predict_DMV();        break;      }    }  }  else Copy_Fwd();  if (Is_Pattern())     // coded  {    SKL_INT16 Base[7*64+SKL_ALIGN];    SKL_INT16 * const In = (SKL_INT16*)SKL_ALIGN_PTR(Base, SKL_ALIGN);    SKL_INT16 *Out = In + 1*64;    Cbp = Read_Coded_Block_Pattern(FBB);    for(int blk=(1<<5); blk; blk>>=1)    {      if (Cbp & blk)      // coded      {        VOL->Quant_Ops.Zero(In);        const int Rows = Read_Inter(FBB, this, In);        VOL->Quant_Ops.Dequant_Inter(Out, In, VOL->Q_Inter, Quant, Rows&0xff);      }      Out += 64;    }    Add_16To8(In + 1*64);  }}//////////////////////////////////////////////////////////// section 7.6.3.4inline int SKL_MB2::Skip_Macroblock(int Skip){  if (Skip>1)  {    Reset_DC();   // section 7.2.1    if (VOL->Is_B_VOP()) { // => re-use previous motion vectors      while(Skip-->1) {        if (!Next()) break;        Predict_Reuse();      }    }    else {      if ( VOL->Is_P_VOP() )        Reset_Fwd(); // section 7.6.3.4      while(Skip-->1) {        if (!Next()) break;        Copy_Fwd();      }    }    Reset_Motion_Type();  }  return !Next();}//////////////////////////////////////////////////////////// section 6.2.3.6 (picture data)SKL_MB2::SKL_MB2(const SKL_MP4_I *vol, SKL_FBB *fbb)   : SKL_MB(vol), FBB(fbb){  DC_Prec = (vol->MPEG12_Ext_Flags>>12) & 0x03;  DC_Q    = 1<<(3-DC_Prec);  Pic_Struct     = (vol->MPEG12_Ext_Flags>>10) & 0x03;  Frame_Pred_DCT = (vol->MPEG12_Ext_Flags>> 8) & 0x01;  Concealment_MV = (vol->MPEG12_Ext_Flags>> 7) & 0x01;  int Intra_VLC  = (vol->MPEG12_Ext_Flags>> 5) & 0x01;  if (Is_MPEG1()) {    Read_Intra = ( VOL->Is_D_VOP() ? Read_Intra_Block_DType_MPEG1                                   : Read_Intra_Block_MPEG1 );    Read_Inter = Read_Inter_Block_MPEG1;  }  else  {    Read_Intra = ( (Intra_VLC==0) ? Read_Intra_Block_B14_MPEG2                                  : Read_Intra_Block_B15_MPEG2 );    Read_Inter = Read_Inter_Block_MPEG2;  }  Scan_Order = VOL->Alt_Vert_Scan ? SKL_MP4_I::Scan_Order[2]                                  : SKL_MP4_I::Scan_Order[0];  Scan_Order += 64;  Reset_DC();  // reset prediction (section 7.2.1)  Reset_Fwd(); // reset all MV prediction (section 7.6.3.4)    Reset_Bwd();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜乳av一区二区| 亚洲综合在线五月| 91麻豆精品国产91久久久使用方法 | 欧洲av一区二区嗯嗯嗯啊| 成人理论电影网| 波多野结衣中文字幕一区| 东方aⅴ免费观看久久av| 国产伦精品一区二区三区免费迷| 久久精品久久99精品久久| 视频一区欧美日韩| 日韩av一区二区三区| 日韩综合在线视频| 国内久久精品视频| 成人av在线资源| 91首页免费视频| 欧美日韩电影一区| 欧美r级电影在线观看| 久久亚洲精品小早川怜子| 国产欧美日韩视频在线观看| 国产精品国产三级国产普通话三级| 国产精品美女久久久久aⅴ国产馆| 日本一区二区动态图| 亚洲精选视频在线| 日韩av中文字幕一区二区三区| 日韩av成人高清| 国产九色精品成人porny| 成人app在线观看| 欧美日韩在线亚洲一区蜜芽| 精品成人私密视频| 日韩一区在线免费观看| 午夜日韩在线电影| 国产乱码精品一区二区三区忘忧草 | 欧美精品一区二区久久久| 国产精品水嫩水嫩| 五月天婷婷综合| 国产在线精品视频| 欧美三级一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 一区二区三区四区蜜桃| 精品一区二区久久久| 色婷婷久久久亚洲一区二区三区| 91麻豆精品国产91久久久久久久久| 国产午夜精品一区二区 | 日本免费在线视频不卡一不卡二| 国产成人在线观看免费网站| 欧美吞精做爰啪啪高潮| 国产人成一区二区三区影院| 亚洲一区二区三区三| 国产老女人精品毛片久久| 91福利社在线观看| 国产亚洲精品7777| 久久精品国产亚洲高清剧情介绍| 91一区二区在线观看| 久久日一线二线三线suv| 亚洲综合色噜噜狠狠| 国产精品资源在线| 欧美日韩第一区日日骚| 亚洲激情在线播放| 粉嫩高潮美女一区二区三区| 欧美一区二区三区视频在线观看| 亚洲女人小视频在线观看| 成人性生交大片免费看视频在线| 日韩午夜在线观看| 天天做天天摸天天爽国产一区| 福利91精品一区二区三区| 26uuu欧美| 国产麻豆精品theporn| 欧美大片日本大片免费观看| 亚瑟在线精品视频| 欧美色视频在线| 亚洲自拍欧美精品| 在线亚洲高清视频| 综合久久久久久| 成人免费av在线| 中文字幕第一区第二区| 成人久久18免费网站麻豆| 久久久精品中文字幕麻豆发布| 精品在线免费视频| 精品粉嫩超白一线天av| 国产在线播精品第三| 国产午夜三级一区二区三| 成人精品小蝌蚪| 亚洲欧美在线高清| 欧美影院一区二区三区| 五月天久久比比资源色| 欧美一级视频精品观看| 国模一区二区三区白浆| 日本一区二区高清| 在线精品视频一区二区| 午夜在线电影亚洲一区| 日韩一级二级三级| 国产精品一区二区三区99| 国产日韩精品一区| 成人精品在线视频观看| 一区二区成人在线观看| 91精品国产aⅴ一区二区| 乱中年女人伦av一区二区| 久久久久久久综合日本| 99国产精品视频免费观看| 亚洲国产精品麻豆| 欧美一区二区视频在线观看2022| 久久99热狠狠色一区二区| 国产精品情趣视频| 欧美片网站yy| 国产美女视频一区| 亚洲国产一区二区三区青草影视| 欧美一区二区三区系列电影| 国产精品一线二线三线| 亚洲欧美经典视频| 欧美xxxxx牲另类人与| 99re8在线精品视频免费播放| 亚洲一级二级三级| 欧美极品xxx| 正在播放一区二区| 成人黄色777网| 久久精品免费观看| 亚洲图片自拍偷拍| 国产精品午夜久久| 欧美一区二区三区在线视频| av亚洲产国偷v产偷v自拍| 石原莉奈在线亚洲三区| 国产精品国产三级国产有无不卡 | 欧美日韩亚洲丝袜制服| 精品一区二区三区影院在线午夜| 亚洲视频狠狠干| 26uuu亚洲婷婷狠狠天堂| 欧美日韩一区在线观看| 成人涩涩免费视频| 国产精品综合视频| 亚洲成人手机在线| 亚洲人精品午夜| 国产欧美一区二区三区鸳鸯浴 | 国产精品一区在线| 视频一区欧美日韩| 亚洲国产精品欧美一二99| 中文字幕一区在线观看| 久久久久久久久久久久久夜| 日韩午夜激情电影| 欧美日韩日日骚| 在线观看日韩国产| 在线欧美日韩国产| 91国偷自产一区二区三区观看| 国产激情偷乱视频一区二区三区| 麻豆成人在线观看| 日本不卡一二三区黄网| 五月婷婷色综合| 午夜精品久久久久久久99水蜜桃| 一区二区在线观看免费| 1区2区3区精品视频| 最近日韩中文字幕| 亚洲三级免费电影| 亚洲黄色av一区| 亚洲国产一区二区三区| 午夜精品国产更新| 蜜臀av一级做a爰片久久| 另类调教123区 | 99久久精品国产观看| 99精品久久只有精品| 色香色香欲天天天影视综合网| gogogo免费视频观看亚洲一| 成人免费视频免费观看| av网站免费线看精品| 色8久久人人97超碰香蕉987| 在线日韩av片| 日韩免费看的电影| 国产亚洲欧美在线| 中文字幕亚洲一区二区av在线| 亚洲欧美一区二区三区极速播放 | 六月丁香婷婷色狠狠久久| 国产在线不卡一区| 成人免费观看男女羞羞视频| 99久久免费视频.com| 欧美日韩视频不卡| 26uuuu精品一区二区| 亚洲欧美在线观看| 午夜a成v人精品| 国产成人精品免费在线| 日本韩国一区二区三区视频| 欧美无人高清视频在线观看| 精品福利av导航| 亚洲乱码国产乱码精品精小说| 午夜国产不卡在线观看视频| 久久精品国产**网站演员| 91在线视频免费观看| 7777精品伊人久久久大香线蕉的| 久久久五月婷婷| 亚洲国产精品综合小说图片区| 久久99精品国产麻豆婷婷| 99国产一区二区三精品乱码| 欧美一区二区三区免费观看视频| 欧美极品xxx| 美女国产一区二区三区| av影院午夜一区| 精品久久久久久久久久久院品网| 亚洲欧洲日产国产综合网| 奇米综合一区二区三区精品视频| 懂色av一区二区三区蜜臀| 日韩一卡二卡三卡| 亚洲va欧美va国产va天堂影院| 国产精品一级片|