Changeset 6465


Ignore:
Timestamp:
01/14/12 21:45:06 (16 months ago)
Author:
cristy
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/MagickCore/effect.c

    r6462 r6465  
    15781578    status; 
    15791579 
    1580   Quantum 
    1581     *restrict buffers, 
    1582     *restrict pixels; 
    1583  
    1584   register ssize_t 
    1585     i; 
     1580  MagickOffsetType 
     1581    progress; 
    15861582 
    15871583  size_t 
    1588     length; 
     1584    extent; 
     1585 
     1586  ssize_t 
     1587    y; 
    15891588 
    15901589  static const ssize_t 
     
    16011600  assert(exception != (ExceptionInfo *) NULL); 
    16021601  assert(exception->signature == MagickSignature); 
    1603   despeckle_image=CloneImage(image,0,0,MagickTrue,exception); 
     1602  despeckle_image=CloneImage(image,image->columns,image->rows,MagickTrue, 
     1603    exception); 
    16041604  if (despeckle_image == (Image *) NULL) 
    16051605    return((Image *) NULL); 
     
    16111611    } 
    16121612  /* 
    1613     Allocate image buffers. 
    1614   */ 
    1615   length=(size_t) ((image->columns+2)*(image->rows+2)); 
    1616   pixels=(Quantum *) AcquireQuantumMemory(length,2*sizeof(*pixels)); 
    1617   buffers=(Quantum *) AcquireQuantumMemory(length,2*sizeof(*pixels)); 
    1618   if ((pixels == (Quantum *) NULL) || (buffers == (Quantum *) NULL)) 
    1619     { 
    1620       if (buffers != (Quantum *) NULL) 
    1621         buffers=(Quantum *) RelinquishMagickMemory(buffers); 
    1622       if (pixels != (Quantum *) NULL) 
    1623         pixels=(Quantum *) RelinquishMagickMemory(pixels); 
    1624       despeckle_image=DestroyImage(despeckle_image); 
    1625       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed"); 
    1626     } 
    1627   /* 
    16281613    Reduce speckle in the image. 
    16291614  */ 
    16301615  status=MagickTrue; 
     1616  progress=0; 
     1617  extent=3*(image->columns+2); 
    16311618  image_view=AcquireCacheView(image); 
    16321619  despeckle_view=AcquireCacheView(despeckle_image); 
    1633   for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 
     1620#if defined(MAGICKCORE_OPENMP_SUPPORT) 
     1621  #pragma omp parallel for schedule(static,4) shared(status) 
     1622#endif 
     1623  for (y=0; y < (ssize_t) image->rows; y++) 
    16341624  { 
    1635     PixelChannel 
    1636       channel; 
    1637  
    1638     PixelTrait 
    1639       despeckle_traits, 
    1640       traits; 
     1625    Quantum 
     1626      *restrict buffers, 
     1627      *restrict pixels; 
     1628 
     1629    register const Quantum 
     1630      *restrict p; 
    16411631 
    16421632    register Quantum 
    1643       *buffer, 
    1644       *pixel; 
     1633      *restrict q; 
    16451634 
    16461635    register ssize_t 
    1647       k, 
    1648       x; 
    1649  
    1650     ssize_t 
    1651       j, 
    1652       y; 
    1653  
    1654     if (status == MagickFalse) 
    1655       continue; 
    1656     channel=GetPixelChannelMapChannel(image,i); 
    1657     traits=GetPixelChannelMapTraits(image,channel); 
    1658     despeckle_traits=GetPixelChannelMapTraits(despeckle_image,channel); 
    1659     if ((traits == UndefinedPixelTrait) || 
    1660         (despeckle_traits == UndefinedPixelTrait)) 
    1661       continue; 
    1662     if ((despeckle_traits & CopyPixelTrait) != 0) 
    1663       continue; 
    1664     pixel=pixels; 
    1665     (void) ResetMagickMemory(pixel,0,length*sizeof(*pixel)); 
    1666     buffer=buffers; 
    1667     j=(ssize_t) image->columns+2; 
    1668     for (y=0; y < (ssize_t) image->rows; y++) 
    1669     { 
    1670       register const Quantum 
    1671         *restrict p; 
    1672  
    1673       p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception); 
    1674       if (p == (const Quantum *) NULL) 
     1636      i; 
     1637 
     1638    p=GetCacheViewVirtualPixels(image_view,-1,y-1,image->columns+2,3,exception); 
     1639    q=GetCacheViewAuthenticPixels(despeckle_view,0,y,despeckle_image->columns,1, 
     1640      exception); 
     1641    if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL)) 
     1642      { 
     1643        status=MagickFalse; 
     1644        continue; 
     1645      } 
     1646    pixels=(Quantum *) AcquireQuantumMemory(extent,sizeof(*pixels)); 
     1647    buffers=(Quantum *) AcquireQuantumMemory(extent,sizeof(*buffers)); 
     1648    if ((pixels == (Quantum *) NULL) || (buffers == (Quantum *) NULL)) 
     1649      { 
     1650        if (buffers != (Quantum *) NULL) 
     1651          buffers=(Quantum *) RelinquishMagickMemory(buffers); 
     1652        if (pixels != (Quantum *) NULL) 
     1653          pixels=(Quantum *) RelinquishMagickMemory(pixels); 
     1654        (void) ThrowMagickException(exception,GetMagickModule(), 
     1655          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); 
     1656        continue; 
     1657      } 
     1658    for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 
     1659    { 
     1660      PixelChannel 
     1661        channel; 
     1662 
     1663      PixelTrait 
     1664        despeckle_traits, 
     1665        traits; 
     1666 
     1667      register ssize_t 
     1668        j, 
     1669        x; 
     1670 
     1671      if (status == MagickFalse) 
     1672        continue; 
     1673      channel=GetPixelChannelMapChannel(image,i); 
     1674      traits=GetPixelChannelMapTraits(image,channel); 
     1675      despeckle_traits=GetPixelChannelMapTraits(despeckle_image,channel); 
     1676      if ((traits == UndefinedPixelTrait) || 
     1677          (despeckle_traits == UndefinedPixelTrait)) 
     1678        continue; 
     1679      for (x=0; x < (ssize_t) (3*(image->columns+2)); x++) 
     1680        pixels[x]=p[x*GetPixelChannels(image)+i]; 
     1681      if ((despeckle_traits & CopyPixelTrait) != 0) 
    16751682        { 
    1676           status=MagickFalse; 
     1683          /* 
     1684            Do not despeckle this channel, just copy. 
     1685          */ 
     1686          for (x=0; x < (ssize_t) image->columns; x++) 
     1687            SetPixelChannel(despeckle_image,channel,pixels[x+image->columns+3], 
     1688              q+x*GetPixelChannels(despeckle_image)); 
    16771689          continue; 
    16781690        } 
    1679       j++; 
     1691      (void) ResetMagickMemory(buffers,0,extent*sizeof(*buffers)); 
     1692      for (j=0; j < 4; j++) 
     1693      { 
     1694        Hull(X[j],Y[j],image->columns,1,1,pixels,buffers); 
     1695        Hull(-X[j],-Y[j],image->columns,1,1,pixels,buffers); 
     1696        Hull(-X[j],-Y[j],image->columns,1,-1,pixels,buffers); 
     1697        Hull(X[j],Y[j],image->columns,1,-1,pixels,buffers); 
     1698      } 
    16801699      for (x=0; x < (ssize_t) image->columns; x++) 
    1681       { 
    1682         pixel[j++]=p[i]; 
    1683         p+=GetPixelChannels(image); 
    1684       } 
    1685       j++; 
    1686     } 
    1687     (void) ResetMagickMemory(buffer,0,length*sizeof(*buffer)); 
    1688     for (k=0; k < 4; k++) 
    1689     { 
    1690       Hull(X[k],Y[k],image->columns,image->rows,1,pixel,buffer); 
    1691       Hull(-X[k],-Y[k],image->columns,image->rows,1,pixel,buffer); 
    1692       Hull(-X[k],-Y[k],image->columns,image->rows,-1,pixel,buffer); 
    1693       Hull(X[k],Y[k],image->columns,image->rows,-1,pixel,buffer); 
    1694     } 
    1695     j=(ssize_t) image->columns+2; 
    1696     for (y=0; y < (ssize_t) image->rows; y++) 
    1697     { 
    1698       MagickBooleanType 
    1699         sync; 
    1700  
    1701       register Quantum 
    1702         *restrict q; 
    1703  
    1704       q=GetCacheViewAuthenticPixels(despeckle_view,0,y,despeckle_image->columns, 
    1705         1,exception); 
    1706       if (q == (Quantum *) NULL) 
    1707         { 
    1708           status=MagickFalse; 
    1709           continue; 
    1710         } 
    1711       j++; 
    1712       for (x=0; x < (ssize_t) image->columns; x++) 
    1713       { 
    1714         SetPixelChannel(despeckle_image,channel,pixel[j++],q); 
    1715         q+=GetPixelChannels(despeckle_image); 
    1716       } 
    1717       sync=SyncCacheViewAuthenticPixels(despeckle_view,exception); 
    1718       if (sync == MagickFalse) 
    1719         status=MagickFalse; 
    1720       j++; 
    1721     } 
     1700        SetPixelChannel(despeckle_image,channel,pixels[x+image->columns+3],q+x* 
     1701          GetPixelChannels(despeckle_image)); 
     1702    } 
     1703    if (SyncCacheViewAuthenticPixels(despeckle_view,exception) == MagickFalse) 
     1704      status=MagickFalse; 
    17221705    if (image->progress_monitor != (MagickProgressMonitor) NULL) 
    17231706      { 
     
    17251708          proceed; 
    17261709 
    1727         proceed=SetImageProgress(image,DespeckleImageTag,(MagickOffsetType) i, 
    1728           GetPixelChannels(image)); 
     1710#if defined(MAGICKCORE_OPENMP_SUPPORT) 
     1711  #pragma omp critical (MagickCore_DespeckleImage) 
     1712#endif 
     1713        proceed=SetImageProgress(image,DespeckleImageTag,progress,image->rows); 
    17291714        if (proceed == MagickFalse) 
    17301715          status=MagickFalse; 
    17311716      } 
     1717    buffers=(Quantum *) RelinquishMagickMemory(buffers); 
     1718    pixels=(Quantum *) RelinquishMagickMemory(pixels); 
    17321719  } 
    17331720  despeckle_view=DestroyCacheView(despeckle_view); 
    17341721  image_view=DestroyCacheView(image_view); 
    1735   buffers=(Quantum *) RelinquishMagickMemory(buffers); 
    1736   pixels=(Quantum *) RelinquishMagickMemory(pixels); 
    17371722  despeckle_image->type=image->type; 
    17381723  if (status == MagickFalse) 
Note: See TracChangeset for help on using the changeset viewer.