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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? skl_mpg4_anl.cpp

?? mpeg4編解碼器
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/******************************************************** * 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_mpg4_anl.cpp * *  Default Built-In analyzer for MPEG4 encoder ********************************************************/#ifndef SKL_AUTO_INCLUDE#include "./skl_mpg4_anl.h"#include <malloc.h>   // for alloca()#if defined(__SUN__) || defined(__ALPHA__) || defined(__IRIX__) || defined(__HP__)#include <alloca.h>   // for alloca() on Sun, Irix, HP, and Alpha#endifconst int CORE_VERSION = 5;//////////////////////////////////////////////////////////// alignment macros#ifdef SKL_USE_ASM#define SKL_ALIGN 15#else#define SKL_ALIGN 0#endif#define SKL_ALIGN_PTR(P,ALGN) ( ((SKL_SAFE_INT)(P) + (ALGN)) & ~(ALGN) )//////////////////////////////////////////////////////////#define ABS(x)  (((x)<0) ? -(x) : (x))//#define BCOST(x)  ABS(x)//#define BCOST(x)  ( SKL_BMASKS::Log2(ABS(x)) )#define BCOST(x)  (Code_Sizes[(x)])#define RND(Q) ((int)((Q)+.5))static inline int IS_VALID_MV(const SKL_MV MV) { return *(SKL_UINT32*)MV != 0x7fff7fff; }static inline int IS_EQUAL_MV(const SKL_MV a, const SKL_MV b) { return *(SKL_UINT32*)a == *(SKL_UINT32*)b; }static inline int IS_ZERO_MV(const SKL_MV MV) { return *(SKL_UINT32*)MV == 0; }//////////////////////////////////////////////////////////// Cursor to hold search parameters and results//////////////////////////////////////////////////////////struct ME_MAP;  // note: for SSE2, *Src1 is supposed to be 16b-aligned!!typedef SKL_UINT32 (*METRIC)(const SKL_BYTE *Src1, const SKL_BYTE *Src2, SKL_INT32 BpS);typedef SKL_UINT32 (*METRIC_DEV)(const SKL_BYTE *Src, SKL_INT32 BpS);typedef SKL_UINT32 (*METRIC_AVRG)(const SKL_BYTE *Dst, const SKL_BYTE *Src1, const SKL_BYTE *Src2, SKL_INT32 BpS);typedef int (*SEARCH_MTHD)(ME_MAP * const Cursor);struct ME_MAP{  SKL_MV Pred, IPred, Best_MV;  SKL_UINT32 Best_Sad;  const SKL_BYTE *Src;  // current frame pointer  const SKL_BYTE *Ref;  // ref frame, relative to Predictor vector  int Lambda;  int MV_Bits_Shift;  int Sub_Prec_Shift;  METRIC Metric;  METRIC_AVRG Metric_Avrg;  int Dir;              // bits 0-7: last direction checked, bits 8-15: new direction to check  static const SKL_BYTE MV_Bits0[32];  static SKL_BYTE MV_Code_Sizes0[7][2*2048];  static void Init_MV_Code_Sizes();  void Set_FCode(const int FCode, const int Prec);  SKL_BYTE * Code_Sizes;  SEARCH_MTHD Search_Method;  int xo, yo;  int BpS;  int xm, xM, ym, yM;                 // MV Limits in full-pel units (disregarding sub-pel units)  int xm_Sub, xM_Sub, ym_Sub, yM_Sub; // MV Limits in sub-pel units (either 1 or 2)  int Range;            // range in *full* pel  // int Hit, Miss;   // debug  const SKL_BYTE *Src0, *Ref0;  const SKL_MP4_INFOS * const Frame;  SKL_BYTE *Scratch1;   // 16x17 tmp buffer  SKL_BYTE *Scratch2;   // 17x16 tmp buffer  enum { MAX_KEY = 2048, CACHE_SIZE = 8 };      // CACHE_SIZE must be a power of 2  SKL_UINT32 Key_Map[CACHE_SIZE*CACHE_SIZE];  // keys   SKL_UINT32 Sad_Map[CACHE_SIZE*CACHE_SIZE];  // cache for SAD evaluated so far  SKL_UINT32 Min_Key;                         // offset to avoid erasing Map too often  inline void Set_MV_Predictor(const SKL_MV * const Src, const int MV_Stride, const int Blk, const int ABits);  inline static void Set_FP_MV_Predictor(SKL_MV Pred, const SKL_MP4_MAP * const Map, const int Map_Stride, const int ABits);  inline SKL_UINT32 Hash(int x, int y) const { return Min_Key + x + y*MAX_KEY + 1025*2048; }  inline int Slot(int x, int y)        const { return (x+y*CACHE_SIZE) & (CACHE_SIZE*CACHE_SIZE-1); }  inline void New_Map() {    if (Min_Key==0) SKL_BZERO(Key_Map, sizeof(Key_Map));    Min_Key += MAX_KEY*MAX_KEY;  }  SKL_UINT32 MV_Bits_Cost(const int x, const int y) const { return Lambda*(BCOST((x<<Sub_Prec_Shift)-Pred[0])+BCOST((y<<Sub_Prec_Shift)-Pred[1])); }//  SKL_UINT32 MV_Bits_Cost(const int x, const int y) const { return Lambda*(BCOST(x-IPred[0])+BCOST(y-IPred[1])); }  SKL_UINT32 MV_Bits_Cost_Raw(const int x, const int y) const { return Lambda*(BCOST(x-Pred[0])+BCOST(y-Pred[1])); }  SKL_UINT32 Eval(int x, int y) const {    const SKL_UINT32 Sad = Metric(Src, Ref+x+y*BpS, BpS);    return Sad + MV_Bits_Cost(x, y);  }  inline int Sad_Is_Tested(int x, int y) const {    const SKL_UINT32 Key = Hash(x,y);    const int Off = Slot(x,y);    // if (Key_Map[Off]==Key) Hit++; else Miss++;    return (Key_Map[Off]==Key);  // cache hit  }  inline SKL_UINT32 *Get_Cached_Sad(int x, int y) {    const int Off = Slot(x,y);    SKL_ASSERT(Key_Map[Off] == Hash(x,y));    return &Sad_Map[Off];  }  inline void Cache_Sad(int x, int y, SKL_UINT32 Sad) {    const int Off = Slot(x,y);    Key_Map[Off] = Hash(x,y);    Sad_Map[Off] = Sad;    Best_Sad = Sad;    Best_MV[0] = x;    Best_MV[1] = y;  }  inline void Search() { Search_Method(this); }  inline SKL_UINT32 Sub_Search(const SKL_MV MVo, const int dx, const int dy) {    New_Map();    Set_Sub_Offset(dx, dy);    const int x = (IPred[0]<xm) ? xm : (IPred[0]>xM) ? xM : IPred[0];    const int y = (IPred[1]<ym) ? ym : (IPred[1]>yM) ? yM : IPred[1];    Cache_Sad( x,y, Metric(Src, Ref+x+y*BpS, BpS) );    Eval_FP_If_Valid(MVo);    Search();    return Best_Sad;  }  void Print_Cache(int What) const {    int x,y;    printf("---- (Best SAD:%d at (%d,%d)---------------\n", Best_Sad, Best_MV[0], Best_MV[1]);    for(y=0; y<CACHE_SIZE; ++y) {      for(x=0; x<CACHE_SIZE; ++x) {        SKL_UINT32 v = Key_Map[CACHE_SIZE*y+x];        int Ok = (v<Min_Key + MAX_KEY*MAX_KEY) && (v>=Min_Key);        if      (What==0) printf( "%c",  Ok ? '*' : '.');        else if (What==1) printf( "[%6d]", Ok ? Sad_Map[CACHE_SIZE*y+x] : 0);        else              printf( " 0x%8x ", Key_Map[CACHE_SIZE*y+x]);      }      printf("\n");    }  }  void Start_Search() {    Dir = 0x00; // (Best_MV[0]>0 ? 0x02 : Best_MV[0]<0 ? 0x01 : 0x00) |                 // (Best_MV[1]>0 ? 0x04 : Best_MV[1]<0 ? 0x08 : 0x00);  }  void Eval_Dir(int x, int y, int Next_Dir)  {    if (Sad_Is_Tested(x,y)) return;    SKL_UINT32 Sad = Eval(x,y);    if (Sad<Best_Sad) {      Cache_Sad(x,y,Sad);      Dir = (Dir & 0xff) | Next_Dir;     }  }  int Eval(const SKL_MV v) {    const int x = v[0], y = v[1];    if (Sad_Is_Tested(x,y)) return 0;    const SKL_UINT32 Sad = Eval(x,y);    if (Sad<Best_Sad) {      Cache_Sad(x,y,Sad);      return 1;    }    else return 0;  }  inline int Is_In_Range(const SKL_MV v) {     return (v[0]>=xm_Sub && v[0]<=xM_Sub &&             v[1]>=ym_Sub && v[1]<=yM_Sub);  }  inline int Eval_If_In_Range(const SKL_MV v) {    if (v[0]<xm || v[0]>xM || v[1]<ym || v[1]>yM) return 0;    return Eval(v);  }  int Eval_If_Valid(const SKL_MV v) {    if (!IS_VALID_MV(v)) return 0;    if (!Is_In_Range(v)) return 0;    SKL_MV V;    if (Sub_Prec_Shift==2) { V[0] = v[0]/4; V[1] = v[1]/4; }    else                   { V[0] = v[0]/2; V[1] = v[1]/2; }    // V[0] = v[0]>>Sub_Prec_Shift; V[1] = v[1]>>Sub_Prec_Shift;    return Eval(V);  }  int Eval_FP_If_Valid(const SKL_MV v) {    if (!IS_VALID_MV(v)) return 0;    if (v[0]<xm || v[0]>xM || v[1]<ym || v[1]>yM) return 0;    return Eval(v);  }  SKL_UINT32 Get_Sad(int x, int y) {    SKL_ASSERT(x>=xm && x<=xM && y>=ym && y<=yM);    const SKL_UINT32 Key = Hash(x,y);    const int Off = Slot(x,y);    if (Key_Map[Off]==Key) return Sad_Map[Off];    SKL_UINT32 Sad = Eval(x,y);    Sad_Map[Off] = Sad;    Key_Map[Off] = Key;    return Sad;  }  ME_MAP(const SKL_MP4_INFOS * const frame)    : BpS(frame->BpS)    , Frame(frame)    , Min_Key(0) { Init(); }  void Init();  SKL_UINT32 Start(const METRIC metric, const METRIC_AVRG metric_Avrg);   // returns Metric(0,0)  void New_Scanline(int y);  inline void operator++(int) {    xo  += 16;    Src += 16;    Ref += 16;  }  inline void Set_Sub_Offset(const int dx, const int dy);  SKL_UINT32 Refine_MV_16x16(SKL_MV MV, const int Prec, const int Rounding);  SKL_UINT32 Refine_MV_16x8 (SKL_MV MV, const int Prec, const int Rounding);  SKL_UINT32 Refine_MV_8x8  (SKL_MV MV, const int Prec, const int Rounding);  SKL_UINT32 Sad_Cost_QP(const SKL_BYTE * const *_HPels, int Offset, const int x, const int y) const;                                                                SKL_UINT32 Refine_MV_HPels(SKL_MV MV, const int Prec, const int Rounding,                             const SKL_BYTE * const *HPels);  SKL_UINT32 Get_HP_Sad(SKL_BYTE *Tmp,                        const SKL_MB_FUNCS * const mb, const SKL_BYTE *Rf,                        int dx, int dy) const;  SKL_UINT32 Get_HP_Sad_8x8(SKL_BYTE *Tmp,                            const SKL_MB_FUNCS * const mb, const SKL_BYTE *Rf,                            int dx, int dy) const;  int Check_Limits(const SKL_MV mv, SKL_CST_STRING Label=0) const;  int Check_Frame_Limits(const SKL_MV mv, SKL_CST_STRING Label=0) const;};//////////////////////////////////////////////////////////const SKL_BYTE ME_MAP::MV_Bits0[32] = {    // Table B-12 (with sign bit counted)   3,  4,  5,  7,  8,  8,  8, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13};SKL_BYTE ME_MAP::MV_Code_Sizes0[7][2*2048];void ME_MAP::Init_MV_Code_Sizes(){  static int MV_Code_Sizes_Ok = 0;    // not fully MT-safe, but yet ok.  if (MV_Code_Sizes_Ok)    return;  for(int FCode=1; FCode<=7; FCode++)  {    int MV;    const int Fix = FCode - 1;    MV_Code_Sizes0[Fix][2048+0] = 1;    for(MV=1; MV<=(32<<Fix); ++MV)    {      const int Code = (MV-1) >> Fix;      const int Len = MV_Bits0[Code] + Fix;      if (MV<(32<<Fix)) MV_Code_Sizes0[Fix][2048+MV] = Len;      MV_Code_Sizes0[Fix][2048-MV] = Len;    }    for( ; MV<=2048; ++MV) {    // sanity check      if (MV<2048) MV_Code_Sizes0[Fix][2048+MV] = 255;      MV_Code_Sizes0[Fix][2048-MV] = 255;    }  }  MV_Code_Sizes_Ok = 1;}void ME_MAP::Set_FCode(const int FCode, const int Prec){  SKL_ASSERT(FCode>=1 && FCode<=7);  Init_MV_Code_Sizes();  Sub_Prec_Shift = 1 + (Prec==2);  MV_Bits_Shift  = (FCode-1) + 4;  Code_Sizes     = MV_Code_Sizes0[FCode-1] + 2048;  Range          = ( 16 << FCode ) >> Sub_Prec_Shift; // -> Range in *full* pel unit}//////////////////////////////////////////////////////////// Various search methods//////////////////////////////////////////////////////////static int MV_Search_Full(ME_MAP * const C){  SKL_UINT32 Best_Sad = C->Best_Sad;  const SKL_BYTE *Ref = C->Ref + (C->IPred[1]-C->ym)*C->BpS + C->IPred[0];  int bx=0, by=0;  for(int y=C->ym; y<=C->yM; ++y) {    for(int x=C->xm; x<=C->xM; ++x) {      SKL_UINT32 Sad = C->MV_Bits_Cost(x, y);      if (Sad>=Best_Sad) continue;      Sad += C->Metric(C->Src, Ref+x, C->BpS);      if ( Sad<Best_Sad )      {        Best_Sad = Sad;        bx = x;        by = y;      }    }    Ref += C->BpS;  }  if (Best_Sad<C->Best_Sad) {    C->Best_Sad = Best_Sad;    C->Best_MV[0] = bx;    C->Best_MV[1] = by;    return 1;  }  else return 0;}static int MV_Search_Log(ME_MAP * const C){  int nx = C->IPred[0];  int ny = C->IPred[1];  int Range = C->Range >> 1;  SKL_UINT32 Best_Sad = C->Best_Sad;  do {    int xm = nx - Range;    int xM = nx + Range;    int ym = ny - Range;    int yM = ny + Range;    if (xm<C->xm)  xm = C->xm;    if (xM>C->xM)  xM = C->xM;    if (ym<C->ym)  ym = C->ym;    if (yM>C->yM)  yM = C->yM;    for(int y=ym; y<=yM; y+=Range) {      const SKL_BYTE *Ref = C->Ref + y*C->BpS;      for(int x=xm; x<=xM; x+=Range) {        SKL_UINT32 Sad = C->MV_Bits_Cost(x,y);        if (Sad>=Best_Sad) continue;        Sad += C->Metric(C->Src, Ref+x, C->BpS);        if (Sad<Best_Sad)        {          Best_Sad = Sad;          nx = x;          ny = y;        }      }    }    Range >>= 1;  } while(Range>0);  if (Best_Sad<C->Best_Sad) {    C->Best_Sad = Best_Sad;    C->Best_MV[0] = nx;    C->Best_MV[1] = ny;    return 1;  }  else return 0;}    // it's not exactly a genuine PHODS, but works well...static int MV_Search_PHODS(ME_MAP * const C){  SKL_MV mv;  SKL_COPY_MV(mv, C->IPred);  int dx, dy;  dx = dy = C->Range >> 1;  SKL_UINT32 Best_Sad = C->Best_Sad;  do {    if (dx) {      int xm = mv[0] - dx; if (xm< C->xm)  xm = C->xm;      int xM = mv[0] + dx; if (xM>=C->xM)  xM = C->xM-1;      const SKL_BYTE * const Ref = C->Ref + mv[1]*C->BpS;      for(int x=xm; x<=xM; x+=dx) {        SKL_UINT32 Sad = C->MV_Bits_Cost(x,mv[1]);        if (Sad>=Best_Sad) continue;        Sad += C->Metric(C->Src, Ref+x, C->BpS);        if (Sad<Best_Sad)        {          Best_Sad = Sad;          mv[0] = x;        }      }    }    if (dy) {      int ym = mv[1] - dy; if (ym< C->ym)  ym = C->ym;      int yM = mv[1] + dy; if (yM>=C->yM)  yM = C->yM-1;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区午夜精品| 国产女人aaa级久久久级| 欧美在线视频日韩| 色呦呦国产精品| 色综合久久中文字幕综合网| av在线不卡网| 91在线看国产| 91国偷自产一区二区三区观看| 99视频有精品| 91免费版pro下载短视频| 91视频在线观看| 在线观看一区二区视频| 欧美中文字幕一二三区视频| 欧美日韩一区三区四区| 欧美高清视频不卡网| 日韩一区二区在线看| 精品国产免费人成电影在线观看四季| 日韩欧美在线一区二区三区| 精品少妇一区二区三区在线视频| 精品久久久影院| 国产免费久久精品| 1区2区3区精品视频| 亚洲精品成人在线| 午夜电影网亚洲视频| 一本大道久久a久久综合婷婷| 99精品热视频| 欧美色图激情小说| 日韩欧美国产综合一区| 久久久国产一区二区三区四区小说 | 91麻豆国产在线观看| 欧美在线免费播放| 欧美一区二区啪啪| 久久久久九九视频| 亚洲美女视频在线| 日韩精品一级中文字幕精品视频免费观看 | 亚洲高清不卡在线| 另类小说视频一区二区| 国产精品乡下勾搭老头1| av电影一区二区| 欧美日韩一卡二卡三卡| 精品av久久707| 自拍偷拍国产精品| 青青青伊人色综合久久| 国产成人综合亚洲网站| 色国产综合视频| 日韩你懂的在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美一级二级在线观看| 26uuu精品一区二区三区四区在线| 国产精品女人毛片| 日韩精品一二三四| bt欧美亚洲午夜电影天堂| 欧美日韩国产高清一区| 国产三级欧美三级| 亚洲国产三级在线| 国产成人亚洲综合a∨婷婷图片| 99精品偷自拍| 精品国产成人在线影院| 亚洲综合一区二区三区| 国产精品影音先锋| 欧美军同video69gay| 国产精品视频在线看| 日本成人中文字幕在线视频 | 欧美日韩精品欧美日韩精品一| 久久综合av免费| 亚洲va欧美va国产va天堂影院| 国产福利一区二区三区视频在线| 欧美色视频在线观看| 国产精品九色蝌蚪自拍| 麻豆高清免费国产一区| 欧美在线制服丝袜| 国产精品你懂的在线| 激情成人午夜视频| 欧美日韩专区在线| 亚洲欧美一区二区三区孕妇| 国产一区欧美一区| 制服丝袜激情欧洲亚洲| 亚洲精品欧美综合四区| 成人免费观看av| 精品国偷自产国产一区| 天天av天天翘天天综合网色鬼国产| 99在线热播精品免费| 欧美精品一区二区三区久久久| 亚洲电影在线免费观看| 一本色道久久加勒比精品 | 综合亚洲深深色噜噜狠狠网站| 久久国内精品自在自线400部| 欧美视频一区二| 亚洲女与黑人做爰| av一区二区三区在线| 日本一区二区三级电影在线观看 | 在线免费观看一区| 中文字幕一区二区三区不卡在线| 国产精品一区在线观看你懂的| 日韩欧美久久久| 免费在线成人网| 91精品国产黑色紧身裤美女| 亚洲超碰精品一区二区| 欧美色国产精品| 亚洲国产视频网站| 欧美日本在线一区| 亚洲午夜精品一区二区三区他趣| 色琪琪一区二区三区亚洲区| 亚洲欧美一区二区三区国产精品 | 欧美专区亚洲专区| 亚洲午夜视频在线| 欧美日韩日本视频| 天堂在线亚洲视频| 欧美一级片免费看| 九色综合国产一区二区三区| 日韩一区二区三区电影在线观看| 日韩国产欧美在线视频| 日韩一区二区免费高清| 另类小说图片综合网| 精品国产一区二区三区久久影院 | 国产精品久久久久久久久果冻传媒| 国产·精品毛片| 国产精品国产成人国产三级| 91在线精品一区二区三区| 亚洲人成伊人成综合网小说| 在线免费观看视频一区| 亚洲va欧美va国产va天堂影院| 欧美精品在欧美一区二区少妇| 日韩黄色免费电影| 精品日本一线二线三线不卡| 久久国产精品露脸对白| 久久精品视频网| 99精品国产视频| 亚洲第一精品在线| 精品国产一区二区精华| 国产成人精品综合在线观看 | 亚洲精品国产一区二区精华液 | 亚洲欧美激情一区二区| 欧美日韩一区二区三区高清| 青青草91视频| 国产亚洲欧洲一区高清在线观看| 不卡的电视剧免费网站有什么| 亚洲另类在线一区| 91精品一区二区三区久久久久久| 久久国产精品99精品国产 | 国产乱理伦片在线观看夜一区| 国产欧美精品一区| 在线观看91视频| 精品午夜一区二区三区在线观看| 国产欧美日韩亚州综合| 91麻豆福利精品推荐| 日本91福利区| 欧美国产一区在线| 欧美日韩成人综合在线一区二区 | 精品粉嫩aⅴ一区二区三区四区| 成人一区二区三区| 午夜精品在线视频一区| 国产亚洲成av人在线观看导航| 一本色道综合亚洲| 黄网站免费久久| 亚洲一区视频在线观看视频| 精品女同一区二区| 在线观看www91| 国产福利一区二区| 香蕉乱码成人久久天堂爱免费| 久久久99精品免费观看不卡| 在线视频国内自拍亚洲视频| 国产精品一区二区免费不卡| 亚洲国产美国国产综合一区二区| 国产色婷婷亚洲99精品小说| 欧美视频自拍偷拍| 成人性生交大合| 麻豆91在线播放| 亚洲精品国产一区二区精华液| 久久久久久久综合色一本| 欧美性大战久久久久久久蜜臀| 91精品国产综合久久久蜜臀图片| 不卡的电影网站| 韩国在线一区二区| 五月激情六月综合| 亚洲素人一区二区| 欧美国产综合色视频| 欧美不卡激情三级在线观看| 欧美午夜精品久久久久久超碰| 粉嫩蜜臀av国产精品网站| 免费成人在线播放| 亚洲aⅴ怡春院| 亚洲免费伊人电影| 国产精品进线69影院| 久久蜜臀精品av| 欧美成人精品高清在线播放| 精品视频999| 色婷婷av一区二区三区之一色屋| 国产福利不卡视频| 激情综合色综合久久| 水野朝阳av一区二区三区| 亚洲愉拍自拍另类高清精品| 1000部国产精品成人观看| 久久久国产综合精品女国产盗摄| 日韩欧美黄色影院| 欧美一区二区三区四区高清| 欧美日韩亚洲国产综合| 欧美影视一区在线| 在线观看精品一区| 色综合视频在线观看|