Date: Fri, 20 Jun 2014 15:46:28 +0000 (UTC) From: Danilo Egea Gondolfo <danilo@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r358594 - in head/graphics/pfstmo: . files Message-ID: <201406201546.s5KFkSai077532@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: danilo Date: Fri Jun 20 15:46:27 2014 New Revision: 358594 URL: http://svnweb.freebsd.org/changeset/ports/358594 QAT: https://qat.redports.org/buildarchive/r358594/ Log: - Update from 1.2 to 1.5 - Add stage support PR: ports/191180 Submitted by: ii@any.com.ru Added: head/graphics/pfstmo/files/patch-configure (contents, props changed) head/graphics/pfstmo/files/patch-src-durand02-fastbilateral.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-fattal02-pde.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-fattal02-tmo_fattal02.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-mantiuk06-pfstmo_mantiuk06.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-mantiuk08-display_adaptive_tmo.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-mantiuk08-pfstmo_mantiuk08.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard02-approx.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.1 (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard02-tmo_reinhard02.cpp (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard02-tmo_reinhard02.h (contents, props changed) head/graphics/pfstmo/files/patch-src-reinhard05-pfstmo_reinhard05.cpp (contents, props changed) Modified: head/graphics/pfstmo/Makefile head/graphics/pfstmo/distinfo head/graphics/pfstmo/files/patch-src-mantiuk06-contrast_domain.cpp head/graphics/pfstmo/pkg-plist Modified: head/graphics/pfstmo/Makefile ============================================================================== --- head/graphics/pfstmo/Makefile Fri Jun 20 15:40:12 2014 (r358593) +++ head/graphics/pfstmo/Makefile Fri Jun 20 15:46:27 2014 (r358594) @@ -2,37 +2,27 @@ # $FreeBSD$ PORTNAME= pfstmo -PORTVERSION= 1.2 -PORTREVISION= 3 +PORTVERSION= 1.5 CATEGORIES= graphics -MASTER_SITES= SF/pfstools/${PORTNAME}/${PORTVERSION} +MASTER_SITES= SF +MASTER_SITE_SUBDIR= pfstools/${PORTNAME}/${PORTVERSION} MAINTAINER= ii@any.com.ru COMMENT= Tone mapping operators -LIB_DEPENDS= pfs-1.2:${PORTSDIR}/graphics/pfstools +LIB_DEPENDS= libpfs-1.2.so:${PORTSDIR}/graphics/pfstools \ + libfftw3.so:${PORTSDIR}/math/fftw3 \ + libfftw3f.so:${PORTSDIR}/math/fftw3-float \ + libgsl.so:${PORTSDIR}/math/gsl PFS_CPPFLAGS= -I${LOCALBASE}/include PFS_LDFLAGS= -L${LOCALBASE}/lib -USES= pkgconfig gmake GNU_CONFIGURE= yes -CPPFLAGS+= ${PFS_CPPFLAGS} -LDFLAGS+= ${PFS_LDFLAGS} +CONFIGURE_TARGET= --build=${MACHINE_ARCH}-portbld-freebsd${OSREL} +CONFIGURE_ENV+= CPPFLAGS="${PFS_CPPFLAGS} ${DEBUG_FLAGS}" \ + LDFLAGS="${PFS_LDFLAGS}" -MAN1= pfstmo_pattanaik00.1 \ - pfstmo_reinhard05.1 \ - pfstmo_reinhard02.1 \ - pfstmo_durand02.1 \ - pfstmo_drago03.1 \ - pfstmo_mantiuk06.1 \ - pfstmo_fattal02.1 - -NO_STAGE= yes -.include <bsd.port.pre.mk> - -.if defined(WITH_FFTW3F) -LIB_DEPENDS+= fftw3f:${PORTSDIR}/math/fftw3-float -.endif +USES= gmake pkgconfig compiler:openmp -.include <bsd.port.post.mk> +.include <bsd.port.mk> Modified: head/graphics/pfstmo/distinfo ============================================================================== --- head/graphics/pfstmo/distinfo Fri Jun 20 15:40:12 2014 (r358593) +++ head/graphics/pfstmo/distinfo Fri Jun 20 15:46:27 2014 (r358594) @@ -1,2 +1,2 @@ -SHA256 (pfstmo-1.2.tar.gz) = 796555f3c60fc8f2cb56e4288dc035aa3f0a6b8812a7388ce3c002103c2e5aa1 -SIZE (pfstmo-1.2.tar.gz) = 384037 +SHA256 (pfstmo-1.5.tar.gz) = 614599faecddb925cf51458f0d111f42bb624d91a9181181b63c81cbb9cc8ac9 +SIZE (pfstmo-1.5.tar.gz) = 461375 Added: head/graphics/pfstmo/files/patch-configure ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-configure Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,11 @@ +--- configure.orig 2012-06-25 13:03:44.000000000 +0000 ++++ configure 2014-06-18 15:31:54.008958029 +0000 +@@ -14272,7 +14272,7 @@ + + + +-#CXXFLAGS="-O3 -funroll-loops -fstrength-reduce -fschedule-insns2 -felide-constructors -frerun-loop-opt -fexceptions -fno-strict-aliasing -fexpensive-optimizations -ffast-math -pipe" ++#CXXFLAGS="-O3 -funroll-loops -fstrength-reduce -felide-constructors -fexceptions -fno-strict-aliasing -fexpensive-optimizations -ffast-math -pipe" + enable_fftw3f="yes" + + Added: head/graphics/pfstmo/files/patch-src-durand02-fastbilateral.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-durand02-fastbilateral.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,27 @@ +--- src/durand02/fastbilateral.cpp.orig 2008-09-09 18:10:49.000000000 +0000 ++++ src/durand02/fastbilateral.cpp 2014-06-18 15:29:52.288954426 +0000 +@@ -66,11 +66,11 @@ + { + int ox = nx; + int oy = ny/2 + 1; // saves half of the data +- const int osize = ox * oy; +- source = (float*)fftwf_malloc(sizeof(float) * nx * 2 * (ny/2+1) ); ++ const size_t osize = ox * oy; ++ source = (float*)fftwf_malloc(sizeof(float) * (size_t)nx * 2 * ((size_t)ny/2+1) ); + freq = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex) * osize); +-// if( source == NULL || freq == NULL ) +- //TODO: throw exception ++ if( source == NULL || freq == NULL ) ++ throw std::bad_alloc(); + fplan_fw = fftwf_plan_dft_r2c_2d(nx, ny, source, freq, FFTW_ESTIMATE); + fplan_in = fftwf_plan_dft_c2r_2d(nx, ny, freq, source, FFTW_ESTIMATE); + } +@@ -100,7 +100,7 @@ + for( x=0 ; x<ox/2 ; x++ ) + for( y=0 ; y<oy ; y++ ) + { +- float d2 = x*x + y*y; ++ float d2 = (float)x*x + (float)y*y; + float kernel = exp( -d2 / sig2 ); + + freq[x*oy+y][0] *= kernel; Added: head/graphics/pfstmo/files/patch-src-fattal02-pde.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-fattal02-pde.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,185 @@ +--- src/fattal02/pde.cpp.orig 2012-06-21 13:27:13.000000000 +0000 ++++ src/fattal02/pde.cpp 2014-06-18 15:29:52.288954426 +0000 +@@ -70,15 +70,15 @@ + // precision + #define EPS 1.0e-12 + +-void linbcg(unsigned long n, float b[], float x[], int itol, float tol, ++static void linbcg(unsigned long n, float b[], float x[], int itol, float tol, + int itmax, int *iter, float *err); + +-inline float max( float a, float b ) ++static inline float max( float a, float b ) + { + return a > b ? a : b; + } + +-inline float min( float a, float b ) ++static inline float min( float a, float b ) + { + return a < b ? a : b; + } +@@ -109,7 +109,7 @@ + // Full Multigrid Algorithm for solving partial differential equations + ////////////////////////////////////////////////////////////////////// + +-void restrict( const pfstmo::Array2D *in, pfstmo::Array2D *out ) ++static void restrict( const pfstmo::Array2D *in, pfstmo::Array2D *out ) + { + const float inRows = in->getRows(); + const float inCols = in->getCols(); +@@ -172,7 +172,7 @@ + // } + + +-void prolongate( const pfstmo::Array2D *in, pfstmo::Array2D *out ) ++static void prolongate( const pfstmo::Array2D *in, pfstmo::Array2D *out ) + { + float dx = (float)in->getCols() / (float)out->getCols(); + float dy = (float)in->getRows() / (float)out->getRows(); +@@ -216,7 +216,7 @@ + } + + // to_level<from_level, from_size<to_size +-void prolongate_old( pfstmo::Array2D *F, pfstmo::Array2D *T ) ++static void prolongate_old( pfstmo::Array2D *F, pfstmo::Array2D *T ) + { + // DEBUG_STR << "prolongate" << endl; + +@@ -277,7 +277,7 @@ + } + } + +-void exact_sollution( pfstmo::Array2D *F, pfstmo::Array2D *U ) ++static void exact_sollution( pfstmo::Array2D *F, pfstmo::Array2D *U ) + { + // DEBUG_STR << "exact sollution" << endl; + +@@ -314,13 +314,13 @@ + + static int rows, cols; + +-inline int idx( int r, int c ) ++static inline int idx( int r, int c ) + { + return r*cols+c+1; + } + + // smooth u using f at level +-void smooth( pfstmo::Array2D *U, pfstmo::Array2D *F ) ++static void smooth( pfstmo::Array2D *U, pfstmo::Array2D *F ) + { + // DEBUG_STR << "smooth" << endl; + +@@ -369,7 +369,7 @@ + // } + } + +-void calculate_defect( pfstmo::Array2D *D, pfstmo::Array2D *U, pfstmo::Array2D *F ) ++static void calculate_defect( pfstmo::Array2D *D, pfstmo::Array2D *U, pfstmo::Array2D *F ) + { + // DEBUG_STR << "calculate defect" << endl; + +@@ -395,7 +395,7 @@ + + } + +-void add_correction( pfstmo::Array2D *U, pfstmo::Array2D *C ) ++static void add_correction( pfstmo::Array2D *U, pfstmo::Array2D *C ) + { + // DEBUG_STR << "add_correction" << endl; + +@@ -646,7 +646,7 @@ + + //#define EPS 1.0e-14 + +-void asolve(unsigned long n, float b[], float x[], int itrnsp) ++static void asolve(float b[], float x[]) + { + for( int r = 0; r < rows; r++ ) + for( int c = 0; c < cols; c++ ) { +@@ -654,7 +654,7 @@ + } + } + +-void atimes(unsigned long n, float x[], float res[], int itrnsp) ++static void atimes(float x[], float res[]) + { + for( int r = 1; r < rows-1; r++ ) + for( int c = 1; c < cols-1; c++ ) { +@@ -682,7 +682,7 @@ + - 2*x[idx(rows-1,cols-1)]; + } + +-float snrm(unsigned long n, float sx[], int itol) ++static float snrm(unsigned long n, float sx[], int itol) + { + unsigned long i,isamax; + float ans; +@@ -704,7 +704,7 @@ + * Biconjugate Gradient Method + * from Numerical Recipes in C + */ +-void linbcg(unsigned long n, float b[], float x[], int itol, float tol, int itmax, int *iter, float *err) ++static void linbcg(unsigned long n, float b[], float x[], int itol, float tol, int itmax, int *iter, float *err) + { + unsigned long j; + float ak,akden,bk,bkden,bknum,bnrm,dxnrm,xnrm,zm1nrm,znrm; +@@ -718,30 +718,30 @@ + zz=new float[n+1]; + + *iter=0; +- atimes(n,x,r,0); ++ atimes(x,r); + for (j=1;j<=n;j++) { + r[j]=b[j]-r[j]; + rr[j]=r[j]; + } +- atimes(n,r,rr,0); // minimum residual ++ atimes(r,rr); // minimum residual + znrm=1.0; + if (itol == 1) bnrm=snrm(n,b,itol); + else if (itol == 2) { +- asolve(n,b,z,0); ++ asolve(b,z); + bnrm=snrm(n,z,itol); + } + else if (itol == 3 || itol == 4) { +- asolve(n,b,z,0); ++ asolve(b,z); + bnrm=snrm(n,z,itol); +- asolve(n,r,z,0); ++ asolve(r,z); + znrm=snrm(n,z,itol); + } else printf("illegal itol in linbcg"); +- asolve(n,r,z,0); ++ asolve(r,z); + + while (*iter <= itmax) { + ++(*iter); + zm1nrm=znrm; +- asolve(n,rr,zz,1); ++ asolve(rr,zz); + for (bknum=0.0,j=1;j<=n;j++) bknum += z[j]*rr[j]; + if (*iter == 1) { + for (j=1;j<=n;j++) { +@@ -757,16 +757,16 @@ + } + } + bkden=bknum; +- atimes(n,p,z,0); ++ atimes(p,z); + for (akden=0.0,j=1;j<=n;j++) akden += z[j]*pp[j]; + ak=bknum/akden; +- atimes(n,pp,zz,1); ++ atimes(pp,zz); + for (j=1;j<=n;j++) { + x[j] += ak*p[j]; + r[j] -= ak*z[j]; + rr[j] -= ak*zz[j]; + } +- asolve(n,r,z,0); ++ asolve(r,z); + if (itol == 1 || itol == 2) { + znrm=1.0; + *err=snrm(n,r,itol)/bnrm; Added: head/graphics/pfstmo/files/patch-src-fattal02-tmo_fattal02.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-fattal02-tmo_fattal02.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,10 @@ +--- src/fattal02/tmo_fattal02.cpp.orig 2012-06-22 10:59:15.000000000 +0000 ++++ src/fattal02/tmo_fattal02.cpp 2014-06-18 15:29:52.298957047 +0000 +@@ -105,7 +105,6 @@ + { + int width = I->getCols(); + int height = I->getRows(); +- int size = width*height; + int x,y; + + pfstmo::Array2D* T = new pfstmo::Array2D(width,height); Modified: head/graphics/pfstmo/files/patch-src-mantiuk06-contrast_domain.cpp ============================================================================== --- head/graphics/pfstmo/files/patch-src-mantiuk06-contrast_domain.cpp Fri Jun 20 15:40:12 2014 (r358593) +++ head/graphics/pfstmo/files/patch-src-mantiuk06-contrast_domain.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -1,16 +1,263 @@ ---- src/mantiuk06/contrast_domain.cpp.orig 2008-03-12 09:20:28.000000000 +0000 -+++ src/mantiuk06/contrast_domain.cpp 2008-03-12 09:27:16.000000000 +0000 -@@ -58,6 +58,13 @@ - #define LOOKUP_W_TO_R 107 - - -+#if defined(__FreeBSD__) -+static inline float exp10f(float x) { -+ return powf(10.,x); -+} -+#endif -+ -+ - static void contrast_equalization( pyramid_t *pp, const float contrastFactor ); +--- src/mantiuk06/contrast_domain.cpp.orig 2012-04-22 13:14:14.000000000 +0000 ++++ src/mantiuk06/contrast_domain.cpp 2014-06-18 15:29:52.298957047 +0000 +@@ -74,8 +74,6 @@ + static void matrix_copy(const int n, const float* const a, float* const b); + static void matrix_multiply_const(const int n, float* const a, const float val); + static void matrix_divide(const int n, const float* const a, float* const b); +-static float* matrix_alloc(const int size); +-static void matrix_free(float* m); + static float matrix_DotProduct(const int n, const float* const a, const float* const b); + static void matrix_zero(const int n, float* const m); + static void calculate_and_add_divergence(const int rows, const int cols, const float* const Gx, const float* const Gy, float* const divG); +@@ -317,24 +315,6 @@ + } - static void transform_to_luminance(pyramid_t* pyramid, float* const x, progress_callback progress_cb, const bool bcg); + +-// alloc memory for the float table +-static inline float* matrix_alloc(int size){ +- +- float* m = (float*)malloc(sizeof(float)*size); +- if(m == NULL){ +- fprintf(stderr, "ERROR: malloc in matrix_alloc() (size:%d)", size); +- exit(155); +- } +- +- return m; +-} +- +-// free memory for matrix +-static inline void matrix_free(float* m){ +- if(m != NULL) +- free(m); +-} +- + // multiply vector by vector (each vector should have one dimension equal to 1) + static inline float matrix_DotProduct(const int n, const float* const a, const float* const b){ + float val = 0; +@@ -382,7 +362,7 @@ + // temp is a temporary matrix of size (cols, rows), assumed to already be allocated + static void pyramid_calculate_divergence_sum(pyramid_t* pyramid, float* divG_sum) + { +- float* temp = matrix_alloc(pyramid->rows*pyramid->cols); ++ float* temp = new float[pyramid->rows*pyramid->cols]; + + // Find the coarsest pyramid, and the number of pyramid levels + int levels = 1; +@@ -426,7 +406,7 @@ + pyramid = pyramid->prev; + } + +- matrix_free(temp); ++ delete[] temp; + } + + // calculate scale factors (Cx,Cy) for gradients (Gx,Gy) +@@ -495,20 +475,10 @@ + { + while (pyramid) + { +- if(pyramid->Gx != NULL) +- { +- free(pyramid->Gx); +- pyramid->Gx = NULL; +- } +- if(pyramid->Gy != NULL) +- { +- free(pyramid->Gy); +- pyramid->Gy = NULL; +- } ++ delete[] pyramid->Gx; ++ delete[] pyramid->Gy; + pyramid_t* const next = pyramid->next; +- pyramid->prev = NULL; +- pyramid->next = NULL; +- free(pyramid); ++ delete pyramid; + pyramid = next; + } + } +@@ -523,19 +493,14 @@ + + while(rows >= PYRAMID_MIN_PIXELS && cols >= PYRAMID_MIN_PIXELS) + { +- level = (pyramid_t *) malloc(sizeof(pyramid_t)); +- if(level == NULL) +- { +- fprintf(stderr, "ERROR: malloc in pyramid_alloc() (size:%d)", (int)sizeof(pyramid_t)); +- exit(155); +- } ++ level = new pyramid_t; + memset( level, 0, sizeof(pyramid_t) ); + + level->rows = rows; + level->cols = cols; + const int size = level->rows * level->cols; +- level->Gx = matrix_alloc(size); +- level->Gy = matrix_alloc(size); ++ level->Gx = new float[size]; ++ level->Gy = new float[size]; + + level->prev = prev; + if(prev != NULL) +@@ -598,7 +563,7 @@ + // lum_temp gets overwritten! + static void pyramid_calculate_gradient(pyramid_t* pyramid, float* lum_temp) + { +- float* temp = matrix_alloc((pyramid->rows/2)*(pyramid->cols/2)); ++ float* temp = new float[(pyramid->rows/2)*(pyramid->cols/2)]; + float* const temp_saved = temp; + + calculate_gradient(pyramid->cols, pyramid->rows, lum_temp, pyramid->Gx, pyramid->Gy); +@@ -626,7 +591,7 @@ + pyramid = pyramid->next; + } + +- matrix_free(temp_saved); ++ delete[] temp_saved; + } + + +@@ -658,13 +623,13 @@ + const int n = rows*cols; + const float tol2 = tol*tol; + +- float* const z = matrix_alloc(n); +- float* const zz = matrix_alloc(n); +- float* const p = matrix_alloc(n); +- float* const pp = matrix_alloc(n); +- float* const r = matrix_alloc(n); +- float* const rr = matrix_alloc(n); +- float* const x_save = matrix_alloc(n); ++ float* const z = new float[n]; ++ float* const zz = new float[n]; ++ float* const p = new float[n]; ++ float* const pp = new float[n]; ++ float* const r = new float[n]; ++ float* const rr = new float[n]; ++ float* const x_save = new float[n]; + + const float bnrm2 = matrix_DotProduct(n, b, b); + +@@ -799,13 +764,13 @@ + progress_cb(100); + + +- matrix_free(x_save); +- matrix_free(p); +- matrix_free(pp); +- matrix_free(z); +- matrix_free(zz); +- matrix_free(r); +- matrix_free(rr); ++ delete[] x_save; ++ delete[] p; ++ delete[] pp; ++ delete[] z; ++ delete[] zz; ++ delete[] r; ++ delete[] rr; + } + + +@@ -818,10 +783,10 @@ + const int n = rows*cols; + const float tol2 = tol*tol; + +- float* const x_save = matrix_alloc(n); +- float* const r = matrix_alloc(n); +- float* const p = matrix_alloc(n); +- float* const Ap = matrix_alloc(n); ++ float* const x_save = new float[n]; ++ float* const r = new float[n]; ++ float* const p = new float[n]; ++ float* const Ap = new float[n]; + + // bnrm2 = ||b|| + const float bnrm2 = matrix_DotProduct(n, b, b); +@@ -943,10 +908,10 @@ + else if (progress_cb != NULL) + progress_cb(100); + +- matrix_free(x_save); +- matrix_free(p); +- matrix_free(Ap); +- matrix_free(r); ++ delete[] x_save; ++ delete[] p; ++ delete[] Ap; ++ delete[] r; + } + + +@@ -1070,7 +1035,7 @@ + pyramid_calculate_scale_factor(pp, pC); // calculate (Cx,Cy) + pyramid_scale_gradient(pp, pC); // scale small gradients by (Cx,Cy); + +- float* b = matrix_alloc(pp->cols * pp->rows); ++ float* b = new float[pp->cols * pp->rows]; + pyramid_calculate_divergence_sum(pp, b); // calculate the sum of divergences (equal to b) + + // calculate luminances from gradients +@@ -1079,7 +1044,7 @@ + else + lincg(pp, pC, b, x, itmax, tol, progress_cb); + +- matrix_free(b); ++ delete[] b; + pyramid_free(pC); + } + +@@ -1121,12 +1086,7 @@ + } + + // Allocate memory +- struct hist_data* hist = (struct hist_data*) malloc(sizeof(struct hist_data) * total_pixels); +- if (hist == NULL) +- { +- fprintf(stderr, "ERROR: malloc in contrast_equalization() (size:%d)", (int)sizeof(struct hist_data) * total_pixels); +- exit(155); +- } ++ struct hist_data* hist = new hist_data[total_pixels]; + + // Build histogram info + l = pp; +@@ -1175,7 +1135,7 @@ + l = l->next; + } + +- free(hist); ++ delete[] hist; + } + + +@@ -1211,10 +1171,10 @@ + } + + pyramid_t* pp = pyramid_allocate(c,r); // create pyramid +- float* tY = matrix_alloc(n); ++ float* tY = new float[n]; + matrix_copy(n, Y, tY); // copy Y to tY + pyramid_calculate_gradient(pp,tY); // calculate gradients for pyramid, destroys tY +- matrix_free(tY); ++ delete[] tY; + pyramid_transform_to_R(pp); // transform gradients to R + + /* Contrast map */ +@@ -1228,7 +1188,7 @@ + pyramid_free(pp); + + /* Renormalize luminance */ +- float* temp = matrix_alloc(n); ++ float* temp = new float[n]; + + matrix_copy(n, Y, temp); // copy Y to temp + qsort(temp, n, sizeof(float), sort_float); // sort temp in ascending order +@@ -1244,7 +1204,7 @@ + delta = trim - floorf(trim); + const float l_max = temp[(int)floorf(trim)] * delta + temp[(int)ceilf(trim)] * (1.0f-delta); + +- matrix_free(temp); ++ delete[] temp; + + const float disp_dyn_range = 2.3f; + #pragma omp parallel for schedule(static) Added: head/graphics/pfstmo/files/patch-src-mantiuk06-pfstmo_mantiuk06.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-mantiuk06-pfstmo_mantiuk06.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,17 @@ +--- src/mantiuk06/pfstmo_mantiuk06.cpp.orig 2009-09-02 01:11:39.000000000 +0000 ++++ src/mantiuk06/pfstmo_mantiuk06.cpp 2014-06-18 15:29:52.298957047 +0000 +@@ -219,6 +219,14 @@ + try { + tmo_mantiuk06( argc, argv ); + } ++ catch (std::bad_alloc ex) { ++ fprintf(stderr, PROG_NAME " error: out of memory\n"); ++ return EXIT_FAILURE; ++ } ++ catch (std::exception ex) { ++ fprintf(stderr, PROG_NAME " error: %s\n", ex.what()); ++ return EXIT_FAILURE; ++ } + catch( pfs::Exception ex ) { + fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); + return EXIT_FAILURE; Added: head/graphics/pfstmo/files/patch-src-mantiuk08-display_adaptive_tmo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-mantiuk08-display_adaptive_tmo.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,20 @@ +--- src/mantiuk08/display_adaptive_tmo.cpp.orig 2012-06-25 13:03:28.000000000 +0000 ++++ src/mantiuk08/display_adaptive_tmo.cpp 2014-06-18 15:29:52.308951834 +0000 +@@ -201,7 +201,7 @@ + + }; + +-#define PFSEOL "\x0a" ++/*#define PFSEOL "\x0a" + static void dumpPFS( const char *fileName, const int width, const int height, float *data, const char *channelName ) + { + FILE *fh = fopen( fileName, "wb" ); +@@ -216,7 +216,7 @@ + } + + fclose( fh ); +-} ++}*/ + + + void compute_gaussian_level( const int width, const int height, const pfstmo::Array2D& in, pfstmo::Array2D& out, int level, pfstmo::Array2D& temp ) Added: head/graphics/pfstmo/files/patch-src-mantiuk08-pfstmo_mantiuk08.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-mantiuk08-pfstmo_mantiuk08.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,25 @@ +--- src/mantiuk08/pfstmo_mantiuk08.cpp.orig 2012-06-25 13:03:28.000000000 +0000 ++++ src/mantiuk08/pfstmo_mantiuk08.cpp 2014-06-18 15:29:52.308951834 +0000 +@@ -31,7 +31,6 @@ + + #include <config.h> + +-#include <iostream> + #include <stdio.h> + #include <stdlib.h> + #include <math.h> +@@ -356,6 +355,14 @@ + try { + tmo_mantiuk08( argc, argv ); + } ++ catch (std::bad_alloc ex) { ++ fprintf(stderr, PROG_NAME " error: out of memory\n"); ++ return EXIT_FAILURE; ++ } ++ catch (std::exception ex) { ++ fprintf(stderr, PROG_NAME " error: %s\n", ex.what()); ++ return EXIT_FAILURE; ++ } + catch( pfs::Exception ex ) { + fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); + return EXIT_FAILURE; Added: head/graphics/pfstmo/files/patch-src-reinhard02-approx.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-reinhard02-approx.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,223 @@ +--- src/reinhard02/approx.cpp.orig 2007-06-14 16:41:30.000000000 +0000 ++++ src/reinhard02/approx.cpp 2014-06-18 15:29:52.308951834 +0000 +@@ -17,36 +17,36 @@ + #include <stdio.h> + #include <math.h> + ++#include <pfstmo.h> ++ + // interpolated version of approximation (always use this one!) (:krawczyk) + #define INTERPOLATED + +-extern double **luminance; +-int ImageWidth, ImageHeight; ++extern pfstmo::Array2D *lum; ++extern int width, height; + +-double ***Pyramid; +-int PyramidHeight; +-int PyramidWidth0; ++int PyramidHeight; + +-void build_pyramid( double **luminance, int ImageWidth, int ImageHeight ); +-double V1( int x, int y, int level ); ++static float ***Pyramid; ++static int PyramidWidth0; + +-int div2( const unsigned int n ) ++static int div2( const unsigned int n ) + { + const int q = n/2; + return(2*q < n ? q + 1 : q); + } + +-double pyramid_lookup( int x, int y, int level ) ++static float pyramid_lookup( int x, int y, int level ) + /* PRE: */ + { + int n, s; + + /* Level 0 is a special case, the value is just the image */ + if (level == 0) { +- if ( (x < 0) || (y < 0) || (x >= ImageWidth) || (y >= ImageHeight) ) ++ if ( (x < 0) || (y < 0) || (x >= width) || (y >= height) ) + return(0.0); + else +- return(luminance[y][x]); ++ return((*lum)(x,y)); + } + + /* Compute the size of the slice */ +@@ -58,25 +58,24 @@ + //y = y >> level; + + if ( (x < 0) || (y < 0) || (x >= s) || (y >= s) ) +- return(0.0); ++ return(0.0f); + else + return(Pyramid[level][y][x]); + } + +-void build_pyramid( double **luminance, int image_width, int image_height ) ++void build_pyramid() + { + int k; + int x, y; + int i, j; +- int width, height; + int max_dim; +- int pyramid_height; +- double sum = 0; ++ int pyramid_width; ++ double sum = 0.f; + +- double a = 0.4; +- double b = 0.25; +- double c = b - a/2; +- double w[5]; ++ float a = 0.4f; ++ float b = 0.25f; ++ float c = b - a/2.f; ++ float w[5]; + + /* Compute the "filter kernel" */ + w[0] = c; +@@ -90,50 +89,35 @@ + /* For simplicity, the first level is padded to a square whose side is a */ + /* power of two. */ + +- ImageWidth = image_width; +- ImageHeight = image_height; +- + /* Compute the size of the Pyramid array */ +- max_dim = (ImageHeight > ImageWidth ? ImageHeight : ImageWidth); +- PyramidHeight = (int) floor(log(max_dim - 0.5)/log(2)) + 1; ++ max_dim = (height > width ? height : width); ++ PyramidHeight = (int)floorf(logf(max_dim - 0.5f)/logf(2)) + 1; + + /* Compute the dimensions of the first level */ +- width = 1 << (PyramidHeight - 1); +- PyramidWidth0 = width; ++ pyramid_width = 1 << (PyramidHeight - 1); ++ PyramidWidth0 = pyramid_width; + + // fprintf(stderr, "max_dim %d height %d\n", max_dim, PyramidHeight); + + /* Allocate the outer Pyramid array */ +- Pyramid = (double***) calloc(PyramidHeight, sizeof(double**)); +- if (!Pyramid) { +- fprintf(stderr, "Unable to allocate pyramid array.\n"); +- exit(1); +- } ++ Pyramid = new float**[PyramidHeight]; + + /* Allocate and assign the Pyramid slices */ + k = 0; + +- while (width) { ++ while (pyramid_width) { + + // fprintf(stderr, "level %d, width = %d\n", k, width); + + /* Allocate the slice */ +- Pyramid[k] = (double**) calloc(width, sizeof(double*)); +- if (!Pyramid[k]) { +- fprintf(stderr, "Unable to allocate pyramid array.\n"); +- exit(1); +- } +- for (y = 0; y < width; y++) { +- Pyramid[k][y] = (double*) calloc(width, sizeof(double)); +- if (!Pyramid[k][y]) { +- fprintf(stderr, "Unable to allocate pyramid array.\n"); +- exit(1); +- } ++ Pyramid[k] = new float*[pyramid_width]; ++ for (y = 0; y < pyramid_width; y++) { ++ Pyramid[k][y] = new float[pyramid_width]; + } + + /* Compute the values in the slice */ +- for (y = 0; y < width; y++) { +- for (x = 0; x < width; x++) { ++ for (y = 0; y < pyramid_width; y++) { ++ for (x = 0; x < pyramid_width; x++) { + + sum = 0; + for (i = 0; i < 5; i++) { +@@ -146,7 +130,7 @@ + } + + /* compute the width of the next slice */ +- width /= 2; ++ pyramid_width /= 2; + k++; + } + } +@@ -154,27 +138,27 @@ + void clean_pyramid() + { + int k=0; +- int width = PyramidWidth0; +- while(width) ++ int pyramid_width = PyramidWidth0; ++ while(pyramid_width) + { +- for( int y=0 ; y<width ; y++ ) +- free(Pyramid[k][y]); +- free(Pyramid[k]); ++ for( int y=0 ; y<pyramid_width ; y++ ) ++ delete[] Pyramid[k][y]; ++ delete[] Pyramid[k]; + k++; +- width /= 2; ++ pyramid_width /= 2; + } +- free(Pyramid); ++ delete[] Pyramid; + } + + #ifndef INTERPOLATED +-double V1( int x, int y, int level ) ++float V1( int x, int y, int level ) + /* PRE: */ + { + int n, s; + + /* Level 0 is a special case, the value is just the image */ + if (level <= 0) +- return(luminance[y][x]); ++ return((*lum)(x,y)); + + /* Compute the size of the slice */ + +@@ -184,16 +168,16 @@ + return(Pyramid[level-1][y][x]); + } + #else +-double V1( int x, int y, int level ) ++float V1( int x, int y, int level ) + /* PRE: */ + { + int x0, y0; + int l, size; +- double s, t; ++ float s, t; + + /* Level 0 is a special case, the value is just the image */ + if (level == 0) +- return(luminance[y][x]); ++ return((*lum)(x,y)); + + /* Compute the size of the slice */ + l = 1 << level; +@@ -204,8 +188,8 @@ + x0 = (x0 >= size ? size - 1 : x0); + y0 = (y0 >= size ? size - 1 : y0); + +- s = (double)(x - x0*l)/(double)l; +- t = (double)(y - y0*l)/(double)l; ++ s = (float)(x - x0*l)/(float)l; ++ t = (float)(y - y0*l)/(float)l; + + level--; + Added: head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.1 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.1 Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,63 @@ +--- src/reinhard02/pfstmo_reinhard02.1.orig 2007-06-14 16:41:30.000000000 +0000 ++++ src/reinhard02/pfstmo_reinhard02.1 2014-06-18 15:29:52.318951701 +0000 +@@ -6,6 +6,7 @@ + [--scales] [--key <val>] [--phi <val>] + [--range <val>] [--lower <val>] [--upper <val>] + [--temporal-coherent] ++[--border <val>] + [--verbose] [--help] + .SH DESCRIPTION + This command implements a tone mapping operator as described in: +@@ -17,32 +18,32 @@ + According to the paper, results of this TMO require gamma correction. + .SH OPTIONS + .TP +-[--scales] ++[--scales] [-s] + + Use scales to calculate local adaptation. That means: use local + version of this operator. By default, global version is used. + .TP +-[--key <val>] ++[--key <val>] [-k <val>] + + Set key value for the image (refer to paper for details). + Default value: 0.18, accepted range <0..1>. + .TP +-[--phi <val>] ++[--phi <val>] [-p <val>] + + Set phi value (refer to paper for details). + Default value: 1.0, accepted range >=0.0. + .TP +-[--range <val>] ++[--range <val>] [-r <val>] + + Set range size (refer to paper for details). + Default value: 8, accepted range >1. + .TP +-[--lower <val>] ++[--lower <val>] [-l <val>] + + Set lower scale size (refer to paper for details). + Default value: 1, accepted range >=1. + .TP +-[--upper <val>] ++[--upper <val>] [-u <val>] + + Set upper scale size (refer to paper for details). + Default value: 43, accepted range >=1. +@@ -54,6 +55,13 @@ + luminance value can change at most by 1% between two consecutive + frames. + .TP ++[--border <val>] [-b <val>] ++ ++Use border mechanism with specified relative border width. ++Actual border size will be calculated as the minimal size of the image ++(width or height) multiplied on relative border width. ++Default value: 0 (don't use border mechanism), accepted range: 0 >= b < 0.5. ++.TP + --verbose + + Print additional information during program execution. Added: head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/pfstmo/files/patch-src-reinhard02-pfstmo_reinhard02.cpp Fri Jun 20 15:46:27 2014 (r358594) @@ -0,0 +1,142 @@ +--- src/reinhard02/pfstmo_reinhard02.cpp.orig 2008-09-04 12:46:49.000000000 +0000 ++++ src/reinhard02/pfstmo_reinhard02.cpp 2014-06-18 15:29:52.318951701 +0000 +@@ -33,6 +33,7 @@ + + #include <config.h> + ++#include <exception> + #include <iostream> + #include <stdio.h> + #include <stdlib.h> +@@ -40,8 +41,9 @@ + #include <math.h> + + #include <pfs.h> ++#include <pfstmo.h> + +-#include <tmo_reinhard02.h> ++#include "tmo_reinhard02.h" + + using namespace std; + +@@ -61,6 +63,7 @@ + "\t[--key <val>] [--phi <val>] \n" + "\t[--range <val>] [--lower <val>] [--upper <val>] \n" + "\t[--temporal-coherent]\n" ++ "\t[--border <val>] \n" + "\t[--verbose] [--help] \n" + "See man page for more information.\n" ); + } +@@ -77,6 +80,7 @@ + int high = 43; + bool use_scales = false; + bool temporal_coherent = false; ++ float border = 0.f; + + static struct option cmdLineOptions[] = { + { "help", no_argument, NULL, 'h' }, +@@ -88,12 +92,13 @@ + { "lower", required_argument, NULL, 'l' }, + { "upper", required_argument, NULL, 'u' }, + { "temporal-coherent", no_argument, NULL, 't' }, ++ { "border", required_argument, NULL, 'b' }, + { NULL, 0, NULL, 0 } + }; + + int optionIndex = 0; + while( 1 ) { +- int c = getopt_long (argc, argv, "hvsk:p:r:l:u:t", cmdLineOptions, &optionIndex); ++ int c = getopt_long (argc, argv, "hvsk:p:r:l:u:tb:", cmdLineOptions, &optionIndex); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406201546.s5KFkSai077532>