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

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

?? h.264

?? H.264編碼解碼器源碼(c語言版本)
?? 264
?? 第 1 頁 / 共 2 頁
字號:

/*!
 *************************************************************************************
 * \file loopFilter.c
 *
 * \brief
 *    Filter to reduce blocking artifacts on a macroblock level.
 *    The filter strengh is QP dependent.
 *
 * \author
 *    Contributors:
 *    - Peter List       Peter.List@t-systems.de:  Original code                                 (13-Aug-2001)
 *    - Jani Lainema     Jani.Lainema@nokia.com:   Some bug fixing, removal of recusiveness      (16-Aug-2001)
 *    - Peter List       Peter.List@t-systems.de:  inplace filtering and various simplifications (10-Jan-2002)
 *    - Anthony Joch     anthony@ubvideo.com:      Simplified switching between filters and 
 *                                                 non-recursive default filter.                 (08-Jul-2002)
 *    - Cristina Gomila  cristina.gomila@thomson.net: Simplification of the chroma deblocking
 *                                                    from JVT-E089                              (21-Nov-2002)
 *************************************************************************************
 */
#include <stdlib.h>
#include <string.h>
#include "global.h"
#include "image.h"
#include "mb_access.h"

extern const byte QP_SCALE_CR[52] ;

/*********************************************************************************************************/

#define  IClip( Min, Max, Val) (((Val)<(Min))? (Min):(((Val)>(Max))? (Max):(Val)))

// NOTE: to change the tables below for instance when the QP doubling is changed from 6 to 8 values 
//       send an e-mail to Peter.List@t-systems.com to get a little programm that calculates them automatically 

byte ALPHA_TABLE[52]  = {0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,4,4,5,6,  7,8,9,10,12,13,15,17,  20,22,25,28,32,36,40,45,  50,56,63,71,80,90,101,113,  127,144,162,182,203,226,255,255} ;
byte  BETA_TABLE[52]  = {0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,2,2,3,  3,3,3, 4, 4, 4, 6, 6,   7, 7, 8, 8, 9, 9,10,10,  11,11,12,12,13,13, 14, 14,   15, 15, 16, 16, 17, 17, 18, 18} ;
byte CLIP_TAB[52][5]  =
{
  { 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},
  { 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},
  { 0, 0, 0, 0, 0},{ 0, 0, 0, 1, 1},{ 0, 0, 0, 1, 1},{ 0, 0, 0, 1, 1},{ 0, 0, 0, 1, 1},{ 0, 0, 1, 1, 1},{ 0, 0, 1, 1, 1},{ 0, 1, 1, 1, 1},
  { 0, 1, 1, 1, 1},{ 0, 1, 1, 1, 1},{ 0, 1, 1, 1, 1},{ 0, 1, 1, 2, 2},{ 0, 1, 1, 2, 2},{ 0, 1, 1, 2, 2},{ 0, 1, 1, 2, 2},{ 0, 1, 2, 3, 3},
  { 0, 1, 2, 3, 3},{ 0, 2, 2, 3, 3},{ 0, 2, 2, 4, 4},{ 0, 2, 3, 4, 4},{ 0, 2, 3, 4, 4},{ 0, 3, 3, 5, 5},{ 0, 3, 4, 6, 6},{ 0, 3, 4, 6, 6},
  { 0, 4, 5, 7, 7},{ 0, 4, 5, 8, 8},{ 0, 4, 6, 9, 9},{ 0, 5, 7,10,10},{ 0, 6, 8,11,11},{ 0, 6, 8,13,13},{ 0, 7,10,14,14},{ 0, 8,11,16,16},
  { 0, 9,12,18,18},{ 0,10,13,20,20},{ 0,11,15,23,23},{ 0,13,17,25,25}
} ;


void GetStrength(byte Strength[4],struct img_par *img,Macroblock* MbP,Macroblock* MbQ,int dir,int edge,int mb_y,int mb_x);
void EdgeLoop(byte* SrcPtr,byte Strength[4], int QP, int AlphaC0Offset, int BetaOffset, int dir,int width,int yuv);
void DeblockMb(ImageParameters *img, byte **imgY, byte ***imgUV, int mb_y, int mb_x) ;

/*!
 *****************************************************************************************
 * \brief
 *    Filter all macroblocks in order of increasing macroblock address.
 *****************************************************************************************
 */
