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

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

?? leaky_bucket.c

?? jm_frext22.ZIP的壓縮文件,主要用于嵌入式系統圖象的編解碼的開發.
?? 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 <assert.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] = (AvgRate * img->framerate)/(input->jumpd+1); /* convert bits/frame to bits/second */
      else
        Rmin[iBucket] = 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一区二区三区免费野_久草精品视频
欧美日韩国产片| 亚洲一区二区不卡免费| 日韩一级完整毛片| 久久精品视频免费观看| 自拍偷拍亚洲综合| 亚洲一卡二卡三卡四卡五卡| 久久丁香综合五月国产三级网站 | 国产乱码精品一区二区三| 国产精品亚洲视频| 在线观看一区二区视频| 亚洲精品国产a久久久久久| 国产精品美女www爽爽爽| 午夜精品福利一区二区蜜股av | 精品国产乱子伦一区| 亚洲欧美一区二区不卡| 国产一区二区三区蝌蚪| 亚洲成a人v欧美综合天堂下载| 麻豆精品久久久| 欧美视频一区二| 国产精品国产自产拍高清av| 午夜伊人狠狠久久| 亚洲国产日韩精品| a级精品国产片在线观看| 精品国产一区二区三区忘忧草| 亚洲影院在线观看| 91麻豆国产福利精品| 国产欧美日本一区视频| 国产伦精一区二区三区| 精品成人一区二区三区四区| 奇米四色…亚洲| 免费美女久久99| 日韩一区二区在线看片| 一区二区三区在线免费视频 | 国产欧美日韩亚州综合| 高清国产一区二区| 国产精品久久久久久久第一福利| 国产美女在线精品| 2023国产精品自拍| 性久久久久久久久久久久| 91麻豆蜜桃一区二区三区| 亚洲男人的天堂在线aⅴ视频| 色综合久久中文字幕综合网 | 91色婷婷久久久久合中文| 亚洲欧洲99久久| 亚洲成人av免费| 精品国产亚洲一区二区三区在线观看 | 国内外精品视频| 日本高清不卡aⅴ免费网站| 亚洲.国产.中文慕字在线| 欧美成人一级视频| 国产91丝袜在线观看| 婷婷夜色潮精品综合在线| 久久综合九色综合欧美98| 欧美日韩一区二区在线观看 | 2023国产精华国产精品| 成人国产精品免费| 亚洲成a天堂v人片| 中文字幕成人在线观看| 欧美精品aⅴ在线视频| 欧美调教femdomvk| 免费在线观看一区二区三区| 国产精品久久综合| 久久久久国产精品厨房| 69堂成人精品免费视频| 波多野结衣91| 国产精品一区在线观看你懂的| 亚洲va韩国va欧美va| 国产精品进线69影院| 久久久精品影视| 日韩精品最新网址| 成人在线一区二区三区| 欧美精品一区二区三区蜜桃 | 日本中文一区二区三区| 亚洲靠逼com| 亚洲欧美日韩国产中文在线| 国产视频亚洲色图| 国产亚洲1区2区3区| 久久网站最新地址| 久久亚洲一区二区三区四区| 欧美精品一区二区三区很污很色的 | 国产成人亚洲综合色影视| 奇米影视7777精品一区二区| 青青青爽久久午夜综合久久午夜 | 欧美伊人久久久久久久久影院| 精品午夜久久福利影院| 韩国av一区二区三区在线观看| 精品一区二区三区在线播放| 国产黄色成人av| 一本色道亚洲精品aⅴ| 欧美视频中文一区二区三区在线观看| 色爱区综合激月婷婷| 4438x成人网最大色成网站| 蜜臀久久99精品久久久久宅男| 亚洲国产精品一区二区尤物区| 亚洲成人福利片| 韩国欧美国产1区| 丁香激情综合五月| 精品久久久久久综合日本欧美| 色久综合一二码| 精品欧美一区二区久久| 一区在线中文字幕| 久久精品二区亚洲w码| 欧美视频一区二区三区四区| 国产精品欧美一区喷水| 亚洲国产成人av网| 成人久久18免费网站麻豆 | 一区二区三区91| 国产精品一区二区你懂的| 欧美亚洲自拍偷拍| 中文字幕欧美激情| 狠狠色丁香婷婷综合| 91精品国产欧美日韩| 中文字幕在线不卡一区| 国模娜娜一区二区三区| 91精品国产麻豆| 亚洲一区二区三区中文字幕| 成人妖精视频yjsp地址| 久久久久久97三级| 国产精品一区在线观看你懂的| 日韩一区二区视频| 男男成人高潮片免费网站| 欧美精品丝袜中出| 91精品国产91久久综合桃花| 亚洲综合男人的天堂| 欧美影院一区二区三区| 一区二区国产视频| 欧洲精品一区二区三区在线观看| 国产成人午夜电影网| 国产成人免费网站| 1024国产精品| 欧美午夜理伦三级在线观看| 亚洲电影在线播放| 日韩免费高清av| 国产一区二区视频在线| 欧美国产在线观看| 一本一道波多野结衣一区二区 | 欧美性生活影院| 久久国产欧美日韩精品| 激情成人综合网| 最新热久久免费视频| 欧美性生交片4| 国产精品系列在线播放| 亚洲精品高清视频在线观看| 国产日韩精品一区二区三区 | 日本一区二区综合亚洲| 91香蕉视频污| 懂色一区二区三区免费观看| 欧美视频在线一区二区三区 | 欧美伊人精品成人久久综合97| 亚洲国产精品久久久男人的天堂| 欧美一级艳片视频免费观看| 91在线一区二区| 美女网站在线免费欧美精品| 亚洲视频一区二区在线| 亚洲男同性视频| 欧美日韩国产色站一区二区三区| 99热精品一区二区| 国产精品12区| 国产在线看一区| 免费观看成人av| 一区二区三区在线看| 欧美极品美女视频| 亚洲精品一区二区在线观看| 欧美网站一区二区| 欧美午夜理伦三级在线观看| 色8久久人人97超碰香蕉987| 亚洲女人的天堂| 中文字幕不卡在线播放| 宅男噜噜噜66一区二区66| 91丨porny丨国产| 色哟哟国产精品| 欧美自拍丝袜亚洲| 亚洲视频小说图片| 精品嫩草影院久久| 亚洲精品在线免费播放| 久久人人爽爽爽人久久久| 精品国产一区二区三区忘忧草| 亚洲精品在线三区| 中文字幕一区三区| 亚洲精品欧美二区三区中文字幕| 夜夜嗨av一区二区三区中文字幕| 亚洲国产日日夜夜| 国产最新精品精品你懂的| 91碰在线视频| 日韩一区二区免费在线观看| 岛国精品一区二区| 色综合久久综合网97色综合| 欧美一区二区三区视频在线| 久久久久久久久99精品| 亚洲三级免费电影| 婷婷一区二区三区| 99视频一区二区三区| 久久午夜免费电影| 亚洲精品成人少妇| 国产麻豆日韩欧美久久| 精品欧美乱码久久久久久1区2区| 欧美午夜不卡在线观看免费| 国产欧美日韩另类视频免费观看| 亚洲一区二区三区不卡国产欧美| 成人国产精品免费观看|