summaryrefslogtreecommitdiffstats
path: root/macosx/HBJob.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/HBJob.m')
-rw-r--r--macosx/HBJob.m191
1 files changed, 191 insertions, 0 deletions
diff --git a/macosx/HBJob.m b/macosx/HBJob.m
new file mode 100644
index 000000000..78e6a317b
--- /dev/null
+++ b/macosx/HBJob.m
@@ -0,0 +1,191 @@
+/* HBJob.m $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+#import "HBJob.h"
+#import "HBAudioSettings.h"
+#import "HBSubtitlesSettings.h"
+#import "HBPreset.h"
+
+#include "lang.h"
+
+extern NSString *keyAudioTrackIndex;
+extern NSString *keyAudioTrackName;
+extern NSString *keyAudioInputBitrate;
+extern NSString *keyAudioInputSampleRate;
+extern NSString *keyAudioInputCodec;
+extern NSString *keyAudioInputCodecParam;
+extern NSString *keyAudioInputChannelLayout;
+extern NSString *keyAudioTrackLanguageIsoCode;
+
+extern NSString *keySubTrackName;
+extern NSString *keySubTrackIndex;
+extern NSString *keySubTrackLanguage;
+extern NSString *keySubTrackLanguageIsoCode;
+extern NSString *keySubTrackType;
+
+extern NSString *keySubTrackForced;
+extern NSString *keySubTrackBurned;
+extern NSString *keySubTrackDefault;
+
+extern NSString *keySubTrackSrtOffset;
+extern NSString *keySubTrackSrtFilePath;
+extern NSString *keySubTrackSrtCharCode;
+
+@implementation HBJob
+
+- (instancetype)initWithTitle:(hb_title_t *)title url:(NSURL *)fileURL andPreset:(HBPreset *)preset
+{
+ self = [super init];
+ if (self) {
+ _title = title;
+ _fileURL = [fileURL copy];
+
+ _audioTracks = [[NSMutableArray alloc] init];
+ _subtitlesTracks = [[NSMutableArray alloc] init];
+ _chapters = [[NSMutableArray alloc] init];
+
+ _audioSettings = [[HBAudioSettings alloc] init];
+ _subtitlesSettings = [[HBSubtitlesSettings alloc] init];
+
+ [self loadAudioTracks];
+ [self loadSubtitlesTracks];
+ [self loadChapters];
+ }
+ return self;
+}
+
+- (void)applyPreset:(HBPreset *)preset
+{
+ [self.audioSettings applySettingsFromPreset:preset.content];
+ [self.subtitlesSettings applySettingsFromPreset:preset.content];
+}
+
+#pragma mark - initialization
+
+- (void)loadAudioTracks
+{
+ hb_audio_config_t *audio;
+ hb_list_t *list = self.title->list_audio;
+ int count = hb_list_count(list);
+
+ // Initialize the audio list of available audio tracks from this title
+ for (int i = 0; i < count; i++)
+ {
+ audio = (hb_audio_config_t *) hb_list_audio_config_item(list, i);
+ [self.audioTracks addObject: @{keyAudioTrackIndex: @(i + 1),
+ keyAudioTrackName: [NSString stringWithFormat: @"%d: %s", i, audio->lang.description],
+ keyAudioInputBitrate: @(audio->in.bitrate / 1000),
+ keyAudioInputSampleRate: @(audio->in.samplerate),
+ keyAudioInputCodec: [NSNumber numberWithUnsignedInteger: audio->in.codec],
+ keyAudioInputCodecParam: [NSNumber numberWithUnsignedInteger: audio->in.codec_param],
+ keyAudioInputChannelLayout: @(audio->in.channel_layout),
+ keyAudioTrackLanguageIsoCode: @(audio->lang.iso639_2)}];
+ }
+}
+
+- (void)loadSubtitlesTracks
+{
+ hb_subtitle_t *subtitle;
+ hb_list_t *list = self.title->list_audio;
+ int count = hb_list_count(list);
+
+ NSMutableArray *forcedSourceNamesArray = [[NSMutableArray alloc] init];
+ //NSString *foreignAudioSearchTrackName = nil;
+
+ for (int i = 0; i < count; i++)
+ {
+ subtitle = (hb_subtitle_t *)hb_list_item(self.title->list_subtitle, i);
+
+ /* Human-readable representation of subtitle->source */
+ NSString *bitmapOrText = subtitle->format == PICTURESUB ? @"Bitmap" : @"Text";
+ NSString *subSourceName = @(hb_subsource_name(subtitle->source));
+
+ /* if the subtitle track can be forced, add its source name to the array */
+ if (hb_subtitle_can_force(subtitle->source) && [forcedSourceNamesArray containsObject:subSourceName] == NO)
+ {
+ [forcedSourceNamesArray addObject:subSourceName];
+ }
+
+ // Use the native language name if available
+ iso639_lang_t *language = lang_for_code2(subtitle->iso639_2);
+ NSString *nativeLanguage = strlen(language->native_name) ? @(language->native_name) : @(language->eng_name);
+
+ /* create a dictionary of source subtitle information to store in our array */
+ [self.subtitlesTracks addObject:@{keySubTrackName: [NSString stringWithFormat:@"%d: %@ (%@) (%@)", i, nativeLanguage, bitmapOrText, subSourceName],
+ keySubTrackIndex: @(i),
+ keySubTrackType: @(subtitle->source),
+ keySubTrackLanguage: nativeLanguage,
+ keySubTrackLanguageIsoCode: @(subtitle->iso639_2)}];
+ }
+
+ /* now set the name of the Foreign Audio Search track */
+ if ([forcedSourceNamesArray count])
+ {
+ [forcedSourceNamesArray sortUsingComparator:^(id obj1, id obj2)
+ {
+ return [((NSString *)obj1) compare:((NSString *)obj2)];
+ }];
+
+ NSString *tempList = @"";
+ for (NSString *tempString in forcedSourceNamesArray)
+ {
+ if ([tempList length])
+ {
+ tempList = [tempList stringByAppendingString:@", "];
+ }
+ tempList = [tempList stringByAppendingString:tempString];
+ }
+ //foreignAudioSearchTrackName = [NSString stringWithFormat:@"Foreign Audio Search (Bitmap) (%@)", tempList];
+ }
+ else
+ {
+ //foreignAudioSearchTrackName = @"Foreign Audio Search (Bitmap)";
+ }
+ [forcedSourceNamesArray release];
+}
+
+- (void)loadChapters
+{
+ for (int i = 0; i < hb_list_count(self.title->job->list_chapter); i++)
+ {
+ hb_chapter_t *chapter = hb_list_item(self.title->job->list_chapter, i);
+ if (chapter != NULL)
+ {
+ if (chapter->title != NULL)
+ {
+ [self.chapters addObject:[NSString
+ stringWithFormat:@"%s",
+ chapter->title]];
+ }
+ else
+ {
+ [self.chapters addObject:[NSString
+ stringWithFormat:@"Chapter %d",
+ i + 1]];
+ }
+ }
+ }
+}
+
+#pragma mark - NSCoding
+
+- (void)encodeWithCoder:(NSCoder *)coder
+{
+}
+
+- (id)initWithCoder:(NSCoder *)decoder
+{
+ return nil;
+}
+
+#pragma mark - NSCopying
+
+- (instancetype)copyWithZone:(NSZone *)zone
+{
+ return nil;
+}
+
+@end