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

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

?? leaky_bucket.c

?? h264標準的VC實現
?? C
字號:

/*!
 ***************************************************************************
 * \file leaky_bucket.c
 *
 * \brief
 *    calculate Leaky Buffer parameters
 *
 * \author
 *    Main contributors (see contributors.h for copyright, address and affiliation details)
 *    - Shankar Regunathan                   <shanre@microsoft.com>
 ***************************************************************************
 */
#include <stdlib.h>

#include "contributors.h"
#include "global.h"

#ifdef _LEAKYBUCKET_

long Bit_Buffer[10000];
unsigned long total_frame_buffer = 0;


/*!
 ***********************************************************************
 * \brief
 *   Function to get Leaky Bucket rates from rate file
 * \param NumberLeakyBuckets
 *    Number of Leaky Bucket Parameters
 * \param Rmin
 *    Rate values for each Bucket.
 * \return
 *    returns 1 if successful; else returns zero.
 * \para SideEffects
 *     None.
 * \para Notes
 *     Failure if LeakyBucketRate is missing or if it does not have
 *     the correct number of entries.
 * \author
 *    Shankar Regunathan                   shanre@microsoft.com
 *  \date 
 *      December 06, 2001.
 ***********************************************************************
 */

int get_LeakyBucketRate(unsigned long NumberLeakyBuckets, unsigned long *Rmin)
{
  FILE *f;
  unsigned long i, buf;
  
  if((f = fopen(input->LeakyBucketRateFile, "r")) == NULL)
  {
    printf(" LeakyBucketRate File does not exist; using rate calculated from avg. rate \n");
    return 0;
  }
  
  for(i=0; i<NumberLeakyBuckets; i++) 
  {
    if(1 != fscanf(f, "%ld", &buf)) 
    {
      printf(" Leaky BucketRateFile does not have valid entries;\n using rate calculated from avg. rate \n");
      fclose (f);
      return 0;
    }
    Rmin[i] = buf;
  }
  fclose (f);
  return 1;
}
/*!
 ***********************************************************************
 * \brief
 *   Writes one unsigned long word in big endian order to a file. 
 * \param dw
 *    Value to be written
 * \param fp
 *    File pointer
 * \return
 *    None.
 * \para SideEffects
 *     None.
 * \author
 *    Shankar Regunathan                   shanre@microsoft.com
 *  \date 
 *      December 06, 2001.
 ***********************************************************************
 */

void PutBigDoubleWord(unsigned long dw, FILE *fp)
{
  fputc((dw >> 0x18) & 0xFF, fp);
  fputc((dw >> 0x10) & 0xFF, fp);
  fputc((dw >> 0x08) & 0xFF, fp);
  fputc(dw & 0xFF, fp);
}

/*!
 ***********************************************************************
 * \brief
 *   Stores the Leaky BucketParameters in file input->LeakyBucketParamFile.
 * \param NumberLeakyBuckets
 *    Number of LeakyBuckets.
 * \param Rmin
 *    Rate values of the buckets.
 * \param Bmin
 *    Minimum buffer values of the buckets.
 *  \param Fmin
 *     Minimum initial buffer fullness of the buckets
 * \return
 *    None.
 * \para
 *    Returns error if LeakyBucketParamFile cannot be opened.
 * \para SideEffects
 *     Prints the LeakyBucket Parameters in standard output.
 * \author
 *    Shankar Regunathan                   shanre@microsoft.com
 *  \date 
 *      December 06, 2001.
 ***********************************************************************
 */


void write_buffer(unsigned long NumberLeakyBuckets, unsigned long Rmin[], unsigned long Bmin[], unsigned long Fmin[])
{
  FILE *outf;
  unsigned long iBucket;
        
  if ((outf=fopen(input->LeakyBucketParamFile,"wb"))==NULL)
  {
    snprintf(errortext, ET_SIZE, "Error open file %s  \n",input->LeakyBucketParamFile);
    error(errortext,1);
  }

  PutBigDoubleWord(NumberLeakyBuckets, outf);
  printf(" Number Leaky Buckets: %ld \n     Rmin     Bmin     Fmin \n", NumberLeakyBuckets);
  for(iBucket =0; iBucket < NumberLeakyBuckets; iBucket++) 
  {
    //assert(Rmin[iBucket]<4294967296); //Overflow should be corrected already.
    //assert(Bmin[iBucket]<4294967296);
    //assert(Fmin[iBucket]<4294967296);
    PutBigDoubleWord(Rmin[iBucket], outf);
    PutBigDoubleWord(Bmin[iBucket], outf);
    PutBigDoubleWord(Fmin[iBucket], outf);
    printf(" %8ld %8ld %8ld \n", Rmin[iBucket], Bmin[iBucket], Fmin[iBucket]);
  }
  fclose(outf);
}

