From owner-svn-ports-all@FreeBSD.ORG Fri Jun 20 15:46:30 2014 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 9E81DAF5; Fri, 20 Jun 2014 15:46:30 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 897E02E53; Fri, 20 Jun 2014 15:46:30 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s5KFkUEr077557; Fri, 20 Jun 2014 15:46:30 GMT (envelope-from danilo@svn.freebsd.org) Received: (from danilo@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s5KFkSai077532; Fri, 20 Jun 2014 15:46:28 GMT (envelope-from danilo@svn.freebsd.org) Message-Id: <201406201546.s5KFkSai077532@svn.freebsd.org> From: Danilo Egea Gondolfo Date: Fri, 20 Jun 2014 15:46:28 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r358594 - in head/graphics/pfstmo: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Jun 2014 15:46:30 -0000 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 - -.if defined(WITH_FFTW3F) -LIB_DEPENDS+= fftw3f:${PORTSDIR}/math/fftw3-float -.endif +USES= gmake pkgconfig compiler:openmp -.include +.include 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 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_levelgetCols(); + 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 + +-#include + #include + #include + #include +@@ -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 + #include + ++#include ++ + // 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= 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 ] [--phi ] + [--range ] [--lower ] [--upper ] + [--temporal-coherent] ++[--border ] + [--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 ] ++[--key ] [-k ] + + Set key value for the image (refer to paper for details). + Default value: 0.18, accepted range <0..1>. + .TP +-[--phi ] ++[--phi ] [-p ] + + Set phi value (refer to paper for details). + Default value: 1.0, accepted range >=0.0. + .TP +-[--range ] ++[--range ] [-r ] + + Set range size (refer to paper for details). + Default value: 8, accepted range >1. + .TP +-[--lower ] ++[--lower ] [-l ] + + Set lower scale size (refer to paper for details). + Default value: 1, accepted range >=1. + .TP +-[--upper ] ++[--upper ] [-u ] + + 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 ] [-b ] ++ ++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 + ++#include + #include + #include + #include +@@ -40,8 +41,9 @@ + #include + + #include ++#include + +-#include ++#include "tmo_reinhard02.h" + + using namespace std; + +@@ -61,6 +63,7 @@ + "\t[--key ] [--phi ] \n" + "\t[--range ] [--lower ] [--upper ] \n" + "\t[--temporal-coherent]\n" ++ "\t[--border ] \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 ***