summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--filters.c56
-rw-r--r--flam3.c5
-rw-r--r--flam3.h1
-rw-r--r--interpolation.c1
-rw-r--r--main.c15
-rw-r--r--palettes.c2
-rw-r--r--parser.c4
-rw-r--r--rect.c68
8 files changed, 15 insertions, 137 deletions
diff --git a/filters.c b/filters.c
index 392c7eb..29ecb22 100644
--- a/filters.c
+++ b/filters.c
@@ -217,62 +217,6 @@ int normalize_vector(double *v, int n) {
return 0;
}
-
-int flam3_create_spatial_filter(flam3_frame *spec, int field, double **filter) {
-
- int sf_kernel = spec->genomes[0].spatial_filter_select;
- int supersample = spec->genomes[0].spatial_oversample;
- double sf_radius = spec->genomes[0].spatial_filter_radius;
- double aspect_ratio = spec->pixel_aspect_ratio;
- double sf_supp = flam3_spatial_support[sf_kernel];
-
- double fw = 2.0 * sf_supp * supersample * sf_radius / aspect_ratio;
- double adjust, ii, jj;
-
- int fwidth = ((int) fw) + 1;
- int i,j;
-
-
- /* Make sure the filter kernel has same parity as oversample */
- if ((fwidth ^ supersample) & 1)
- fwidth++;
-
- /* Calculate the coordinate scaling factor for the kernel values */
- if (fw > 0.0)
- adjust = sf_supp * fwidth / fw;
- else
- adjust = 1.0;
-
- /* Calling function MUST FREE THE RETURNED KERNEL, lest ye leak memory */
- (*filter) = (double *)calloc(fwidth * fwidth,sizeof(double));
-
- /* fill in the coefs */
- for (i = 0; i < fwidth; i++)
- for (j = 0; j < fwidth; j++) {
-
- /* Calculate the function inputs for the kernel function */
- ii = ((2.0 * i + 1.0) / (double)fwidth - 1.0)*adjust;
- jj = ((2.0 * j + 1.0) / (double)fwidth - 1.0)*adjust;
-
- /* Scale for scanlines */
- if (field) jj *= 2.0;
-
- /* Adjust for aspect ratio */
- jj /= aspect_ratio;
-
- (*filter)[i + j * fwidth] =
- flam3_spatial_filter(sf_kernel,ii) * flam3_spatial_filter(sf_kernel,jj);
- }
-
-
- if (normalize_vector((*filter), fwidth * fwidth)) {
- fprintf(stderr, "Spatial filter value is too small: %g. Terminating.\n",sf_radius);
- return(-1);
- }
-
- return (fwidth);
-}
-
double flam3_create_temporal_filter(int numsteps, int filter_type, double filter_exp, double filter_width,
double **temporal_filter, double **temporal_deltas) {
diff --git a/flam3.c b/flam3.c
index 74a0c59..8adceeb 100644
--- a/flam3.c
+++ b/flam3.c
@@ -1061,7 +1061,6 @@ void clear_cp(flam3_genome *cp, int default_flag) {
cp->background[2] = 0.0;
cp->width = 100;
cp->height = 100;
- cp->spatial_oversample = 1;
cp->spatial_filter_radius = 0.5;
cp->zoom = 0.0;
cp->sample_density = 1;
@@ -1083,7 +1082,6 @@ void clear_cp(flam3_genome *cp, int default_flag) {
cp->background[1] = -1.0;
cp->background[2] = -1.0;
cp->zoom = 999999999;
- cp->spatial_oversample = -1;
cp->spatial_filter_radius = -1;
cp->nbatches = -1;
cp->ntemporal_samples = -1;
@@ -1304,8 +1302,6 @@ void flam3_apply_template(flam3_genome *cp, flam3_genome *templ) {
cp->background[2] = templ->background[2];
if (templ->zoom < 999999998)
cp->zoom = templ->zoom;
- if (templ->spatial_oversample > 0)
- cp->spatial_oversample = templ->spatial_oversample;
if (templ->spatial_filter_radius >= 0)
cp->spatial_filter_radius = templ->spatial_filter_radius;
if (templ->sample_density > 0)
@@ -1410,7 +1406,6 @@ void flam3_print(FILE *f, flam3_genome *cp, char *extra_attributes, int print_ed
fprintf(f, " zoom=\"%g\"", cp->zoom);
fprintf(f, " rotate=\"%g\"", cp->rotate);
- fprintf(f, " supersample=\"%d\"", cp->spatial_oversample);
fprintf(f, " filter=\"%g\"", cp->spatial_filter_radius);
/* Need to print the correct kernel to use */
diff --git a/flam3.h b/flam3.h
index de2ad07..4611196 100644
--- a/flam3.h
+++ b/flam3.h
@@ -469,7 +469,6 @@ typedef struct {
double gamma;
double highlight_power;
int width, height; /* of the final image */
- int spatial_oversample;
double center[2]; /* of camera */
double rot_center[2]; /* really the center */
double rotate; /* camera */
diff --git a/interpolation.c b/interpolation.c
index 78b798f..8a5c87b 100644
--- a/interpolation.c
+++ b/interpolation.c
@@ -424,7 +424,6 @@ void flam3_interpolate_n(flam3_genome *result, int ncp,
INTERP(hue_rotation);
INTERI(width);
INTERI(height);
- INTERI(spatial_oversample);
INTERP(center[0]);
INTERP(center[1]);
INTERP(rot_center[0]);
diff --git a/main.c b/main.c
index bfc0c7c..4c18336 100644
--- a/main.c
+++ b/main.c
@@ -33,7 +33,7 @@ const char *argp_program_version =
typedef struct {
bool verbose;
- unsigned int threads, bpc, quality, oversample;
+ unsigned int threads, bpc, quality;
float scale;
} render_arguments;
@@ -51,16 +51,6 @@ static error_t parse_render_opt (int key, char *arg,
break;
}
- case 'o': {
- int i = atoi (arg);
- if (i < 1) {
- argp_error (state, "Oversample must be >= 1");
- } else {
- arguments->oversample = i;
- }
- break;
- }
-
case 'q': {
int i = atoi (arg);
if (i < 1) {
@@ -126,7 +116,6 @@ static void do_render (const render_arguments * const arguments) {
genome->height *= arguments->scale;
genome->width *= arguments->scale;
genome->pixels_per_unit *= arguments->scale;
- genome->spatial_oversample = arguments->oversample;
flam3_frame f;
f.genomes = genome;
@@ -510,7 +499,6 @@ int main (int argc, char **argv) {
{"scale", 's', "factor", 0, "Scale image dimensions by factor (1.0)" },
{"bpc", 'b', "8|16", 0, "Bits per channel of output image (8)" },
{"quality", 'q', "num", 0, "Average samples per pixel (100)" },
- {"oversample", 'o', "num", 0, "Super-/Oversample image (1)" },
{"width", 'w', "pixels", 0, "Output image width" },
{"height", 'h', "pixels", 0, "Output image height" },
{ 0 },
@@ -527,7 +515,6 @@ int main (int argc, char **argv) {
.scale = 1.0,
.quality = 100,
.verbose = true,
- .oversample = 1,
};
argp_parse (&argp, argc, argv, 0, NULL, &arguments);
diff --git a/palettes.c b/palettes.c
index 53e99c1..1f891f0 100644
--- a/palettes.c
+++ b/palettes.c
@@ -359,7 +359,6 @@ static double try_colors(flam3_genome *g, int color_resolution) {
flam3_copy(&saved, g);
g->sample_density = 1;
- g->spatial_oversample = 1;
/* Scale the image so that the total number of pixels is ~10000 */
pixtotal = g->width * g->height;
@@ -424,7 +423,6 @@ static double try_colors(flam3_genome *g, int color_resolution) {
g->sample_density = saved.sample_density;
g->width = saved.width;
g->height = saved.height;
- g->spatial_oversample = saved.spatial_oversample;
g->pixels_per_unit = saved.pixels_per_unit;
g->nbatches = saved.nbatches;
g->ntemporal_samples = saved.ntemporal_samples;
diff --git a/parser.c b/parser.c
index 1738925..06ce22c 100644
--- a/parser.c
+++ b/parser.c
@@ -389,10 +389,6 @@ int parse_flame_element(xmlNode *flame_node, flam3_genome *loc_current_cp,
cp->rotate = flam3_atof(att_str);
} else if (!xmlStrcmp(cur_att->name, (const xmlChar *)"zoom")) {
cp->zoom = flam3_atof(att_str);
- } else if (!xmlStrcmp(cur_att->name, (const xmlChar *)"oversample")) {
- cp->spatial_oversample = flam3_atoi(att_str);
- } else if (!xmlStrcmp(cur_att->name, (const xmlChar *)"supersample")) {
- cp->spatial_oversample = flam3_atoi(att_str);
} else if (!xmlStrcmp(cur_att->name, (const xmlChar *)"filter")) {
cp->spatial_filter_radius = flam3_atof(att_str);
} else if (!xmlStrcmp(cur_att->name, (const xmlChar *)"filter_shape")) {
diff --git a/rect.c b/rect.c
index ed68f72..cb310a5 100644
--- a/rect.c
+++ b/rect.c
@@ -304,18 +304,15 @@ int render_rectangle(flam3_frame *spec, void *out,
long nbuckets;
int i, j, k, batch_num, temporal_sample_num;
double nsamples, batch_size;
- double *filter, *temporal_filter, *temporal_deltas, *batch_filter;
+ double *temporal_filter, *temporal_deltas, *batch_filter;
double ppux=0, ppuy=0;
int image_width, image_height; /* size of the image to produce */
int out_width;
- int filter_width=0;
int bytes_per_channel = spec->bytes_per_channel;
- int oversample;
double highpow;
int nbatches;
int ntemporal_samples;
flam3_palette dmap;
- int gutter_width;
double vibrancy = 0.0;
double gamma = 0.0;
int vib_gam_n = 0;
@@ -352,7 +349,6 @@ int render_rectangle(flam3_frame *spec, void *out,
/* interpolate and get a control point */
flam3_interpolate(spec->genomes, spec->ngenomes, spec->time, 0, &cp);
- oversample = cp.spatial_oversample;
highpow = cp.highlight_power;
nbatches = cp.nbatches;
ntemporal_samples = cp.ntemporal_samples;
@@ -362,11 +358,6 @@ int render_rectangle(flam3_frame *spec, void *out,
return(1);
}
- if (oversample < 1) {
- fprintf(stderr, "oversample must be positive, not %d.\n", oversample);
- return(1);
- }
-
/* Initialize the thread helper structures */
fth = (flam3_thread_helper *)calloc(spec->nthreads,sizeof(flam3_thread_helper));
for (i=0;i<spec->nthreads;i++)
@@ -387,17 +378,6 @@ int render_rectangle(flam3_frame *spec, void *out,
image_height = cp.height;
- /* Spatial Filter kernel creation */
- filter_width = flam3_create_spatial_filter(spec, field, &filter);
-
- /* handle error */
- if (filter_width<0) {
- fprintf(stderr,"flam3_create_spatial_filter returned error: aborting\n");
- return(1);
- }
-
- /* note we must free 'filter' at the end */
-
/* batch filter */
/* may want to revisit this at some point */
batch_filter = (double *) malloc(sizeof(double) * nbatches);
@@ -412,15 +392,9 @@ int render_rectangle(flam3_frame *spec, void *out,
&temporal_filter, &temporal_deltas);
- /*
- the number of additional rows of buckets we put at the edge so
- that the filter doesn't go off the edge
- */
- gutter_width = (filter_width - oversample) / 2;
-
/* Allocate the space required to render the image */
- fic.height = oversample * image_height + 2 * gutter_width;
- fic.width = oversample * image_width + 2 * gutter_width;
+ fic.height = image_height;
+ fic.width = image_width;
nbuckets = (long)fic.width * (long)fic.height;
@@ -484,7 +458,7 @@ int render_rectangle(flam3_frame *spec, void *out,
/* compute camera */
if (1) {
- double t0, t1, shift=0.0, corner0, corner1;
+ double shift=0.0, corner0, corner1;
double scale;
if (cp.sample_density <= 0.0) {
@@ -506,14 +480,12 @@ int render_rectangle(flam3_frame *spec, void *out,
case flam3_field_odd: shift = 0.5; break;
}
shift = shift / ppux;
- t0 = (double) gutter_width / (oversample * ppux);
- t1 = (double) gutter_width / (oversample * ppuy);
corner0 = cp.center[0] - image_width / ppux / 2.0;
corner1 = cp.center[1] - image_height / ppuy / 2.0;
- fic.bounds[0] = corner0 - t0;
- fic.bounds[1] = corner1 - t1 + shift;
- fic.bounds[2] = corner0 + image_width / ppux + t0;
- fic.bounds[3] = corner1 + image_height / ppuy + t1 + shift;
+ fic.bounds[0] = corner0;
+ fic.bounds[1] = corner1 + shift;
+ fic.bounds[2] = corner0 + image_width / ppux;
+ fic.bounds[3] = corner1 + image_height / ppuy + shift;
fic.size[0] = 1.0 / (fic.bounds[2] - fic.bounds[0]);
fic.size[1] = 1.0 / (fic.bounds[3] - fic.bounds[1]);
rotate_center ((double2) { cp.rot_center[0], cp.rot_center[1] },
@@ -613,14 +585,13 @@ int render_rectangle(flam3_frame *spec, void *out,
/* XXX: the original formula has a factor 268/256 in here, not sure why */
k1 = cp.contrast * cp.brightness * batch_filter[batch_num];
area = image_width * image_height / (ppux * ppuy);
- k2 = (oversample * oversample * nbatches) /
- (cp.contrast * area * sample_density * sumfilt);
+ k2 = nbatches / (cp.contrast * area * sample_density * sumfilt);
#if 0
printf("iw=%d,ih=%d,ppux=%f,ppuy=%f\n",image_width,image_height,ppux,ppuy);
printf("contrast=%f, brightness=%f, PREFILTER=%d, temporal_filter=%f\n",
cp.contrast, cp.brightness, PREFILTER_WHITE, temporal_filter[batch_num]);
- printf("oversample=%d, nbatches=%d, area = %f, WHITE_LEVEL=%d, sample_density=%f\n",
- oversample, nbatches, area, WHITE_LEVEL, sample_density);
+ printf("nbatches=%d, area = %f, WHITE_LEVEL=%d, sample_density=%f\n",
+ nbatches, area, WHITE_LEVEL, sample_density);
printf("k1=%f,k2=%15.12f\n",k1,k2);
#endif
@@ -672,17 +643,7 @@ int render_rectangle(flam3_frame *spec, void *out,
for (j = 0; j < image_height; j++) {
x = 0;
for (i = 0; i < image_width; i++) {
- int ii, jj;
- double4 t = (double4) { 0.0, 0.0, 0.0, 0.0 };
-
- for (ii = 0; ii < filter_width; ii++) {
- for (jj = 0; jj < filter_width; jj++) {
- const double k = filter[ii + jj * filter_width];
- const double4 ac = accumulate[x+ii + (y+jj)*fic.width];
-
- t += k * ac;
- }
- }
+ double4 t = accumulate[x + y * fic.width];
/* The old way, spatial filter first and then clip after gamma */
if (!spec->earlyclip) {
@@ -708,9 +669,9 @@ int render_rectangle(flam3_frame *spec, void *out,
assert (0);
}
- x += oversample;
+ x += 1;
}
- y += oversample;
+ y += 1;
}
}
@@ -721,7 +682,6 @@ int render_rectangle(flam3_frame *spec, void *out,
free(temporal_filter);
free(temporal_deltas);
free(batch_filter);
- free(filter);
free(buckets);
free(accumulate);
/* We have to clear the cps in fth first */