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

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

?? timer.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
字號:
/*
 * libmad - MPEG audio decoder library
 
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include <stdio.h>

# ifdef HAVE_ASSERT_H
#  include <assert.h>
# endif

# include "timer.h"

mad_timer_t const mad_timer_zero = { 0, 0 };

/*
 * NAME:	timer->compare()
 * DESCRIPTION:	indicate relative order of two timers
 */
int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
{
  signed long diff;

  diff = timer1.seconds - timer2.seconds;
  if (diff < 0)
    return -1;
  else if (diff > 0)
    return +1;

  diff = timer1.fraction - timer2.fraction;
  if (diff < 0)
    return -1;
  else if (diff > 0)
    return +1;

  return 0;
}

/*
 * NAME:	timer->negate()
 * DESCRIPTION:	invert the sign of a timer
 */
void mad_timer_negate(mad_timer_t *timer)
{
  timer->seconds = -timer->seconds;

  if (timer->fraction) {
    timer->seconds -= 1;
    timer->fraction = MAD_TIMER_RESOLUTION - timer->fraction;
  }
}

/*
 * NAME:	timer->abs()
 * DESCRIPTION:	return the absolute value of a timer
 */
mad_timer_t mad_timer_abs(mad_timer_t timer)
{
  if (mad_timer_sign(timer) < 0)
    mad_timer_negate(&timer);

  return timer;
}

/*
 * NAME:	reduce_timer()
 * DESCRIPTION:	carry timer fraction into seconds
 */
static
void reduce_timer(mad_timer_t *timer)
{
  timer->seconds  += timer->fraction / MAD_TIMER_RESOLUTION;
  timer->fraction %= MAD_TIMER_RESOLUTION;
}

/*
 * NAME:	gcd()
 * DESCRIPTION:	compute greatest common denominator
 */
static
unsigned long gcd(unsigned long num1, unsigned long num2)
{
  unsigned long tmp;

  while (num2) {
    tmp  = num2;
    num2 = num1 % num2;
    num1 = tmp;
  }

  return num1;
}

/*
 * NAME:	reduce_rational()
 * DESCRIPTION:	convert rational expression to lowest terms
 */
static
void reduce_rational(unsigned long *numer, unsigned long *denom)
{
  unsigned long factor;

  factor = gcd(*numer, *denom);

  assert(factor != 0);

  *numer /= factor;
  *denom /= factor;
}

/*
 * NAME:	scale_rational()
 * DESCRIPTION:	solve numer/denom == ?/scale avoiding overflowing
 */
static
unsigned long scale_rational(unsigned long numer, unsigned long denom,
			     unsigned long scale)
{
  reduce_rational(&numer, &denom);
  reduce_rational(&scale, &denom);

  assert(denom != 0);

  if (denom < scale)
    return numer * (scale / denom) + numer * (scale % denom) / denom;
  if (denom < numer)
    return scale * (numer / denom) + scale * (numer % denom) / denom;

  return numer * scale / denom;
}

/*
 * NAME:	timer->set()
 * DESCRIPTION:	set timer to specific (positive) value
 */
void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
		   unsigned long numer, unsigned long denom)
{
  timer->seconds = seconds;
  if (numer >= denom && denom > 0) {
    timer->seconds += numer / denom;
    numer %= denom;
  }

  switch (denom) {
  case 0:
  case 1:
    timer->fraction = 0;
    break;

  case MAD_TIMER_RESOLUTION:
    timer->fraction = numer;
    break;

  case 1000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION /  1000);
    break;

  case 8000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION /  8000);
    break;

  case 11025:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 11025);
    break;

  case 12000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 12000);
    break;

  case 16000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 16000);
    break;

  case 22050:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 22050);
    break;

  case 24000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 24000);
    break;

  case 32000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 32000);
    break;

  case 44100:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 44100);
    break;

  case 48000:
    timer->fraction = numer * (MAD_TIMER_RESOLUTION / 48000);
    break;

  default:
    timer->fraction = scale_rational(numer, denom, MAD_TIMER_RESOLUTION);
    break;
  }

  if (timer->fraction >= MAD_TIMER_RESOLUTION)
    reduce_timer(timer);
}

/*
 * NAME:	timer->add()
 * DESCRIPTION:	add one timer to another
 */
void mad_timer_add(mad_timer_t *timer, mad_timer_t incr)
{
  timer->seconds  += incr.seconds;
  timer->fraction += incr.fraction;

  if (timer->fraction >= MAD_TIMER_RESOLUTION)
    reduce_timer(timer);
}

/*
 * NAME:	timer->multiply()
 * DESCRIPTION:	multiply a timer by a scalar value
 */
