X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2FC41%2Fc41.C;h=6a3829354c49b3930bf846d0d542784f8cd3e9a4;hb=e9a3c57c8d3bb4d79e76a4c3942f86a66d3c267e;hp=32f5afe322faec964013338e4175bf0047a5ec2f;hpb=47462c7a88ed4f844fa4eaf32a84533aa847b7d5;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/C41/c41.C b/cinelerra-5.1/plugins/C41/c41.C index 32f5afe3..6a382935 100644 --- a/cinelerra-5.1/plugins/C41/c41.C +++ b/cinelerra-5.1/plugins/C41/c41.C @@ -707,21 +707,25 @@ int C41Effect::process_realtime(VFrame *input, VFrame *output) if( row[2] > maxima_b ) maxima_b = row[2]; } } - if( minima_r < 1e-6 ) minima_r = 1e-6; - if( minima_g < 1e-6 ) minima_g = 1e-6; - if( minima_b < 1e-6 ) minima_b = 1e-6; values.min_r = minima_r; values.max_r = maxima_r; values.min_g = minima_g; values.max_g = maxima_g; values.min_b = minima_b; values.max_b = maxima_b; values.light = maxima_r < 1e-6 ? 1.0 : minima_r / maxima_r; - values.gamma_g = logf(maxima_r / minima_r) / logf(maxima_g / minima_g); - values.gamma_b = logf(maxima_r / minima_r) / logf(maxima_b / minima_b); + bclamp(minima_r, 1e-6, 1-1e-6); bclamp(maxima_r, 1e-6, 1-1e-6); + bclamp(minima_g, 1e-6, 1-1e-6); bclamp(maxima_g, 1e-6, 1-1e-6); + bclamp(minima_b, 1e-6, 1-1e-6); bclamp(maxima_b, 1e-6, 1-1e-6); + float log_r = logf(maxima_r / minima_r); + float log_g = logf(maxima_g / minima_g); + float log_b = logf(maxima_b / minima_b); + if( log_g < 1e-6 ) log_g = 1e-6; + if( log_b < 1e-6 ) log_b = 1e-6; + values.gamma_g = log_r / log_g; + values.gamma_b = log_r / log_b; values.shave_min_col = shave_min_col; values.shave_max_col = shave_max_col; values.shave_min_row = shave_min_row; values.shave_max_row = shave_max_row; - values.coef1 = -1; - values.coef2 = -1; + values.coef1 = values.coef2 = -1; // Update GUI send_render_gui(&values); @@ -764,20 +768,14 @@ int C41Effect::process_realtime(VFrame *input, VFrame *output) // Calculate postprocessing coeficents values.coef2 = minima_r; - if( minima_g < values.coef2 ) - values.coef2 = minima_g; - if( minima_b < values.coef2 ) - values.coef2 = minima_b; + if( minima_g < values.coef2 ) values.coef2 = minima_g; + if( minima_b < values.coef2 ) values.coef2 = minima_b; values.coef1 = maxima_r; - if( maxima_g > values.coef1 ) - values.coef1 = maxima_g; - if( maxima_b > values.coef1 ) - values.coef1 = maxima_b; - // Try not to overflow RGB601 - // (235 - 16) / 256 * 0.9 + if( maxima_g > values.coef1 ) values.coef1 = maxima_g; + if( maxima_b > values.coef1 ) values.coef1 = maxima_b; + // Try not to overflow RGB601 (235 - 16) / 256 * 0.9 float den = values.coef1 - values.coef2; - if( fabs(den) < 1e-6 ) - den = den < 0 ? -1e-6 : 1e-6; + if( fabs(den) < 1e-6 ) den = 1e-6; values.coef1 = 0.770 / den; values.coef2 = 0.065 - values.coef2 * values.coef1; send_render_gui(&values);