Changeset 4735

Show
Ignore:
Timestamp:
04/28/07 01:19:04 (1 year ago)
Author:
morris
Message:

Release image source as early as possible to prevent too many open files and memory loss

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Footagehead/trunk/FHImage.h

    r4725 r4735  
    3131        CGImageRef                                      _CGImage; 
    3232         
    33         CGImageSourceRef                        _imageSource; 
    34          
    3533        WIURL                                           *_url; 
    3634         
  • Footagehead/trunk/FHImage.m

    r4725 r4735  
    3232@interface FHImage(Private) 
    3333 
    34 - (BOOL)_initImage
    35 - (BOOL)_initThumbnailWithPreferredSize:(NSSize)size; 
     34- (BOOL)_initImageWithImageSource:(CGImageSourceRef)imageSource
     35- (BOOL)_initThumbnailWithImageSource:(CGImageSourceRef)imageSource preferredSize:(NSSize)size; 
    3636 
    3737@end 
     
    4040@implementation FHImage(Private) 
    4141 
    42 - (BOOL)_initImage
     42- (BOOL)_initImageWithImageSource:(CGImageSourceRef)imageSource
    4343        NSDictionary            *options; 
    4444 
     
    4848                NULL]; 
    4949         
    50         _CGImage = CGImageSourceCreateImageAtIndex(_imageSource, 0, (CFDictionaryRef) options); 
     50        _CGImage = CGImageSourceCreateImageAtIndex(imageSource, 0, (CFDictionaryRef) options); 
    5151         
    5252        if(!_CGImage) 
     
    6060 
    6161 
    62 - (BOOL)_initThumbnailWithPreferredSize:(NSSize)size { 
     62- (BOOL)_initThumbnailWithImageSource:(CGImageSourceRef)imageSource preferredSize:(NSSize)size { 
    6363        NSDictionary            *options; 
    6464        CFNumberRef                     number; 
     
    7171                NULL]; 
    7272         
    73         _CGImage = CGImageSourceCreateThumbnailAtIndex(_imageSource, 0, (CFDictionaryRef) options); 
     73        _CGImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (CFDictionaryRef) options); 
    7474         
    7575        if(!_CGImage) 
     
    113113 
    114114- (id)initImageWithURL:(WIURL *)url { 
    115         self = [super init]; 
    116          
    117         _imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 
    118          
    119         if(!_imageSource) { 
    120                 [self release]; 
    121                  
    122                 return NULL; 
    123         } 
    124  
    125         if(![self _initImage]) { 
    126                 [self release]; 
    127                  
    128                 return NULL; 
    129         } 
    130          
     115        CGImageSourceRef        imageSource; 
     116         
     117        self = [super init]; 
     118         
     119        imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 
     120         
     121        if(!imageSource) { 
     122                [self release]; 
     123                 
     124                return NULL; 
     125        } 
     126 
     127        if(![self _initImageWithImageSource:imageSource]) { 
     128                CFRelease(imageSource); 
     129                 
     130                [self release]; 
     131                 
     132                return NULL; 
     133        } 
     134         
     135        CFRelease(imageSource); 
     136 
    131137        return self; 
    132138} 
     
    135141 
    136142- (id)initImageWithData:(NSData *)data { 
    137         self = [super init]; 
    138          
    139         _imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 
    140          
    141         if(!_imageSource) { 
    142                 [self release]; 
    143                  
    144                 return NULL; 
    145         } 
    146  
    147         if(![self _initImage]) { 
    148                 [self release]; 
    149                  
    150                 return NULL; 
    151         } 
    152          
     143        CGImageSourceRef        imageSource; 
     144         
     145        self = [super init]; 
     146         
     147        imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 
     148         
     149        if(!imageSource) { 
     150                [self release]; 
     151                 
     152                return NULL; 
     153        } 
     154 
     155        if(![self _initImageWithImageSource:imageSource]) { 
     156                CFRelease(imageSource); 
     157                 
     158                [self release]; 
     159                 
     160                return NULL; 
     161        } 
     162         
     163        CFRelease(imageSource); 
     164                 
    153165        return self; 
    154166} 
     
    157169 
    158170- (id)initThumbnailWithURL:(WIURL *)url preferredSize:(NSSize)size { 
    159         self = [super init]; 
    160          
    161         _imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 
    162          
    163         if(!_imageSource) { 
    164                 [self release]; 
    165                  
    166                 return NULL; 
    167         } 
    168  
    169         if(![self _initThumbnailWithPreferredSize:size]) { 
    170                 [self release]; 
    171                  
    172                 return NULL; 
    173         } 
    174          
     171        CGImageSourceRef        imageSource; 
     172         
     173        self = [super init]; 
     174         
     175        imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 
     176         
     177        if(!imageSource) { 
     178                [self release]; 
     179                 
     180                return NULL; 
     181        } 
     182 
     183        if(![self _initThumbnailWithImageSource:imageSource preferredSize:size]) { 
     184                CFRelease(imageSource); 
     185                 
     186                [self release]; 
     187                 
     188                return NULL; 
     189        } 
     190         
     191        CFRelease(imageSource); 
     192                 
    175193        return self; 
    176194} 
     
    179197 
    180198- (id)initThumbnailWithData:(NSData *)data preferredSize:(NSSize)size { 
    181         self = [super init]; 
    182          
    183         _imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 
    184          
    185         if(!_imageSource) { 
    186                 [self release]; 
    187                  
    188                 return NULL; 
    189         } 
    190  
    191         if(![self _initThumbnailWithPreferredSize:size]) { 
    192                 [self release]; 
    193                  
    194                 return NULL; 
    195         } 
    196          
     199        CGImageSourceRef        imageSource; 
     200         
     201        self = [super init]; 
     202         
     203        imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 
     204         
     205        if(!imageSource) { 
     206                [self release]; 
     207                 
     208                return NULL; 
     209        } 
     210 
     211        if(![self _initThumbnailWithImageSource:imageSource preferredSize:size]) { 
     212                CFRelease(imageSource); 
     213                 
     214                [self release]; 
     215                 
     216                return NULL; 
     217        } 
     218         
     219        CFRelease(imageSource); 
     220                 
    197221        return self; 
    198222} 
     
    206230         
    207231        [_NSImage release]; 
    208  
    209         if(_imageSource) 
    210                 CFRelease(_imageSource); 
    211232 
    212233        [super dealloc];