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

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

?? leaky_bucket.c

?? 一個簡單的視頻會議VC++MFC工程文件
?? 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一区二区三区免费野_久草精品视频
欧美日韩亚洲综合一区二区三区| 国产精品 欧美精品| 欧美亚洲国产一区二区三区| 亚洲精品ww久久久久久p站| 色综合久久66| 三级不卡在线观看| 欧美一二三区精品| 国产精品一品二品| 亚洲素人一区二区| 在线综合+亚洲+欧美中文字幕| 美国三级日本三级久久99| 久久久久亚洲蜜桃| 成人精品免费网站| 亚洲亚洲人成综合网络| 精品国产一区久久| 91在线你懂得| 免费成人在线网站| 国产精品久久三| 欧美日韩高清一区| 国产盗摄一区二区| 亚洲午夜久久久久久久久电影网| 欧美一区二区福利视频| 国产成人av一区二区| 亚洲精品国产成人久久av盗摄| 日韩视频在线永久播放| www.欧美色图| 日韩精品久久理论片| 久久综合网色—综合色88| 91免费视频观看| 久久精品噜噜噜成人av农村| 国产精品视频一二三区| 8x8x8国产精品| 丁香亚洲综合激情啪啪综合| 亚洲午夜精品一区二区三区他趣| 26uuu久久综合| 欧美伊人久久久久久午夜久久久久| 蜜臀91精品一区二区三区| 国产精品久久久久永久免费观看| 欧美日韩国产区一| 成人免费三级在线| 美日韩一区二区| 亚洲一区二区三区四区在线观看| 久久久五月婷婷| 911精品国产一区二区在线| av影院午夜一区| 精品一区二区免费在线观看| 亚洲综合视频在线| 国产精品伦一区二区三级视频| 欧美日韩黄视频| 91麻豆成人久久精品二区三区| 经典一区二区三区| 日韩精品成人一区二区三区| 亚洲精品一二三| 国产精品视频在线看| 久久在线免费观看| 日韩视频免费观看高清完整版在线观看 | 国产成人综合视频| 日韩av电影天堂| 亚洲国产成人av好男人在线观看| 中文一区二区在线观看| 精品国产乱码久久久久久闺蜜| 欧美日韩免费观看一区三区| 91啪九色porn原创视频在线观看| 懂色av中文一区二区三区| 国产美女精品在线| 国产精品一区在线观看你懂的| 七七婷婷婷婷精品国产| 日本视频免费一区| 日韩不卡在线观看日韩不卡视频| 有坂深雪av一区二区精品| 国产精品久久久久久久久搜平片 | 亚洲va欧美va人人爽| 国产精品国产三级国产| 国产午夜精品一区二区| 久久久久国产精品麻豆| 久久新电视剧免费观看| 久久婷婷综合激情| 久久久久国产精品人| 久久久综合网站| 欧美韩国日本一区| 中日韩av电影| 亚洲婷婷综合色高清在线| 亚洲婷婷综合久久一本伊一区| 国产精品福利影院| 一区二区三区四区亚洲| 图片区小说区区亚洲影院| 日韩av成人高清| 国内欧美视频一区二区| 成人精品免费看| 色偷偷一区二区三区| 欧美色综合影院| 日韩天堂在线观看| 国产欧美日韩在线看| 国产精品第一页第二页第三页| 亚洲嫩草精品久久| 日本一道高清亚洲日美韩| 久久99日本精品| 床上的激情91.| 在线免费观看日韩欧美| 欧美一级欧美三级| 久久久久久久久久久黄色| 欧美国产禁国产网站cc| 玉足女爽爽91| 久色婷婷小香蕉久久| 欧美三级韩国三级日本一级| 欧美日韩成人在线| 精品国产欧美一区二区| 国产精品久久精品日日| 亚洲国产欧美在线| 国产在线精品一区二区不卡了| 国产91精品一区二区麻豆亚洲| 91视频www| 日韩女优av电影在线观看| 国产精品成人免费| 日韩成人精品在线| jizz一区二区| 日韩精品影音先锋| 亚洲精品国产品国语在线app| 麻豆freexxxx性91精品| 91香蕉视频污| 2014亚洲片线观看视频免费| 亚洲精品成人a在线观看| 黄色成人免费在线| 在线观看国产精品网站| 久久一留热品黄| 天天色图综合网| 99视频一区二区三区| 精品三级av在线| 一区二区在线免费观看| 国产精品一区三区| 欧美精品乱码久久久久久| 中文在线资源观看网站视频免费不卡| 天天爽夜夜爽夜夜爽精品视频| 成人激情文学综合网| 精品欧美黑人一区二区三区| 亚洲一级二级在线| 成人综合婷婷国产精品久久 | 在线成人av网站| 亚洲欧美自拍偷拍色图| 国产精选一区二区三区| 6080午夜不卡| 亚洲精品大片www| 成人av在线资源网| 久久亚洲一区二区三区四区| 日韩不卡一二三区| 欧美性受极品xxxx喷水| 亚洲欧美经典视频| 成人黄色av电影| 日韩精品在线网站| 男男视频亚洲欧美| 欧美日韩久久不卡| 亚洲国产精品久久艾草纯爱 | 国产精品主播直播| 欧美一区二区视频免费观看| 亚洲成人av电影| 欧洲一区二区av| 亚洲综合免费观看高清完整版在线| k8久久久一区二区三区| 中文字幕欧美日韩一区| 日本乱人伦一区| 中文字幕一区二区日韩精品绯色| 国产91富婆露脸刺激对白| 国产欧美日本一区二区三区| 国产精品996| 久久欧美一区二区| 国产成都精品91一区二区三| 久久久亚洲精品一区二区三区| 国产自产高清不卡| 久久久久久99久久久精品网站| 狠狠色综合播放一区二区| 久久综合久久综合久久| 韩国精品在线观看| 国产日韩精品一区二区三区在线| 国产精品一区二区在线观看不卡| 久久免费午夜影院| 成人免费视频国产在线观看| 国产精品乱人伦中文| 91性感美女视频| 亚洲午夜精品17c| 日韩一区二区免费在线观看| 美国一区二区三区在线播放| 久久中文娱乐网| 不卡的电视剧免费网站有什么| 亚洲精品中文字幕乱码三区 | 奇米影视在线99精品| 精品处破学生在线二十三| 国产91精品欧美| 亚洲免费视频成人| 欧美日韩黄视频| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品视频第一区| 色8久久人人97超碰香蕉987| 舔着乳尖日韩一区| 2020国产精品自拍| 色婷婷国产精品久久包臀| 日精品一区二区| 久久久久97国产精华液好用吗| 色诱视频网站一区| 免费美女久久99| 自拍偷在线精品自拍偷无码专区|