IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 19122


Ignore:
Timestamp:
Aug 18, 2008, 2:44:42 PM (18 years ago)
Author:
Paul Price
Message:

Need to put mutex locks on the parent images when convolving, since they are common across threads, and making a subimage involves adding to a 'children' array.

Location:
trunk/psModules/src/imcombine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtraction.c

    r19061 r19122  
    203203// Convolve an image using FFT
    204204static void convolveFFT(psImage *target,// Place the result in here
    205                         const psImage *image, // Image to convolve
    206                         const psImage *mask, // Mask image
     205                        psImage *image, // Image to convolve
     206                        psImage *mask, // Mask image
    207207                        psMaskType maskVal, // Value to mask
    208208                        const psKernel *kernel, // Kernel by which to convolve
     
    217217    bool threaded = pmSubtractionThreaded(); // Are we running threaded?
    218218
    219     // Casting away const for image, mask
    220219    if (threaded) {
    221         psMutexLock((psImage*)image);
    222     }
    223     psImage *subImage = psImageSubset((psImage*)image, border); // Subimage to convolve
     220        psMutexLock(image);
     221    }
     222    psImage *subImage = psImageSubset(image, border); // Subimage to convolve
    224223    if (threaded) {
    225         psMutexUnlock((psImage*)image);
    226         psMutexLock((psImage*)mask);
    227     }
    228     psImage *subMask = mask ? psImageSubset((psImage*)mask, border) : NULL; // Subimage mask
     224        psMutexUnlock(image);
     225        psMutexLock(mask);
     226    }
     227    psImage *subMask = mask ? psImageSubset(mask, border) : NULL; // Subimage mask
    229228    if (threaded) {
    230         psMutexUnlock((psImage*)mask);
     229        psMutexUnlock(mask);
    231230    }
    232231
     
    234233
    235234    if (threaded) {
    236         psMutexLock((psImage*)image);
     235        psMutexLock(image);
    237236    }
    238237    psFree(subImage);
    239238    if (threaded) {
    240         psMutexUnlock((psImage*)image);
    241         psMutexLock((psImage*)mask);
     239        psMutexUnlock(image);
     240        psMutexLock(mask);
    242241    }
    243242    psFree(subMask);
    244243    if (threaded) {
    245         psMutexUnlock((psImage*)mask);
     244        psMutexUnlock(mask);
    246245    }
    247246
     
    274273        psMutexUnlock(target);
    275274    }
     275
    276276    return;
    277277}
     
    305305                                  psKernel **kernelImage, // Convolution kernel for the image
    306306                                  psKernel **kernelWeight, // Convolution kernel for the weight map, or NULL
    307                                   const psImage *image, // Image to convolve
    308                                   const psImage *weight, // Weight map to convolve, or NULL
    309                                   const psImage *subMask, // Subtraction mask
     307                                  psImage *image, // Image to convolve
     308                                  psImage *weight, // Weight map to convolve, or NULL
     309                                  psImage *subMask, // Subtraction mask
    310310                                  psMaskType maskVal, // Mask value to apply in convolution
    311311                                  const pmSubtractionKernels *kernels, // Kernels
     
    755755static bool subtractionConvolvePatch(int numCols, int numRows, int x0, int y0,
    756756                                     pmReadout *out1, pmReadout *out2, psImage *convMask,
    757                                      const pmReadout *ro1, const pmReadout *ro2, const psImage *subMask,
     757                                     const pmReadout *ro1, const pmReadout *ro2, psImage *subMask,
    758758                                     psMaskType blank, psMaskType maskSource, psMaskType maskTarget,
    759759                                     const psRegion *region, const pmSubtractionKernels *kernels,
     
    824824    const pmReadout *ro1 = args->data[7]; // Input readout 1
    825825    const pmReadout *ro2 = args->data[8]; // Input readout 2
    826     const psImage *subMask = args->data[9]; // Subtraction mask
     826    psImage *subMask = args->data[9]; // Subtraction mask
    827827    psMaskType blank = PS_SCALAR_VALUE(args->data[10], U8); // Output mask value
    828828    psMaskType maskSource = PS_SCALAR_VALUE(args->data[11], U8); // Mask value corresponding to source image
     
    839839
    840840bool pmSubtractionConvolve(pmReadout *out1, pmReadout *out2, const pmReadout *ro1, const pmReadout *ro2,
    841                            const psImage *subMask, psMaskType blank, const psRegion *region,
     841                           psImage *subMask, psMaskType blank, const psRegion *region,
    842842                           const pmSubtractionKernels *kernels, bool doBG, bool useFFT)
    843843{
     
    938938    psImage *convMask = NULL;           // Convolved mask image (common to inputs 1 and 2)
    939939    if (subMask) {
     940        if (threaded) {
     941            psMutexInit(subMask);
     942        }
    940943        if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
    941944            if (!out1->mask) {
     
    10451048    }
    10461049
     1050    if (subMask && threaded) {
     1051        psMutexDestroy(subMask);
     1052    }
     1053
    10471054    // Copy anything that wasn't convolved
    10481055    switch (kernels->mode) {
  • trunk/psModules/src/imcombine/pmSubtraction.h

    r19059 r19122  
    66 * @author GLG, MHPCC
    77 *
    8  * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
    9  * @date $Date: 2008-08-14 03:25:55 $
     8 * @version $Revision: 1.28 $ $Name: not supported by cvs2svn $
     9 * @date $Date: 2008-08-19 00:44:42 $
    1010 * Copyright 2004-207 Institute for Astronomy, University of Hawaii
    1111 */
     
    103103                           const pmReadout *ro1, // Input image 1
    104104                           const pmReadout *ro2, // Input image 2
    105                            const psImage *subMask, ///< Subtraction mask (or NULL)
     105                           psImage *subMask, ///< Subtraction mask (or NULL)
    106106                           psMaskType blank, ///< Mask value for blank regions
    107107                           const psRegion *region, ///< Region to convolve (or NULL)
Note: See TracChangeset for help on using the changeset viewer.