/*!
 ***********************************************************************
 * \brief
 *    Sorts the rate array in ascending order. 
 * \param NumberLeakyBuckets
 *    Number of LeakyBuckets.
 * \param Rmin
 *    Rate values of the buckets.
 * \return
 *    None.
 * \author
 *    Shankar Regunathan                   shanre@microsoft.com
 *  \date 
 *      December 06, 2001.
 ***********************************************************************
 */


void Sort(unsigned long NumberLeakyBuckets, unsigned long *Rmin)
{
  unsigned long i, j;
  unsigned long temp;
  for(i=0; i< NumberLeakyBuckets-1; i++) 
  {
    for(j=i+1; j<NumberLeakyBuckets; j++) 
    {
      if(Rmin[i] > Rmin[j]) {
        temp = Rmin[i];
        Rmin[i] = Rmin[j];
        Rmin[j] = temp;
      }
    }
  }
}

/*!
 ***********************************************************************
 * \brief
 *    Main Routine to calculate Leaky Buffer parameters
 * \param NumberLeakyBuckets
 *    None.
 * \return
 *    None.
 * \author
 *    Shankar Regunathan                   shanre@microsoft.com
 *  \date 
 *      December 06, 2001.
 ***********************************************************************
 */

void calc_buffer()
{    
  unsigned long AvgRate, TotalRate, NumberLeakyBuckets;
  long *buffer_frame, minB;
  unsigned long iBucket, iFrame,  FrameIndex = 0;
  long maxBuffer, actualBuffer, InitFullness, iChannelRate;
  unsigned long *Rmin, *Bmin, *Fmin;
   
  fprintf(stdout,"-------------------------------------------------------------------------------\n");
  printf(" Total Frames:  %ld (%d) \n", total_frame_buffer, input->no_frames);
  NumberLeakyBuckets = (unsigned long) input->NumberLeakyBuckets;
  buffer_frame = calloc(total_frame_buffer+1, sizeof(long));
  if(!buffer_frame)
    no_mem_exit("init_buffer: buffer_frame");
  Rmin = calloc(NumberLeakyBuckets, sizeof(unsigned long));
  if(!Rmin)
    no_mem_exit("init_buffer: Rmin");    
  Bmin = calloc(NumberLeakyBuckets, sizeof(unsigned long));
  if(!Bmin)
    no_mem_exit("init_buffer: Bmin");
  Fmin = calloc(NumberLeakyBuckets, sizeof(unsigned long));
  if(!Fmin)
    no_mem_exit("init_buffer: Fmin");

  TotalRate = 0;
  for(iFrame=0; iFrame < total_frame_buffer; iFrame++) 
  {
    TotalRate += (unsigned long) Bit_Buffer[iFrame];
  }
  AvgRate = (unsigned long) ((float) TotalRate/ total_frame_buffer);
  
  if(1 != get_LeakyBucketRate(NumberLeakyBuckets, Rmin))
  { /* if rate file is not present, use default calculated from avg.rate */
    for(iBucket=0; iBucket < NumberLeakyBuckets; iBucket++) 
    {
      if(iBucket == 0)
        Rmin[iBucket] = (unsigned long)((float) AvgRate * img->framerate)/(input->jumpd+1); /* convert bits/frame to bits/second */
      else
        Rmin[iBucket] = (unsigned long) ((float) Rmin[iBucket-1] + (AvgRate/4) * (img->framerate) / (input->jumpd+1));    
    }
  }
  Sort(NumberLeakyBuckets, Rmin);   

  maxBuffer = AvgRate * 20; /* any initialization is good. */        
  for(iBucket=0; iBucket< NumberLeakyBuckets; iBucket++) 
  {           
    iChannelRate = (long) (Rmin[iBucket] * (input->jumpd+1)/(img->framerate)); /* converts bits/second to bits/frame */
    /* To calculate initial buffer size */
    InitFullness = maxBuffer; /* set Initial Fullness to be buffer size */
    buffer_frame[0] = InitFullness;
    minB = maxBuffer; 
    
    for(iFrame=0; iFrame<total_frame_buffer ; iFrame++) 
    {        
      buffer_frame[iFrame] = buffer_frame[iFrame] - Bit_Buffer[iFrame];
      if(buffer_frame[iFrame] < minB) 
      {
        minB = buffer_frame[iFrame];
        FrameIndex = iFrame;
      }
      
      buffer_frame[iFrame+1] = buffer_frame[iFrame] + iChannelRate;
      if(buffer_frame[iFrame+1] > maxBuffer)
        buffer_frame[iFrame+1] = maxBuffer;
    }
    actualBuffer = (maxBuffer - minB);

    /* To calculate initial buffer Fullness */
    InitFullness = Bit_Buffer[0];
    buffer_frame[0] = InitFullness;
    for(iFrame=0; iFrame < FrameIndex+1; iFrame++) 
    {
      buffer_frame[iFrame] = buffer_frame[iFrame] - Bit_Buffer[iFrame];
      if(buffer_frame[iFrame] < 0) {
        InitFullness -= buffer_frame[iFrame];
        buffer_frame[iFrame] = 0;
      }
      buffer_frame[iFrame+1] = buffer_frame[iFrame] + iChannelRate;
      if(buffer_frame[iFrame+1] > actualBuffer)
        break;
    }       
    Bmin[iBucket] = (unsigned long) actualBuffer;
    Fmin[iBucket] = (unsigned long) InitFullness;
  }

  write_buffer(NumberLeakyBuckets, Rmin, Bmin, Fmin);

  free(buffer_frame);
  free(Rmin);
  free(Bmin);
  free(Fmin);
  return;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆免费看片| 蜜臀av国产精品久久久久| 91精品免费观看| 欧美日韩一卡二卡三卡| 在线观看亚洲精品视频| 色就色 综合激情| proumb性欧美在线观看| 99久久婷婷国产综合精品电影 | 风间由美一区二区三区在线观看 | 日本一区二区三区高清不卡| 久久久久久久久99精品| 久久精品一区二区三区av| 国产农村妇女毛片精品久久麻豆| 久久久综合九色合综国产精品| 国产亚洲精品福利| 自拍偷拍欧美精品| 夜夜嗨av一区二区三区网页| 亚洲成人激情综合网| caoporn国产一区二区| 99精品视频一区二区三区| 日本丶国产丶欧美色综合| 欧美性色aⅴ视频一区日韩精品| 精品视频1区2区3区| 欧美不卡在线视频| 国产精品久久精品日日| 一级日本不卡的影视| 免费高清在线视频一区·| 久久不见久久见中文字幕免费| 国产一区在线观看视频| 97se亚洲国产综合在线| 欧美一区二区啪啪| 国产精品高清亚洲| 亚洲午夜电影在线| 国产在线精品免费av| www.欧美.com| 91麻豆精品国产91久久久| 国产午夜精品一区二区三区四区| 亚洲激情图片一区| 国产一区二区三区在线观看免费 | 欧美一级理论性理论a| 欧美v国产在线一区二区三区| 欧美韩国日本综合| 亚洲国产综合人成综合网站| 国产精品资源网站| 欧美日韩黄色影视| 国产日韩精品一区二区三区| 五月婷婷激情综合| 成人小视频在线观看| 91麻豆精品国产91久久久久久久久 | 久久久三级国产网站| 亚洲人吸女人奶水| 国产在线视频不卡二| 欧美写真视频网站| 中文字幕视频一区二区三区久| 日本不卡的三区四区五区| 91美女在线看| 欧美高清在线精品一区| 久久er精品视频| 欧美亚一区二区| 亚洲免费观看高清完整版在线| 国产伦理精品不卡| 欧美日韩国产天堂| 亚洲色图都市小说| 国内精品嫩模私拍在线| 91精品国产综合久久久久久久久久| 中文字幕一区二区三区乱码在线| 激情图片小说一区| 欧美一区二区在线播放| 亚洲一区免费视频| 色哟哟国产精品免费观看| 欧美国产激情二区三区| 国产一区二区三区不卡在线观看| 欧美日韩国产经典色站一区二区三区 | 国产精品初高中害羞小美女文| 日本成人在线电影网| 欧美日韩一区二区三区免费看| 亚洲欧美日韩国产一区二区三区 | 亚洲国产欧美日韩另类综合| 色哟哟精品一区| 亚洲黄色在线视频| 欧美日韩在线播放| 日日摸夜夜添夜夜添亚洲女人| 欧美色图12p| 天堂va蜜桃一区二区三区漫画版| 欧美日韩精品一区二区三区蜜桃| 一区二区三区在线播放| 色久综合一二码| 亚洲国产日产av| 日韩一级片网址| 九九九久久久精品| 亚洲精品一区二区三区香蕉| 国内欧美视频一区二区| 久久久久国产精品免费免费搜索| 国产成人免费av在线| 亚洲欧美怡红院| 欧美三级视频在线| 蜜臀va亚洲va欧美va天堂| 欧美精品一区二区三| 国产精品一区二区91| 中文字幕中文字幕中文字幕亚洲无线| 91在线观看美女| 亚洲小少妇裸体bbw| 日韩欧美国产一二三区| 国产黄色精品网站| 亚洲人123区| 91精品国产高清一区二区三区蜜臀| 蜜臀av性久久久久av蜜臀妖精| 欧美电影免费提供在线观看| 东方欧美亚洲色图在线| 亚洲免费观看高清完整版在线观看| 欧美日韩亚洲高清一区二区| 九一久久久久久| 亚洲伊人伊色伊影伊综合网| 精品国精品国产| 成人av免费在线| 日精品一区二区| 国产日产精品1区| 欧洲色大大久久| 麻豆精品在线看| 综合久久久久久久| 欧美一区二区三区男人的天堂| 成人激情黄色小说| 日本视频一区二区| 亚洲丝袜制服诱惑| 久久这里只有精品6| 4hu四虎永久在线影院成人| 懂色av一区二区在线播放| 免费欧美高清视频| 亚洲精品国产一区二区三区四区在线| 欧美群妇大交群的观看方式| 成人午夜精品一区二区三区| 日本不卡的三区四区五区| 亚洲丝袜自拍清纯另类| 日本一区二区三区在线观看| 欧美一区国产二区| 日本精品视频一区二区三区| 国产成人欧美日韩在线电影| 美女一区二区三区在线观看| 亚洲最新在线观看| 综合av第一页| 国产精品久久久久久久久久久免费看 | 黄页网站大全一区二区| 亚洲高清视频的网址| 一区二区三区不卡在线观看| 欧美国产欧美综合| 国产亚洲精品精华液| 精品成人一区二区三区四区| 欧美丰满少妇xxxxx高潮对白| 色婷婷亚洲综合| av激情亚洲男人天堂| 不卡的av在线播放| 成人av资源在线观看| 丰满岳乱妇一区二区三区| 国产伦精一区二区三区| 国产综合久久久久影院| 国产在线精品国自产拍免费| 国产一区二区三区四区五区入口 | 成人一区在线观看| 国产成人在线免费观看| 国产成人午夜高潮毛片| 懂色av噜噜一区二区三区av| 成人av先锋影音| 色悠久久久久综合欧美99| 欧美亚洲一区二区三区四区| 在线欧美日韩国产| 欧美伦理视频网站| 6080国产精品一区二区| 91精品欧美久久久久久动漫| 精品国产乱码久久久久久牛牛| 久久综合久色欧美综合狠狠| 久久九九国产精品| 中文字幕亚洲一区二区va在线| 樱桃视频在线观看一区| 亚洲成国产人片在线观看| 久久97超碰国产精品超碰| 国产精品一区二区视频| 成人白浆超碰人人人人| 欧美午夜精品久久久久久超碰| 欧美日韩国产在线观看| 久久婷婷国产综合国色天香| 中文字幕一区二区三区精华液 | 日韩欧美aaaaaa| 日本一区二区动态图| 亚洲欧美区自拍先锋| 亚洲制服丝袜av| 国产在线看一区| 在线观看免费成人| 精品国产制服丝袜高跟| 亚洲视频一区二区在线观看| 五月激情综合色| 成人一区二区三区在线观看| 欧美中文一区二区三区| 久久先锋影音av鲁色资源| 亚洲猫色日本管| 国产专区综合网| 欧美日韩性生活| 国产精品久久久一本精品| 日韩不卡一二三区| 91网站视频在线观看| 欧美tickling挠脚心丨vk|