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

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

?? ratectl.c

?? h264標準的VC實現
?? C
?? 第 1 頁 / 共 4 頁
字號:

/*!
 ***************************************************************************
 * \file ratectl.c
 *
 * \brief
 *    Rate Control algorithm
 *
 * \author
 *    Main contributors (see contributors.h for copyright, address and affiliation details) 
 *     - Siwei Ma <swma@jdl.ac.cn>
 *     - Zhengguo LI<ezgli@lit.a-star.edu.sg>
 *
 * \date
 *   16 Jan. 2003
 **************************************************************************
 */

#include <stdlib.h>
#include <math.h>
#include <assert.h>

#include "global.h"
#include "ratectl.h"

const double THETA=1.3636;
const int Switch=0;

int Iprev_bits=0;
int Pprev_bits=0;


/* rate control variables */
int Xp, Xb;
static int R,T_field;
static int Np, Nb, bits_topfield;
long T,T1;
//HRD consideration
long UpperBound1, UpperBound2, LowerBound;
double InitialDelayOffset;
const double OMEGA=0.9;

double Wp,Wb; 
int TotalPFrame;
int DuantQp; 
int PDuantQp;
FILE *BitRate;
double DeltaP;

/*! 
 *************************************************************************************
 * \brief
 *    Initialize rate control parameters
 *
 *************************************************************************************
*/
void rc_init_seq()
{
  double L1,L2,L3,bpp;
  int qp;
  int i;
  
  Xp=0;
  Xb=0;
   
  bit_rate=input->bit_rate;
  frame_rate = (img->framerate *(float)(input->successive_Bframe + 1)) / (float) (input->jumpd + 1);
  PreviousBit_Rate=bit_rate;
   
  /*compute the total number of MBs in a frame*/
  
  img->Frame_Total_Number_MB=img->height*img->width/256;
  if(input->basicunit>img->Frame_Total_Number_MB)
    input->basicunit=img->Frame_Total_Number_MB;
  if(input->basicunit<img->Frame_Total_Number_MB)
    TotalNumberofBasicUnit=img->Frame_Total_Number_MB/input->basicunit;
  
  MINVALUE=4.0;
  /*initialize the parameters of fluid flow traffic model*/
  
  BufferSize=bit_rate*2.56;
  CurrentBufferFullness=0;
  GOPTargetBufferLevel=CurrentBufferFullness;
  /*HRD consideration*/
  InitialDelayOffset=BufferSize*0.8;
  
  /*initialize the previous window size*/
  m_windowSize=0;
  MADm_windowSize=0;
  img->NumberofCodedBFrame=0;
  img->NumberofCodedPFrame=0;
  img->NumberofGOP=0;
  /*remaining # of bits in GOP */
  R = 0;
  /*control parameter */
  if(input->successive_Bframe>0)
  {
    GAMMAP=0.25;
    BETAP=0.9;
  }
  else
  {
    GAMMAP=0.5;
    BETAP=0.5;
  }
  
  /*quadratic rate-distortion model*/
  PPreHeader=0;
  
  Pm_X1=bit_rate*1.0;
  Pm_X2=0.0;
  /* linear prediction model for P picture*/
  PMADPictureC1=1.0;
  PMADPictureC2=0.0;
  
  for(i=0;i<20;i++)
  {
    Pm_rgQp[i]=0;
    Pm_rgRp[i]=0.0;
    PPictureMAD[i]=0.0;
  }
  PPictureMAD[20]=0.0;
   
  //Define the largest variation of quantization parameters
  PDuantQp=2;
  
  /*basic unit layer rate control*/
  PAveHeaderBits1=0;
  PAveHeaderBits3=0;  
  if(TotalNumberofBasicUnit>=9)
    DDquant=1;
  else
    DDquant=2;
  
  MBPerRow=input->img_width/16;
  
  /*adaptive field/frame coding*/
  img->FieldControl=0;
  
  RC_MAX_QUANT = 51;  // clipping
  RC_MIN_QUANT = 0;//clipping
  
  /*compute the initial QP*/
  bpp = 1.0*bit_rate /(frame_rate*img->width*img->height);
  if (img->width == 176) 
  {
    L1 = 0.1;
    L2 = 0.3;
    L3 = 0.6;
  }else if (img->width == 352)
  {
    L1 = 0.2;
    L2 = 0.6;
    L3 = 1.2;
  }else 
  {
    L1 = 0.6;
    L2 = 1.4;
    L3 = 2.4;
  }
  
  if (input->SeinitialQP==0)
  {
    if(bpp<= L1)
      qp = 35;
    else
      if(bpp<=L2)
        qp = 25;
      else
        if(bpp<=L3)
          qp  = 20;
        else
          qp =10;
        input->SeinitialQP = qp;
  }
}

