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

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

?? skl_quant_c.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_c.cpp * *  quantization/dequantization * ********************************************************/#include <math.h>#include "skl.h"#include "skl_syst/skl_dsp.h"extern "C" void Skl_Dct16_C( SKL_INT16 *In );extern "C" void Skl_IDct16_C( SKL_INT16 *In );extern "C" void Skl_IDct16_Sparse_C( SKL_INT16 *In );extern "C" void Skl_IDct16_Put_C( SKL_INT16 *In, SKL_BYTE *Dst, int BpS );extern "C" void Skl_IDct16_Add_C( SKL_INT16 *In, SKL_BYTE *Dst, int BpS );extern "C" {  // DIV_RND: operator `//` of the norm #define DIV_RND(x,y,b)  ( (x)<0 ? (((x) - (b)) / (y)) : (((x) + (b)) / (y)) )#define FIX(c,n,b)  ((1<<(n))/(c) + (b))#define FDIV(c,m,b,n) (((int)((c)+(b))*(m)) >> (n))//////////////////////////////////////////////////////////// MPEG-4 quant//////////////////////////////////////////////////////////  // Note: using variable precision is ~10% slower, but accurate almost  // everywhere (even down to the unrealistic M[i]=1!)  // TODO: implement this table with 'switch(q)' ??static int Shifts[31] = {   15, 16, 17, 17, 18, 18, 18, 18,   19, 19, 19, 19, 19, 19, 19, 19,   20, 20, 20, 20, 20, 20, 20, 20,   20, 20, 20, 20, 20, 20, 20};static void Init_Quantizer_MPEG4_C(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) {      SKL_ASSERT(M[i]>0);      const int S = q*M[i];      const int Fix = Shifts[k-1];      Q[0][k-1][0][i] = FIX(S, Fix,1);  // 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_C(SKL_INT16 *Out,                                const SKL_INT16 *In,                                const SKL_QUANTIZER Q,                                SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  Out[0] = DIV_RND(In[0], DC_q, DC_q>>1);  const SKL_INT16 * const M = Q[0][q-1][0];  const SKL_INT16 * const B = Q[0][q-1][1];  const int Fix = Shifts[q-1];  for(int i=1; i<64; ++i) {    if      (In[i]<0) Out[i] = -FDIV( (-In[i])<<4, M[i], B[i], Fix );    else if (In[i]>0) Out[i] =  FDIV( ( In[i])<<4, M[i], B[i], Fix );    else              Out[i] = 0;  }}static SKL_INT32 Quant_Inter_MPEG4_C(SKL_INT16 *Out,                                     const SKL_INT16 *In,                                     const SKL_QUANTIZER Q,                                     SKL_INT32 q){  SKL_INT32 Sum = 0;  SKL_ASSERT(q>0 && q<32);  const SKL_INT16 * const M = Q[0][q-1][0];  // no bias for inter: const SKL_INT16 * const B = Q[0][q-1][1];  const int Fix = Shifts[q-1];  for(int i=0; i<64; ++i) {    if      (In[i]<0) Sum -= ( Out[i] = -FDIV( (-In[i])<<4, M[i], 0, Fix ) );    else if (In[i]>0) Sum += ( Out[i] =  FDIV( ( In[i])<<4, M[i], 0, Fix ) );    else Out[i] = 0;  }  return Sum;}//////////////////////////////////////////////////////////// MPEG4 Dequant//////////////////////////////////////////////////////////static void Dequant_Intra_MPEG4_C(SKL_INT16 *Out,                                  const SKL_INT16 *In,                                  const SKL_QUANTIZER Q,                                  SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  SKL_INT32 v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  const SKL_INT16 * const M = Q[1][q-1][0] + 64;  // no bias: const SKL_INT16 * const B = Q[1][q-1][1] + 64;  for(int i=-63; i<0; ++i) {    int v = In[64+i];    if (v==0) Out[64+i] = 0;    else {      if (v<0) {        v = -M[i]*v;        Out[64+i] = (v>(2048<<4)) ? -2048 :-(SKL_INT16)(v>>4);      }      else {        v =  M[i]*v;        Out[64+i] = (v>(2047<<4)) ?  2047 : (SKL_INT16)(v>>4);      }    }  }}static void Dequant_Inter_MPEG4_C(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 * M = Q[1][q-1][0];  const SKL_INT16 * B = Q[1][q-1][1];  int Sum = 0;  int R = Rows;  for(int i=-8; i<0; ++i, R>>=1) {    In  += 8;    Out += 8;    M += 8;    B += 8;    if (R & 1) {      for(int j=-8; j<0; ++j) {        int v = In[j];        if (v==0) Out[j] = 0;        else {          if (v<0) {            v = (-M[j]*v+B[j]);            v = (v>(2048<<4)) ? -2048 : -(v>>4);          }          else {            v = ( M[j]*v+B[j]);            v = (v>(2047<<4)) ?  2047 :  (v>>4);          }          Out[j] = v;          Sum ^= v;        }      }    }    else SKL_BZERO(Out-8, 8*sizeof(*Out));  }  if ( !(Sum&1) )    Out[-1] ^= 1;   // mismatch control on coeff #63}//////////////////////////////////////////////////////////// H.263 way for quantizing//////////////////////////////////////////////////////////static void Init_Quantizer_H263_C(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] = FIX(q, 15, 1);  // 15bits of fixed-prec is enough for all q      Q[0][k-1][1][i] = (b&1) ? 1 : 0;      Q[1][k-1][0][i] = q;      Q[1][k-1][1][i] = (b&1) ? b : b-1;    }  }}static void Quant_Intra_H263_C(SKL_INT16 *Out,                               const SKL_INT16 *In,                               const SKL_QUANTIZER Q,                               SKL_INT32 q, SKL_INT32 DC_q){  SKL_ASSERT(q>0 && q<32);  Out[0] = DIV_RND(In[0], DC_q, DC_q>>1);  const int M = Q[0][q-1][0][0];  for(int i=1; i<64; ++i) {    const int B = Q[0][q-1][1][i];    SKL_ASSERT(B>=0);    if      (In[i]<-B) Out[i] =-FDIV(-In[i], M,-B, 15 );    else if (In[i]> B) Out[i] = FDIV( In[i], M,-B, 15 );    else               Out[i] = 0;  }}SKL_INT32 Quant_Inter_H263_C(SKL_INT16 *Out,                             const SKL_INT16 *In,                             const SKL_QUANTIZER Q,                             SKL_INT32 q){  SKL_ASSERT(q>0 && q<32);  SKL_INT32 Sum = 0;  const int M = Q[0][q-1][0][0];  for(int i=0; i<64; ++i) {    const int B = Q[0][q-1][1][i];    SKL_ASSERT(B>=0);    if      (In[i]<-B) Sum -= ( Out[i] =-FDIV(-In[i], M,-B, 15 ) );    else if (In[i]> B) Sum += ( Out[i] = FDIV( In[i], M,-B, 15 ) );    else                        Out[i] = 0;  }  return Sum;}//////////////////////////////////////////////////////////// H263 dequantstatic void Dequant_Intra_H263_C(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_INT32 M = Q[1][q-1][0][0];  const SKL_INT32 B = Q[1][q-1][1][0];  int v;  v = In[0]*DC_q;  Out[0] = (v<-2048) ? -2048 : (v>2047) ? 2047 : (SKL_INT16)v;  for(int i=-63; i<0; ++i) {    int v = In[64+i];    if (v==0) Out[64+i] = 0;    else if (v<0) {       v = v*M - B;      Out[64+i] = (v<-2048) ? -2048 : (SKL_INT16)v;    }    else {      v = v*M + B;       Out[64+i] = (v> 2047) ?  2047 : (SKL_INT16)v;    }  }}static void Dequant_Inter_H263_C(SKL_INT16 *Out,                                 const SKL_INT16 *In,                                 const SKL_QUANTIZER Q,                                 SKL_INT32 q, int Rows){  SKL_ASSERT(q>0 && q<32);  const SKL_INT32 M = Q[1][q-1][0][0];  const SKL_INT32 B = Q[1][q-1][1][0];  int R = Rows;  for(int i=-8; i<0; ++i, R>>=1) {    In += 8;    Out += 8;    if (R & 1)    {      for(int j=-8; j<0; ++j) {        int v = In[j];        if (v==0) Out[j] = 0;        else if (v<0) {          v = v*M - B;          Out[j] = (v<-2048) ? -2048 : (SKL_INT16)v;        }        else {          v = v*M + B;          Out[j] = (v>2047) ? 2047 : (SKL_INT16)v;        }      }    }    else SKL_BZERO(Out-8, 8*sizeof(*Out));  }}//////////////////////////////////////////////////////////static void Zero_C(SKL_INT16 C[64]) {  SKL_UINT32 *P = (SKL_UINT32 *)&C[64];  for(int i=-32; i<0; i+=4) {    P[i   ] = 0;    P[i+ 1] = 0;    P[i+ 2] = 0;    P[i+ 3] = 0;  }}static void Zero16_C(SKL_INT16 C[16]) {   *(SKL_UINT32*)(C+ 0) = 0;  *(SKL_UINT32*)(C+ 2) = 0;  *(SKL_UINT32*)(C+ 4) = 0;  *(SKL_UINT32*)(C+ 6) = 0;  *(SKL_UINT32*)(C+ 8) = 0;  *(SKL_UINT32*)(C+10) = 0;  *(SKL_UINT32*)(C+12) = 0;  *(SKL_UINT32*)(C+14) = 0;}//////////////////////////////////////////////////////////SKL_QUANT_DSP Skl_Quant_MPEG4_Dsp_C ={  "MPEG4-C", Skl_Switch_None,  Init_Quantizer_MPEG4_C,  Quant_Intra_MPEG4_C,          Quant_Inter_MPEG4_C,  Dequant_Intra_MPEG4_C,        Dequant_Inter_MPEG4_C,  Zero_C, Zero16_C,  Skl_Dct16_C, Skl_IDct16_C,  Skl_IDct16_Sparse_C, Skl_IDct16_Put_C, Skl_IDct16_Add_C,   Skl_IDct16_Sparse_C, Skl_IDct16_Put_C, Skl_IDct16_Add_C};SKL_QUANT_DSP Skl_Quant_H263_Dsp_C ={  "H263-C", Skl_Switch_None,  Init_Quantizer_H263_C,  Quant_Intra_H263_C,           Quant_Inter_H263_C,  Dequant_Intra_H263_C,         Dequant_Inter_H263_C,  Zero_C, Zero16_C,  Skl_Dct16_C, Skl_IDct16_C,  Skl_IDct16_Sparse_C, Skl_IDct16_Put_C, Skl_IDct16_Add_C,   Skl_IDct16_Sparse_C, Skl_IDct16_Put_C, Skl_IDct16_Add_C};//////////////////////////////////////////////////////////#undef DIV_RND#undef FIX#undef FDIV}   // extern "C"

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜嗨av一区二区三区| 一区二区三区四区蜜桃| 欧美性三三影院| 99视频国产精品| 国产一区二区0| 日本三级亚洲精品| 亚洲一区二区三区自拍| 亚洲色图清纯唯美| 国产精品国产三级国产普通话99| www.成人网.com| 国产成人免费高清| 国产成人免费视频一区| 亚洲成av人综合在线观看| 一区二区三区日韩欧美| 精品国产一区二区三区不卡 | 日韩一区二区三区高清免费看看| 国产乱码精品一区二区三区av | 亚洲日本中文字幕区| 国产精品色噜噜| 91麻豆精品国产91久久久久久| 国产精品一色哟哟哟| 国产麻豆欧美日韩一区| 国产最新精品精品你懂的| 国产一区二区电影| 日韩专区中文字幕一区二区| 日韩1区2区日韩1区2区| 日韩av一级片| 久久成人免费电影| 亚洲精品日日夜夜| 石原莉奈在线亚洲三区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲美女免费视频| 日韩中文字幕一区二区三区| 日本不卡一区二区三区| 捆绑紧缚一区二区三区视频| 国产精品一区二区三区乱码| 亚洲成人黄色小说| 久久国产精品无码网站| 一区二区高清视频在线观看| 婷婷丁香久久五月婷婷| 一区二区三区四区av| 日本午夜精品视频在线观看 | 精品欧美乱码久久久久久| 久久人人爽人人爽| 亚洲欧美日韩久久精品| 青青草一区二区三区| 国产东北露脸精品视频| 色综合色狠狠天天综合色| 91精选在线观看| 中文字幕精品一区| 国产精品久久久久久妇女6080| 欧美成人在线直播| 亚洲视频在线一区| 久久精品国产**网站演员| 99精品黄色片免费大全| 欧美精品丝袜中出| 国产精品网站一区| 日韩av一级片| 色94色欧美sute亚洲线路一ni | 一区在线观看免费| 日本欧美在线看| 99热99精品| 欧美精品一区二区三区视频| 免费欧美在线视频| 蜜乳av一区二区三区| 日韩美女久久久| 欧美国产日韩亚洲一区| 亚洲高清中文字幕| 91精品国产91久久久久久一区二区| 国产三级一区二区三区| 粉嫩av亚洲一区二区图片| 91精品国产综合久久久久久久久久| 中文字幕一区二区三区不卡| 色吧成人激情小说| 国产精品成人免费在线| 一本到三区不卡视频| 午夜日韩在线观看| 欧美白人最猛性xxxxx69交| 国产乱对白刺激视频不卡| 国产精品福利电影一区二区三区四区| 免费欧美在线视频| 中文字幕不卡在线| 欧美在线三级电影| 久久国产尿小便嘘嘘尿| 国产亚洲一区二区三区| 黄页网站大全一区二区| 国产精品灌醉下药二区| 欧美老肥妇做.爰bbww视频| 国产尤物一区二区在线| 欧美精品三级日韩久久| 久久超碰97中文字幕| 欧美军同video69gay| 精品系列免费在线观看| 中文在线资源观看网站视频免费不卡| 麻豆视频观看网址久久| 久久久美女艺术照精彩视频福利播放| 日本免费在线视频不卡一不卡二| 在线观看中文字幕不卡| 久久精品国产**网站演员| 国产精品国产三级国产普通话99| 成人免费的视频| 五月婷婷色综合| 久久亚洲精精品中文字幕早川悠里| 日本免费新一区视频 | 欧美激情一区二区三区在线| 热久久久久久久| 欧美国产精品v| 日本韩国一区二区三区视频| 国产精品不卡一区| 欧美图区在线视频| 国产69精品一区二区亚洲孕妇| 国产亚洲1区2区3区| 欧美精品一卡两卡| 91色九色蝌蚪| 国产电影一区二区三区| 日韩国产在线观看| 亚洲国产精品天堂| 欧美成人女星排名| 99在线精品一区二区三区| 亚洲成人av中文| 久久久天堂av| 欧美卡1卡2卡| 色婷婷激情综合| 国产91精品一区二区| 欧美aaaaa成人免费观看视频| 欧美日韩精品久久久| 91成人网在线| av中文字幕不卡| 国产99久久精品| 国产精品18久久久久久久久久久久 | 日本伊人午夜精品| 亚洲线精品一区二区三区| 国产精品久久久一本精品| 国产性色一区二区| 欧美国产一区视频在线观看| 欧美日韩精品免费观看视频| 在线观看日韩电影| 欧美性xxxxxx少妇| 欧美伊人久久久久久久久影院| 国产精品一区一区三区| 国产成人免费xxxxxxxx| 国产大陆a不卡| 日本伊人色综合网| 美女在线一区二区| 国内精品第一页| 午夜不卡av在线| 麻豆精品在线看| 亚洲一区在线观看网站| 亚洲高清久久久| 亚洲精品福利视频网站| 亚洲综合色成人| 亚洲高清不卡在线| 丝袜国产日韩另类美女| 日本最新不卡在线| 国产在线麻豆精品观看| 国产麻豆视频精品| 99久久综合精品| 色偷偷久久一区二区三区| 国产精品99久久久| 麻豆精品一区二区综合av| 亚洲国产综合色| 麻豆国产精品官网| 成人一级片在线观看| 99久久99久久精品免费看蜜桃| 激情五月婷婷综合网| 国产aⅴ综合色| 在线精品视频免费观看| 日韩一区二区影院| 91精品国产91热久久久做人人| 欧美在线视频全部完| 欧美精品一区二区三| 亚洲国产激情av| 午夜天堂影视香蕉久久| 精彩视频一区二区| 91久久精品一区二区三| 波多野结衣亚洲一区| 欧美精品xxxxbbbb| 欧美国产日产图区| 婷婷国产在线综合| 成人一区二区三区中文字幕| 国产91高潮流白浆在线麻豆 | 国产日韩综合av| 亚洲电影视频在线| 国产成人鲁色资源国产91色综| 国产真实精品久久二三区| 国产综合久久久久久久久久久久 | 欧美一区二区视频观看视频| 91麻豆精品国产| 欧美大黄免费观看| 亚洲九九爱视频| 国产又黄又大久久| 丁香六月综合激情| 欧美顶级少妇做爰| 日韩精品一区二区三区四区视频 | 久久av老司机精品网站导航| 北岛玲一区二区三区四区| 成人av在线播放网站| 日韩欧美成人一区二区| 一级女性全黄久久生活片免费| 五月激情六月综合|