void DeblockFrame(ImageParameters *img, byte **imgY, byte ***imgUV)
{
  unsigned i;
  int mb_x, mb_y ;

  for (i=0; i<img->PicSizeInMbs; i++)
  {
    get_mb_block_pos(i, &mb_x, &mb_y);
    DeblockMb( img, imgY, imgUV, mb_y, mb_x ) ;
  }
} 


/*!
 *****************************************************************************************
 * \brief
 *    Deblocking filter for one macroblock.
 *****************************************************************************************
 */

void DeblockMb(ImageParameters *img, byte **imgY, byte ***imgUV, int mb_y, int mb_x)
{
  int           EdgeCondition;
  int           dir,edge,QP;
  byte          Strength[4], *SrcY, *SrcU, *SrcV ;
  Macroblock    *MbP, *MbQ ; 
  int           sizey;
  int           QPC;

  int           filterLeftMbEdgeFlag  = (mb_x != 0);
  int           filterTopMbEdgeFlag   = (mb_y != 0);
  int           fieldModeMbFlag;
  
  SrcY = imgY    [mb_y<<4] + (mb_x<<4) ;                                                      // pointers to source
  SrcU = imgUV[0][mb_y<<3] + (mb_x<<3) ;
  SrcV = imgUV[1][mb_y<<3] + (mb_x<<3) ;

  MbQ  = &img->mb_data[mb_y*img->PicWidthInMbs + mb_x] ;                                                 // current Mb

  fieldModeMbFlag       = img->field_pic_flag || (img->MbaffFrameFlag && MbQ->mb_field);

  // return, if filter is disabled
  if (MbQ->LFDisableIdc==1) return;

  if (MbQ->LFDisableIdc==2)
  {
    // don't filter at slice boundaries
    filterLeftMbEdgeFlag = MbQ->mbAvailA;
    filterTopMbEdgeFlag  = MbQ->mbAvailB;;
  }

  for( dir=0 ; dir<2 ; dir++ )                                             // vertical edges, than horicontal edges
  {
    EdgeCondition = (dir && filterTopMbEdgeFlag) || (!dir && filterLeftMbEdgeFlag); // can not filter beyond picture boundaries
    for( edge=0 ; edge<4 ; edge++ )                                            // first 4 vertical strips of 16 pel
    {                                                                                         // then  4 horicontal
      if( edge || EdgeCondition )
      {
        sizey = mb_y%2 ? 1:2*img->width/MB_BLOCK_SIZE-1;
        MbP = (edge)? MbQ : ((dir)? (MbQ -(img->width>>4))  : (MbQ-1) ) ;       // MbP = Mb of the remote 4x4 block

        QP  = ( MbP->qp + MbQ->qp + 1) >> 1 ;                   // Average QP of the two blocks
        GetStrength(Strength,img,MbP,MbQ,dir,edge,mb_y<<2,mb_x<<2); // Strength for 4 blks in 1 stripe
        if( *((int*)Strength) )                      // only if one of the 4 Strength bytes is != 0
        {
          EdgeLoop( SrcY + (edge<<2)* ((dir)? img->width:1 ), Strength, QP, MbQ->LFAlphaC0Offset, MbQ->LFBetaOffset, dir, img->width, 0) ; 
          if( (imgUV != NULL) && !(edge & 1) )
          {
            QPC  = (QP_SCALE_CR[MbP->qp] + QP_SCALE_CR[MbQ->qp] + 1) >> 1;
            EdgeLoop( SrcU +  (edge<<1) * ((dir)? img->width_cr:1 ), Strength, QPC, MbQ->LFAlphaC0Offset, MbQ->LFBetaOffset, dir, img->width_cr, 1 ) ; 
            EdgeLoop( SrcV +  (edge<<1) * ((dir)? img->width_cr:1 ), Strength, QPC, MbQ->LFAlphaC0Offset, MbQ->LFBetaOffset, dir, img->width_cr, 1 ) ; 
          }
        }
      }
    }//end edge
  }//end loop dir
}

  /*!
 *********************************************************************************************
 * \brief
 *    returns a buffer of 4 Strength values for one stripe in a mb (for different Frame types)
 *********************************************************************************************
 */