void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
{
  mad_timer_t addend;
  unsigned long factor;

  factor = scalar;
  if (scalar < 0) {
    factor = -scalar;
    mad_timer_negate(timer);
  }

  addend = *timer;
  *timer = mad_timer_zero;

  while (factor) {
    if (factor & 1)
      mad_timer_add(timer, addend);

    mad_timer_add(&addend, addend);
    factor >>= 1;
  }
}

/*
 * NAME:	timer->count()
 * DESCRIPTION:	return timer value in selected units
 */
signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
{
  switch (units) {
  case MAD_UNITS_HOURS:
    return timer.seconds / 60 / 60;

  case MAD_UNITS_MINUTES:
    return timer.seconds / 60;

  case MAD_UNITS_SECONDS:
    return timer.seconds;

  case MAD_UNITS_DECISECONDS:
  case MAD_UNITS_CENTISECONDS:
  case MAD_UNITS_MILLISECONDS:

  case MAD_UNITS_8000_HZ:
  case MAD_UNITS_11025_HZ:
  case MAD_UNITS_12000_HZ:
  case MAD_UNITS_16000_HZ:
  case MAD_UNITS_22050_HZ:
  case MAD_UNITS_24000_HZ:
  case MAD_UNITS_32000_HZ:
  case MAD_UNITS_44100_HZ:
  case MAD_UNITS_48000_HZ:

  case MAD_UNITS_24_FPS:
  case MAD_UNITS_25_FPS:
  case MAD_UNITS_30_FPS:
  case MAD_UNITS_48_FPS:
  case MAD_UNITS_50_FPS:
  case MAD_UNITS_60_FPS:
  case MAD_UNITS_75_FPS:
    return timer.seconds * (signed long) units +
      (signed long) scale_rational(timer.fraction, MAD_TIMER_RESOLUTION,
				   units);

  case MAD_UNITS_23_976_FPS:
  case MAD_UNITS_24_975_FPS:
  case MAD_UNITS_29_97_FPS:
  case MAD_UNITS_47_952_FPS:
  case MAD_UNITS_49_95_FPS:
  case MAD_UNITS_59_94_FPS:
    return (mad_timer_count(timer, -units) + 1) * 1000 / 1001;
  }

  /* unsupported units */
  return 0;
}

/*
 * NAME:	timer->fraction()
 * DESCRIPTION:	return fractional part of timer in arbitrary terms
 */
unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long denom)
{
  timer = mad_timer_abs(timer);

  switch (denom) {
  case 0:
    return MAD_TIMER_RESOLUTION / timer.fraction;

  case MAD_TIMER_RESOLUTION:
    return timer.fraction;

  default:
    return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, denom);
  }
}

/*
 * NAME:	timer->string()
 * DESCRIPTION:	write a string representation of a timer using a template
 */
void mad_timer_string(mad_timer_t timer,
		      char *dest, char const *format, enum mad_units units,
		      enum mad_units fracunits, unsigned long subparts)
{
  unsigned long hours, minutes, seconds, sub;
  unsigned int frac;

  timer = mad_timer_abs(timer);

  seconds = timer.seconds;
  frac = sub = 0;

  switch (fracunits) {
  case MAD_UNITS_HOURS:
  case MAD_UNITS_MINUTES:
  case MAD_UNITS_SECONDS:
    break;

  case MAD_UNITS_DECISECONDS:
  case MAD_UNITS_CENTISECONDS:
  case MAD_UNITS_MILLISECONDS:

  case MAD_UNITS_8000_HZ:
  case MAD_UNITS_11025_HZ:
  case MAD_UNITS_12000_HZ:
  case MAD_UNITS_16000_HZ:
  case MAD_UNITS_22050_HZ:
  case MAD_UNITS_24000_HZ:
  case MAD_UNITS_32000_HZ:
  case MAD_UNITS_44100_HZ:
  case MAD_UNITS_48000_HZ:

  case MAD_UNITS_24_FPS:
  case MAD_UNITS_25_FPS:
  case MAD_UNITS_30_FPS:
  case MAD_UNITS_48_FPS:
  case MAD_UNITS_50_FPS:
  case MAD_UNITS_60_FPS:
  case MAD_UNITS_75_FPS:
    {
      unsigned long denom;

      denom = MAD_TIMER_RESOLUTION / fracunits;

      frac = timer.fraction / denom;
      sub  = scale_rational(timer.fraction % denom, denom, subparts);
    }
    break;

  case MAD_UNITS_23_976_FPS:
  case MAD_UNITS_24_975_FPS:
  case MAD_UNITS_29_97_FPS:
  case MAD_UNITS_47_952_FPS:
  case MAD_UNITS_49_95_FPS:
  case MAD_UNITS_59_94_FPS:
    /* drop-frame encoding */
    /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
    {
      unsigned long frame, cycle, d, m;

      frame = mad_timer_count(timer, fracunits);

      cycle = -fracunits * 60 * 10 - (10 - 1) * 2;

      d = frame / cycle;
      m = frame % cycle;
      frame += (10 - 1) * 2 * d;
      if (m > 2)
	frame += 2 * ((m - 2) / (cycle / 10));

      frac    = frame % -fracunits;
      seconds = frame / -fracunits;
    }
    break;
  }

