  
    
main.htmlMain Page     
classes.htmlData Structures     
files.htmlFiles     
dirs.htmlDirectories   
  
    
files.htmlFile List     
globals.htmlGlobals   
dir_3c4fde49625df9344590fff295c7c38d.htmllibexif exif-loader.c
exif-loader_8c.htmlGo to the documentation of this file. 00001 /* exif-loader.c 00002  * 00003  * Copyright © 2002 Lutz Müller <lutz@users.sourceforge.net> 00004  * 00005  * This library is free software; you can redistribute it and/or 00006  * modify it under the terms of the GNU Lesser General Public 00007  * License as published by the Free Software Foundation; either 00008  * version 2 of the License, or (at your option) any later version. 00009  * 00010  * This library is distributed in the hope that it will be useful, 00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 00013  * Lesser General Public License for more details. 00014  * 00015  * You should have received a copy of the GNU Lesser General Public 00016  * License along with this library; if not, write to the 00017  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018  * Boston, MA 02111-1307, USA. 00019  */ 00020 
00021 #include <config.h> 00022 
00023 #include < exif-loader_8h.htmllibexif/exif-loader.h > 00024 #include < i18n_8h.htmllibexif/i18n.h > 00025 
00026 #include <stdlib.h> 00027 #include <string.h> 00028 #include <stdio.h> 00029 
00030 #undef JPEG_MARKER_SOI exif-loader_8c.html#6a73d744a065090aa9e890b8547304e900031  #define JPEG_MARKER_SOI  0xd8 00032 #undef JPEG_MARKER_APP0 exif-loader_8c.html#3eb6e3444f79d449058145a01872f4b300033  #define JPEG_MARKER_APP0 0xe0 00034 #undef JPEG_MARKER_APP1 exif-loader_8c.html#05c1aea46cae41a712e35830a2ca28b800035  #define JPEG_MARKER_APP1 0xe1 00036 #undef JPEG_MARKER_APP13 exif-loader_8c.html#55bb81c4a5c1870e0df4231ceee8e45100037  #define JPEG_MARKER_APP13 0xed 00038 #undef JPEG_MARKER_COM exif-loader_8c.html#ea37ec560f466851f269cfa7a4b3261500039  #define JPEG_MARKER_COM 0xfe 00040 exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64800041  typedef enum {
00042         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648c73fc7c8469fe658589886d66162fd43EL_READ  = 0,
00043         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6483040a205050fa9013af34dbbfc0126d9EL_READ_SIZE_BYTE_24 ,
00044         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6488d9f30f47f095307af266c32bd36dcf8EL_READ_SIZE_BYTE_16 ,
00045         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 ,
00046         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6487bd581d7ff7d2d89fa6694989c912607EL_READ_SIZE_BYTE_00 ,
00047         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES ,
00048         exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6489cdc94b35bf57078570b81e2ed8b8d2bEL_EXIF_FOUND ,
00049 } exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ExifLoaderState ;
00050 
exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f800051  typedef enum {
00052         exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f89ca0794f4e8a8393a11d4624d29c6f6fEL_DATA_FORMAT_UNKNOWN ,
00053         exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8d1f9f611dc267862bf1b38ed2b0ec783EL_DATA_FORMAT_EXIF ,
00054         exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8dea6d282b07785ce42b3e98c4e1dc127EL_DATA_FORMAT_JPEG ,
00055         exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8a5c6b21e3559dc3153b6298ea4de8005EL_DATA_FORMAT_FUJI_RAW 00056 } exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8ExifLoaderDataFormat ;
00057 
struct__ExifLoader.html00058  struct struct__ExifLoader.html_ExifLoader  {
struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d500059          exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ExifLoaderState  struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state ;
struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f100060          exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8ExifLoaderDataFormat  struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format ;
00061 
00062         /* Small buffer used for detection of format */ struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b4400063          unsigned char struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b [12];
struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d471200064          unsigned char struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len ;
00065 
struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddc00066          unsigned int struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize ;
struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f900067          unsigned char * struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf ;
struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5b00068          unsigned int struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read ;
00069 
struct__ExifLoader.html#1b9d528be90e0b39129956a2369f2c5b00070          unsigned int struct__ExifLoader.html#1b9d528be90e0b39129956a2369f2c5bref_count ;
00071 
struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a2000072          struct__ExifLog.htmlExifLog  * struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log ;
struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d03300073          struct__ExifMem.htmlExifMem  * struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem ;
00074 };
00075 
exif-loader_8c.html#7107bf174abd5f9994053ef9ae84044a00076  static const unsigned char exif-data_8c.html#7107bf174abd5f9994053ef9ae84044aExifHeader [] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00};
00077 
00078 static void *
exif-loader_8c.html#f5432ecf056b1facede9da071bb9d6a200079  exif-loader_8c.html#f5432ecf056b1facede9da071bb9d6a2exif_loader_alloc  ( struct__ExifLoader.htmlExifLoader  *l, unsigned int i)
00080 {
00081         void *d;
00082 
00083         if (!l || !i) 
00084                 return NULL;
00085 
00086         d = exif-mem_8c.html#e8c09cfbcb95e435c4c4b7ec3bbd79e4exif_mem_alloc  (l-> struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem , i);
00087         if (d) 
00088                 return d;
00089 
00090         exif-log_8h.html#4221b964f5ee550f6166126b263d3b2fEXIF_LOG_NO_MEMORY  (l-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log , "ExifLog", i);
00091         return NULL;
00092 }
00093 
00094 #undef  MIN exif-loader_8c.html#3acffbd305ee72dcd4593c0d8af64a4f00095  #define MIN(a, b)  (((a) < (b)) ? (a) : (b)) 00096 00097 void exif-loader_8h.html#5188daf1bee36610d8bb8092bae34fab00098  exif-loader_8c.html#e178bf9ee41fb78fdef1b29ec573901cexif_loader_write_file  ( struct__ExifLoader.htmlExifLoader  *l, const char *path)
00099 {
00100         FILE *f;
00101         int exif-format_8c.html#ac71ffe03c84523594a575b2062849c3size ;
00102         unsigned char data[1024];
00103 
00104         if (!l) 
00105                 return;
00106 
00107         f = fopen (path, "rb");
00108         if (!f) {
00109                 exif-log_8c.html#025d4a5d96544913ea6f6ebbec69cb68exif_log  (l-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log , exif-log_8h.html#36f42667fb0481f099dbc0628dae26523b611d0d574b7838c2d5173367d96ed3EXIF_LOG_CODE_NONE , "ExifLoader",
00110                           i18n_8h.html#32a3cf3d9dd914f5aeeca5423c157934_ ("The file '%s' could not be opened."), path);
00111                 return;
00112         }
00113         while (1) {
00114                 size = fread (data, 1, sizeof (data), f);
00115                 if (size <= 0) 
00116                         break;
00117                 if (! exif-loader_8c.html#c25a1f0626855195944f53788284e32fexif_loader_write  (l, data, size)) 
00118                         break;
00119         }
00120         fclose (f);
00121 }
00122 
00123 static unsigned int exif-loader_8c.html#c83d06f410cd71f8ea82f3030707ec1900124  exif-loader_8c.html#c83d06f410cd71f8ea82f3030707ec19exif_loader_copy  ( struct__ExifLoader.htmlExifLoader  *eld, unsigned char *buf, unsigned int len)
00125 {
00126         if (!eld || (len && !buf) || (eld-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read  >= eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize )) 
00127                 return 0;
00128 
00129         /* If needed, allocate the buffer. */ 00130         if (!eld-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf ) 
00131                 eld-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf  = exif-loader_8c.html#f5432ecf056b1facede9da071bb9d6a2exif_loader_alloc  (eld, eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize );
00132         if (!eld-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf ) 
00133                 return 0;
00134 
00135         /* Copy memory */ 00136         len = exif-loader_8c.html#3acffbd305ee72dcd4593c0d8af64a4fMIN  (len, eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  - eld-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read );
00137         memcpy (eld-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf  + eld-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read , buf, len);
00138         eld-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read  += len;
00139 
00140         return (eld-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read  >= eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize ) ? 0 : 1;
00141 }
00142 
00143 unsigned char exif-loader_8h.html#042d78bd5a91372d15db07720695131500144  exif-loader_8c.html#c25a1f0626855195944f53788284e32fexif_loader_write  ( struct__ExifLoader.htmlExifLoader  *eld, unsigned char *buf, unsigned int len)
00145 {
00146         unsigned int i;
00147 
00148         if (!eld || (len && !buf)) 
00149                 return 0;
00150 
00151         switch (eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state ) {
00152         case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6489cdc94b35bf57078570b81e2ed8b8d2bEL_EXIF_FOUND :
00153                 return exif-loader_8c.html#c83d06f410cd71f8ea82f3030707ec19exif_loader_copy  (eld, buf, len);
00154         case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES :
00155                 if (eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  > len) { 
00156                         eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  -= len; 
00157                         return 1; 
00158                 }
00159                 len -= eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize ;
00160                 buf += eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize ;
00161                 eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  = 0;
00162                 eld-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len  = 0;
00163                 switch (eld-> struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format ) {
00164                 case exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8a5c6b21e3559dc3153b6298ea4de8005EL_DATA_FORMAT_FUJI_RAW :
00165                         eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state  = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6483040a205050fa9013af34dbbfc0126d9EL_READ_SIZE_BYTE_24 ;
00166                         break;
00167                 default:
00168                         eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state  = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648c73fc7c8469fe658589886d66162fd43EL_READ ;
00169                         break;
00170                 }
00171                 break;
00172         default:
00173                 break;
00174         }
00175 
00176         exif-log_8c.html#025d4a5d96544913ea6f6ebbec69cb68exif_log  (eld-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log , exif-log_8h.html#36f42667fb0481f099dbc0628dae2652e8772b1ad05481f996ae4ab831f22860EXIF_LOG_CODE_DEBUG , "ExifLoader",
00177                   "Scanning %i byte(s) of data...", len);
00178 
00179         /* 00180          * First fill the small buffer. Only continue if the buffer 00181          * is filled. Note that EXIF data contains at least 12 bytes. 00182          */ 00183         i = exif-loader_8c.html#3acffbd305ee72dcd4593c0d8af64a4fMIN  (len, sizeof (eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b ) - eld-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len );
00184         if (i) {
00185                 memcpy (&eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b [eld-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len ], buf, i);
00186                 eld-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len  += i;
00187                 if (eld-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len  < sizeof (eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b )) 
00188                         return 1;
00189                 buf += i;
00190                 len -= i;
00191         }
00192 
00193         switch (eld-> struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format ) {
00194         case exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f89ca0794f4e8a8393a11d4624d29c6f6fEL_DATA_FORMAT_UNKNOWN :
00195 
00196                 /* Check the small buffer against known formats. */ 00197                 if (!memcmp (eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b , "FUJIFILM", 8)) {
00198 
00199                         /* Skip to byte 84. There is another offset there. */ 00200                         eld-> struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format  = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8a5c6b21e3559dc3153b6298ea4de8005EL_DATA_FORMAT_FUJI_RAW ;
00201                         eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  = 84;
00202                         eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state  = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES ;
00203                         eld-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  = 84;
00204 
00205                 } else if (!memcmp (eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b  + 2, exif-data_8c.html#7107bf174abd5f9994053ef9ae84044aExifHeader , sizeof ( exif-data_8c.html#7107bf174abd5f9994053ef9ae84044aExifHeader ))) {
00206 
00207                         /* Read the size (2 bytes). */ 00208                         eld-> struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format  = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8d1f9f611dc267862bf1b38ed2b0ec783EL_DATA_FORMAT_EXIF ;
00209                         eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state  = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 ;
00210                 }
00211         default:
00212                 break;
00213         }
00214 
00215         for (i = 0; i < sizeof (eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b ); i++)
00216                 switch (eld-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state ) {
00217                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6489cdc94b35bf57078570b81e2ed8b8d2bEL_EXIF_FOUND :
00218                         if (! exif-loader_8c.html#c83d06f410cd71f8ea82f3030707ec19exif_loader_copy  (eld, eld-> struct__ExifLoader.html#6cdedd9d255a00b3f935861497a72b44b  + i,
00219                                         sizeof (eld->b) - i)) 
00220                                 return 0;
00221                         return exif-loader_8c.html#c83d06f410cd71f8ea82f3030707ec19exif_loader_copy  (eld, buf, len);
00222                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES :
00223                         eld->size--;
00224                         if (!eld->size) 
00225                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648c73fc7c8469fe658589886d66162fd43EL_READ ;
00226                         break;
00227 
00228                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6483040a205050fa9013af34dbbfc0126d9EL_READ_SIZE_BYTE_24 :
00229                         eld->size |= eld->b[i] << 24;
00230                         eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6488d9f30f47f095307af266c32bd36dcf8EL_READ_SIZE_BYTE_16 ;
00231                         break;
00232                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6488d9f30f47f095307af266c32bd36dcf8EL_READ_SIZE_BYTE_16 :
00233                         eld->size |= eld->b[i] << 16;
00234                         eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 ;
00235                         break;
00236                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 :
00237                         eld->size |= eld->b[i] << 8;
00238                         eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6487bd581d7ff7d2d89fa6694989c912607EL_READ_SIZE_BYTE_00 ;
00239                         break;
00240                 case exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6487bd581d7ff7d2d89fa6694989c912607EL_READ_SIZE_BYTE_00 :
00241                         eld->size |= eld->b[i] << 0;
00242                         switch (eld->data_format) {
00243                         case exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8dea6d282b07785ce42b3e98c4e1dc127EL_DATA_FORMAT_JPEG :
00244                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES ;
00245                                 eld->size -= 2;
00246                                 break;
00247                         case exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8a5c6b21e3559dc3153b6298ea4de8005EL_DATA_FORMAT_FUJI_RAW :
00248                                 eld->data_format = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8d1f9f611dc267862bf1b38ed2b0ec783EL_DATA_FORMAT_EXIF ;
00249                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e64868fe2defaa5870d5828b9b220fefd525EL_SKIP_BYTES ;
00250                                 eld->size -= 86;
00251                                 break;
00252                         case exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8d1f9f611dc267862bf1b38ed2b0ec783EL_DATA_FORMAT_EXIF :
00253                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e6489cdc94b35bf57078570b81e2ed8b8d2bEL_EXIF_FOUND ;
00254                                 break;
00255                         default:
00256                                 break;
00257                         }
00258                         break;
00259 
00260                 default:
00261                         switch (eld->b[i]) {
00262                         case exif-data_8c.html#05c1aea46cae41a712e35830a2ca28b8JPEG_MARKER_APP1 :
00263                                 eld->data_format = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8d1f9f611dc267862bf1b38ed2b0ec783EL_DATA_FORMAT_EXIF ;
00264                                 eld->size = 0;
00265                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 ;
00266                                 break;
00267                         case exif-data_8c.html#3eb6e3444f79d449058145a01872f4b3JPEG_MARKER_APP0 :
00268                         case exif-loader_8c.html#55bb81c4a5c1870e0df4231ceee8e451JPEG_MARKER_APP13 :
00269                         case exif-loader_8c.html#ea37ec560f466851f269cfa7a4b32615JPEG_MARKER_COM :
00270                                 eld->data_format = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f8dea6d282b07785ce42b3e98c4e1dc127EL_DATA_FORMAT_JPEG ;
00271                                 eld->size = 0;
00272                                 eld->state = exif-loader_8c.html#86031aa5774850a5b6c23d0cadf7e648ad5cc5b77c8a2fa345338869eef0dfa2EL_READ_SIZE_BYTE_08 ;
00273                                 break;
00274                         case 0xff:
00275                         case exif-data_8c.html#6a73d744a065090aa9e890b8547304e9JPEG_MARKER_SOI :
00276                                 break;
00277                         default:
00278                                 exif-log_8c.html#025d4a5d96544913ea6f6ebbec69cb68exif_log  (eld->log,
00279                                         exif-log_8h.html#36f42667fb0481f099dbc0628dae265284901c6bc122ed1de41cc8fb08b6ccc8EXIF_LOG_CODE_CORRUPT_DATA ,
00280                                         "ExifLoader", i18n_8h.html#32a3cf3d9dd914f5aeeca5423c157934_ ("The data supplied " 00281                                                 "does not seem to contain " 00282                                                 "EXIF data."));
00283                                 exif-loader_8c.html#080d8ebb5006c1306a3a798ff60253a5exif_loader_reset  (eld);
00284                                 return 0;
00285                         }
00286                 }
00287 
00288         /* 00289          * If we reach this point, the buffer has not been big enough 00290          * to read all data we need. Fill it with new data. 00291          */ 00292         eld->b_len = 0;
00293         return exif-loader_8c.html#c25a1f0626855195944f53788284e32fexif_loader_write  (eld, buf, len);
00294 }
00295 
00296 struct__ExifLoader.htmlExifLoader  *
exif-loader_8h.html#2d4278edbd89b5af3e5a4fe29b5e085c00297  exif-loader_8c.html#2d4278edbd89b5af3e5a4fe29b5e085cexif_loader_new  (void)
00298 {
00299         struct__ExifMem.htmlExifMem  *mem = exif-mem_8c.html#cd2926c29b470c9d43f84567a84d5acbexif_mem_new_default  ();
00300         struct__ExifLoader.htmlExifLoader  *l = exif-loader_8c.html#95c8505132b2465c1078b0842285bfc7exif_loader_new_mem  (mem);
00301 
00302         exif-mem_8c.html#66744e0987af08c443df247ce55f7d87exif_mem_unref  (mem);
00303 
00304         return l;
00305 }
00306 
00307 struct__ExifLoader.htmlExifLoader  *
exif-loader_8h.html#f348e11efd5ff6241752cb431cae37b300308  exif-loader_8c.html#95c8505132b2465c1078b0842285bfc7exif_loader_new_mem  ( struct__ExifMem.htmlExifMem  *mem)
00309 {
00310         struct__ExifLoader.htmlExifLoader  *loader;
00311 
00312         if (!mem) 
00313                 return NULL;
00314         
00315         loader = exif-mem_8c.html#e8c09cfbcb95e435c4c4b7ec3bbd79e4exif_mem_alloc  (mem, sizeof ( struct__ExifLoader.htmlExifLoader ));
00316         if (!loader) 
00317                 return NULL;
00318         loader-> struct__ExifLoader.html#1b9d528be90e0b39129956a2369f2c5bref_count  = 1;
00319 
00320         loader-> struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem  = mem;
00321         exif-mem_8c.html#f28c61972f529be46907956e0b3e7a60exif_mem_ref  (mem);
00322 
00323         return loader;
00324 }
00325 
00326 void exif-loader_8h.html#57278d2ba1e948d7eb354660df4c11fc00327  exif-loader_8c.html#c5e7a899a7499b56772b671add54fcdeexif_loader_ref  ( struct__ExifLoader.htmlExifLoader  *loader)
00328 {
00329         if (loader) 
00330                 loader-> struct__ExifLoader.html#1b9d528be90e0b39129956a2369f2c5bref_count ++;
00331 }
00332 
00333 static void exif-loader_8c.html#388dfe484e1ad9c424bf3f029ec5024800334  exif-loader_8c.html#388dfe484e1ad9c424bf3f029ec50248exif_loader_free  ( struct__ExifLoader.htmlExifLoader  *loader)
00335 {
00336         struct__ExifMem.htmlExifMem  *mem;
00337 
00338         if (!loader) 
00339                 return;
00340 
00341         mem = loader-> struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem ;
00342         exif-loader_8c.html#080d8ebb5006c1306a3a798ff60253a5exif_loader_reset  (loader);
00343         exif-mem_8c.html#43190b81b4b4bdb4ffb89bfb612051b1exif_mem_free  (mem, loader);
00344         exif-mem_8c.html#66744e0987af08c443df247ce55f7d87exif_mem_unref  (mem);
00345 }
00346         
00347 void exif-loader_8h.html#2636fb3e3ff95b5d7a7775d795dace0f00348  exif-loader_8c.html#7f4e3dfa0df969ac8c232327840ca105exif_loader_unref  ( struct__ExifLoader.htmlExifLoader  *loader)
00349 {
00350         if (!loader) 
00351                 return;
00352         if (!--loader-> struct__ExifLoader.html#1b9d528be90e0b39129956a2369f2c5bref_count )
00353                 exif-loader_8c.html#388dfe484e1ad9c424bf3f029ec50248exif_loader_free  (loader);
00354 }
00355 
00356 void exif-loader_8h.html#3b630a20e85fab740ec43d361864fb1300357  exif-loader_8c.html#080d8ebb5006c1306a3a798ff60253a5exif_loader_reset  ( struct__ExifLoader.htmlExifLoader  *loader)
00358 {
00359         if (!loader) 
00360                 return;
00361         exif-mem_8c.html#43190b81b4b4bdb4ffb89bfb612051b1exif_mem_free  (loader-> struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem , loader-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf ); loader-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf  = NULL;
00362         loader-> struct__ExifLoader.html#d2ddcf0def86a8fe7caeeb6d20412ddcsize  = 0;
00363         loader-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read  = 0;
00364         loader-> struct__ExifLoader.html#f251eefc14682f2df52d892a53ba57d5state  = 0;
00365         loader-> struct__ExifLoader.html#6f81a46a997a972ff8ac82d64e9d4712b_len  = 0;
00366         loader-> struct__ExifLoader.html#674cc88f52cc7b2b7f0090566871e1f1data_format  = exif-loader_8c.html#4130c97bd66d7ea86e6493f18f9588f89ca0794f4e8a8393a11d4624d29c6f6fEL_DATA_FORMAT_UNKNOWN ;
00367 }
00368 
00369 struct__ExifData.htmlExifData  *
exif-loader_8h.html#baede01bbb5b51566a26c89c38d9625f00370  exif-loader_8c.html#be54111cdaf5b0559a20e1e76c31a86cexif_loader_get_data  ( struct__ExifLoader.htmlExifLoader  *loader)
00371 {
00372         struct__ExifData.htmlExifData  *ed;
00373 
00374         if (!loader) 
00375                 return NULL;
00376 
00377         ed = exif-data_8c.html#bd793f6c516c5b92dd3b1bbd9e7f5ac6exif_data_new_mem  (loader-> struct__ExifLoader.html#f7f2c3c60a99abd418990e2c4004d033mem );
00378         exif-data_8c.html#f0d9d41ffeb6cd98906cd5ba5819c5efexif_data_log  (ed, loader-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log );
00379         exif-data_8c.html#458a24e25e2ae746968bea89a21227a0exif_data_load_data  (ed, loader-> struct__ExifLoader.html#03bd8ddabc38e10369b21fc61498e1f9buf , loader-> struct__ExifLoader.html#c8b53c90761322795f34908d451a5c5bbytes_read );
00380 
00381         return ed;
00382 }
00383 
00384 void exif-loader_8h.html#df0968617d4e08786bd6e17cad30730700385  exif-loader_8c.html#0779beeb15d0c56ae7442f4740f1baf7exif_loader_log  ( struct__ExifLoader.htmlExifLoader  *loader, struct__ExifLog.htmlExifLog  *log)
00386 {
00387         if (!loader) 
00388                 return;
00389         exif-log_8c.html#7a9b738a7429197d68c80ffedac7d8fbexif_log_unref  (loader-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log );
00390         loader-> struct__ExifLoader.html#ec25ac39191eaf779e881d500b866a20log  = log;
00391         exif-log_8c.html#afd7e5d40ca73440976a3b684bfa1059exif_log_ref  (log);
00392 }
Generated on Sun Apr 23 02:19:18 2006 for EXIF library (libexif) Internals by 
http://www.doxygen.org/index.htmldoxygen  1.4.6 