int  ININT_STRENGTH[4] = {0x04040404, 0x03030303, 0x03030303, 0x03030303} ; 
byte BLK_NUM[2][4][4]  = {{{0,4,8,12},{1,5,9,13},{2,6,10,14},{3,7,11,15}},{{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}} ;
byte BLK_4_TO_8[16]    = {0,0,1,1,0,0,1,1,2,2,3,3,2,2,3,3} ;

void GetStrength(byte Strength[4],struct img_par *img,Macroblock* MbP,Macroblock* MbQ,int dir,int edge,int block_y,int block_x)
{
  int    blkP, blkQ, idx ;
  int    blk_x, blk_x2, blk_y, blk_y2 ;
  int    ***list0_mv = dec_picture->mv[LIST_0];
  int    ***list1_mv = dec_picture->mv[LIST_1];
  int    **list0_refIdxArr = dec_picture->ref_idx[LIST_0];
  int    **list1_refIdxArr = dec_picture->ref_idx[LIST_1];
	int    **list0_refPicIdArr = dec_picture->ref_pic_id[LIST_0];
	int    **list1_refPicIdArr = dec_picture->ref_pic_id[LIST_1];

  if ((img->structure==FRAME) || !dir)
    *((int*)Strength) = ININT_STRENGTH[edge] ;                     // Start with Strength=3. or Strength=4 for Mb-edge
  else
    *((int*)Strength) = ININT_STRENGTH[3] ;                        //  Strength=3. for fields


  for( idx=0 ; idx<4 ; idx++ )
  {                                                                                       // if not intra or SP-frame
    blkQ = BLK_NUM[dir][ edge       ][idx] ;                 // if one of the 4x4 blocks has coefs.    set Strength=2
    blkP = BLK_NUM[dir][(edge-1) & 3][idx] ; 
    
    if(  !(MbP->mb_type==I4MB || MbP->mb_type==I16MB)
          && !(MbQ->mb_type==I4MB || MbQ->mb_type==I16MB) )
    {
      if( ((MbQ->cbp_blk &  (1 << blkQ )) != 0) || ((MbP->cbp_blk &  (1 << blkP)) != 0) )
        Strength[idx] = 2 ;
      else
      {                                                     // if no coefs, but vector difference >= 1 set Strength=1 
        blk_y  = block_y + (blkQ >> 2) ;   blk_y2 = blk_y -  dir ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子伦视频一区二区三区 | 日韩一区二区三区观看| 99riav一区二区三区| 成人av免费在线播放| 国产电影精品久久禁18| 国产成人av网站| 成人免费电影视频| 色综合久久88色综合天天 | 亚洲国产日韩在线一区模特| 夜夜嗨av一区二区三区网页| 亚洲制服丝袜av| 日本成人中文字幕| 国产在线不卡一区| 成人免费看片app下载| 91麻豆视频网站| 欧美日韩在线三区| 精品美女被调教视频大全网站| 精品国产成人在线影院| 国产午夜精品一区二区三区四区| 国产欧美一区二区三区网站| 亚洲美女电影在线| 免费成人性网站| 丁香婷婷综合色啪| 欧美伊人精品成人久久综合97| 在线不卡一区二区| 久久精品亚洲精品国产欧美| 亚洲精品久久久久久国产精华液| 日韩黄色免费网站| 成人综合婷婷国产精品久久蜜臀| 欧美中文字幕不卡| 久久久久国产精品麻豆| 一区二区三区国产豹纹内裤在线| 精品一区二区国语对白| 91在线porny国产在线看| 91精品国产综合久久久久久久久久 | 中文字幕一区二区三区不卡在线| 亚洲大片免费看| av激情亚洲男人天堂| 欧美一区二区三区男人的天堂| 国产欧美一区在线| 日韩av中文在线观看| 色狠狠一区二区三区香蕉| 欧美一区二区久久久| 亚洲免费观看高清完整版在线| 韩国女主播一区二区三区| 欧美性猛片xxxx免费看久爱| 亚洲国产精品黑人久久久| 久久精品国产亚洲aⅴ| 欧美日韩国产色站一区二区三区| 亚洲国产激情av| 精品午夜久久福利影院| 欧美日韩精品一区视频| 一色桃子久久精品亚洲| 极品瑜伽女神91| 欧美一区中文字幕| 亚洲影院久久精品| 97se亚洲国产综合自在线| 国产女人aaa级久久久级| 美女在线视频一区| 717成人午夜免费福利电影| 亚洲资源中文字幕| 欧洲av在线精品| 一区二区不卡在线播放| 色综合久久久久网| 亚洲欧洲精品一区二区三区不卡 | 亚洲国产高清在线| 国产伦精品一区二区三区免费迷| 日韩欧美二区三区| 免费成人你懂的| 欧美一区二区三区在线| 日本欧美韩国一区三区| 91精品国产综合久久久久久久 | 国产人妖乱国产精品人妖| 久久se这里有精品| 欧美v日韩v国产v| 九九精品一区二区| 久久人人爽人人爽| 成人性视频免费网站| 中文文精品字幕一区二区| 国产凹凸在线观看一区二区| 国产日韩欧美精品电影三级在线| 国产精品一区二区三区四区| 国产女同性恋一区二区| 不卡视频免费播放| 亚洲精品欧美二区三区中文字幕| 色综合久久久网| 亚洲啪啪综合av一区二区三区| 91成人免费在线视频| 日日骚欧美日韩| 2023国产精品自拍| 99视频一区二区三区| 亚洲国产一二三| 精品va天堂亚洲国产| 成人理论电影网| 亚洲成人av福利| 国产亚洲综合av| 欧美在线免费视屏| 日本伊人精品一区二区三区观看方式| 日韩免费高清电影| 99久久综合国产精品| 亚洲超碰97人人做人人爱| 国产亚洲欧美在线| 色狠狠综合天天综合综合| 麻豆精品新av中文字幕| 中文字幕日韩精品一区| 欧美高清精品3d| 成人性生交大片免费看中文网站| 亚洲丶国产丶欧美一区二区三区| 久久网站热最新地址| 色中色一区二区| 国产一区二区在线影院| 亚洲国产精品一区二区www| 国产亚洲人成网站| 91 com成人网| 97久久超碰国产精品电影| 日本aⅴ免费视频一区二区三区| 国产日韩三级在线| 日韩三级视频中文字幕| 色悠久久久久综合欧美99| 男女激情视频一区| 一区二区三区四区乱视频| 日韩免费观看高清完整版| 欧美在线你懂得| av电影一区二区| 极品少妇xxxx精品少妇| 亚洲午夜久久久久久久久电影网| 久久精品人人做人人综合| 日韩一区二区三区免费看| 在线观看日韩精品| 成人一级黄色片| 激情综合色综合久久| 天天亚洲美女在线视频| 亚洲欧洲日产国码二区| 久久蜜臀中文字幕| 日韩三级在线免费观看| 欧美午夜精品电影| 94色蜜桃网一区二区三区| 成人午夜免费av| 国内一区二区在线| 精品中文字幕一区二区| 日本成人在线网站| 日韩国产精品久久久| 婷婷丁香久久五月婷婷| 亚洲人成人一区二区在线观看| 国产精品狼人久久影院观看方式| 久久久久久久精| 久久影音资源网| 久久亚洲私人国产精品va媚药| 精品人伦一区二区色婷婷| 欧美大白屁股肥臀xxxxxx| 欧美zozo另类异族| 欧美xfplay| 亚洲国产精品激情在线观看| 国产精品区一区二区三区| 亚洲欧洲精品成人久久奇米网| 日本一区二区三区久久久久久久久不| 精品三级在线观看| 久久久噜噜噜久噜久久综合| 国产日韩欧美精品一区| 国产精品成人网| 亚洲成人三级小说| 秋霞影院一区二区| 国产精品影音先锋| 成人av电影在线观看| 日本精品一区二区三区高清| 欧美日韩中文另类| 欧美日韩精品福利| 欧美成va人片在线观看| 国产女主播在线一区二区| 亚洲日本青草视频在线怡红院| 亚洲一区在线视频观看| 日韩av在线播放中文字幕| 国产精品一卡二| 97久久超碰国产精品| 777午夜精品免费视频| 久久久久久久性| 亚洲精品国产成人久久av盗摄| 午夜成人免费视频| 高清在线成人网| 欧美人体做爰大胆视频| 国产亚洲综合av| 亚洲成人一区在线| 高清免费成人av| 欧美日韩国产中文| 中文字幕av一区二区三区高 | 国产日韩欧美不卡| 一区二区三区在线影院| 免费成人av在线播放| eeuss鲁片一区二区三区| 在线不卡中文字幕| 国产精品麻豆久久久| 日韩成人免费电影| 91视频免费播放| 精品日产卡一卡二卡麻豆| 亚洲免费电影在线| 国产精品一品二品| 日韩一区二区麻豆国产| 亚洲男同性视频| 粉嫩av一区二区三区粉嫩| 制服丝袜一区二区三区|