⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rational.h.svn-base

📁 ffshow源码
💻 SVN-BASE
字号:
#ifndef _RATIONAL_H_#define _RATIONAL_H_#include "libavutil/rational.h"struct Rational :safe_bool<Rational>{ int num; int den; Rational(void):num(0),den(0) {} Rational(int Inum,int Iden):num(Inum),den(Iden) {} Rational(unsigned int Inum,unsigned int Iden):num(Inum),den(Iden) {} Rational(DWORD Inum,DWORD Iden):num(Inum),den(Iden) {} Rational(const AVRational &ar):num(ar.num),den(ar.den) {} Rational(double d, int max)  {   #pragma warning (push)   #pragma warning (disable:4244)   int exponent=std::max((int)(log(abs(d)+1e-20)/log(2.0)),0);   #pragma warning (pop)   int64_t den64= int64_t(1) << (61 - exponent);   lavc_reduce(&num, &den, (int64_t)(d * den64 + 0.5), den64, max);  }/* operator double()  {   return num/(double)den;  }*/ operator AVRational() const  {   AVRational a;   a.num=num;a.den=den;   return a;  } Rational operator+(const Rational &c)  {   lavc_reduce(&num, &den, num * (int64_t)c.den + c.num * (int64_t)den, den * (int64_t)c.den, INT_MAX);   return *this;  } Rational operator-(const Rational &c)  {   lavc_reduce(&num, &den, num * (int64_t)c.den - c.num * (int64_t)den, den * (int64_t)c.den, INT_MAX);   return *this;  } Rational& reduce(int max)  {   lavc_reduce(&num,&den,num,den,max);   return *this;  } bool operator!=(const Rational &b) const  {   const int64_t tmp= num * (int64_t)b.den - b.num * (int64_t)den;   if (tmp!=0 ||       (num==0 && den==0 && (b.num!=0 || b.den!=0)) ||       (b.num==0 && b.den==0 && (num!=0 || den!=0))) return true;   else    return false;  } bool boolean_test() const  {   return num || den;  }};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -