diff options
Diffstat (limited to 'macosx/HBSubtitles.m')
-rw-r--r-- | macosx/HBSubtitles.m | 145 |
1 files changed, 28 insertions, 117 deletions
diff --git a/macosx/HBSubtitles.m b/macosx/HBSubtitles.m index 1c9b401ff..b920623ff 100644 --- a/macosx/HBSubtitles.m +++ b/macosx/HBSubtitles.m @@ -9,8 +9,11 @@ #import "HBSubtitlesTrack.h" +#import "HBJob.h" +#import "HBJob+HBJobConversion.h" #import "HBTitle.h" #import "HBCodingUtilities.h" +#import "HBJob+Private.h" #include "common.h" @@ -32,14 +35,15 @@ extern NSString *keySubTrackSrtFileURL; @implementation HBSubtitles -- (instancetype)initWithTitle:(HBTitle *)title +- (instancetype)initWithJob:(HBJob *)job { self = [super init]; if (self) { + _job = job; _container = HB_MUX_MP4; - _sourceTracks = [title.subtitlesTracks mutableCopy]; + _sourceTracks = [job.title.subtitlesTracks mutableCopy]; _tracks = [[NSMutableArray alloc] init]; _defaults = [[HBSubtitlesDefaults alloc] init]; @@ -123,10 +127,10 @@ extern NSString *keySubTrackSrtFileURL; [self insertObject:track inTracksAtIndex:0]; } } - [self addNoneTrack]; } + // Else add a new None track - else if (oldSourceIdx == NONE_TRACK_INDEX) + if (oldSourceIdx == NONE_TRACK_INDEX) { [self addNoneTrack]; } @@ -204,7 +208,7 @@ extern NSString *keySubTrackSrtFileURL; - (void)reloadDefaults { - [self addTracksFromDefaults]; + [self addDefaultTracksFromJobSettings:self.job.jobDict]; } - (void)addSrtTrackFromURL:(NSURL *)srtURL @@ -275,134 +279,41 @@ extern NSString *keySubTrackSrtFileURL; #pragma mark - Defaults -/** - * Remove all the subtitles tracks and - * add new ones based on the defaults settings - */ -- (IBAction)addTracksFromDefaults +- (void)addDefaultTracksFromJobSettings:(NSDictionary *)settings { - // Keeps a set of the indexes of the added track - // so we don't add the same track twice. - NSMutableIndexSet *tracksAdded = [NSMutableIndexSet indexSet]; + NSArray<NSDictionary<NSString *, id> *> *tracks = settings[@"Subtitle"][@"SubtitleList"]; + NSDictionary<NSString *, id> *search = settings[@"Subtitle"][@"Search"]; + // Reinitialize the configured list of audio tracks while (self.countOfTracks) { [self removeObjectFromTracksAtIndex:0]; } // Add the foreign audio search pass - if (self.defaults.addForeignAudioSearch) + if ([search[@"Enable"] boolValue]) { - [self addTrack:[self trackFromSourceTrackIndex:FOREIGN_TRACK_INDEX]]; - } + HBSubtitlesTrack *track = [self trackFromSourceTrackIndex:FOREIGN_TRACK_INDEX]; - // Add the tracks for the selected languages - if (self.defaults.trackSelectionBehavior != HBSubtitleTrackSelectionBehaviorNone) - { - for (NSString *lang in self.defaults.trackSelectionLanguages) - { - NSUInteger idx = 0; - for (NSDictionary *track in self.sourceTracks) - { - if (idx > FOREIGN_TRACK_INDEX && - ([lang isEqualToString:@"und"] || [track[keySubTrackLanguageIsoCode] isEqualToString:lang])) - { - if (![tracksAdded containsIndex:idx]) - { - [self addTrack:[self trackFromSourceTrackIndex:idx]]; - } - [tracksAdded addIndex:idx]; - - if (self.defaults.trackSelectionBehavior == HBSubtitleTrackSelectionBehaviorFirst) - { - break; - } - } - idx++; - } - } - } + track.burnedIn = [search[@"Burn"] boolValue]; + track.forcedOnly = [search[@"Forced"] boolValue]; - // Add the closed captions track if there is one. - if (self.defaults.addCC) - { - NSUInteger idx = 0; - for (NSDictionary *track in self.sourceTracks) - { - if ([track[keySubTrackType] intValue] == CC608SUB) - { - if (![tracksAdded containsIndex:idx]) - { - [self addTrack:[self trackFromSourceTrackIndex:idx]]; - } - - if (self.defaults.trackSelectionBehavior == HBSubtitleTrackSelectionBehaviorFirst) - { - break; - } - } - idx++; - } + [self addTrack:track]; } - // Set the burn key for the appropriate track. - if (self.defaults.burnInBehavior != HBSubtitleTrackBurnInBehaviorNone && self.tracks.count) + // Add the tracks + for (NSDictionary *trackDict in tracks) { - if (self.defaults.burnInBehavior == HBSubtitleTrackBurnInBehaviorFirst) - { - if (self.tracks.firstObject.sourceTrackIdx != FOREIGN_TRACK_INDEX) - { - self.tracks.firstObject.burnedIn = YES; - } - else if (self.tracks.count > 1) - { - self.tracks[0].burnedIn = NO; - self.tracks[1].burnedIn = YES; - } - } - else if (self.defaults.burnInBehavior == HBSubtitleTrackBurnInBehaviorForeignAudio) - { - if (self.tracks.firstObject.sourceTrackIdx == FOREIGN_TRACK_INDEX) - { - self.tracks.firstObject.burnedIn = YES; - } - } - else if (self.defaults.burnInBehavior == HBSubtitleTrackBurnInBehaviorForeignAudioThenFirst) - { - self.tracks.firstObject.burnedIn = YES; - } - } + HBSubtitlesTrack *track = [self trackFromSourceTrackIndex:[trackDict[@"Track"] unsignedIntegerValue] + 2]; - // Burn-in the first dvd or bluray track and remove the others. - if (self.defaults.burnInDVDSubtitles || self.defaults.burnInBluraySubtitles) - { - // Ugly settings for ugly players - BOOL bitmapSubtitlesFound = NO; + track.burnedIn = [trackDict[@"Burn"] boolValue]; + track.forcedOnly = [trackDict[@"Forced"] boolValue]; - NSMutableArray *tracksToDelete = [[NSMutableArray alloc] init]; - for (HBSubtitlesTrack *track in self.tracks) - { - if (track.sourceTrackIdx != 1) - { - if (((track.type == VOBSUB && self.defaults.burnInDVDSubtitles) || - (track.type == PGSSUB && self.defaults.burnInBluraySubtitles)) && - !bitmapSubtitlesFound) - { - track.burnedIn = YES; - bitmapSubtitlesFound = YES; - } - else if (track.type == VOBSUB || track.type == PGSSUB) - { - [tracksToDelete addObject:track]; - } - } - } - [self.tracks removeObjectsInArray:tracksToDelete]; + [self addTrack:track]; } - // Add an empty track + // Add an None item [self addNoneTrack]; - [self validatePassthru]; } #pragma mark - Validation @@ -549,10 +460,10 @@ extern NSString *keySubTrackSrtFileURL; [self.defaults writeToPreset:preset]; } -- (void)applyPreset:(HBPreset *)preset +- (void)applyPreset:(HBPreset *)preset jobSettings:(NSDictionary *)settings { - [self.defaults applyPreset:preset]; - [self addTracksFromDefaults]; + [self.defaults applyPreset:preset jobSettings:settings]; + [self addDefaultTracksFromJobSettings:settings]; } #pragma mark - |