Mercurial > mplayer.hg
comparison postproc/swscale.c @ 17530:04d6525d59d6
change sws sharpen filter a little
author | michael |
---|---|
date | Sat, 04 Feb 2006 00:08:54 +0000 |
parents | 401b440a6d76 |
children | ad90899eeee6 |
comparison
equal
deleted
inserted
replaced
17529:49715244bdb2 | 17530:04d6525d59d6 |
---|---|
2344 filter->chrH= sws_getIdentityVec(); | 2344 filter->chrH= sws_getIdentityVec(); |
2345 filter->chrV= sws_getIdentityVec(); | 2345 filter->chrV= sws_getIdentityVec(); |
2346 } | 2346 } |
2347 | 2347 |
2348 if(chromaSharpen!=0.0){ | 2348 if(chromaSharpen!=0.0){ |
2349 SwsVector *g= sws_getConstVec(-1.0, 3); | 2349 SwsVector *id= sws_getIdentityVec(); |
2350 SwsVector *id= sws_getConstVec(10.0/chromaSharpen, 1); | 2350 sws_scaleVec(filter->chrH, -chromaSharpen); |
2351 g->coeff[1]=2.0; | 2351 sws_scaleVec(filter->chrV, -chromaSharpen); |
2352 sws_addVec(id, g); | 2352 sws_addVec(filter->chrH, id); |
2353 sws_convVec(filter->chrH, id); | 2353 sws_addVec(filter->chrV, id); |
2354 sws_convVec(filter->chrV, id); | |
2355 sws_freeVec(g); | |
2356 sws_freeVec(id); | 2354 sws_freeVec(id); |
2357 } | 2355 } |
2358 | 2356 |
2359 if(lumaSharpen!=0.0){ | 2357 if(lumaSharpen!=0.0){ |
2360 SwsVector *g= sws_getConstVec(-1.0, 3); | 2358 SwsVector *id= sws_getIdentityVec(); |
2361 SwsVector *id= sws_getConstVec(10.0/lumaSharpen, 1); | 2359 sws_scaleVec(filter->lumH, -lumaSharpen); |
2362 g->coeff[1]=2.0; | 2360 sws_scaleVec(filter->lumV, -lumaSharpen); |
2363 sws_addVec(id, g); | 2361 sws_addVec(filter->lumH, id); |
2364 sws_convVec(filter->lumH, id); | 2362 sws_addVec(filter->lumV, id); |
2365 sws_convVec(filter->lumV, id); | |
2366 sws_freeVec(g); | |
2367 sws_freeVec(id); | 2363 sws_freeVec(id); |
2368 } | 2364 } |
2369 | 2365 |
2370 if(chromaHShift != 0.0) | 2366 if(chromaHShift != 0.0) |
2371 sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5)); | 2367 sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5)); |
2423 return vec; | 2419 return vec; |
2424 } | 2420 } |
2425 | 2421 |
2426 | 2422 |
2427 SwsVector *sws_getIdentityVec(void){ | 2423 SwsVector *sws_getIdentityVec(void){ |
2428 double *coeff= memalign(sizeof(double), sizeof(double)); | 2424 return sws_getConstVec(1.0, 1); |
2429 SwsVector *vec= malloc(sizeof(SwsVector)); | 2425 } |
2430 coeff[0]= 1.0; | 2426 |
2431 | 2427 double sws_dcVec(SwsVector *a){ |
2432 vec->coeff= coeff; | |
2433 vec->length= 1; | |
2434 | |
2435 return vec; | |
2436 } | |
2437 | |
2438 void sws_normalizeVec(SwsVector *a, double height){ | |
2439 int i; | 2428 int i; |
2440 double sum=0; | 2429 double sum=0; |
2441 double inv; | |
2442 | 2430 |
2443 for(i=0; i<a->length; i++) | 2431 for(i=0; i<a->length; i++) |
2444 sum+= a->coeff[i]; | 2432 sum+= a->coeff[i]; |
2445 | 2433 |
2446 inv= height/sum; | 2434 return sum; |
2447 | |
2448 for(i=0; i<a->length; i++) | |
2449 a->coeff[i]*= inv; | |
2450 } | 2435 } |
2451 | 2436 |
2452 void sws_scaleVec(SwsVector *a, double scalar){ | 2437 void sws_scaleVec(SwsVector *a, double scalar){ |
2453 int i; | 2438 int i; |
2454 | 2439 |
2455 for(i=0; i<a->length; i++) | 2440 for(i=0; i<a->length; i++) |
2456 a->coeff[i]*= scalar; | 2441 a->coeff[i]*= scalar; |
2442 } | |
2443 | |
2444 void sws_normalizeVec(SwsVector *a, double height){ | |
2445 sws_scaleVec(a, height/sws_dcVec(a)); | |
2457 } | 2446 } |
2458 | 2447 |
2459 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b){ | 2448 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b){ |
2460 int length= a->length + b->length - 1; | 2449 int length= a->length + b->length - 1; |
2461 double *coeff= memalign(sizeof(double), length*sizeof(double)); | 2450 double *coeff= memalign(sizeof(double), length*sizeof(double)); |