Show
Ignore:
Timestamp:
10/15/09 17:47:21 (5 months ago)
Author:
cristy
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • ImageMagick/trunk/magick/coder.c

    r324 r385  
    6565 
    6666/* 
    67   Declare coder map. 
    68 */ 
    69 static const char 
    70   *CoderMap = (const char *) 
    71     "<?xml version=\"1.0\"?>" 
    72     "<codermap>" 
    73     "  <coder magick=\"3FR\" name=\"DNG\" />" 
    74     "  <coder magick=\"8BIM\" name=\"META\" />" 
    75     "  <coder magick=\"8BIMTEXT\" name=\"META\" />" 
    76     "  <coder magick=\"8BIMWTEXT\" name=\"META\" />" 
    77     "  <coder magick=\"A\" name=\"RAW\" />" 
    78     "  <coder magick=\"AI\" name=\"PDF\" />" 
    79     "  <coder magick=\"AFM\" name=\"TTF\" />" 
    80     "  <coder magick=\"APP1JPEG\" name=\"META\" />" 
    81     "  <coder magick=\"APP1\" name=\"META\" />" 
    82     "  <coder magick=\"ARW\" name=\"DNG\" />" 
    83     "  <coder magick=\"BIE\" name=\"JBIG\" />" 
    84     "  <coder magick=\"BMP2\" name=\"BMP\" />" 
    85     "  <coder magick=\"BMP3\" name=\"BMP\" />" 
    86     "  <coder magick=\"B\" name=\"GRAY\" />" 
    87     "  <coder magick=\"BRF\" name=\"BRAILLE\" />" 
    88     "  <coder magick=\"CMYKA\" name=\"CMYK\" />" 
    89     "  <coder magick=\"C\" name=\"GRAY\" />" 
    90     "  <coder magick=\"CAL\" name=\"CALS\" />" 
    91     "  <coder magick=\"CR2\" name=\"DNG\" />" 
    92     "  <coder magick=\"CRW\" name=\"DNG\" />" 
    93     "  <coder magick=\"CUR\" name=\"ICON\" />" 
    94     "  <coder magick=\"DCR\" name=\"DNG\" />" 
    95     "  <coder magick=\"DCX\" name=\"PCX\" />" 
    96     "  <coder magick=\"DFONT\" name=\"TTF\" />" 
    97     "  <coder magick=\"EMF\" name=\"EMF\" />" 
    98     "  <coder magick=\"EPDF\" name=\"PDF\" />" 
    99     "  <coder magick=\"EPI\" name=\"PS\" />" 
    100     "  <coder magick=\"EPS2\" name=\"PS2\" />" 
    101     "  <coder magick=\"EPS3\" name=\"PS3\" />" 
    102     "  <coder magick=\"EPSF\" name=\"PS\" />" 
    103     "  <coder magick=\"EPSI\" name=\"PS\" />" 
    104     "  <coder magick=\"EPS\" name=\"PS\" />" 
    105     "  <coder magick=\"EPT2\" name=\"EPT\" />" 
    106     "  <coder magick=\"EPT3\" name=\"EPT\" />" 
    107     "  <coder magick=\"ERF\" name=\"DNG\" />" 
    108     "  <coder magick=\"EXIF\" name=\"META\" />" 
    109     "  <coder magick=\"FILE\" name=\"URL\" />" 
    110     "  <coder magick=\"FRACTAL\" name=\"PLASMA\" />" 
    111     "  <coder magick=\"FTP\" name=\"URL\" />" 
    112     "  <coder magick=\"FTS\" name=\"FITS\" />" 
    113     "  <coder magick=\"G3\" name=\"FAX\" />" 
    114     "  <coder magick=\"GIF87\" name=\"GIF\" />" 
    115     "  <coder magick=\"G\" name=\"GRAY\" />" 
    116     "  <coder magick=\"GRANITE\" name=\"MAGICK\" />" 
    117     "  <coder magick=\"GROUP4\" name=\"TIFF\" />" 
    118     "  <coder magick=\"H\" name=\"MAGICK\" />" 
    119     "  <coder magick=\"HTM\" name=\"HTML\" />" 
    120     "  <coder magick=\"HTTP\" name=\"URL\" />" 
    121     "  <coder magick=\"ICB\" name=\"TGA\" />" 
    122     "  <coder magick=\"ICC\" name=\"META\" />" 
    123     "  <coder magick=\"ICM\" name=\"META\" />" 
    124     "  <coder magick=\"ICO\" name=\"ICON\" />" 
    125     "  <coder magick=\"IMPLICIT\" name=\"***\" />" 
    126     "  <coder magick=\"IPTC\" name=\"META\" />" 
    127     "  <coder magick=\"IPTCTEXT\" name=\"META\" />" 
    128     "  <coder magick=\"IPTCWTEXT\" name=\"META\" />" 
    129     "  <coder magick=\"ISOBRL\" name=\"BRAILLE\" />" 
    130     "  <coder magick=\"JBG\" name=\"JBIG\" />" 
    131     "  <coder magick=\"JNG\" name=\"PNG\" />" 
    132     "  <coder magick=\"JPC\" name=\"JP2\" />" 
    133     "  <coder magick=\"JPG\" name=\"JPEG\" />" 
    134     "  <coder magick=\"JPX\" name=\"JP2\" />" 
    135     "  <coder magick=\"K\" name=\"GRAY\" />" 
    136     "  <coder magick=\"K25\" name=\"DNG\" />" 
    137     "  <coder magick=\"KDC\" name=\"DNG\" />" 
    138     "  <coder magick=\"LOGO\" name=\"MAGICK\" />" 
    139     "  <coder magick=\"M2V\" name=\"MPEG\" />" 
    140     "  <coder magick=\"M4V\" name=\"MPEG\" />" 
    141     "  <coder magick=\"M\" name=\"GRAY\" />" 
    142     "  <coder magick=\"MNG\" name=\"PNG\" />" 
    143     "  <coder magick=\"MOV\" name=\"MPEG\" />" 
    144     "  <coder magick=\"MPG\" name=\"MPEG\" />" 
    145     "  <coder magick=\"MP4\" name=\"MPEG\" />" 
    146     "  <coder magick=\"MPRI\" name=\"MPR\" />" 
    147     "  <coder magick=\"MRW\" name=\"DNG\" />" 
    148     "  <coder magick=\"MSVG\" name=\"SVG\" />" 
    149     "  <coder magick=\"NEF\" name=\"DNG\" />" 
    150     "  <coder magick=\"NETSCAPE\" name=\"MAGICK\" />" 
    151     "  <coder magick=\"O\" name=\"GRAY\" />" 
    152     "  <coder magick=\"ORF\" name=\"DNG\" />" 
    153     "  <coder magick=\"OTF\" name=\"TTF\" />" 
    154     "  <coder magick=\"P7\" name=\"PNM\" />" 
    155     "  <coder magick=\"PAL\" name=\"UYVY\" />" 
    156     "  <coder magick=\"PAM\" name=\"PNM\" />" 
    157     "  <coder magick=\"PBM\" name=\"PNM\" />" 
    158     "  <coder magick=\"PCDS\" name=\"PCD\" />" 
    159     "  <coder magick=\"PCT\" name=\"PICT\" />" 
    160     "  <coder magick=\"PDFA\" name=\"PDF\" />" 
    161     "  <coder magick=\"PEF\" name=\"DNG\" />" 
    162     "  <coder magick=\"PFA\" name=\"TTF\" />" 
    163     "  <coder magick=\"PFB\" name=\"TTF\" />" 
    164     "  <coder magick=\"PFM\" name=\"PNM\" />" 
    165     "  <coder magick=\"PGM\" name=\"PNM\" />" 
    166     "  <coder magick=\"PGX\" name=\"JP2\" />" 
    167     "  <coder magick=\"PICON\" name=\"XPM\" />" 
    168     "  <coder magick=\"PJPEG\" name=\"JPEG\" />" 
    169     "  <coder magick=\"PM\" name=\"XPM\" />" 
    170     "  <coder magick=\"PNG24\" name=\"PNG\" />" 
    171     "  <coder magick=\"PNG32\" name=\"PNG\" />" 
    172     "  <coder magick=\"PNG8\" name=\"PNG\" />" 
    173     "  <coder magick=\"PPM\" name=\"PNM\" />" 
    174     "  <coder magick=\"PTIF\" name=\"TIFF\" />" 
    175     "  <coder magick=\"RADIAL-GRADIENT\" name=\"GRADIENT\" />" 
    176     "  <coder magick=\"RAF\" name=\"DNG\" />" 
    177     "  <coder magick=\"RAS\" name=\"SUN\" />" 
    178     "  <coder magick=\"RGBA\" name=\"RGB\" />" 
    179     "  <coder magick=\"RGBO\" name=\"RGB\" />" 
    180     "  <coder magick=\"R\" name=\"GRAY\" />" 
    181     "  <coder magick=\"ROSE\" name=\"MAGICK\" />" 
    182     "  <coder magick=\"SHTML\" name=\"HTML\" />" 
    183     "  <coder magick=\"SR2\" name=\"DNG\" />" 
    184     "  <coder magick=\"SRF\" name=\"DNG\" />" 
    185     "  <coder magick=\"SVGZ\" name=\"SVG\" />" 
    186     "  <coder magick=\"TEXT\" name=\"TXT\" />" 
    187     "  <coder magick=\"TIFF64\" name=\"TIFF\" />" 
    188     "  <coder magick=\"TIF\" name=\"TIFF\" />" 
    189     "  <coder magick=\"TTC\" name=\"TTF\" />" 
    190     "  <coder magick=\"UBRL\" name=\"BRAILLE\" />" 
    191     "  <coder magick=\"VDA\" name=\"TGA\" />" 
    192     "  <coder magick=\"VST\" name=\"TGA\" />" 
    193     "  <coder magick=\"WMFWIN32\" name=\"EMF\" />" 
    194     "  <coder magick=\"WMV\" name=\"MPEG\" />" 
    195     "  <coder magick=\"X3F\" name=\"DNG\" />" 
    196     "  <coder magick=\"XTRNARRAY\" name=\"XTRN\" />" 
    197     "  <coder magick=\"XTRNBLOB\" name=\"XTRN\" />" 
    198     "  <coder magick=\"XTRNBSTR\" name=\"XTRN\" />" 
    199     "  <coder magick=\"XTRNFILE\" name=\"XTRN\" />" 
    200     "  <coder magick=\"XTRNIMAGE\" name=\"XTRN\" />" 
    201     "  <coder magick=\"XTRNSTREAM\" name=\"XTRN\" />" 
    202     "  <coder magick=\"XV\" name=\"VIFF\" />" 
    203     "  <coder magick=\"Y\" name=\"GRAY\" />" 
    204     "  <coder magick=\"YCbCrA\" name=\"YCbCr\" />" 
    205     "</codermap>"; 
    206  
    207 /* 
    20867  Static declarations. 
    20968*/ 
     69typedef struct _CoderMapInfo 
     70{ 
     71  const char 
     72    *magick, 
     73    *name; 
     74} CoderMapInfo; 
     75 
     76static const CoderMapInfo 
     77  CoderMap[] = 
     78  { 
     79    { "3FR", "DNG" }, 
     80    { "8BIM", "META" }, 
     81    { "8BIMTEXT", "META" }, 
     82    { "8BIMWTEXT", "META" }, 
     83    { "AFM", "TTF" }, 
     84    { "A", "RAW" }, 
     85    { "AI", "PDF" }, 
     86    { "APP1JPEG", "META" }, 
     87    { "APP1", "META" }, 
     88    { "ARW", "DNG" }, 
     89    { "BIE", "JBIG" }, 
     90    { "BMP2", "BMP" }, 
     91    { "BMP3", "BMP" }, 
     92    { "B", "RAW" }, 
     93    { "BRF", "BRAILLE" }, 
     94    { "BGR", "RGB" }, 
     95    { "BRG", "RGB" }, 
     96    { "CMYKA", "CMYK" }, 
     97    { "C", "RAW" }, 
     98    { "CAL", "CALS" }, 
     99    { "CR2", "DNG" }, 
     100    { "CRW", "DNG" }, 
     101    { "CUR", "ICON" }, 
     102    { "DCR", "DNG" }, 
     103    { "DCX", "PCX" }, 
     104    { "DFONT", "TTF" }, 
     105    { "EPDF", "PDF" }, 
     106    { "EPI", "PS" }, 
     107    { "EPS2", "PS2" }, 
     108    { "EPS3", "PS3" }, 
     109    { "EPSF", "PS" }, 
     110    { "EPSI", "PS" }, 
     111    { "EPS", "PS" }, 
     112    { "EPT2", "EPT" }, 
     113    { "EPT3", "EPT" }, 
     114    { "ERF", "DNG" }, 
     115    { "EXIF", "META" }, 
     116    { "FILE", "URL" }, 
     117    { "FRACTAL", "PLASMA" }, 
     118    { "FTP", "URL" }, 
     119    { "FTS", "FITS" }, 
     120    { "G3", "FAX" }, 
     121    { "GIF87", "GIF" }, 
     122    { "G", "RAW" }, 
     123    { "GBR", "RGB" }, 
     124    { "GRB", "RGB" }, 
     125    { "GRANITE", "MAGICK" }, 
     126    { "GROUP4", "TIFF" }, 
     127    { "K25", "DNG" }, 
     128    { "KDC", "DNG" }, 
     129    { "H", "MAGICK" }, 
     130    { "HTM", "HTML" }, 
     131    { "HTTP", "URL" }, 
     132    { "ICB", "TGA" }, 
     133    { "ICC", "META" }, 
     134    { "ICM", "META" }, 
     135    { "ICO", "ICON" }, 
     136    { "IMPLICIT", "***" }, 
     137    { "IPTC", "META" }, 
     138    { "IPTCTEXT", "META" }, 
     139    { "IPTCWTEXT", "META" }, 
     140    { "ISOBRL", "BRAILLE" }, 
     141    { "JBG", "JBIG" }, 
     142    { "JNG", "PNG" }, 
     143    { "JPC", "JP2" }, 
     144    { "JPG", "JPEG" }, 
     145    { "JPX", "JP2" }, 
     146    { "K", "RAW" }, 
     147    { "LOGO", "MAGICK" }, 
     148    { "M2V", "MPEG" }, 
     149    { "M4V", "MPEG" }, 
     150    { "M", "RAW" }, 
     151    { "MNG", "PNG" }, 
     152    { "MOV", "PNG" }, 
     153    { "MP4", "MPEG" }, 
     154    { "MPG", "MPEG" }, 
     155    { "MPRI", "MPR" }, 
     156    { "MRW", "DNG" }, 
     157    { "MSVG", "SVG" }, 
     158    { "NEF", "DNG" }, 
     159    { "NETSCAPE", "MAGICK" }, 
     160    { "O", "RAW" }, 
     161    { "ORF", "DNG" }, 
     162    { "OTF", "TTF" }, 
     163    { "P7", "PNM" }, 
     164    { "PAL", "UYVY" }, 
     165    { "PAM", "PNM" }, 
     166    { "PBM", "PNM" }, 
     167    { "PCDS", "PCD" }, 
     168    { "PDFA", "PDF" }, 
     169    { "PEF", "DNG" }, 
     170    { "PEF", "DNG" }, 
     171    { "PFA", "TTF" }, 
     172    { "PFB", "TTF" }, 
     173    { "PFM", "PNM" }, 
     174    { "PGM", "PNM" }, 
     175    { "PGX", "JP2" }, 
     176    { "PICON", "XPM" }, 
     177    { "PJPEG", "JPEG" }, 
     178    { "PM", "XPM" }, 
     179    { "PNG24", "PNG" }, 
     180    { "PNG32", "PNG" }, 
     181    { "PNG8", "PNG" }, 
     182    { "PPM", "PNM" }, 
     183    { "PTIF", "TIFF" }, 
     184    { "RADIAL-GRADIENT", "GRADIENT" }, 
     185    { "RAF", "DNG" }, 
     186    { "RAS", "SUN" }, 
     187    { "RBG", "RGB" }, 
     188    { "RGBA", "RGB" }, 
     189    { "RGBO", "RGB" }, 
     190    { "R", "RAW" }, 
     191    { "ROSE", "MAGICK" }, 
     192    { "SHTML", "HTML" }, 
     193    { "SR2", "DNG" }, 
     194    { "SRF", "DNG" }, 
     195    { "SVGZ", "SVG" }, 
     196    { "TEXT", "TXT" }, 
     197    { "TIFF64", "TIFF" }, 
     198    { "TIF", "TIFF" }, 
     199    { "TTC", "TTF" }, 
     200    { "UBRL", "BRAILLE" }, 
     201    { "VDA", "TGA" }, 
     202    { "VST", "TGA" }, 
     203    { "WMV", "MPEG" }, 
     204    { "WMFWIN32", "EMF" }, 
     205    { "WMZ", "WMF" }, 
     206    { "X3f", "DNG" }, 
     207    { "XMP", "META" }, 
     208    { "XTRNARRAY", "XTRN" }, 
     209    { "XTRNBLOB", "XTRN" }, 
     210    { "XTRNBSTR", "XTRN" }, 
     211    { "XTRNFILE", "XTRN" }, 
     212    { "XTRNIMAGE", "XTRN" }, 
     213    { "XTRNSTREAM", "XTRN" }, 
     214    { "XV", "VIFF" }, 
     215    { "Y", "RAW" }, 
     216    { "YCbCrA", "YCbCr" }, 
     217    { (const char *) NULL, (const char *) NULL } 
     218 }; 
     219 
    210220static SemaphoreInfo 
    211221  *coder_semaphore = (SemaphoreInfo *) NULL; 
     
    617627 
    618628  p=(CoderInfo *) coder_info; 
    619   if (p->path != (char *) NULL) 
    620     p->path=DestroyString(p->path); 
    621   if (p->name != (char *) NULL) 
    622     p->name=DestroyString(p->name); 
    623   if (p->magick != (char *) NULL) 
    624     p->magick=DestroyString(p->magick); 
     629  if (p->exempt == MagickFalse) 
     630    { 
     631      if (p->path != (char *) NULL) 
     632        p->path=DestroyString(p->path); 
     633      if (p->name != (char *) NULL) 
     634        p->name=DestroyString(p->name); 
     635      if (p->magick != (char *) NULL) 
     636        p->magick=DestroyString(p->magick); 
     637    } 
    625638  return(RelinquishMagickMemory(p)); 
    626639} 
     
    742755        (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info)); 
    743756        coder_info->path=ConstantString(filename); 
     757        coder_info->exempt=MagickFalse; 
    744758        coder_info->signature=MagickSignature; 
    745759        continue; 
     
    831845  ExceptionInfo *exception) 
    832846{ 
    833 #if defined(MAGICKCORE_EMBEDDABLE_SUPPORT) 
    834   return(LoadCoderList(CoderMap,"built-in",0,exception)); 
    835 #else 
    836847  const StringInfo 
    837848    *option; 
     
    843854    status; 
    844855 
     856  register const CoderMapInfo 
     857    *p; 
     858 
     859  /* 
     860    Load built-in coder map. 
     861  */ 
    845862  status=MagickFalse; 
     863  if (coder_list == (SplayTreeInfo *) NULL) 
     864    { 
     865      coder_list=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory, 
     866        DestroyCoderNode); 
     867      if (coder_list == (SplayTreeInfo *) NULL) 
     868        { 
     869          ThrowFileException(exception,ResourceLimitError, 
     870            "MemoryAllocationFailed",filename); 
     871          return(MagickFalse); 
     872        } 
     873    } 
     874  for (p=CoderMap; p->magick != (const char *) NULL; p++) 
     875  { 
     876    CoderInfo 
     877      *coder_info; 
     878 
     879    coder_info=(CoderInfo *) AcquireMagickMemory(sizeof(*coder_info)); 
     880    if (coder_info == (CoderInfo *) NULL) 
     881      { 
     882        (void) ThrowMagickException(exception,GetMagickModule(), 
     883          ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name); 
     884        continue; 
     885      } 
     886    (void) ResetMagickMemory(coder_info,0,sizeof(*coder_info)); 
     887    coder_info->path="[built-in]"; 
     888    coder_info->magick=(char *) p->magick; 
     889    coder_info->name=(char *) p->name; 
     890    coder_info->exempt=MagickTrue; 
     891    coder_info->signature=MagickSignature; 
     892    status=AddValueToSplayTree(coder_list,ConstantString(coder_info->magick), 
     893      coder_info); 
     894    if (status == MagickFalse) 
     895      (void) ThrowMagickException(exception,GetMagickModule(), 
     896        ResourceLimitError,"MemoryAllocationFailed","`%s'",coder_info->name); 
     897  } 
     898  /* 
     899    Load external coder map. 
     900  */ 
    846901  options=GetConfigureOptions(filename,exception); 
    847902  option=(const StringInfo *) GetNextValueInLinkedList(options); 
     
    853908  } 
    854909  options=DestroyConfigureOptions(options); 
    855   if ((coder_list == (SplayTreeInfo *) NULL) || 
    856       (GetNumberOfNodesInSplayTree(coder_list) == 0)) 
    857     status|=LoadCoderList(CoderMap,"built-in",0,exception); 
    858910  return(status != 0 ? MagickTrue : MagickFalse); 
    859 #endif 
    860 } 
     911}