/*! 
 *************************************************************************************
 * \brief
 *    Initialize one GOP
 *
 *************************************************************************************
*/
void rc_init_GOP(int np, int nb)
{
  Boolean Overum=FALSE;
  int OverBits;
  int OverDuantQp;
  int AllocatedBits;
  int GOPDquant;

  /* check if the last GOP over uses its budget. If yes, the initial QP of the I frame in 
     the coming  GOP will be increased.*/

  if(R<0)
    Overum=TRUE;
  OverBits=-R;

  /*initialize the lower bound and the upper bound for the target bits of each frame, HRD consideration*/
  LowerBound=(long)(R+bit_rate/frame_rate);
  UpperBound1=(long)(R+InitialDelayOffset);

 /*compute the total number of bits for the current GOP*/ 
  AllocatedBits = (int) floor((1 + np + nb) * bit_rate / frame_rate + 0.5);
  R +=AllocatedBits;
  Np  = np;
  Nb  = nb;

  OverDuantQp=(int)(8*OverBits/AllocatedBits+0.5);
  GOPOverdue=FALSE;
  
  /*field coding*/
  img->IFLAG=1;

  /*Compute InitialQp for each GOP*/
  TotalPFrame=np;
  img->NumberofGOP++;
  if(img->NumberofGOP==1)
  {
    MyInitialQp=input->SeinitialQP;
    PreviousQp2=MyInitialQp-1; //recent change -0;
    QPLastGOP=MyInitialQp;
  
  }
  else
  {
    /*adaptive field/frame coding*/
    if((input->PicInterlace==ADAPTIVE_CODING)\
      ||(input->MbInterlace))
    {
      if (img->FieldFrame == 1)
      {
        img->TotalQpforPPicture += FrameQPBuffer;
        QPLastPFrame = FrameQPBuffer;
      }
      else
      {
        img->TotalQpforPPicture += FieldQPBuffer;
        QPLastPFrame = FieldQPBuffer;
      }
      
    }
    /*compute the average QP of P frames in the previous GOP*/
    PAverageQp=(int)(1.0*img->TotalQpforPPicture/img->NumberofPPicture+0.5);

    GOPDquant=(int)(0.5+1.0*(np+nb+1)/15);
    if(GOPDquant>2)
        GOPDquant=2;

    PAverageQp-=GOPDquant;

    if (PAverageQp > (QPLastPFrame - 2))
      PAverageQp--;
    PAverageQp = MAX(QPLastGOP-2,  PAverageQp);
    PAverageQp = MIN(QPLastGOP+2, PAverageQp);
    PAverageQp = MIN(RC_MAX_QUANT, PAverageQp);
    PAverageQp = MAX(RC_MIN_QUANT, PAverageQp);
  

    MyInitialQp=PAverageQp;
    QPLastGOP = MyInitialQp;
    Pm_Qp=PAverageQp;
    PAveFrameQP=PAverageQp;
    PreviousQp1=PreviousQp2;
    PreviousQp2=MyInitialQp-1;  
  }

  img->TotalQpforPPicture=0;
  img->NumberofPPicture=0;
  NumberofBFrames=0; 
}


