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));