  switch (units) {
  case MAD_UNITS_HOURS:
    minutes = seconds / 60;
    hours   = minutes / 60;

    sprintf(dest, format,
	    hours,
	    (unsigned int) (minutes % 60),
	    (unsigned int) (seconds % 60),
	    frac, sub);
    break;

  case MAD_UNITS_MINUTES:
    minutes = seconds / 60;

    sprintf(dest, format,
	    minutes,
	    (unsigned int) (seconds % 60),
	    frac, sub);
    break;

  case MAD_UNITS_SECONDS:
    sprintf(dest, format,
	    seconds,
	    frac, sub);
    break;

  case MAD_UNITS_23_976_FPS:
  case MAD_UNITS_24_975_FPS:
  case MAD_UNITS_29_97_FPS:
  case MAD_UNITS_47_952_FPS:
  case MAD_UNITS_49_95_FPS:
  case MAD_UNITS_59_94_FPS:
    if (fracunits < 0) {
      /* not yet implemented */
      sub = 0;
    }

    /* fall through */

  case MAD_UNITS_DECISECONDS:
  case MAD_UNITS_CENTISECONDS:
  case MAD_UNITS_MILLISECONDS:

  case MAD_UNITS_8000_HZ:
  case MAD_UNITS_11025_HZ:
  case MAD_UNITS_12000_HZ:
  case MAD_UNITS_16000_HZ:
  case MAD_UNITS_22050_HZ:
  case MAD_UNITS_24000_HZ:
  case MAD_UNITS_32000_HZ:
  case MAD_UNITS_44100_HZ:
  case MAD_UNITS_48000_HZ:

  case MAD_UNITS_24_FPS:
  case MAD_UNITS_25_FPS:
  case MAD_UNITS_30_FPS:
  case MAD_UNITS_48_FPS:
  case MAD_UNITS_50_FPS:
  case MAD_UNITS_60_FPS:
  case MAD_UNITS_75_FPS:
    sprintf(dest, format, mad_timer_count(timer, units), sub);
    break;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合自拍| 亚洲三级电影全部在线观看高清| 亚洲三级小视频| 一二三区精品福利视频| 色哟哟精品一区| 亚洲欧洲日本在线| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 国产在线日韩欧美| 欧美日韩国产综合一区二区 | 精品一区二区精品| 91精品国产aⅴ一区二区| 麻豆91在线播放免费| 6080日韩午夜伦伦午夜伦| 亚洲少妇最新在线视频| 高清beeg欧美| 亚洲欧美一区二区三区国产精品| 色综合久久88色综合天天免费| 一区二区三区欧美日韩| 欧美日韩精品欧美日韩精品| 裸体在线国模精品偷拍| 久久久亚洲欧洲日产国码αv| 波多野结衣在线一区| 国产精品久久影院| 色婷婷久久综合| 免费一级片91| 国产日韩精品视频一区| 色综合久久中文字幕| 亚洲永久精品国产| 欧美日韩国产首页| 大尺度一区二区| 亚洲欧洲无码一区二区三区| 91精品在线观看入口| 黄色日韩三级电影| 日韩午夜激情视频| 99精品国产99久久久久久白柏| 亚洲自拍偷拍麻豆| 国产日韩在线不卡| 欧美三级欧美一级| 国产成人在线视频网址| 夜色激情一区二区| 精品久久久久一区| 91黄色小视频| 狠狠色丁香九九婷婷综合五月| 亚洲精品福利视频网站| 3d成人h动漫网站入口| 日本亚洲免费观看| 国产精品视频免费看| 欧美日韩不卡在线| 国产成人精品亚洲777人妖| 亚洲成人精品影院| 国产三级一区二区三区| 欧美在线一二三| 99re成人在线| 极品销魂美女一区二区三区| 亚洲一区二三区| 中文在线资源观看网站视频免费不卡| 99国产精品99久久久久久| 韩国精品主播一区二区在线观看| 亚洲男人电影天堂| 国产精品伦理一区二区| 91精品国产综合久久久久| 久久9热精品视频| 日韩在线a电影| 最新日韩在线视频| 国产精品福利在线播放| 欧美一区永久视频免费观看| 91丝袜美女网| 丁香网亚洲国际| 久久99国内精品| 亚洲综合自拍偷拍| 国产精品色在线| 精品国产乱码久久久久久图片 | 成人av在线播放网站| 日韩午夜电影av| 欧美私模裸体表演在线观看| 丁香亚洲综合激情啪啪综合| 奇米精品一区二区三区在线观看一| 中文字幕在线一区| 久久亚洲欧美国产精品乐播| 不卡av在线免费观看| www.日本不卡| 国产乱一区二区| 高清免费成人av| 国产不卡视频在线播放| 蜜臂av日日欢夜夜爽一区| 欧美aa在线视频| 蜜桃传媒麻豆第一区在线观看| 美女一区二区三区在线观看| 日本在线观看不卡视频| 午夜精品福利视频网站| 天天影视涩香欲综合网 | 蜜臀精品久久久久久蜜臀| 国产精品国产三级国产aⅴ入口 | 日韩一区二区免费视频| 日韩欧美中文一区二区| 欧美一卡2卡三卡4卡5免费| 精品国产sm最大网站免费看| 精品日韩成人av| 久久久亚洲精品一区二区三区| 欧美成人三级在线| 日韩不卡手机在线v区| 亚洲视频在线一区| 中日韩av电影| 欧美国产一区在线| 91九色最新地址| 亚洲精品免费一二三区| 国产精品久久毛片| 最新不卡av在线| 中文字幕视频一区| 精品国产乱码久久久久久浪潮| 国产精品国产三级国产普通话99| 精品国产一区二区精华| 久久综合成人精品亚洲另类欧美| 精品国产区一区| 久久久精品免费免费| 国产精品色哟哟网站| 亚洲欧美综合另类在线卡通| 一级女性全黄久久生活片免费| 亚洲一区二区三区中文字幕在线 | 欧美成人aa大片| 国产欧美精品一区二区色综合 | 理论电影国产精品| 国产福利精品导航| av在线不卡网| 欧美日韩国产综合草草| 精品国产乱码久久久久久免费| 国产欧美日韩在线| 亚洲一级二级在线| 美国十次综合导航| 99精品视频一区二区三区| 欧美日韩视频专区在线播放| 精品福利二区三区| 亚洲欧美日韩中文播放 | 色中色一区二区| 精品日韩在线一区| 1区2区3区欧美| 日韩和欧美的一区| 国产ts人妖一区二区| 欧美性生活大片视频| 久久久久国产精品免费免费搜索| 亚洲欧美日韩小说| 国产精品素人视频| 欧美va在线播放| 日韩精品一区二区三区视频| 欧美成人aa大片| 国产女人水真多18毛片18精品视频 | 成人午夜视频在线| 国产欧美日韩视频在线观看| 一区二区激情视频| 丁香六月久久综合狠狠色| 成人动漫视频在线| 精品日产卡一卡二卡麻豆| 日韩高清在线电影| youjizz国产精品| 欧美日韩激情在线| 亚洲图片欧美激情| 高清shemale亚洲人妖| 欧美日韩一区 二区 三区 久久精品| 国产精品久久毛片| 国产精品久久久久久久久快鸭 | 亚洲免费观看高清| 亚洲自拍偷拍网站| 99久久99久久综合| 日本一区二区在线不卡| 韩国av一区二区三区四区| 欧美福利视频导航| 亚洲一区二区在线播放相泽| 国产成人精品影院| 久久久久综合网| 久久99国产精品久久99果冻传媒| 色婷婷av一区二区三区软件| 日韩一区二区三区视频在线| 国产香蕉久久精品综合网| 蜜桃视频在线观看一区| 在线电影一区二区三区| 亚洲电影中文字幕在线观看| 91浏览器在线视频| ㊣最新国产の精品bt伙计久久| 福利一区二区在线观看| 日韩欧美www| 久久精品国产亚洲高清剧情介绍 | 久久国产生活片100| 欧美精品123区| 久久精品国产精品亚洲精品 | 国产欧美一区二区三区沐欲| 成人免费毛片片v| 亚洲丝袜制服诱惑| 91国产成人在线| 视频一区二区三区入口| 欧美一三区三区四区免费在线看| 激情伊人五月天久久综合| 国产区在线观看成人精品| 99在线热播精品免费| 亚洲国产精品精华液网站| 日韩亚洲欧美中文三级| 国产麻豆精品视频| 亚洲激情第一区| 日韩免费视频一区| 成人中文字幕合集| 亚洲一区二区成人在线观看|