/*! 
 *************************************************************************************
 * \brief
 *    Initialize one picture
 *
 *************************************************************************************
*/
void rc_init_pict(int fieldpic,int topfield,int targetcomputation)
{
  int i;

  /* compute the total number of basic units in a frame */
  if(input->MbInterlace)
    TotalNumberofBasicUnit=img->Frame_Total_Number_MB/img->BasicUnit;
  img->NumberofCodedMacroBlocks=0;

  /* Normally, the bandwidth for the VBR case is estimated by 
     a congestion control algorithm. A bandwidth curve can be predefined if we only want to 
     test the proposed algorithm */
  if(input->channel_type==1)
  {
    if(img->NumberofCodedPFrame==58)
      bit_rate *=1.5;
    else if(img->NumberofCodedPFrame==59)
      PreviousBit_Rate=bit_rate;
  }

  /* predefine a target buffer level for each frame */
  if((fieldpic||topfield)&&targetcomputation)
  {
    switch (img->type)
    {
      case P_SLICE:
      /* Since the available bandwidth may vary at any time, the total number of 
         bits is updated picture by picture*/
        if(PreviousBit_Rate!=bit_rate)
          R +=(int) floor((bit_rate-PreviousBit_Rate)*(Np+Nb)/frame_rate+0.5);
              
        /* predefine the  target buffer level for each picture.
           frame layer rate control */
        if(img->BasicUnit==img->Frame_Total_Number_MB)
        {
          if(img->NumberofPPicture==1)
          {
            TargetBufferLevel=CurrentBufferFullness;
            DeltaP=(CurrentBufferFullness-GOPTargetBufferLevel)/(TotalPFrame-1);
            TargetBufferLevel -=DeltaP;
          }
          else if(img->NumberofPPicture>1)
            TargetBufferLevel -=DeltaP;
        }
        /* basic unit layer rate control */
        else
        {
          if(img->NumberofCodedPFrame>0)
          {
            /* adaptive frame/filed coding */
            if(((input->PicInterlace==ADAPTIVE_CODING)||(input->MbInterlace))\
              &&(img->FieldControl==1))
            {
              for(i=0;i<TotalNumberofBasicUnit;i++)
                FCBUPFMAD[i]=FCBUCFMAD[i];
            }
            else
            {
              for(i=0;i<TotalNumberofBasicUnit;i++)
                BUPFMAD[i]=BUCFMAD[i];
            }     
          }

          if(img->NumberofGOP==1)
          {
            if(img->NumberofPPicture==1)
            {
              TargetBufferLevel=CurrentBufferFullness;
              DeltaP=(CurrentBufferFullness-GOPTargetBufferLevel)/(TotalPFrame-1);
              TargetBufferLevel -=DeltaP;
            }
            else if(img->NumberofPPicture>1)
              TargetBufferLevel -=DeltaP;
          }
          else if(img->NumberofGOP>1)
          {
            if(img->NumberofPPicture==0)
            {
              TargetBufferLevel=CurrentBufferFullness;
              DeltaP=(CurrentBufferFullness-GOPTargetBufferLevel)/TotalPFrame;
              TargetBufferLevel -=DeltaP;
            }
            else if(img->NumberofPPicture>0)
              TargetBufferLevel -=DeltaP;
          }
        }

        if(img->NumberofCodedPFrame==1)
          AWp=Wp;
        if((img->NumberofCodedPFrame<8)&&(img->NumberofCodedPFrame>1))
            AWp=Wp*(img->NumberofCodedPFrame-1)/img->NumberofCodedPFrame+\
              AWp/img->NumberofCodedPFrame;
          else if(img->NumberofCodedPFrame>1)
            AWp=Wp/8+7*AWp/8;
          
        // compute the average complexity of B frames
        if(input->successive_Bframe>0)
        {
          // compute the target buffer level
          TargetBufferLevel +=(AWp*(input->successive_Bframe+1)*bit_rate\
            /(frame_rate*(AWp+AWb*input->successive_Bframe))-bit_rate/frame_rate);
        }
        
        break;

         case B_SLICE:
         /* update the total number of bits if the bandwidth is changed*/
           if(PreviousBit_Rate!=bit_rate)
             R +=(int) floor((bit_rate-PreviousBit_Rate)*(Np+Nb)/frame_rate+0.5);
            if((img->NumberofCodedPFrame==1)&&(img->NumberofCodedBFrame==1))
          {
            AWp=Wp;
            AWb=Wb;
          }
          else if(img->NumberofCodedBFrame>1)
          {
            //compute the average weight
            if(img->NumberofCodedBFrame<8)
              AWb=Wb*(img->NumberofCodedBFrame-1)/img->NumberofCodedBFrame+\
                AWb/img->NumberofCodedBFrame;
            else
              AWb=Wb/8+7*AWb/8;
          }

            break;
    }
     /* Compute the target bit for each frame */
    if(img->type==P_SLICE)
    {
      /* frame layer rate control */
      if(img->BasicUnit==img->Frame_Total_Number_MB)
      {
        if(img->NumberofCodedPFrame>0)
        {
          T = (long) floor(Wp*R/(Np*Wp+Nb*Wb) + 0.5);
                
          T1 = (long) floor(bit_rate/frame_rate-GAMMAP*(CurrentBufferFullness-TargetBufferLevel)+0.5);
          T1=MAX(0,T1);
          T = (long)(floor(BETAP*T+(1.0-BETAP)*T1+0.5));
        }
       }
      /* basic unit layer rate control */
      else
      {
        if((img->NumberofGOP==1)&&(img->NumberofCodedPFrame>0))
        {
          T = (int) floor(Wp*R/(Np*Wp+Nb*Wb) + 0.5);
          T1 = (int) floor(bit_rate/frame_rate-GAMMAP*(CurrentBufferFullness-TargetBufferLevel)+0.5);
          T1=MAX(0,T1);
          T = (int)(floor(BETAP*T+(1.0-BETAP)*T1+0.5));
        }
        else if(img->NumberofGOP>1)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美不卡一二三| 国产精品成人在线观看| 处破女av一区二区| 亚洲观看高清完整版在线观看| 精品人伦一区二区色婷婷| 99精品一区二区三区| 日本亚洲视频在线| 亚洲精品va在线观看| 国产色综合一区| 欧美一级免费大片| 欧美综合亚洲图片综合区| 国产激情视频一区二区三区欧美| 午夜精品福利久久久| 亚洲桃色在线一区| 国产精品免费视频网站| 日韩欧美中文字幕一区| 欧美三级三级三级爽爽爽| av福利精品导航| 国内久久精品视频| 日韩精品成人一区二区三区| 亚洲欧美日韩中文播放| 国产精品国产三级国产aⅴ中文| 欧美成人艳星乳罩| 91精品久久久久久蜜臀| 欧美片在线播放| 欧美群妇大交群的观看方式| 欧美性色黄大片| 欧洲色大大久久| 91在线观看视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美人妖巨大在线| 欧洲一区二区av| 欧美在线一区二区三区| 在线亚洲高清视频| 欧美在线色视频| 欧美三级韩国三级日本三斤| 欧美日韩黄视频| 9191国产精品| 日韩视频一区在线观看| 日韩免费看网站| 日韩美女天天操| www久久精品| 久久久精品日韩欧美| 亚洲国产精品ⅴa在线观看| 久久免费看少妇高潮| 国产亚洲精品免费| 国产精品网站一区| 玉米视频成人免费看| 一区二区三区在线影院| 亚洲妇女屁股眼交7| 天天亚洲美女在线视频| 精品一区二区三区香蕉蜜桃| 久久精品国产精品亚洲综合| 国产剧情一区二区| av资源站一区| 欧洲生活片亚洲生活在线观看| 欧美精品一二三| 日韩欧美中文字幕公布| 国产色爱av资源综合区| 亚洲视频 欧洲视频| 亚洲一本大道在线| 免费精品视频在线| 成人av影视在线观看| 色婷婷av一区| 欧美大片日本大片免费观看| 久久女同性恋中文字幕| 成人欧美一区二区三区小说| 亚洲国产一区二区三区| 经典一区二区三区| 成人av在线电影| 777色狠狠一区二区三区| 久久嫩草精品久久久精品一| 亚洲伦在线观看| 日韩成人一级大片| 丰满少妇在线播放bd日韩电影| 一本色道久久综合亚洲aⅴ蜜桃| 欧美片在线播放| 中文字幕国产一区二区| 亚洲国产一区视频| 国产成人在线看| 欧美日韩美女一区二区| 久久―日本道色综合久久| 亚洲在线免费播放| 国产乱码精品1区2区3区| 在线免费观看成人短视频| 精品国产乱码久久久久久牛牛| 国产精品国产三级国产专播品爱网| 午夜不卡在线视频| 成人在线视频一区二区| 欧美日韩高清影院| 国产精品素人视频| 老汉av免费一区二区三区| 91麻豆国产精品久久| 337p日本欧洲亚洲大胆色噜噜| 一区二区三区在线视频观看58| 激情图片小说一区| 欧美剧情电影在线观看完整版免费励志电影 | 久久老女人爱爱| 亚洲成a天堂v人片| www.成人在线| 久久嫩草精品久久久精品| 三级精品在线观看| 色偷偷久久一区二区三区| 欧美大片免费久久精品三p| 亚洲影视在线观看| 波多野结衣一区二区三区| 26uuu精品一区二区在线观看| 亚洲国产精品久久艾草纯爱| 成人av网站免费观看| 久久综合色综合88| 免费成人av在线| 欧美电影影音先锋| 亚洲一级片在线观看| 99re成人精品视频| 国产精品美女久久久久久| 国模一区二区三区白浆| 91精品国产91综合久久蜜臀| 亚洲电影欧美电影有声小说| 色先锋资源久久综合| 亚洲欧美在线视频观看| 国产精品一区免费在线观看| 精品国偷自产国产一区| 日本大胆欧美人术艺术动态| 在线播放国产精品二区一二区四区 | 国产精品一区二区x88av| 日韩一区二区三区在线| 日一区二区三区| 欧美日韩二区三区| 午夜精品福利一区二区三区av | 久久99国产精品成人| 欧美麻豆精品久久久久久| 亚洲第一狼人社区| 欧美体内she精高潮| 夜夜亚洲天天久久| 欧美丝袜丝交足nylons| 五月天一区二区| 欧美精品1区2区3区| 男男gaygay亚洲| 日韩女优视频免费观看| 国内精品国产成人| 国产精品婷婷午夜在线观看| 99久久精品一区| 亚洲靠逼com| 欧美日韩一区二区在线观看| 丝瓜av网站精品一区二区| 欧美一区二区大片| 国产又粗又猛又爽又黄91精品| 久久免费看少妇高潮| 成人黄页毛片网站| 亚洲美女淫视频| 欧美日韩国产成人在线91| 麻豆精品一二三| 国产欧美一区二区精品性| 国产成人a级片| 亚洲欧美日韩电影| 91精品国产欧美一区二区| 国内久久婷婷综合| 亚洲视频小说图片| 欧美丰满少妇xxxxx高潮对白| 久久66热偷产精品| 国产精品第13页| 7799精品视频| 成人永久aaa| 亚洲成人1区2区| 国产午夜精品在线观看| 色哟哟亚洲精品| 美女精品一区二区| 国产精品美女一区二区| 欧美日韩高清一区| 成人一区二区三区视频在线观看 | 中文一区一区三区高中清不卡| 91一区二区在线| 蜜臀av在线播放一区二区三区| 国产午夜精品美女毛片视频| 91免费视频网址| 精品在线一区二区| 夜夜亚洲天天久久| 337p日本欧洲亚洲大胆精品| 色天天综合色天天久久| 狂野欧美性猛交blacked| 国产精品久久免费看| 911国产精品| 波多野结衣一区二区三区| 免费不卡在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 精品国产乱码久久久久久闺蜜| 91麻豆蜜桃一区二区三区| 激情五月播播久久久精品| 亚洲国产一区二区在线播放| 国产午夜精品一区二区| 欧美精品第1页| 色欧美乱欧美15图片| 国产在线一区二区| 亚洲超丰满肉感bbw| 国产精品女同互慰在线看| 日韩欧美一级精品久久| 在线精品视频免费播放| 国产精品911| 狠狠色丁香久久婷婷综| 丝袜美腿一区二区三区|