[Mplayer-cvslog] CVS: main/libmpcodecs ve_xvid4.c,1.8,1.9
Ivan Kalvachev
ivan at cacad.com
Sat Oct 2 02:17:29 CEST 2004
On Sat, 2 Oct 2004 00:53:16 +0200 (CEST)
syncmail at mplayerhq.hu (Guillaume Poirier CVS) wrote:
> CVS change done by Guillaume Poirier CVS
>
> Update of /cvsroot/mplayer/main/libmpcodecs
> In directory mail:/var2/tmp/cvs-serv18415
>
> Modified Files:
> ve_xvid4.c
> Log Message:
> Moves around some functions, which makes the code clearer (it groups helper functions together) is one step closer to a nice 1.1 front-end.
Before commiting code read the rules.
MPlayer project strictly forbid commiting nonfunctional changes.
If you are makeing them in order to commit GomGom changes 1:1 you are doing wrong.
Revert immediately.
Ivan Kalvachev
iive
> Index: ve_xvid4.c
> ===================================================================
> RCS file: /cvsroot/mplayer/main/libmpcodecs/ve_xvid4.c,v
> retrieving revision 1.8
> retrieving revision 1.9
> diff -u -r1.8 -r1.9
> --- ve_xvid4.c 13 Jul 2004 18:09:58 -0000 1.8
> +++ ve_xvid4.c 1 Oct 2004 22:53:14 -0000 1.9
> @@ -61,85 +61,6 @@
> #define FINE (!0)
> #define BAD (!FINE)
>
> -// Code taken from Libavcodec and ve_lavc.c to handle Aspect Ratio calculation
> -
> -typedef struct XVIDRational{
> - int num;
> - int den;
> -} XVIDRational;
> -
> -#define MAX(a,b) ((a) > (b) ? (a) : (b))
> -#define ABS(a) ((a) >= 0 ? (a) : (-(a)))
> -
> -
> -static int64_t xvid_gcd(int64_t a, int64_t b){
> - if(b) return xvid_gcd(b, a%b);
> - else return a;
> -}
> -
> -static int xvid_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){
> - int exact=1, sign=0;
> - int64_t gcd;
> -
> - assert(den != 0);
> -
> - if(den < 0){
> - den= -den;
> - nom= -nom;
> - }
> -
> - if(nom < 0){
> - nom= -nom;
> - sign= 1;
> - }
> -
> - gcd = xvid_gcd(nom, den);
> - nom /= gcd;
> - den /= gcd;
> -
> - if(nom > max || den > max){
> - XVIDRational a0={0,1}, a1={1,0};
> - exact=0;
> -
> - for(;;){
> - int64_t x= nom / den;
> - int64_t a2n= x*a1.num + a0.num;
> - int64_t a2d= x*a1.den + a0.den;
> -
> - if(a2n > max || a2d > max) break;
> -
> - nom %= den;
> -
> - a0= a1;
> - a1= (XVIDRational){a2n, a2d};
> - if(nom==0) break;
> - x= nom; nom=den; den=x;
> - }
> - nom= a1.num;
> - den= a1.den;
> - }
> -
> - assert(xvid_gcd(nom, den) == 1);
> -
> - if(sign) nom= -nom;
> -
> - *dst_nom = nom;
> - *dst_den = den;
> -
> - return exact;
> -}
> -
> -
> -static XVIDRational xvid_d2q(double d, int max){
> - XVIDRational a;
> - int exponent= MAX( (int)(log(ABS(d) + 1e-20)/log(2)), 0);
> - int64_t den= 1LL << (61 - exponent);
> - xvid_reduce(&a.num, &a.den, (int64_t)(d * den + 0.5), den, max);
> -
> - return a;
> -}
> -
> -
>
> /*****************************************************************************
> * Configuration options
> @@ -313,9 +234,15 @@
> int d_width, d_height;
> } xvid_mplayer_module_t;
>
> +typedef struct XVIDRational{
> + int num;
> + int den;
> +} XVIDRational;
> +
> static void dispatch_settings(xvid_mplayer_module_t *mod);
> static int set_create_struct(xvid_mplayer_module_t *mod);
> static int set_frame_struct(xvid_mplayer_module_t *mod, mp_image_t *mpi);
> +static XVIDRational xvid_d2q(double d, int max);
> static const char *errorstring(int err);
>
> /*****************************************************************************
> @@ -1157,6 +1084,76 @@
>
> }
>
> +/* Code taken from Libavcodec and ve_lavc.c to handle Aspect Ratio calculation */
> +#define MAX(a,b) ((a) > (b) ? (a) : (b))
> +#define ABS(a) ((a) >= 0 ? (a) : (-(a)))
> +
> +static int64_t xvid_gcd(int64_t a, int64_t b){
> + if(b) return xvid_gcd(b, a%b);
> + else return a;
> +}
> +
> +static int xvid_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){
> + int exact=1, sign=0;
> + int64_t gcd;
> +
> + assert(den != 0);
> +
> + if(den < 0){
> + den= -den;
> + nom= -nom;
> + }
> +
> + if(nom < 0){
> + nom= -nom;
> + sign= 1;
> + }
> +
> + gcd = xvid_gcd(nom, den);
> + nom /= gcd;
> + den /= gcd;
> +
> + if(nom > max || den > max){
> + XVIDRational a0={0,1}, a1={1,0};
> + exact=0;
> +
> + for(;;){
> + int64_t x= nom / den;
> + int64_t a2n= x*a1.num + a0.num;
> + int64_t a2d= x*a1.den + a0.den;
> +
> + if(a2n > max || a2d > max) break;
> +
> + nom %= den;
> +
> + a0= a1;
> + a1= (XVIDRational){a2n, a2d};
> + if(nom==0) break;
> + x= nom; nom=den; den=x;
> + }
> + nom= a1.num;
> + den= a1.den;
> + }
> +
> + assert(xvid_gcd(nom, den) == 1);
> +
> + if(sign) nom= -nom;
> +
> + *dst_nom = nom;
> + *dst_den = den;
> +
> + return exact;
> +}
> +
> +static XVIDRational xvid_d2q(double d, int max){
> + XVIDRational a;
> + int exponent= MAX( (int)(log(ABS(d) + 1e-20)/log(2)), 0);
> + int64_t den= 1LL << (61 - exponent);
> + xvid_reduce(&a.num, &a.den, (int64_t)(d * den + 0.5), den, max);
> +
> + return a;
> +}
> +
> static const char *errorstring(int err)
> {
> char *error;
>
> _______________________________________________
> Mplayer-cvslog mailing list
> Mplayer-cvslog at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/mplayer-cvslog
More information about the MPlayer-cvslog
mailing list