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

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

?? skl_quant_ref.cpp

?? mpeg4編解碼器
?? CPP
字號:
/******************************************************** * Some code. Copyright (C) 2003 by Pascal Massimino.   * * All Rights Reserved.      (http://skal.planet-d.net) * * For Educational/Academic use ONLY. See 'LICENSE.TXT'.* ********************************************************//* *  skl_quant_ref.cpp * *  reference quantization/dequantization * ********************************************************/#include <math.h>#include "skl.h"#include "skl_syst/skl_dsp.h"extern "C" {#define DIV(x,y,b)  ( ((x)<0) ? -((-(x)+(b)) / (y)) : ((x)+(b)) / (y) )#define ABS(x)      ( (x)<0 ? -(x) : (x) )//////////////////////////////////////////////////////////// MPEG-4 way for quantizing//////////////////////////////////////////////////////////static void Init_Quantizer_MPEG4_Ref(SKL_QUANTIZER Q, const SKL_BYTE M[64],                                     const SKL_BYTE *Scale_Map, int For_Intra){  for(int k=1; k<32; ++k) {    const int q = (Scale_Map==0) ? (k<<1) : Scale_Map[k-1];    for(int i=0; i<64; ++i) {      const int S = q*M[i];      Q[0][k-1][0][i] = S;    // quant      Q[0][k-1][1][i] = For_Intra ? ((3*S+4)>>3) : 0;      Q[1][k-1][0][i] = S;    // dequant      Q[1][k-1][1][i] = For_Intra ? 0 : (S>>1);    }  }}static void Quant_Intra_MPEG4_Ref(SKL_INT16 *Out,                                  const SKL_INT16 *In,                                  const SKL_QUANTIZER Q,                                  SKL_INT32 q, SKL_INT32 DC_q){  Out[0] = DIV(In[0], DC_q, DC_q>>1);  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[0][q-1][0];  const SKL_INT16 * const Qb = Q[0][q-1][1];  for(int i=1; i<64; ++i) {    if (In[i]!=0) Out[i] = DIV( (In[i]<<4), Qs[i], Qb[i]);    else Out[i] = 0;  }}static SKL_INT32 Quant_Inter_MPEG4_Ref(SKL_INT16 *Out,                                       const SKL_INT16 *In,                                       const SKL_QUANTIZER Q,                                       SKL_INT32 q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[0][q-1][0];  const SKL_INT16 * const Qb = Q[0][q-1][1];  SKL_INT32 Sum = 0;  for(int i=0; i<64; ++i) {    if (In[i]!=0) Out[i] = DIV( (In[i]<<4), Qs[i], Qb[i]);    else          Out[i] = 0;    Sum += ABS(Out[i]);  }  return Sum;}//////////////////////////////////////////////////////////// MPEG4 Dequant//////////////////////////////////////////////////////////static void Dequant_Intra_MPEG4_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[1][q-1][0];  const SKL_INT16 * const Qb = Q[1][q-1][1];  SKL_INT32 v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  for(int i=1; i<64; ++i) {    if (In[i]==0)      Out[i] = 0;    else {      if (In[i]<0) v = -(SKL_INT32)((-In[i]*Qs[i]+Qb[i]) >> 4);      else         v =  (SKL_INT32)(( In[i]*Qs[i]+Qb[i]) >> 4);      Out[i] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;    }  }}static void Dequant_Inter_MPEG4_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, int Rows){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * Qs = Q[1][q-1][0];  const SKL_INT16 * Qb = Q[1][q-1][1];  int Sum = 0;  int i, j;  for(i=0; i<8; ++i) {    if (Rows & (1<<i)) {      for(j=0; j<8; ++j)      {        int v = (int)In[j];        if (v==0) Out[j] = 0;        else {          if (v<0) v = -((-v*Qs[j]+Qb[j]) >> 4);          else     v =  (( v*Qs[j]+Qb[j]) >> 4);          Out[j] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;          Sum ^= Out[j];        }      }    }    else for(j=0; j<8; ++j) Out[j] = 0;    Qs += 8;    Qb += 8;    In += 8;    Out += 8;  }  if ( !(Sum&1) )    Out[-1] ^= 1;   // mismatch control on coeff #63}//////////////////////////////////////////////////////////// H.263 way of quantizing//////////////////////////////////////////////////////////static void Init_Quantizer_H263_Ref(SKL_QUANTIZER Q, const SKL_BYTE M[64],                                    const SKL_BYTE *Scale_Map, int For_Intra){  SKL_ASSERT(Scale_Map==0);  for(int k=1; k<32; ++k) {    const int q = (k<<1);    const int b = (q>>1);    for(int i=0; i<64; ++i) {      Q[0][k-1][0][i] = q;    // quant      Q[0][k-1][1][i] = (b&1) ? 1 : 0;      Q[1][k-1][0][i] = q;    // dequant      Q[1][k-1][1][i] = (b&1) ? b : b-1;    }  }}static void Quant_Intra_H263_Ref(SKL_INT16 *Out,                                 const SKL_INT16 *In,                                 const SKL_QUANTIZER Q,                                 SKL_INT32 q, SKL_INT32 DC_q){  Out[0] = DIV(In[0], DC_q, DC_q>>1);  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[0][q-1][0];  const SKL_INT16 * const Qb = Q[0][q-1][1];  for(int i=1; i<64; ++i) {    if      (In[i]> Qb[i]) Out[i] = (In[i]-Qb[i]) / Qs[i];    else if (In[i]<-Qb[i]) Out[i] = (In[i]+Qb[i]) / Qs[i];    else                   Out[i] = 0;  }}static SKL_INT32 Quant_Inter_H263_Ref(SKL_INT16 *Out,                                      const SKL_INT16 *In,                                      const SKL_QUANTIZER Q,                                      SKL_INT32 q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[0][q-1][0];  const SKL_INT16 * const Qb = Q[0][q-1][1];  SKL_INT32 Sum = 0;  for(int i=0; i<64; ++i) {    if      (In[i]> Qb[i]) Out[i] = (In[i]-Qb[i]) / Qs[i];    else if (In[i]<-Qb[i]) Out[i] = (In[i]+Qb[i]) / Qs[i];    else                   Out[i] = 0;    Sum += ABS(Out[i]);  }  return Sum;}//////////////////////////////////////////////////////////// H263 Dequant//////////////////////////////////////////////////////////static void Dequant_Intra_H263_Ref(SKL_INT16 *Out,                                   const SKL_INT16 *In,                                   const SKL_QUANTIZER Q,                                   SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[1][q-1][0];  const SKL_INT16 * const Qb = Q[1][q-1][1];  SKL_INT32 v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  for(int i=1; i<64; ++i) {    if (In[i]==0) Out[i] = 0;    else {      if (In[i]<0) v = In[i]*Qs[i] - Qb[i];      else         v = In[i]*Qs[i] + Qb[i];      Out[i] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;    }  }}static void Dequant_Inter_H263_Ref(SKL_INT16 *Out,                                   const SKL_INT16 *In,                                   const SKL_QUANTIZER Q,                                   SKL_INT32 q, int Rows){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * Qs = Q[1][q-1][0];  const SKL_INT16 * Qb = Q[1][q-1][1];  int i, j;  for(i=0; i<8; ++i) {    if (Rows & (1<<i)) {      for(j=0; j<8; ++j) {        int v = (int)In[j];        if (v==0) Out[j] = 0;        else {          if (v<0) v = v*Qs[j] - Qb[j];          else     v = v*Qs[j] + Qb[j];          Out[j] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;        }      }    }    else for(j=0; j<8; ++j) Out[j] = 0;    Qs += 8;    Qb += 8;    In += 8;    Out += 8;  }}//////////////////////////////////////////////////////////// MPEG2 Dequant (no MPEG1 oddification)//////////////////////////////////////////////////////////static void Init_Quantizer_MPEG2_Ref(SKL_QUANTIZER Q, const SKL_BYTE M[64],                                     const SKL_BYTE *Scale_Map, int For_Intra){  for(int k=1; k<32; ++k) {    const int q = (Scale_Map==0) ? k : Scale_Map[k-1];    for(int i=0; i<64; ++i) {      const int S = q*M[i];      Q[1][k-1][0][i] = 2*S;     // dequant      Q[1][k-1][1][i] = S;  // only used for inter    }  }}#if 0//  MPEG1 dequant as it should be (with oddification, and no mismatch ctrl).static void Dequant_Intra_MPEG1_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[1][q-1][0];  SKL_INT32 v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  for(int i=1; i<64; ++i) {    if (In[i]==0) Out[i] = 0;    else {      if (In[i]<0) { v = ((-In[i]*Qs[i])>>5); if (v) v = -((v-1)|1); }      else         { v = (( In[i]*Qs[i])>>5); if (v) v =   (v-1)|1;  }      Out[i] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;    }  }}static void Dequant_Inter_MPEG1_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, int Rows){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * Qs = Q[1][q-1][0];  const SKL_INT16 * Qb = Q[1][q-1][1];  int i, j;  for(i=0; i<8; ++i) {    if (Rows & (1<<i)) {      for(j=0; j<8; ++j) {        int v = *In++;        if (v==0) *Out = 0;        else {          if (v<0) { v = ((-v*Qs[j]+Qb[j])>>5); if (v) v = -((v-1)|1); }          else     { v = (( v*Qs[j]+Qb[j])>>5); if (v) v =   (v-1)|1;  }          v = (v<-2048) ? -2048 : (v>2047) ? 2047 : v;          Out[j] = (SKL_INT16)v;        }      }    }    else for(j=0; j<8; ++j) Out[j] = 0;    Qs += 8;    Qb += 8;    In += 8;    Out += 8;  }}#endifstatic void Dequant_Intra_MPEG2_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const Qs = Q[1][q-1][0];  SKL_INT32 v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  int Sum = 0;  for(int i=1; i<64; ++i) {    if (In[i]==0) Out[i] = 0;    else {      if (In[i]<0) v = -((-In[i]*Qs[i])>>5);      else         v =  (( In[i]*Qs[i])>>5);      v = (v<-2048) ? -2048 : (v>2047) ? 2047 : v;      Out[i] = (SKL_INT16)v;      Sum ^= v;    }  }  if (!(Sum&1)) Out[63] ^= 1;   // mismatch control}static void Dequant_Inter_MPEG2_Ref(SKL_INT16 *Out,                                    const SKL_INT16 *In,                                    const SKL_QUANTIZER Q,                                    SKL_INT32 q, int Rows){  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * Qs = Q[1][q-1][0];  const SKL_INT16 * Qb = Q[1][q-1][1];  int Sum = 0;  int i, j;  for(i=0; i<8; ++i) {    if (Rows & (1<<i)) {      for(j=0; j<8; ++j) {        int v = In[j];        if (v==0) Out[j] = 0;        else {          if (v<0) v = -((-v*Qs[j]+Qb[j])>>5);          else     v =  (( v*Qs[j]+Qb[j])>>5);          v = (v<-2048) ? -2048 : (v>2047) ? 2047 : v;          Out[j] = (SKL_INT16)v;          Sum ^= v;        }      }    }    else for(j=0; j<8; ++j) Out[j] = 0;    Qs += 8;    Qb += 8;    In += 8;    Out += 8;  }  if (!(Sum&1))    Out[-1] ^= 1;   // mismatch control}#undef DIV#undef ABS//////////////////////////////////////////////////////////static void Zero_Ref(SKL_INT16 C[64]) { SKL_BZERO(C, 64*sizeof(C[0])); }static void Zero16_Ref(SKL_INT16 C[16]) { SKL_BZERO(C, 16*sizeof(C[0])); }//////////////////////////////////////////////////////////// exported methodsextern "C" void Skl_Dct16_Ref( SKL_INT16 *In );extern "C" void Skl_IDct16_Ref( SKL_INT16 *In );extern "C" void Skl_IDct16_Sparse_Ref( SKL_INT16 *In );extern "C" void Skl_IDct16_Put_Ref( SKL_INT16 *In, SKL_BYTE *Dst, int BpS );extern "C" void Skl_IDct16_Add_Ref( SKL_INT16 *In, SKL_BYTE *Dst, int BpS );SKL_QUANT_DSP Skl_Quant_MPEG4_Dsp_Ref ={  "MPEG4-Ref", Skl_Switch_None,  Init_Quantizer_MPEG4_Ref,  Quant_Intra_MPEG4_Ref,        Quant_Inter_MPEG4_Ref,  Dequant_Intra_MPEG4_Ref,      Dequant_Inter_MPEG4_Ref,   Zero_Ref, Zero16_Ref,  Skl_Dct16_Ref, Skl_IDct16_Ref,  Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref,   Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref};SKL_QUANT_DSP Skl_Quant_MPEG2_Dsp_Ref ={  "MPEG2-Ref", Skl_Switch_None,  Init_Quantizer_MPEG2_Ref,  0, 0,  Dequant_Intra_MPEG2_Ref, Dequant_Inter_MPEG2_Ref,   Zero_Ref, Zero16_Ref,  0, Skl_IDct16_Ref,  Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref,   Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref};SKL_QUANT_DSP Skl_Quant_H263_Dsp_Ref ={  "H263-Ref", Skl_Switch_None,  Init_Quantizer_H263_Ref,  Quant_Intra_H263_Ref,         Quant_Inter_H263_Ref,  Dequant_Intra_H263_Ref,       Dequant_Inter_H263_Ref,  Zero_Ref, Zero16_Ref,  Skl_Dct16_Ref, Skl_IDct16_Ref,  Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref,   Skl_IDct16_Sparse_Ref, Skl_IDct16_Put_Ref, Skl_IDct16_Add_Ref};//////////////////////////////////////////////////////////}   // extern "C"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀a∨国产成人精品| 亚洲午夜精品在线| 精品盗摄一区二区三区| 欧美一级高清大全免费观看| 在线观看一区日韩| 欧美日韩精品是欧美日韩精品| 91黄视频在线观看| 欧美色偷偷大香| 欧美男男青年gay1069videost| 欧美自拍偷拍午夜视频| 欧美日韩色一区| 日韩视频免费观看高清完整版 | 成av人片一区二区| 国产精品乡下勾搭老头1| 国产一区二区精品久久91| 国产91精品一区二区麻豆网站| 国产成人三级在线观看| 91在线码无精品| 欧美四级电影网| 精品久久国产97色综合| 国产午夜精品久久久久久免费视| 中文字幕在线不卡| 亚洲福中文字幕伊人影院| 日本aⅴ免费视频一区二区三区| 狠狠色狠狠色综合| 波波电影院一区二区三区| 91免费视频大全| 日韩一级免费观看| 中文字幕av一区二区三区| 一区二区三区在线免费视频| 日韩1区2区3区| 国产成人自拍网| 欧美午夜理伦三级在线观看| 日韩无一区二区| 亚洲欧美经典视频| 久久精品国产99| 色八戒一区二区三区| 91麻豆精品国产91久久久久久久久| 26uuu国产电影一区二区| 亚洲欧美另类久久久精品 | 国产乱人伦偷精品视频不卡| 99精品视频一区二区| 欧美一区二区三区视频免费 | 久久久久国产免费免费| 亚洲影院理伦片| 国产美女一区二区三区| 欧美色图一区二区三区| 久久日一线二线三线suv| 午夜久久久影院| 99国产欧美久久久精品| 欧美刺激脚交jootjob| 亚洲影院久久精品| 成人精品国产一区二区4080| 5858s免费视频成人| 亚洲精品成人精品456| 国产精品系列在线观看| 欧美一区二区女人| 午夜亚洲国产au精品一区二区| 成人aaaa免费全部观看| 久久久久久久一区| 久久激情五月婷婷| 在线成人免费观看| 性做久久久久久| 91成人网在线| 亚洲人成伊人成综合网小说| 成人性生交大片免费看中文网站| 欧美电影免费观看高清完整版在线 | 国产欧美1区2区3区| 麻豆视频一区二区| 日韩一区二区三区精品视频| 亚洲成人动漫在线观看| 欧美日韩亚洲丝袜制服| 亚洲国产精品综合小说图片区| aaa国产一区| 中文字幕在线不卡视频| 91免费在线视频观看| 亚洲欧洲国产日本综合| 91尤物视频在线观看| 亚洲男帅同性gay1069| 在线观看免费成人| 天使萌一区二区三区免费观看| 欧美亚洲国产一区二区三区 | 国产亚洲精品超碰| 高清国产一区二区| 亚洲欧洲成人自拍| 欧洲国产伦久久久久久久| 亚洲最大成人网4388xx| 欧美日韩午夜在线视频| 美洲天堂一区二卡三卡四卡视频| 91精品国产91久久久久久一区二区 | 美女高潮久久久| 久久色中文字幕| 成人免费黄色在线| 亚洲免费观看高清在线观看| 91美女视频网站| 五月激情综合色| 欧美大片在线观看| 成人黄动漫网站免费app| 亚洲乱码国产乱码精品精的特点| 在线观看91精品国产入口| 五月天视频一区| 久久一日本道色综合| jvid福利写真一区二区三区| 亚洲欧美激情在线| 欧美成人三级在线| av一区二区不卡| 日本中文字幕一区二区有限公司| 精品粉嫩aⅴ一区二区三区四区| 丁香一区二区三区| 亚洲成人资源在线| 欧美国产激情二区三区| 欧美男男青年gay1069videost| 国产一区高清在线| 一区二区三区四区精品在线视频| 日韩色视频在线观看| 91色视频在线| 日韩和欧美的一区| 久久夜色精品一区| 欧美日韩一二区| 不卡电影免费在线播放一区| 三级成人在线视频| 中文字幕亚洲一区二区av在线| 91精品福利在线一区二区三区 | 亚洲一卡二卡三卡四卡| 精品日韩在线观看| 欧美久久久久中文字幕| 成人久久18免费网站麻豆| 青青草国产精品97视觉盛宴| 亚洲丝袜美腿综合| 国产三级精品在线| 欧美一区二区视频在线观看| av毛片久久久久**hd| 韩国精品在线观看| 日韩成人伦理电影在线观看| 亚洲私人黄色宅男| 国产精品久久久久婷婷| 久久蜜桃一区二区| 欧美一区二区日韩一区二区| 欧美色手机在线观看| 色诱亚洲精品久久久久久| 成人动漫在线一区| 国产成人8x视频一区二区 | 国产成人av电影免费在线观看| 麻豆中文一区二区| 久久精品国产免费| 免费成人av资源网| 日韩国产在线观看| 亚洲成va人在线观看| 亚洲国产日产av| 亚洲人成人一区二区在线观看| 国产日本欧美一区二区| 久久久精品日韩欧美| 久久蜜臀精品av| 国产视频一区在线观看| 久久蜜桃一区二区| 国产嫩草影院久久久久| 欧美激情在线免费观看| 国产精品免费观看视频| 国产精品女主播av| |精品福利一区二区三区| 综合色天天鬼久久鬼色| 亚洲视频一区在线| 亚洲欧美日韩在线不卡| 亚洲福利视频一区二区| 天天色天天操综合| 麻豆国产精品777777在线| 美女精品一区二区| 粉嫩av一区二区三区粉嫩 | 亚洲成人免费看| 婷婷久久综合九色综合绿巨人| 日日夜夜免费精品| 美国三级日本三级久久99| 国产麻豆成人精品| 一本久久综合亚洲鲁鲁五月天| 色老头久久综合| 欧美福利视频导航| 久久久午夜精品理论片中文字幕| 欧美激情一区二区三区四区| 亚洲欧美欧美一区二区三区| 亚洲精品视频在线观看免费| 日韩黄色一级片| 国产电影精品久久禁18| 日本精品视频一区二区三区| 91麻豆精品国产综合久久久久久 | 欧美日韩久久一区| 久久无码av三级| 一区二区视频在线| 日本不卡高清视频| 91在线播放网址| 欧美专区日韩专区| 久久久久久久精| 亚洲国产毛片aaaaa无费看| 老司机精品视频在线| 成人黄色在线视频| 欧美一区二区不卡视频| 国产精品高清亚洲| 激情五月激情综合网| 在线视频欧美区| 久久久久久久久99精品| 日韩电影在线免费|