Changeset 851

Show
Ignore:
Timestamp:
04/19/08 01:27:50 (6 months ago)
Author:
astrange
Message:

Bugfix and optimize the last commit.
Also, fix a memory leak.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/MatroskaImportPrivate.cpp

    r850 r851  
    883883                 
    884884        for (int i = 0; i < tracks.size(); i++) { 
    885                 if (tracks[i].type == track_subtitle) { 
     885                MatroskaTrack *track = &tracks[i]; 
     886                 
     887                if (track->type == track_subtitle) { 
    886888                        Handle subtitleDescriptionExt; 
    887                         OSErr err = GetImageDescriptionExtension((ImageDescriptionHandle)tracks[i].desc, &subtitleDescriptionExt, kSubFormatSSA, 0); 
     889                        OSErr err = GetImageDescriptionExtension((ImageDescriptionHandle)track->desc, &subtitleDescriptionExt, kSubFormatSSA, 1); 
    888890                         
    889891                        if (err || !subtitleDescriptionExt) continue; 
  • trunk/Subtitles/SubATSUIRenderer.m

    r850 r851  
    261261        [context release]; 
    262262        free(ubuffer); 
     263        CGColorSpaceRelease(srgbCSpace); 
    263264        UCDisposeTextBreakLocator(&breakLocator); 
    264265        ATSUDisposeTextLayout(layout); 
     
    286287} 
    287288 
    288 static ATSFontRef gHelveticaATSRef = -1; 
    289 static ATSUFontID gHelveticaATSUID; 
    290  
    291 static ATSUFontID GetFontIDForSSAName(NSString *name, ATSFontRef *_fontRef) 
     289static ATSUFontID GetFontIDForSSAName(NSString *name) 
    292290{ 
    293291        ByteCount nlen = [name length]; 
    294292        unichar *uname = (unichar*)[name cStringUsingEncoding:NSUnicodeStringEncoding]; 
    295          
    296         ATSFontRef fontRef; 
     293        static NSMutableDictionary *fontIDCache = nil; 
     294         
     295        if (!fontIDCache) fontIDCache = [[NSMutableDictionary alloc] init]; 
     296         
     297        NSNumber *idN = [fontIDCache objectForKey:name]; 
     298                 
     299        if (idN) return [idN intValue]; 
     300         
    297301        ATSUFontID font; 
    298302         
     
    300304         
    301305        if (font == kATSUInvalidFontID) { 
    302                 fontRef = ATSFontFindFromName((CFStringRef)name,kATSOptionFlagsDefault); 
    303                 font = FMGetFontFromATSFontRef(fontRef); 
     306                font = ATSFontFindFromName((CFStringRef)name,kATSOptionFlagsDefault); 
    304307                 
    305308                if (font == kATSUInvalidFontID) { 
    306                         if (gHelveticaATSRef == -1) { 
    307                                 gHelveticaATSRef = ATSFontFindFromName((CFStringRef)@"Helvetica",kATSOptionFlagsDefault); 
    308                                 gHelveticaATSUID = FMGetFontFromATSFontRef(fontRef); 
    309                         } 
     309                        static ATSUFontID helveticaID = kATSUInvalidFontID; 
    310310                         
    311                         fontRef = gHelveticaATSRef; 
    312                         font    = gHelveticaATSUID; 
     311                        if (helveticaID == kATSUInvalidFontID) 
     312                                ATSFontFindFromName((CFStringRef)@"Helvetica",kATSOptionFlagsDefault); 
     313                         
     314                        font = helveticaID; 
    313315                } 
    314         } else fontRef = FMGetATSFontRefFromFont(font); 
    315          
    316         *_fontRef = fontRef
    317          
     316        } 
     317         
     318        [fontIDCache setValue:[NSNumber numberWithInt:font] forKey:name]
     319         
    318320        return font; 
    319321} 
     
    324326        const ByteCount          sizes[] = {sizeof(ATSStyleRenderingOptions), sizeof(Fixed), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(ATSUFontID)}; 
    325327         
    326         ATSFontRef fontRef
    327         ATSUFontID font = GetFontIDForSSAName(s->fontname, &fontRef)
     328        ATSUFontID font = GetFontIDForSSAName(s->fontname)
     329        ATSFontRef fontRef = font
    328330        ATSStyleRenderingOptions opt = kATSStyleApplyAntiAliasing; 
    329331        Fixed size; 
     
    433435                        sv(); 
    434436                        { 
    435                                 ATSFontRef fontRef; 
    436                                 ATSUFontID font = GetFontIDForSSAName(sval, &fontRef); 
     437                                ATSUFontID font = GetFontIDForSSAName(sval); 
    437438                                 
    438439                                if (font) SetATSUStyleOther(spanEx->style, kATSUFontTag, sizeof(ATSUFontID), &font); 
     
    11111112                                                                      : SubInitNonSSA(640, 480); 
    11121113         
     1114        /* 
    11131115        CGColorSpaceRef csp = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 
    11141116        void *buf = malloc(640 * 480 * 4); 
     
    11231125                for (i = 0; i < nstyles; i++) { 
    11241126                        SubStyle *sty = [styles objectAtIndex:i]; 
    1125                         NSString *line = [NSString stringWithFormat:@"0,0,%@,,0,0,0,,to Be continued", sty->name]; 
     1127                        NSString *line = [NSString stringWithFormat:@"0,0,%@,,0,0,0,,{\fs1}If you are seeing this message, your player doesn't fully support the formatted subtitle track. It is recommended you switch to the unformatted track.", sty->name]; 
    11261128                        SubRenderPacket(s, c, (CFStringRef)line, 640, 480); 
    11271129                } 
     
    11311133        free(buf); 
    11321134        CGColorSpaceRelease(csp); 
     1135        */ 
     1136         
     1137        SubDisposeRenderer(s); 
    11331138        [pool release]; 
    11341139}