From 7481df6459c9ab20c6aa68159243f492d113736b Mon Sep 17 00:00:00 2001 From: Damiano Galassi Date: Fri, 26 Feb 2016 09:50:16 +0100 Subject: MacGui: move the objc libhb wrapper to a separate framework. --- macosx/HBAddPresetController.m | 7 +- macosx/HBAdvancedController.m | 4 +- macosx/HBAppDelegate.m | 3 +- macosx/HBApplication.m | 3 +- macosx/HBAttributedStringAdditions.h | 12 +- macosx/HBAttributedStringAdditions.m | 12 +- macosx/HBAudioController.m | 6 +- macosx/HBAudioDefaults.m | 2 + macosx/HBAudioDefaultsController.m | 3 +- macosx/HBAudioTrack.m | 5 + macosx/HBAudioTrackPreset.m | 4 + macosx/HBChapterTitlesController.m | 5 +- macosx/HBController.m | 16 +- macosx/HBCore.h | 36 +- macosx/HBCore.m | 17 +- macosx/HBDockTile.h | 12 +- macosx/HBDockTile.m | 12 +- macosx/HBFilters.m | 22 +- macosx/HBJob+HBJobConversion.m | 2 +- macosx/HBJob.m | 10 +- macosx/HBPicture.m | 10 +- macosx/HBPictureController.m | 5 +- macosx/HBPictureViewController.h | 12 +- macosx/HBPictureViewController.m | 17 +- macosx/HBPresetCoding.h | 4 +- macosx/HBPresetsViewController.m | 5 +- macosx/HBPreviewGenerator.m | 17 +- macosx/HBQueueController.m | 35 +- macosx/HBQueueOutlineView.h | 12 +- macosx/HBQueueOutlineView.m | 12 +- macosx/HBRange.m | 11 +- macosx/HBStateFormatter+Private.h | 35 + macosx/HBStateFormatter+Private.m | 160 ++++ macosx/HBStateFormatter.h | 16 +- macosx/HBStateFormatter.m | 133 ---- macosx/HBSubtitlesController.m | 4 +- macosx/HBSubtitlesDefaults.m | 1 + macosx/HBSubtitlesDefaultsController.m | 3 +- macosx/HBSubtitlesTrack.m | 4 + macosx/HBTitleSelectionController.m | 3 +- macosx/HBUtilities.h | 2 +- macosx/HBUtilities.m | 1 + macosx/HBVideo.m | 13 +- macosx/HBVideoController.m | 4 +- macosx/HandBrake Tests/HBJobTests.m | 113 --- macosx/HandBrake Tests/HBJobUndoTests.m | 182 ----- macosx/HandBrake Tests/HBMockTitle.h | 12 - macosx/HandBrake Tests/HBMockTitle.m | 167 ----- macosx/HandBrake Tests/HBPresetsTests.m | 104 --- macosx/HandBrake Tests/Info.plist | 24 - macosx/HandBrake.xcodeproj/project.pbxproj | 811 +++++++++++++++------ .../xcschemes/HandBrake [DEBUG].xcscheme | 26 +- .../xcschemes/HandBrake [RELEASE].xcscheme | 23 +- macosx/HandBrakeKit/HandBrakeKit.h | 51 ++ macosx/HandBrakeKit/Info.plist | 26 + macosx/HandBrakeKitTests/HBDictTests.m | 100 +++ macosx/HandBrakeKitTests/HBJobTests.m | 114 +++ macosx/HandBrakeKitTests/HBJobUndoTests.m | 182 +++++ macosx/HandBrakeKitTests/HBMockTitle.h | 12 + macosx/HandBrakeKitTests/HBMockTitle.m | 167 +++++ macosx/HandBrakeKitTests/HBPresetsTests.m | 104 +++ macosx/HandBrakeKitTests/Info.plist | 24 + macosx/NSArray+HBAdditions.h | 12 +- macosx/NSArray+HBAdditions.m | 12 +- 64 files changed, 1782 insertions(+), 1196 deletions(-) create mode 100644 macosx/HBStateFormatter+Private.h create mode 100644 macosx/HBStateFormatter+Private.m delete mode 100644 macosx/HandBrake Tests/HBJobTests.m delete mode 100644 macosx/HandBrake Tests/HBJobUndoTests.m delete mode 100644 macosx/HandBrake Tests/HBMockTitle.h delete mode 100644 macosx/HandBrake Tests/HBMockTitle.m delete mode 100644 macosx/HandBrake Tests/HBPresetsTests.m delete mode 100644 macosx/HandBrake Tests/Info.plist create mode 100644 macosx/HandBrakeKit/HandBrakeKit.h create mode 100644 macosx/HandBrakeKit/Info.plist create mode 100644 macosx/HandBrakeKitTests/HBDictTests.m create mode 100644 macosx/HandBrakeKitTests/HBJobTests.m create mode 100644 macosx/HandBrakeKitTests/HBJobUndoTests.m create mode 100644 macosx/HandBrakeKitTests/HBMockTitle.h create mode 100644 macosx/HandBrakeKitTests/HBMockTitle.m create mode 100644 macosx/HandBrakeKitTests/HBPresetsTests.m create mode 100644 macosx/HandBrakeKitTests/Info.plist (limited to 'macosx') diff --git a/macosx/HBAddPresetController.m b/macosx/HBAddPresetController.m index ab2097d72..bac103e15 100644 --- a/macosx/HBAddPresetController.m +++ b/macosx/HBAddPresetController.m @@ -5,15 +5,12 @@ It may be used under the terms of the GNU General Public License. */ #import "HBAddPresetController.h" -#import "HBPreset.h" -#import "HBMutablePreset.h" - -#import "HBAudioDefaults.h" -#import "HBSubtitlesDefaults.h" #import "HBAudioDefaultsController.h" #import "HBSubtitlesDefaultsController.h" +@import HandBrakeKit; + typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { HBAddPresetControllerModeNone, HBAddPresetControllerModeCustom, diff --git a/macosx/HBAdvancedController.m b/macosx/HBAdvancedController.m index 5f75a6502..8d4beb8b1 100644 --- a/macosx/HBAdvancedController.m +++ b/macosx/HBAdvancedController.m @@ -5,8 +5,8 @@ It may be used under the terms of the GNU General Public License. */ #import "HBAdvancedController.h" -#import "HBVideo.h" -#import "HBVideo+UIAdditions.h" + +@import HandBrakeKit; @interface HBAdvancedController () { diff --git a/macosx/HBAppDelegate.m b/macosx/HBAppDelegate.m index 537cc6144..80b4d5ac4 100644 --- a/macosx/HBAppDelegate.m +++ b/macosx/HBAppDelegate.m @@ -13,9 +13,10 @@ #import "HBPreferencesController.h" #import "HBQueueController.h" #import "HBOutputPanelController.h" -#import "HBCore.h" #import "HBController.h" +@import HandBrakeKit; + #define PRESET_FILE @"UserPresets.json" #define QUEUE_FILE @"Queue.hbqueue" diff --git a/macosx/HBApplication.m b/macosx/HBApplication.m index 2e0707128..1223621b4 100644 --- a/macosx/HBApplication.m +++ b/macosx/HBApplication.m @@ -6,7 +6,8 @@ #import "HBApplication.h" #import "HBExceptionAlertController.h" -#import "HBUtilities.h" + +@import HandBrakeKit.HBUtilities; @implementation HBApplication diff --git a/macosx/HBAttributedStringAdditions.h b/macosx/HBAttributedStringAdditions.h index bcc26e839..890f6054a 100644 --- a/macosx/HBAttributedStringAdditions.h +++ b/macosx/HBAttributedStringAdditions.h @@ -1,10 +1,8 @@ -// -// HBAttributedStringAdditions.h -// HandBrake -// -// Created by Damiano Galassi on 16/01/15. -// -// +/* HBAttributedStringAdditions.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import diff --git a/macosx/HBAttributedStringAdditions.m b/macosx/HBAttributedStringAdditions.m index 3700eb964..1f16a9568 100644 --- a/macosx/HBAttributedStringAdditions.m +++ b/macosx/HBAttributedStringAdditions.m @@ -1,10 +1,8 @@ -// -// HBAttributedStringAdditions.m -// HandBrake -// -// Created by Damiano Galassi on 16/01/15. -// -// +/* HBAttributedStringAdditions.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import "HBAttributedStringAdditions.h" diff --git a/macosx/HBAudioController.m b/macosx/HBAudioController.m index f3d49767d..9432e943e 100644 --- a/macosx/HBAudioController.m +++ b/macosx/HBAudioController.m @@ -5,11 +5,11 @@ It may be used under the terms of the GNU General Public License. */ #import "HBAudioController.h" - -#import "HBAudio.h" -#import "HBAudioDefaults.h" #import "HBAudioDefaultsController.h" +@import HandBrakeKit.HBAudio; +@import HandBrakeKit.HBAudioDefaults; + @interface HBAudioController () @property (nonatomic, readwrite, strong) HBAudioDefaultsController *defaultsController; diff --git a/macosx/HBAudioDefaults.m b/macosx/HBAudioDefaults.m index 5035f8c0d..60bb933c8 100644 --- a/macosx/HBAudioDefaults.m +++ b/macosx/HBAudioDefaults.m @@ -7,6 +7,8 @@ #import "HBAudioDefaults.h" #import "HBAudioTrackPreset.h" #import "HBCodingUtilities.h" +#import "HBMutablePreset.h" + #import "hb.h" #import "lang.h" diff --git a/macosx/HBAudioDefaultsController.m b/macosx/HBAudioDefaultsController.m index 7f8db2009..6b956cbfd 100644 --- a/macosx/HBAudioDefaultsController.m +++ b/macosx/HBAudioDefaultsController.m @@ -5,9 +5,10 @@ It may be used under the terms of the GNU General Public License. */ #import "HBAudioDefaultsController.h" -#import "HBAudioDefaults.h" #import "HBLanguagesSelection.h" +@import HandBrakeKit.HBAudioDefaults; + static void *HBAudioDefaultsContext = &HBAudioDefaultsContext; @interface HBAudioDefaultsController () diff --git a/macosx/HBAudioTrack.m b/macosx/HBAudioTrack.m index 7a6eb725e..aa8f8f99b 100644 --- a/macosx/HBAudioTrack.m +++ b/macosx/HBAudioTrack.m @@ -671,6 +671,11 @@ static NSMutableArray *masterBitRateArray = nil; { retval = [NSSet setWithObjects:@"track", @"mixdown", nil]; } + else + { + retval = [NSSet set]; + } + return retval; } diff --git a/macosx/HBAudioTrackPreset.m b/macosx/HBAudioTrackPreset.m index 5ce04258f..fe4329082 100644 --- a/macosx/HBAudioTrackPreset.m +++ b/macosx/HBAudioTrackPreset.m @@ -310,6 +310,10 @@ static void *HBAudioEncoderContex = &HBAudioEncoderContex; { retval = [NSSet setWithObjects:@"encoder", @"mixdown", @"sampleRate", nil]; } + else + { + retval = [NSSet set]; + } return retval; } diff --git a/macosx/HBChapterTitlesController.m b/macosx/HBChapterTitlesController.m index 7f04a5139..6fabfb5bc 100644 --- a/macosx/HBChapterTitlesController.m +++ b/macosx/HBChapterTitlesController.m @@ -5,8 +5,9 @@ It may be used under the terms of the GNU General Public License. */ #import "HBChapterTitlesController.h" -#import "HBChapter.h" -#import "HBJob.h" + +@import HandBrakeKit.HBChapter; +@import HandBrakeKit.HBJob; @interface HBChapterTitlesController () diff --git a/macosx/HBController.m b/macosx/HBController.m index 0bbf67ddf..c7faf6257 100644 --- a/macosx/HBController.m +++ b/macosx/HBController.m @@ -13,7 +13,6 @@ #import "HBPresetsManager.h" #import "HBPreset.h" #import "HBMutablePreset.h" -#import "HBUtilities.h" #import "HBPictureViewController.h" #import "HBVideoController.h" @@ -28,10 +27,7 @@ #import "HBPresetsViewController.h" #import "HBAddPresetController.h" -#import "HBCore.h" -#import "HBTitle.h" -#import "HBJob.h" -#import "HBStateFormatter.h" +@import HandBrakeKit; @interface HBController () { @@ -548,17 +544,15 @@ int hb_num_previews = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue]; int min_title_duration_seconds = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MinTitleScanSeconds"] intValue]; - HBStateFormatter *formatter = [[HBStateFormatter alloc] init]; - [self.core scanURL:mediaURL titleIndex:index previews:hb_num_previews minDuration:min_title_duration_seconds - progressHandler:^(HBState state, hb_state_t hb_state) + progressHandler:^(HBState state, HBProgress progress, NSString *info) { - fSrcDVD2Field.stringValue = [formatter stateToString:hb_state title:nil]; + fSrcDVD2Field.stringValue = info; fScanIndicator.hidden = NO; fScanHorizontalLine.hidden = YES; - fScanIndicator.doubleValue = [formatter stateToPercentComplete:hb_state]; + fScanIndicator.doubleValue = progress.percent; } completionHandler:^(HBCoreResult result) { @@ -826,7 +820,7 @@ - (void)chapterPopUpChanged:(NSNotification *)notification { // We're changing the chapter range - we may need to flip the m4v/mp4 extension - if (self.job.container & HB_MUX_MASK_MP4) + if (self.job.container & 0x030000 /*HB_MUX_MASK_MP4*/) { [self updateFileExtension:notification]; } diff --git a/macosx/HBCore.h b/macosx/HBCore.h index 1c2ab306b..829bdb53b 100644 --- a/macosx/HBCore.h +++ b/macosx/HBCore.h @@ -5,24 +5,34 @@ It may be used under the terms of the GNU General Public License. */ #import -#include "hb.h" @class HBJob; @class HBPicture; @class HBTitle; +@class HBStateFormatter; NS_ASSUME_NONNULL_BEGIN +struct HBProgress +{ + double percent; + + int hours; + int minutes; + int seconds; +}; +typedef struct HBProgress HBProgress; + // These constants specify the current state of HBCore. typedef NS_ENUM(NSUInteger, HBState) { - HBStateIdle = HB_STATE_IDLE, ///< HB is doing nothing - HBStateScanning = HB_STATE_SCANNING, ///< HB is scanning - HBStateScanDone = HB_STATE_SCANDONE, ///< Scanning has been completed - HBStateWorking = HB_STATE_WORKING, ///< HB is encoding - HBStatePaused = HB_STATE_PAUSED, ///< Encoding is paused - HBStateWorkDone = HB_STATE_WORKDONE, ///< Encoding has been completed - HBStateMuxing = HB_STATE_MUXING, ///< HB is muxing - HBStateSearching = HB_STATE_SEARCHING ///< HB is searching + HBStateIdle = 1, ///< HB is doing nothing + HBStateScanning = 2, ///< HB is scanning + HBStateScanDone = 4, ///< Scanning has been completed + HBStateWorking = 8, ///< HB is encoding + HBStatePaused = 16, ///< Encoding is paused + HBStateWorkDone = 32, ///< Encoding has been completed + HBStateMuxing = 64, ///< HB is muxing + HBStateSearching = 128 ///< HB is searching }; // These constants specify the result of a scan or encode. @@ -32,7 +42,7 @@ typedef NS_ENUM(NSUInteger, HBCoreResult) { HBCoreResultFailed, }; -typedef void (^HBCoreProgressHandler)(HBState state, hb_state_t hb_state); +typedef void (^HBCoreProgressHandler)(HBState state, HBProgress progress, NSString *info); typedef void (^HBCoreCompletionHandler)(HBCoreResult result); /** @@ -89,6 +99,12 @@ typedef void (^HBCoreCompletionHandler)(HBCoreResult result); */ @property (nonatomic, readwrite) int logLevel; + +/** + * State formatter. + */ +@property (nonatomic, readwrite, strong) HBStateFormatter *stateFormatter; + /** * Current state of HBCore. */ diff --git a/macosx/HBCore.m b/macosx/HBCore.m index 3c2ac0b8b..15116ac56 100644 --- a/macosx/HBCore.m +++ b/macosx/HBCore.m @@ -10,6 +10,7 @@ #import "HBDVDDetector.h" #import "HBUtilities.h" +#import "HBStateFormatter+Private.h" #import "HBTitlePrivate.h" #include @@ -98,6 +99,7 @@ static void hb_error_handler(const char *errmsg) _updateTimerQueue = dispatch_queue_create("fr.handbrake.coreQueue", DISPATCH_QUEUE_SERIAL); _titles = @[]; + _stateFormatter = [[HBStateFormatter alloc] init]; _hb_state = malloc(sizeof(struct hb_state_s)); _logLevel = level; @@ -557,7 +559,20 @@ static void hb_error_handler(const char *errmsg) { if (self.progressHandler) { - self.progressHandler(self.state, *(self.hb_state)); + hb_state_t state = *(self.hb_state); + HBProgress progress = {0, 0, 0, 0}; + progress.percent = [self.stateFormatter stateToPercentComplete:state]; + + if (state.state == HB_STATE_WORKING) + { + progress.hours = state.param.working.hours; + progress.minutes = state.param.working.minutes; + progress.seconds = state.param.working.seconds; + } + + NSString *info = [self.stateFormatter stateToString:state]; + + self.progressHandler(self.state, progress, info); } } diff --git a/macosx/HBDockTile.h b/macosx/HBDockTile.h index caac2844e..2b14cc824 100644 --- a/macosx/HBDockTile.h +++ b/macosx/HBDockTile.h @@ -1,10 +1,8 @@ -// -// HBDockTile.h -// HandBrake -// -// Created by Damiano Galassi on 20/08/14. -// -// +/* HBDockTile.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import diff --git a/macosx/HBDockTile.m b/macosx/HBDockTile.m index dfad7d5ec..38a4dda3f 100644 --- a/macosx/HBDockTile.m +++ b/macosx/HBDockTile.m @@ -1,10 +1,8 @@ -// -// HBDockTile.m -// HandBrake -// -// Created by Damiano Galassi on 20/08/14. -// -// +/* HBDockTile.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import "HBDockTile.h" #import "DockTextField.h" diff --git a/macosx/HBFilters.m b/macosx/HBFilters.m index 2d7028431..7df571b8d 100644 --- a/macosx/HBFilters.m +++ b/macosx/HBFilters.m @@ -7,6 +7,8 @@ #import "HBFilters.h" #import "HBCodingUtilities.h" #import "NSDictionary+HBAdditions.h" +#import "HBMutablePreset.h" + #include "hb.h" NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; @@ -280,33 +282,37 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; { retval = [NSSet setWithObjects:@"detelecine", @"detelecineCustomString", @"deinterlace", @"deinterlacePreset", @"deinterlaceCustomString", @"denoise", @"denoisePreset", @"denoiseTune", @"denoiseCustomString", @"deblock", @"grayscale", nil]; } - if ([key isEqualToString:@"customDetelecineSelected"] || - [key isEqualToString:@"customDeinterlaceSelected"]) + else if ([key isEqualToString:@"customDetelecineSelected"]) { - retval = [NSSet setWithObjects:@"detelecine", @"deinterlace", nil]; + retval = [NSSet setWithObjects:@"detelecine", nil]; } - if ([key isEqualToString:@"denoiseTunesAvailable"] || + else if ([key isEqualToString:@"denoiseTunesAvailable"] || [key isEqualToString:@"customDenoiseSelected"]) { retval = [NSSet setWithObjects:@"denoise", @"denoisePreset", nil]; } - if ([key isEqualToString:@"denoiseEnabled"]) + else if ([key isEqualToString:@"denoiseEnabled"]) { retval = [NSSet setWithObject:@"denoise"]; } - if ([key isEqualToString:@"deinterlaceEnabled"]) + else if ([key isEqualToString:@"deinterlaceEnabled"]) { retval = [NSSet setWithObject:@"deinterlace"]; } - if ([key isEqualToString:@"customDeinterlaceSelected"] || + else if ([key isEqualToString:@"customDeinterlaceSelected"] || [key isEqualToString:@"deinterlacePresets"]) { retval = [NSSet setWithObjects:@"deinterlace", @"deinterlacePreset", nil]; } - if ([key isEqualToString:@"deblockSummary"]) + else if ([key isEqualToString:@"deblockSummary"]) { retval = [NSSet setWithObject:@"deblock"]; } + else + { + retval = [NSSet set]; + } + return retval; } diff --git a/macosx/HBJob+HBJobConversion.m b/macosx/HBJob+HBJobConversion.m index 5db1bd840..aa109971f 100644 --- a/macosx/HBJob+HBJobConversion.m +++ b/macosx/HBJob+HBJobConversion.m @@ -462,7 +462,7 @@ self.picture.width, self.picture.height, self.picture.cropTop, self.picture.cropBottom, self.picture.cropLeft, self.picture.cropRight].UTF8String); - + // Add grayscale filter if (self.filters.grayscale) { diff --git a/macosx/HBJob.m b/macosx/HBJob.m index cbdbfbe15..e97c46cb6 100644 --- a/macosx/HBJob.m +++ b/macosx/HBJob.m @@ -11,6 +11,7 @@ #import "HBSubtitlesDefaults.h" #import "HBCodingUtilities.h" +#import "HBMutablePreset.h" #include "hb.h" @@ -180,17 +181,20 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification"; + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { - NSSet *retval = nil; + NSSet *retval = [NSSet set]; if ([key isEqualToString:@"mp4OptionsEnabled"]) { retval = [NSSet setWithObjects:@"container", nil]; } - - if ([key isEqualToString:@"mp4iPodCompatibleEnabled"]) + else if ([key isEqualToString:@"mp4iPodCompatibleEnabled"]) { retval = [NSSet setWithObjects:@"container", @"video.encoder", nil]; } + else + { + retval = [NSSet set]; + } return retval; } diff --git a/macosx/HBPicture.m b/macosx/HBPicture.m index d241ce6d8..b1fc690a6 100644 --- a/macosx/HBPicture.m +++ b/macosx/HBPicture.m @@ -8,6 +8,7 @@ #import "HBTitle.h" #import "HBCodingUtilities.h" +#import "HBMutablePreset.h" #include "hb.h" @@ -430,17 +431,22 @@ NSString * const HBPictureChangedNotification = @"HBPictureChangedNotification"; retval = [NSSet setWithObjects:@"anamorphicMode", nil]; } - if ([key isEqualToString:@"maxWidth"] || + else if ([key isEqualToString:@"maxWidth"] || [key isEqualToString:@"maxHeight"]) { retval = [NSSet setWithObjects:@"cropTop", @"cropBottom", @"cropLeft", @"cropRight", nil]; } - if ([key isEqualToString:@"info"] || [key isEqualToString:@"summary"]) + else if ([key isEqualToString:@"info"] || [key isEqualToString:@"summary"]) { retval = [NSSet setWithObjects:@"parWidth", @"parHeight", @"displayWidth", @"width", @"height",@"anamorphicMode", @"cropTop", @"cropBottom", @"cropLeft", @"cropRight", nil]; } + else + { + retval = [NSSet set]; + } + return retval; } diff --git a/macosx/HBPictureController.m b/macosx/HBPictureController.m index b6fed1f28..371b6bc01 100644 --- a/macosx/HBPictureController.m +++ b/macosx/HBPictureController.m @@ -5,8 +5,9 @@ It may be used under the terms of the GNU General Public License. */ #import "HBPictureController.h" -#import "HBFilters.h" -#import "HBPicture.h" + +@import HandBrakeKit.HBFilters; +@import HandBrakeKit.HBPicture; static void *HBPictureControllerContext = &HBPictureControllerContext; diff --git a/macosx/HBPictureViewController.h b/macosx/HBPictureViewController.h index 4ee956fae..3b92615ca 100644 --- a/macosx/HBPictureViewController.h +++ b/macosx/HBPictureViewController.h @@ -1,10 +1,8 @@ -// -// HBPictureViewController.h -// HandBrake -// -// Created by Damiano Galassi on 24/07/15. -// -// +/* HBPictureViewController.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import diff --git a/macosx/HBPictureViewController.m b/macosx/HBPictureViewController.m index 87618cb97..e462a06d7 100644 --- a/macosx/HBPictureViewController.m +++ b/macosx/HBPictureViewController.m @@ -1,14 +1,13 @@ -// -// HBPictureViewController.m -// HandBrake -// -// Created by Damiano Galassi on 24/07/15. -// -// +/* HBPictureViewController.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import "HBPictureViewController.h" -#import "HBFilters.h" -#import "HBPicture.h" + +@import HandBrakeKit.HBFilters; +@import HandBrakeKit.HBPicture; static void *HBPictureViewControllerContext = &HBPictureViewControllerContext; diff --git a/macosx/HBPresetCoding.h b/macosx/HBPresetCoding.h index aca9aac34..9b51f6d3a 100644 --- a/macosx/HBPresetCoding.h +++ b/macosx/HBPresetCoding.h @@ -6,8 +6,8 @@ #import -#import "HBPreset.h" -#import "HBMutablePreset.h" +@class HBPreset; +@class HBMutablePreset; @protocol HBPresetCoding diff --git a/macosx/HBPresetsViewController.m b/macosx/HBPresetsViewController.m index 532968692..1eaab7e30 100644 --- a/macosx/HBPresetsViewController.m +++ b/macosx/HBPresetsViewController.m @@ -5,8 +5,9 @@ It may be used under the terms of the GNU General Public License. */ #import "HBPresetsViewController.h" -#import "HBPresetsManager.h" -#import "HBPreset.h" + +@import HandBrakeKit.HBPresetsManager; +@import HandBrakeKit.HBPreset; // drag and drop pasteboard type #define kHandBrakePresetPBoardType @"handBrakePresetPBoardType" diff --git a/macosx/HBPreviewGenerator.m b/macosx/HBPreviewGenerator.m index bf27b10e7..a12dbe5fb 100644 --- a/macosx/HBPreviewGenerator.m +++ b/macosx/HBPreviewGenerator.m @@ -6,12 +6,8 @@ // #import "HBPreviewGenerator.h" -#import "HBUtilities.h" -#import "HBCore.h" -#import "HBJob.h" -#import "HBStateFormatter.h" -#import "HBPicture+UIAdditions.h" +@import HandBrakeKit; @interface HBPreviewGenerator () @@ -177,12 +173,12 @@ NSURL *destURL = nil; // Generate the file url and directories. - if (self.job.container & HB_MUX_MASK_MP4) + if (self.job.container & 0x030000 /*HB_MUX_MASK_MP4*/) { // we use .m4v for our mp4 files so that ac3 and chapters in mp4 will play properly. destURL = [HBPreviewGenerator generateFileURLForType:@"m4v"]; } - else if (self.job.container & HB_MUX_MASK_MKV) + else if (self.job.container & 0x300000 /*HB_MUX_MASK_MKV*/) { destURL = [HBPreviewGenerator generateFileURLForType:@"mkv"]; } @@ -216,12 +212,13 @@ HBStateFormatter *formatter = [[HBStateFormatter alloc] init]; formatter.twoLines = NO; formatter.showPassNumber = NO; + formatter.title = NSLocalizedString(@"preview", nil); // start the actual encode [self.core encodeJob:job - progressHandler:^(HBState state, hb_state_t hb_state) { - [self.delegate updateProgress:[formatter stateToPercentComplete:hb_state] - info:[formatter stateToString:hb_state title:@"preview"]]; + progressHandler:^(HBState state, HBProgress progress, NSString *info) { + [self.delegate updateProgress:progress.percent + info:info]; } completionHandler:^(HBCoreResult result) { // Encode done, call the delegate and close libhb handle diff --git a/macosx/HBQueueController.m b/macosx/HBQueueController.m index 8c020539b..ac33e8dd0 100644 --- a/macosx/HBQueueController.m +++ b/macosx/HBQueueController.m @@ -6,19 +6,11 @@ #import "HBQueueController.h" -#import "HBCore.h" #import "HBController.h" #import "HBAppDelegate.h" #import "HBQueueOutlineView.h" -#import "HBUtilities.h" -#import "HBJob.h" -#import "HBJob+UIAdditions.h" - -#import "HBStateFormatter.h" - -#import "HBDistributedArray.h" #import "NSArray+HBAdditions.h" #import "HBDockTile.h" @@ -27,6 +19,8 @@ #import "HBJobOutputFileWriter.h" #import "HBPreferencesController.h" +@import HandBrakeKit; + // Pasteboard type for or drag operations #define DragDropSimplePboardType @"HBQueueCustomOutlineViewPboardType" @@ -657,12 +651,11 @@ - (void)encodeJob:(HBJob *)job { NSParameterAssert(job); - HBStateFormatter *formatter = [[HBStateFormatter alloc] init]; // Progress handler - void (^progressHandler)(HBState state, hb_state_t hb_state) = ^(HBState state, hb_state_t hb_state) + void (^progressHandler)(HBState state, HBProgress progress, NSString *info) = ^(HBState state, HBProgress progress, NSString *info) { - NSString *status = [formatter stateToString:hb_state title:nil]; + NSString *status = info; self.progressTextField.stringValue = status; [self.controller setQueueInfo:status progress:0 hidden:NO]; }; @@ -701,23 +694,19 @@ // Reset the title in the job. job.title = self.core.titles[0]; - HBStateFormatter *converter = [[HBStateFormatter alloc] init]; - NSString *destinationName = job.destURL.lastPathComponent; + HBStateFormatter *formatter = [[HBStateFormatter alloc] init]; + formatter.title = job.destURL.lastPathComponent; + self.core.stateFormatter = formatter; // Progress handler - void (^progressHandler)(HBState state, hb_state_t hb_state) = ^(HBState state, hb_state_t hb_state) + void (^progressHandler)(HBState state, HBProgress progress, NSString *info) = ^(HBState state, HBProgress progress, NSString *info) { - NSString *string = [converter stateToString:hb_state title:destinationName]; - CGFloat progress = [converter stateToPercentComplete:hb_state]; - if (state == HBStateWorking) { // Update dock icon - if (self.dockIconProgress < 100.0 * progress) + if (self.dockIconProgress < 100.0 * progress.percent) { - #define p hb_state.param.working - [self.dockTile updateDockIcon:progress hours:p.hours minutes:p.minutes seconds:p.seconds]; - #undef p + [self.dockTile updateDockIcon:progress.percent hours:progress.hours minutes:progress.minutes seconds:progress.seconds]; self.dockIconProgress += dockTileUpdateFrequency; } } @@ -727,8 +716,8 @@ } // Update text field - self.progressTextField.stringValue = string; - [self.controller setQueueInfo:string progress:progress hidden:NO]; + self.progressTextField.stringValue = info; + [self.controller setQueueInfo:info progress:progress.percent hidden:NO]; }; // Completion handler diff --git a/macosx/HBQueueOutlineView.h b/macosx/HBQueueOutlineView.h index 7422973db..8565237cb 100644 --- a/macosx/HBQueueOutlineView.h +++ b/macosx/HBQueueOutlineView.h @@ -1,10 +1,8 @@ -// -// HBQueueOutlineView.h -// HandBrake -// -// Created by Damiano Galassi on 23/11/14. -// -// +/* HBQueueOutlineView.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import diff --git a/macosx/HBQueueOutlineView.m b/macosx/HBQueueOutlineView.m index 0c7bce87f..9719686c1 100644 --- a/macosx/HBQueueOutlineView.m +++ b/macosx/HBQueueOutlineView.m @@ -1,10 +1,8 @@ -// -// HBQueueOutlineView.m -// HandBrake -// -// Created by Damiano Galassi on 23/11/14. -// -// +/* HBQueueOutlineView.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import "HBQueueOutlineView.h" diff --git a/macosx/HBRange.m b/macosx/HBRange.m index 2d17e36cd..b048b0e90 100644 --- a/macosx/HBRange.m +++ b/macosx/HBRange.m @@ -159,14 +159,17 @@ NSString *HBRangeChangedNotification = @"HBRangeChangedNotification"; retval = [NSSet setWithObjects:@"type", @"chapterStart", @"chapterStop", @"frameStart", @"frameStop", @"secondsStart", @"secondsStop",nil]; } - - if ([key isEqualToString:@"chaptersSelected"] || - [key isEqualToString:@"secondsSelected"] || - [key isEqualToString:@"framesSelected"]) + else if ([key isEqualToString:@"chaptersSelected"] || + [key isEqualToString:@"secondsSelected"] || + [key isEqualToString:@"framesSelected"]) { retval = [NSSet setWithObjects:@"type",nil]; } + else + { + retval = [NSSet set]; + } return retval; } diff --git a/macosx/HBStateFormatter+Private.h b/macosx/HBStateFormatter+Private.h new file mode 100644 index 000000000..ee71b8141 --- /dev/null +++ b/macosx/HBStateFormatter+Private.h @@ -0,0 +1,35 @@ +// +// HBStateFormatter+Private.h +// HandBrake +// +// Created by Damiano Galassi on 24/02/16. +// +// + +#import +#import "HBStateFormatter.h" +#include "hb.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface HBStateFormatter (Private) + +/** + * Returns a string containing the formatted value of the provided hb_state_t struct. + * + * @param s hb_state_t + * @param title the title of the current job + */ +- (NSString *)stateToString:(hb_state_t)s; + +/** + * Returns a float containing the completion percent. + * the float range is [0,1] + * + * @param s hb_state_t + */ +- (float)stateToPercentComplete:(hb_state_t)s; + +@end + +NS_ASSUME_NONNULL_END diff --git a/macosx/HBStateFormatter+Private.m b/macosx/HBStateFormatter+Private.m new file mode 100644 index 000000000..7c5f600ee --- /dev/null +++ b/macosx/HBStateFormatter+Private.m @@ -0,0 +1,160 @@ +// +// HBStateFormatter+Private.m +// HandBrake +// +// Created by Damiano Galassi on 24/02/16. +// +// + +#import "HBStateFormatter+Private.h" + +@implementation HBStateFormatter (Private) + +- (NSString *)stateToString:(hb_state_t)s +{ + NSMutableString *string = [NSMutableString string]; + + switch (s.state) + { +#define p s.param.working + + case HB_STATE_SEARCHING: + { + [string appendFormat: + NSLocalizedString(@"Searching for start point… : %.2f %%", nil), + 100.0 * p.progress]; + + if (p.seconds > -1) + { + [string appendFormat:NSLocalizedString(@" (ETA %02dh%02dm%02ds)", nil), p.hours, p.minutes, p.seconds]; + } + + break; + } + + case HB_STATE_WORKING: + { + [string appendFormat:NSLocalizedString(@"Encoding %@ ", nil), self.title]; + + if (self.twoLines) + { + [string appendString:@"\n"]; + } + + if (self.showPassNumber) + { + if (p.pass_id == HB_PASS_SUBTITLE) + { + [string appendFormat: + NSLocalizedString(@"Pass %d %@ of %d, %.2f %%", nil), + p.pass, + NSLocalizedString(@"(subtitle scan)", nil), + p.pass_count, 100.0 * p.progress]; + } + else + { + [string appendFormat: + NSLocalizedString(@"Pass %d of %d, %.2f %%", nil), + p.pass, p.pass_count, 100.0 * p.progress]; + } + } + + if (p.seconds > -1) + { + if (p.rate_cur > 0.0) + { + [string appendFormat: + NSLocalizedString(@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", nil), + p.rate_cur, p.rate_avg, p.hours, p.minutes, p.seconds]; + } + else + { + [string appendFormat: + NSLocalizedString(@" (ETA %02dh%02dm%02ds)", nil), + p.hours, p.minutes, p.seconds]; + } + } + + break; + } + + case HB_STATE_MUXING: + { + [string appendString:NSLocalizedString(@"Muxing…", nil)]; + break; + } + + case HB_STATE_PAUSED: + { + [string appendString:NSLocalizedString(@"Paused", nil)]; + break; + } + +#undef p + case HB_STATE_SCANNING: + { +#define p s.param.scanning + if (p.preview_cur) + { + [string appendFormat: + NSLocalizedString(@"Scanning title %d of %d, preview %d…", nil), + p.title_cur, p.title_count, + p.preview_cur]; + } + else + { + [string appendFormat: + NSLocalizedString(@"Scanning title %d of %d…", nil), + p.title_cur, p.title_count]; + } +#undef p + break; + } + + default: + break; + } + + return string; +} + +- (float)stateToPercentComplete:(hb_state_t)s +{ + float progress = 0; + + switch (s.state) + { + case HB_STATE_WORKING: +#define p s.param.working + progress = (p.progress + p.pass - 1) / p.pass_count; +#undef p + + break; + + case HB_STATE_SCANNING: +#define p s.param.scanning + progress = p.progress; +#undef p + break; + + case HB_STATE_MUXING: + progress = 1; + break; + + default: + break; + } + + if (progress < 0) + { + progress = 0; + } + else if (progress > 1) + { + progress = 1; + } + + return progress; +} + +@end diff --git a/macosx/HBStateFormatter.h b/macosx/HBStateFormatter.h index 823230929..49c3599e2 100644 --- a/macosx/HBStateFormatter.h +++ b/macosx/HBStateFormatter.h @@ -5,7 +5,6 @@ It may be used under the terms of the GNU General Public License. */ #import -#include "hb.h" NS_ASSUME_NONNULL_BEGIN @@ -15,20 +14,9 @@ NS_ASSUME_NONNULL_BEGIN @interface HBStateFormatter : NSObject /** - * Returns a string containing the formatted value of the provided hb_state_t struct. - * - * @param s hb_state_t - * @param title the title of the current job + * The title to show in the output info. */ -- (NSString *)stateToString:(hb_state_t)s title:(nullable NSString *)title; - -/** - * Returns a CGFloat containing the completion percent. - * the CGFloat range is [0,1] - * - * @param s hb_state_t - */ -- (CGFloat)stateToPercentComplete:(hb_state_t)s; +@property (nonatomic, readwrite, copy) NSString *title; /** * Break the output string in two lines. diff --git a/macosx/HBStateFormatter.m b/macosx/HBStateFormatter.m index 13c987a50..5dadd821d 100644 --- a/macosx/HBStateFormatter.m +++ b/macosx/HBStateFormatter.m @@ -19,137 +19,4 @@ return self; } -- (NSString *)stateToString:(hb_state_t)s title:(NSString *)title -{ - NSMutableString *string = [NSMutableString string]; - - switch (s.state) - { - #define p s.param.working - - case HB_STATE_SEARCHING: - { - [string appendFormat: - NSLocalizedString(@"Searching for start point… : %.2f %%", nil), - 100.0 * p.progress]; - - if (p.seconds > -1) - { - [string appendFormat:NSLocalizedString(@" (ETA %02dh%02dm%02ds)", nil), p.hours, p.minutes, p.seconds]; - } - - break; - } - - case HB_STATE_WORKING: - { - [string appendFormat:NSLocalizedString(@"Encoding %@ ", nil), title]; - - if (_twoLines) - { - [string appendString:@"\n"]; - } - - if (_showPassNumber) - { - if (p.pass_id == HB_PASS_SUBTITLE) - { - [string appendFormat: - NSLocalizedString(@"Pass %d %@ of %d, %.2f %%", nil), - p.pass, - NSLocalizedString(@"(subtitle scan)", nil), - p.pass_count, 100.0 * p.progress]; - } - else - { - [string appendFormat: - NSLocalizedString(@"Pass %d of %d, %.2f %%", nil), - p.pass, p.pass_count, 100.0 * p.progress]; - } - } - - if (p.seconds > -1) - { - if (p.rate_cur > 0.0) - { - [string appendFormat: - NSLocalizedString(@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", nil), - p.rate_cur, p.rate_avg, p.hours, p.minutes, p.seconds]; - } - else - { - [string appendFormat: - NSLocalizedString(@" (ETA %02dh%02dm%02ds)", nil), - p.hours, p.minutes, p.seconds]; - } - } - - break; - } - - case HB_STATE_MUXING: - { - [string appendString:NSLocalizedString(@"Muxing…", nil)]; - break; - } - - case HB_STATE_PAUSED: - { - [string appendString:NSLocalizedString(@"Paused", nil)]; - break; - } - - #undef p - case HB_STATE_SCANNING: - { - #define p s.param.scanning - if (p.preview_cur) - { - [string appendFormat: - NSLocalizedString(@"Scanning title %d of %d, preview %d…", nil), - p.title_cur, p.title_count, - p.preview_cur]; - } - else - { - [string appendFormat: - NSLocalizedString(@"Scanning title %d of %d…", nil), - p.title_cur, p.title_count]; - } - #undef p - break; - } - - default: - break; - } - - return string; -} - -- (CGFloat)stateToPercentComplete:(hb_state_t)s -{ - CGFloat progress = 0; - - switch (s.state) - { - case HB_STATE_WORKING: - #define p s.param.working - progress = (p.progress + p.pass - 1) / p.pass_count; - #undef p - - break; - - case HB_STATE_SCANNING: - #define p s.param.scanning - progress = p.progress; - #undef p - - default: - break; - } - - return progress; -} - @end diff --git a/macosx/HBSubtitlesController.m b/macosx/HBSubtitlesController.m index 3cd47e215..4576c6601 100644 --- a/macosx/HBSubtitlesController.m +++ b/macosx/HBSubtitlesController.m @@ -7,8 +7,8 @@ #import "HBSubtitlesController.h" #import "HBSubtitlesDefaultsController.h" -#import "HBSubtitles.h" -#import "HBSubtitlesDefaults.h" +@import HandBrakeKit.HBSubtitles; +@import HandBrakeKit.HBSubtitlesDefaults; @interface HBSubtitlesController () diff --git a/macosx/HBSubtitlesDefaults.m b/macosx/HBSubtitlesDefaults.m index ac52c4a52..5dfd4b5a8 100644 --- a/macosx/HBSubtitlesDefaults.m +++ b/macosx/HBSubtitlesDefaults.m @@ -6,6 +6,7 @@ #import "HBSubtitlesDefaults.h" #import "HBCodingUtilities.h" +#import "HBMutablePreset.h" @implementation HBSubtitlesDefaults diff --git a/macosx/HBSubtitlesDefaultsController.m b/macosx/HBSubtitlesDefaultsController.m index a4e71bbff..e58822c25 100644 --- a/macosx/HBSubtitlesDefaultsController.m +++ b/macosx/HBSubtitlesDefaultsController.m @@ -5,9 +5,10 @@ It may be used under the terms of the GNU General Public License. */ #import "HBSubtitlesDefaultsController.h" -#import "HBSubtitlesDefaults.h" #import "HBLanguagesSelection.h" +@import HandBrakeKit.HBSubtitlesDefaults; + static void *HBSubtitlesDefaultsContext = &HBSubtitlesDefaultsContext; @interface HBSubtitlesDefaultsController () diff --git a/macosx/HBSubtitlesTrack.m b/macosx/HBSubtitlesTrack.m index cc365d411..cc5543643 100644 --- a/macosx/HBSubtitlesTrack.m +++ b/macosx/HBSubtitlesTrack.m @@ -294,6 +294,10 @@ NSString *keySubTrackSrtFileURL = @"keySubTrackSrtFileURL"; { retval = [NSSet setWithObjects: @"isEnabled", @"sourceTrackIdx", nil]; } + else + { + retval = [NSSet set]; + } return retval; } diff --git a/macosx/HBTitleSelectionController.m b/macosx/HBTitleSelectionController.m index 0865ff22d..319808a69 100644 --- a/macosx/HBTitleSelectionController.m +++ b/macosx/HBTitleSelectionController.m @@ -5,7 +5,8 @@ It may be used under the terms of the GNU General Public License. */ #import "HBTitleSelectionController.h" -#import "HBTitle.h" + +@import HandBrakeKit.HBTitle; @interface HBTitleSelection : NSObject @property (nonatomic, readonly) HBTitle *title; diff --git a/macosx/HBUtilities.h b/macosx/HBUtilities.h index 5166b1d07..7e40a0135 100644 --- a/macosx/HBUtilities.h +++ b/macosx/HBUtilities.h @@ -4,7 +4,7 @@ Homepage: . It may be used under the terms of the GNU General Public License. */ -#import +#import NS_ASSUME_NONNULL_BEGIN diff --git a/macosx/HBUtilities.m b/macosx/HBUtilities.m index 061e01ca5..46f1aae03 100644 --- a/macosx/HBUtilities.m +++ b/macosx/HBUtilities.m @@ -5,6 +5,7 @@ It may be used under the terms of the GNU General Public License. */ #import "HBUtilities.h" +#import #import "HBTitle.h" #import "HBJob.h" diff --git a/macosx/HBVideo.m b/macosx/HBVideo.m index 70b7c09a1..14c14f47c 100644 --- a/macosx/HBVideo.m +++ b/macosx/HBVideo.m @@ -7,6 +7,8 @@ #import "HBVideo.h" #import "HBJob.h" #import "HBCodingUtilities.h" +#import "HBMutablePreset.h" + #include "hb.h" NSString * const HBVideoChangedNotification = @"HBVideoChangedNotification"; @@ -322,23 +324,28 @@ NSString * const HBVideoChangedNotification = @"HBVideoChangedNotification"; // Tell KVO to reload the x264 unparse string // after values changes. - if ([key isEqualToString:@"unparseOptions"]) + else if ([key isEqualToString:@"unparseOptions"]) { retval = [NSSet setWithObjects:@"encoder", @"preset", @"tune", @"profile", @"level", @"videoOptionExtra", @"fastDecode", @"job.picture.width", @"job.picture.height", nil]; } - if ([key isEqualToString:@"encoders"]) + else if ([key isEqualToString:@"encoders"]) { retval = [NSSet setWithObjects:@"job.container", nil]; } - if ([key isEqualToString:@"fastDecodeSupported"] || + else if ([key isEqualToString:@"fastDecodeSupported"] || [key isEqualToString:@"turboTwoPassSupported"]) { retval = [NSSet setWithObjects:@"encoder", nil]; } + else + { + retval = [NSSet set]; + } + return retval; } diff --git a/macosx/HBVideoController.m b/macosx/HBVideoController.m index 9a0ecb14a..3e5719f09 100644 --- a/macosx/HBVideoController.m +++ b/macosx/HBVideoController.m @@ -6,8 +6,8 @@ #import "HBVideoController.h" #import "HBAdvancedController.h" -#import "HBVideo+UIAdditions.h" -#import "HBJob.h" + +@import HandBrakeKit; #include "hb.h" diff --git a/macosx/HandBrake Tests/HBJobTests.m b/macosx/HandBrake Tests/HBJobTests.m deleted file mode 100644 index ddcb28a86..000000000 --- a/macosx/HandBrake Tests/HBJobTests.m +++ /dev/null @@ -1,113 +0,0 @@ -/* HBJobTests.m $ - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#import -#import - -#import "HBMockTitle.h" -#import "HBJob.h" -#import "HBPicture.h" -#import "HBJob+UIAdditions.h" -#import "HBPresetsManager.h" -#import "HBPreset.h" - -@interface HBJobTests : XCTestCase - -@property (nonatomic, readonly) HBPresetsManager *manager; - -@property (nonatomic, readwrite) HBPreset *preset; -@property (nonatomic, readwrite) HBTitle *title; -@property (nonatomic, readwrite) HBJob *job; - -@end - -@implementation HBJobTests - -- (void)setUp -{ - [super setUp]; - - _manager = [[HBPresetsManager alloc] init]; - [_manager generateBuiltInPresets]; - - self.preset = self.manager.defaultPreset; - - self.title = [[HBMockTitle alloc] init]; - - self.job = [[HBJob alloc] initWithTitle:self.title andPreset:self.preset]; - self.job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; -} - -- (void)tearDown -{ - [super tearDown]; -} - -- (void)testJobCreation -{ - HBJob *job = [[HBJob alloc] init]; - - XCTAssert(job, @"Pass"); -} - -- (void)testApplyPreset -{ - HBMockTitle *title = [[HBMockTitle alloc] init]; - HBPreset *preset = self.manager.defaultPreset; - - HBJob *job = [[HBJob alloc] initWithTitle:title andPreset:preset]; - job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; - - [job applyPreset:preset]; -} - -- (void)testAudio -{ - XCTAssertGreaterThan(self.job.audio.tracks.count, 1); -} - -- (void)testPictureSize -{ - XCTAssertEqual(self.job.picture.width, 1254); - XCTAssertEqual(self.job.picture.height, 678); -} - -- (void)testAutoCrop -{ - XCTAssertEqual([self.preset[@"PictureAutoCrop"] boolValue], self.job.picture.autocrop); -} - -- (void)testAutoCropValues -{ - XCTAssertEqual(self.title.autoCropTop, self.job.picture.cropTop); - XCTAssertEqual(self.title.autoCropBottom, self.job.picture.cropBottom); - XCTAssertEqual(self.title.autoCropLeft, self.job.picture.cropLeft); - XCTAssertEqual(self.title.autoCropRight, self.job.picture.cropRight); -} - -- (void)testCustomAnamorphic -{ - HBMutablePreset *preset = [self.preset mutableCopy]; - - preset[@"UsesPictureSettings"] = @1; - - preset[@"PictureWidth"] = @720; - preset[@"PictureHeight"] = @576; - - preset[@"PicturePAR"] = @"custom"; - preset[@"PicturePARWidth"] = @64; - preset[@"PicturePARHeight"] = @45; - - HBJob *job = [self.job copy]; - [job applyPreset:preset]; - - XCTAssertEqual(job.picture.width, 720); - XCTAssertEqual(job.picture.height, 576); - - XCTAssertEqual(job.picture.displayWidth, 1064); -} - -@end diff --git a/macosx/HandBrake Tests/HBJobUndoTests.m b/macosx/HandBrake Tests/HBJobUndoTests.m deleted file mode 100644 index c62d4b1f3..000000000 --- a/macosx/HandBrake Tests/HBJobUndoTests.m +++ /dev/null @@ -1,182 +0,0 @@ -/* HBJobUndoTests.m - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#import - -#import "HBMockTitle.h" -#import "HBJob.h" -#import "HBChapter.h" -#import "HBAudioTrack.h" -#import "HBSubtitlesTrack.h" -#import "HBPicture.h" -#import "HBPresetsManager.h" -#import "HBPreset.h" - -@interface HBJobUndoTests : XCTestCase - -@property (nonatomic, readonly) HBPresetsManager *manager; - -@property (nonatomic, readwrite) HBPreset *preset; -@property (nonatomic, readwrite) HBTitle *title; -@property (nonatomic, readwrite) HBJob *job; -@property (nonatomic, readwrite) HBJob *modifiedJob; - -@end - -@implementation HBJobUndoTests - -- (void)setUp -{ - [super setUp]; - - _manager = [[HBPresetsManager alloc] init]; - [_manager generateBuiltInPresets]; - - self.preset = self.manager.defaultPreset; - - self.title = [[HBMockTitle alloc] init]; - - self.job = [[HBJob alloc] initWithTitle:self.title andPreset:self.preset]; - self.job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; - - NSUndoManager *undoManager = [[NSUndoManager alloc] init]; - undoManager.groupsByEvent = NO; - - self.modifiedJob = [self.job copy]; - self.modifiedJob.undo = undoManager; - - [self.manager.root enumerateObjectsUsingBlock:^(HBPreset * _Nonnull obj, NSIndexPath * _Nonnull idx, BOOL * _Nonnull stop) - { - if (obj.isLeaf) - { - [undoManager beginUndoGrouping]; - [self.modifiedJob applyPreset:obj]; - [undoManager endUndoGrouping]; - } - }]; - - // Container changed - [undoManager beginUndoGrouping]; - self.modifiedJob.container = 0x200000; - [undoManager endUndoGrouping]; - - // Chapters changed - [undoManager beginUndoGrouping]; - self.modifiedJob.chapterTitles[0].title = @"Test chapter"; - self.modifiedJob.range.type = HBRangeTypeFrames; - [undoManager endUndoGrouping]; - - // Undo, redo and undo again the whole thing one time - while (undoManager.canUndo) - { - [undoManager undo]; - } - while (undoManager.canRedo) - { - [undoManager redo]; - } - while (undoManager.canUndo) - { - [undoManager undo]; - } -} - -- (void)tearDown { - [super tearDown]; -} - -- (void)testJob -{ - XCTAssertEqualObjects(self.job.presetName, self.modifiedJob.presetName); - XCTAssertEqual(self.job.container, self.modifiedJob.container); - - XCTAssertEqual(self.job.mp4HttpOptimize, self.modifiedJob.mp4HttpOptimize); - XCTAssertEqual(self.job.mp4iPodCompatible, self.modifiedJob.mp4iPodCompatible); - - XCTAssertEqual(self.job.angle, self.modifiedJob.angle); -} - -- (void)testAudio -{ - XCTAssertEqual([self.job.audio countOfTracks], [self.modifiedJob.audio countOfTracks]); - - for (NSUInteger idx = 0; idx < [self.job.audio countOfTracks]; idx++) - { - HBAudioTrack *t1 = self.job.audio.tracks[idx]; - HBAudioTrack *t2 = self.modifiedJob.audio.tracks[idx]; - - XCTAssertEqualObjects(t1.track, t2.track); - } -} - -- (void)testRange -{ - XCTAssertEqual(self.job.range.type, self.modifiedJob.range.type); -} - -- (void)testPicture -{ - XCTAssertEqual(self.job.picture.width, self.modifiedJob.picture.width); - XCTAssertEqual(self.job.picture.height, self.modifiedJob.picture.height); - - XCTAssertEqual(self.job.picture.displayWidth, self.modifiedJob.picture.displayWidth); - XCTAssertEqual(self.job.picture.parWidth, self.modifiedJob.picture.parWidth); - XCTAssertEqual(self.job.picture.parHeight, self.modifiedJob.picture.parHeight); - - XCTAssertEqual(self.job.picture.autocrop, self.modifiedJob.picture.autocrop); - - XCTAssertEqual(self.job.picture.cropTop, self.modifiedJob.picture.cropTop); - XCTAssertEqual(self.job.picture.cropBottom, self.modifiedJob.picture.cropBottom); - XCTAssertEqual(self.job.picture.cropLeft, self.modifiedJob.picture.cropLeft); - XCTAssertEqual(self.job.picture.cropRight, self.modifiedJob.picture.cropRight); -} - -- (void)testFilters -{ - XCTAssertEqualObjects(self.job.filters.deinterlace, self.modifiedJob.filters.deinterlace); - XCTAssertEqualObjects(self.job.filters.deinterlacePreset, self.modifiedJob.filters.deinterlacePreset); - XCTAssertEqualObjects(self.job.filters.deinterlaceCustomString, self.modifiedJob.filters.deinterlaceCustomString); - - XCTAssertEqualObjects(self.job.filters.detelecine, self.modifiedJob.filters.detelecine); - XCTAssertEqualObjects(self.job.filters.detelecineCustomString, self.modifiedJob.filters.detelecineCustomString); - - XCTAssertEqualObjects(self.job.filters.denoise, self.modifiedJob.filters.denoise); - XCTAssertEqualObjects(self.job.filters.denoisePreset, self.modifiedJob.filters.denoisePreset); - XCTAssertEqualObjects(self.job.filters.denoiseTune, self.modifiedJob.filters.denoiseTune); - XCTAssertEqualObjects(self.job.filters.denoiseCustomString, self.modifiedJob.filters.denoiseCustomString); - - XCTAssertEqual(self.job.filters.deblock, self.modifiedJob.filters.deblock); - XCTAssertEqual(self.job.filters.grayscale, self.modifiedJob.filters.grayscale); -} - -- (void)testSubtitles -{ - XCTAssertEqual([self.job.subtitles countOfTracks], [self.modifiedJob.subtitles countOfTracks]); - - for (NSUInteger idx = 0; idx < [self.job.subtitles countOfTracks]; idx++) - { - HBSubtitlesTrack *t1 = self.job.subtitles.tracks[idx]; - HBSubtitlesTrack *t2 = self.modifiedJob.subtitles.tracks[idx]; - - XCTAssertEqual(t1.sourceTrackIdx, t2.sourceTrackIdx); - XCTAssertEqual(t1.type, t2.type); - XCTAssertEqual(t1.burnedIn, t2.burnedIn); - XCTAssertEqual(t1.forcedOnly, t2.forcedOnly); - XCTAssertEqual(t1.def, t2.def); - } -} - -- (void)testChapters -{ - XCTAssertEqual(self.job.chaptersEnabled, self.modifiedJob.chaptersEnabled); - - for (NSUInteger idx = 0; idx < [self.job.subtitles countOfTracks]; idx++) - { - XCTAssertEqualObjects(self.job.chapterTitles[idx].title, self.modifiedJob.chapterTitles[idx].title); - } -} - -@end diff --git a/macosx/HandBrake Tests/HBMockTitle.h b/macosx/HandBrake Tests/HBMockTitle.h deleted file mode 100644 index e83a13ad2..000000000 --- a/macosx/HandBrake Tests/HBMockTitle.h +++ /dev/null @@ -1,12 +0,0 @@ -/* HBMockTitle - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#import -#import "HBTitle.h" - -@interface HBMockTitle : HBTitle - -@end diff --git a/macosx/HandBrake Tests/HBMockTitle.m b/macosx/HandBrake Tests/HBMockTitle.m deleted file mode 100644 index 217f56bfc..000000000 --- a/macosx/HandBrake Tests/HBMockTitle.m +++ /dev/null @@ -1,167 +0,0 @@ -/* HBMockTitle - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#import "HBMockTitle.h" -#import "HBChapter.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 *keySubTrackLanguageIsoCode; -extern NSString *keySubTrackType; - -@implementation HBMockTitle - -- (instancetype)init -{ - self = [super init]; - return self; -} - -- (NSString *)name -{ - return @"Test.mkv"; -} - -- (BOOL)isStream -{ - return YES; -} - -- (NSString *)description -{ - return @"Test Title"; -} - -- (NSURL *)url -{ - return [NSURL fileURLWithPath:@"/Test.mkv"]; -} - -- (int)index -{ - return 1; -} - -- (int)angles -{ - return 1; -} - -- (int)duration -{ - return 60; -} - -- (int)frames -{ - return 60 * 25; -} - -- (NSString *)timeCode -{ - return @"00:01:00"; -} - -- (int)width -{ - return 1280; -} - -- (int)height -{ - return 720; -} - -- (int)parWidth -{ - return 1; -} - -- (int)parHeight -{ - return 1; -} - -- (int)autoCropTop -{ - return 20; -} - -- (int)autoCropBottom -{ - return 22; -} - -- (int)autoCropLeft -{ - return 12; -} - -- (int)autoCropRight -{ - return 15; -} - -- (NSArray *)audioTracks -{ - NSMutableArray *tracks = [NSMutableArray array]; - [tracks addObject: @{keyAudioTrackIndex: @1, - keyAudioTrackName: [NSString stringWithFormat: @"%d: %s", 0, "English"], - keyAudioInputBitrate: @104, - keyAudioInputSampleRate: @48000, - keyAudioInputCodec: @65536, - keyAudioInputCodecParam: @86018, - keyAudioInputChannelLayout: @3, - keyAudioTrackLanguageIsoCode: @"eng"}]; - - [tracks addObject: @{keyAudioTrackIndex: @2, - keyAudioTrackName: [NSString stringWithFormat: @"%d: %s", 1, "Italian"], - keyAudioInputBitrate: @104, - keyAudioInputSampleRate: @48000, - keyAudioInputCodec: @65536, - keyAudioInputCodecParam: @86018, - keyAudioInputChannelLayout: @3, - keyAudioTrackLanguageIsoCode: @"ita"}]; - return [tracks copy]; -} - -- (NSArray *)subtitlesTracks -{ - NSMutableArray *tracks = [NSMutableArray array]; - NSString *nativeLanguage = @"English"; - - // create a dictionary of source subtitle information to store in our array - [tracks addObject:@{keySubTrackName: [NSString stringWithFormat:@"%d: %@ (%@) (%@)", 0, nativeLanguage, @"Bitmap", @"VobSub"], - keySubTrackType: @0, - keySubTrackLanguageIsoCode: @"eng"}]; - - return [tracks copy]; -} - -- (NSArray *)chapters -{ - NSMutableArray *chapters = [NSMutableArray array]; - - for (int i = 0; i < 10; i++) - { - NSString *title = [NSString stringWithFormat:@"Chapter %d", i + 1]; - [chapters addObject:[[HBChapter alloc] initWithTitle:title - index:i + 1 - duration:100]]; - } - return [chapters copy]; -} - - -@end diff --git a/macosx/HandBrake Tests/HBPresetsTests.m b/macosx/HandBrake Tests/HBPresetsTests.m deleted file mode 100644 index af7e48ddd..000000000 --- a/macosx/HandBrake Tests/HBPresetsTests.m +++ /dev/null @@ -1,104 +0,0 @@ -/* HBPresetsTests.m $ - - This file is part of the HandBrake source code. - Homepage: . - It may be used under the terms of the GNU General Public License. */ - -#import -#import - -#import "HBPreset.h" -#import "HBPresetsManager.h" - -@interface HBPresetsTests : XCTestCase - -@end - -@implementation HBPresetsTests - -- (void)setUp { - [super setUp]; -} - -- (void)tearDown -{ - [super tearDown]; -} - -- (void)testManagerCreation -{ - HBPresetsManager *manager = [[HBPresetsManager alloc] init]; - - XCTAssert(manager, @"Pass"); -} - -- (void)testDefaultPresets -{ - HBPresetsManager *manager = [[HBPresetsManager alloc] init]; - [manager generateBuiltInPresets]; - - XCTAssert(manager.root.children.count > 1, @"Pass"); -} - -- (void)testCreationTime -{ - HBPresetsManager *manager = [[HBPresetsManager alloc] init]; - - [self measureBlock:^{ - [manager generateBuiltInPresets]; - }]; -} - -- (void)testSave -{ - NSURL *tempURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; - NSURL *presetsURL = [tempURL URLByAppendingPathComponent:@"test.json"]; - HBPresetsManager *manager = [[HBPresetsManager alloc] initWithURL:presetsURL]; - [manager savePresets]; - - XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:presetsURL.path]); - - // Remove the temp files. - [[NSFileManager defaultManager] removeItemAtURL:presetsURL error:NULL]; -} - -- (void)testUpgrade -{ - NSURL *tempURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; - NSURL *presetsURL = [tempURL URLByAppendingPathComponent:@"test.json"]; - NSURL *modifiedPresetsURL = [tempURL URLByAppendingPathComponent:@"test2.json"]; - - // Create a new presets manager with the defaults presets. - HBPresetsManager *manager = [[HBPresetsManager alloc] initWithURL:presetsURL]; - [manager savePresets]; - - // Read the json and change the version to the previous major - // so it will kick in the import routine. - NSData *data = [NSData dataWithContentsOfURL:presetsURL]; - NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL]; - dict[@"VersionMajor"] = @([dict[@"VersionMajor"] integerValue] - 1); - - - NSString *backupName = [NSString stringWithFormat:@"%@.%d.%d.%d.json", - modifiedPresetsURL.lastPathComponent.stringByDeletingPathExtension, - [dict[@"VersionMajor"] intValue], - [dict[@"VersionMinor"] intValue], - [dict[@"VersionMicro"] intValue]]; - NSURL *backupURL = [tempURL URLByAppendingPathComponent:backupName]; - - NSData *modifiedData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL]; - [modifiedData writeToURL:modifiedPresetsURL atomically:YES]; - - // Create a new manager and init it with the modified json. - HBPresetsManager *newManager = [[HBPresetsManager alloc] initWithURL:modifiedPresetsURL]; - - XCTAssert(newManager); - XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:backupURL.path]); - - // Remove the temp files. - [[NSFileManager defaultManager] removeItemAtURL:presetsURL error:NULL]; - [[NSFileManager defaultManager] removeItemAtURL:modifiedPresetsURL error:NULL]; - [[NSFileManager defaultManager] removeItemAtURL:backupURL error:NULL]; -} - -@end diff --git a/macosx/HandBrake Tests/Info.plist b/macosx/HandBrake Tests/Info.plist deleted file mode 100644 index ba72822e8..000000000 --- a/macosx/HandBrake Tests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj index 119b7eedb..f9dfa9d55 100644 --- a/macosx/HandBrake.xcodeproj/project.pbxproj +++ b/macosx/HandBrake.xcodeproj/project.pbxproj @@ -7,9 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 226268E01572CC7300477B4E /* libavresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226268DF1572CC7300477B4E /* libavresample.a */; }; 226268E11572CC7300477B4E /* libavresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226268DF1572CC7300477B4E /* libavresample.a */; }; - 22DD2C4A177B94DB00EF50D3 /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DD2C49177B94DB00EF50D3 /* libvpx.a */; }; 22DD2C4B177B95DA00EF50D3 /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DD2C49177B94DB00EF50D3 /* libvpx.a */; }; 273F202314ADB8650021BE6D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202214ADB8650021BE6D /* IOKit.framework */; }; 273F202614ADB8A40021BE6D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202514ADB8A40021BE6D /* libz.dylib */; }; @@ -23,23 +21,14 @@ 273F208B14ADBE3B0021BE6D /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = 273F208814ADBE3B0021BE6D /* test.c */; }; 273F20AC14ADBE670021BE6D /* HBController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F208F14ADBE670021BE6D /* HBController.m */; }; 273F20AD14ADBE670021BE6D /* HBAdvancedController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209014ADBE670021BE6D /* HBAdvancedController.m */; }; - 273F20AE14ADBE670021BE6D /* HBAudioTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209214ADBE670021BE6D /* HBAudioTrack.m */; }; 273F20AF14ADBE670021BE6D /* HBAudioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209414ADBE670021BE6D /* HBAudioController.m */; }; - 273F20B114ADBE670021BE6D /* HBDVDDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209814ADBE670021BE6D /* HBDVDDetector.m */; }; 273F20B214ADBE670021BE6D /* HBImageAndTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209A14ADBE670021BE6D /* HBImageAndTextCell.m */; }; 273F20B314ADBE670021BE6D /* HBOutputPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209C14ADBE670021BE6D /* HBOutputPanelController.m */; }; 273F20B414ADBE670021BE6D /* HBOutputRedirect.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209E14ADBE670021BE6D /* HBOutputRedirect.m */; }; 273F20B514ADBE670021BE6D /* HBPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A014ADBE670021BE6D /* HBPreferencesController.m */; }; - 273F20B614ADBE670021BE6D /* HBPresetsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A214ADBE670021BE6D /* HBPresetsManager.m */; }; 273F20B714ADBE670021BE6D /* HBPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A414ADBE670021BE6D /* HBPreviewController.m */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; }; 273F20BA14ADBE670021BE6D /* HBPictureController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20AA14ADBE670021BE6D /* HBPictureController.m */; }; - 273F20BE14ADC09F0021BE6D /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 273F20BD14ADC09F0021BE6D /* main.mm */; }; - 273F20C314ADC4AE0021BE6D /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202914ADB8D60021BE6D /* libiconv.dylib */; }; - 273F20C414ADC4B60021BE6D /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202714ADB8BE0021BE6D /* libbz2.dylib */; }; - 273F20C514ADC4BD0021BE6D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202514ADB8A40021BE6D /* libz.dylib */; }; - 273F20C614ADC4F50021BE6D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202214ADB8650021BE6D /* IOKit.framework */; }; 273F20C814ADC4FF0021BE6D /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20C714ADC4FF0021BE6D /* QTKit.framework */; }; - 273F20C914ADC5150021BE6D /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202F14ADB9790021BE6D /* AudioToolbox.framework */; }; 273F20CB14ADC89A0021BE6D /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 273F20BF14ADC1250021BE6D /* Growl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 273F20CC14ADC8A10021BE6D /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 273F20C014ADC1250021BE6D /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 273F218A14ADDDA10021BE6D /* AdvancedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F217A14ADDDA10021BE6D /* AdvancedView.xib */; }; @@ -52,130 +41,181 @@ 273F219114ADDDA10021BE6D /* Queue.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F218814ADDDA10021BE6D /* Queue.xib */; }; 273F21C114ADE7A20021BE6D /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20BF14ADC1250021BE6D /* Growl.framework */; }; 273F21C214ADE7BC0021BE6D /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20C014ADC1250021BE6D /* Sparkle.framework */; }; - 27D6C72514B1019100B785E4 /* libhandbrake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72414B1019100B785E4 /* libhandbrake.a */; }; 27D6C72614B1019100B785E4 /* libhandbrake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72414B1019100B785E4 /* libhandbrake.a */; }; - 27D6C74314B102DA00B785E4 /* libass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72814B102DA00B785E4 /* libass.a */; }; 27D6C74414B102DA00B785E4 /* libass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72814B102DA00B785E4 /* libass.a */; }; - 27D6C74514B102DA00B785E4 /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72914B102DA00B785E4 /* libavcodec.a */; }; 27D6C74614B102DA00B785E4 /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72914B102DA00B785E4 /* libavcodec.a */; }; - 27D6C74714B102DA00B785E4 /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72A14B102DA00B785E4 /* libavformat.a */; }; 27D6C74814B102DA00B785E4 /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72A14B102DA00B785E4 /* libavformat.a */; }; - 27D6C74914B102DA00B785E4 /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72B14B102DA00B785E4 /* libavutil.a */; }; 27D6C74A14B102DA00B785E4 /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72B14B102DA00B785E4 /* libavutil.a */; }; - 27D6C74B14B102DA00B785E4 /* libbluray.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72C14B102DA00B785E4 /* libbluray.a */; }; 27D6C74C14B102DA00B785E4 /* libbluray.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72C14B102DA00B785E4 /* libbluray.a */; }; - 27D6C74F14B102DA00B785E4 /* libdvdnav.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72E14B102DA00B785E4 /* libdvdnav.a */; }; 27D6C75014B102DA00B785E4 /* libdvdnav.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72E14B102DA00B785E4 /* libdvdnav.a */; }; - 27D6C75114B102DA00B785E4 /* libdvdread.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72F14B102DA00B785E4 /* libdvdread.a */; }; 27D6C75214B102DA00B785E4 /* libdvdread.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72F14B102DA00B785E4 /* libdvdread.a */; }; - 27D6C75514B102DA00B785E4 /* libfontconfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73114B102DA00B785E4 /* libfontconfig.a */; }; 27D6C75614B102DA00B785E4 /* libfontconfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73114B102DA00B785E4 /* libfontconfig.a */; }; - 27D6C75714B102DA00B785E4 /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73214B102DA00B785E4 /* libfreetype.a */; }; 27D6C75814B102DA00B785E4 /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73214B102DA00B785E4 /* libfreetype.a */; }; - 27D6C75914B102DA00B785E4 /* libfribidi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73314B102DA00B785E4 /* libfribidi.a */; }; 27D6C75A14B102DA00B785E4 /* libfribidi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73314B102DA00B785E4 /* libfribidi.a */; }; - 27D6C75E14B102DA00B785E4 /* libmp3lame.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73614B102DA00B785E4 /* libmp3lame.a */; }; 27D6C75F14B102DA00B785E4 /* libmp3lame.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73614B102DA00B785E4 /* libmp3lame.a */; }; - 27D6C76414B102DA00B785E4 /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73914B102DA00B785E4 /* libogg.a */; }; 27D6C76514B102DA00B785E4 /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73914B102DA00B785E4 /* libogg.a */; }; - 27D6C76614B102DA00B785E4 /* libsamplerate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73A14B102DA00B785E4 /* libsamplerate.a */; }; 27D6C76714B102DA00B785E4 /* libsamplerate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73A14B102DA00B785E4 /* libsamplerate.a */; }; - 27D6C76814B102DA00B785E4 /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73B14B102DA00B785E4 /* libswscale.a */; }; 27D6C76914B102DA00B785E4 /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73B14B102DA00B785E4 /* libswscale.a */; }; - 27D6C76A14B102DA00B785E4 /* libtheora.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73C14B102DA00B785E4 /* libtheora.a */; }; 27D6C76B14B102DA00B785E4 /* libtheora.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73C14B102DA00B785E4 /* libtheora.a */; }; - 27D6C76C14B102DA00B785E4 /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73D14B102DA00B785E4 /* libvorbis.a */; }; 27D6C76D14B102DA00B785E4 /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73D14B102DA00B785E4 /* libvorbis.a */; }; - 27D6C76E14B102DA00B785E4 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73E14B102DA00B785E4 /* libvorbisenc.a */; }; 27D6C76F14B102DA00B785E4 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73E14B102DA00B785E4 /* libvorbisenc.a */; }; - 27D6C77014B102DA00B785E4 /* libx264.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73F14B102DA00B785E4 /* libx264.a */; }; 27D6C77114B102DA00B785E4 /* libx264.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73F14B102DA00B785E4 /* libx264.a */; }; - 27D6C77214B102DA00B785E4 /* libxml2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C74014B102DA00B785E4 /* libxml2.a */; }; 27D6C77314B102DA00B785E4 /* libxml2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C74014B102DA00B785E4 /* libxml2.a */; }; 3490BCB41614CF8D002A5AD7 /* HandBrake.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3490BCB31614CF8D002A5AD7 /* HandBrake.icns */; }; - 46AB433515F98A2B009C0961 /* DockTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AB433415F98A2B009C0961 /* DockTextField.m */; }; 6F0D69A91AD0683100A39DCA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F204014ADBC210021BE6D /* Foundation.framework */; }; - A90A0CAF1988D57200DA65CE /* HBAudioTrackPreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A90A0CAE1988D57200DA65CE /* HBAudioTrackPreset.m */; }; - A91017B41A64440A00039BFB /* HBSubtitles.m in Sources */ = {isa = PBXBuildFile; fileRef = A91017B31A64440A00039BFB /* HBSubtitles.m */; }; - A91404611BDBB7DE00BE29A7 /* HBJobUndoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A91404601BDBB7DE00BE29A7 /* HBJobUndoTests.m */; }; + A91119A21C7DD58B001C463C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F203B14ADBC210021BE6D /* Cocoa.framework */; }; + A91119A31C7DD591001C463C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202214ADB8650021BE6D /* IOKit.framework */; }; + A91119A41C7DD614001C463C /* HBSubtitlesDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F4728B1976BAA70009EC65 /* HBSubtitlesDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91119A51C7DD644001C463C /* HBDistributedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E66D6E1A67A2A8007B641D /* HBDistributedArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91119A61C7DD64A001C463C /* HBDistributedArray.m in Sources */ = {isa = PBXBuildFile; fileRef = A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */; }; A914BCB31BC441C700157917 /* HBPreviewView.m in Sources */ = {isa = PBXBuildFile; fileRef = A914BCB21BC441C700157917 /* HBPreviewView.m */; }; A914BCB61BC441D100157917 /* QTKit+HBQTMovieExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = A914BCB51BC441D100157917 /* QTKit+HBQTMovieExtensions.m */; }; - A9160A351AE7A165009A7818 /* HBCodingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9160A341AE7A165009A7818 /* HBCodingUtilities.m */; }; - A91726E7197291BC00D1AFEF /* HBChapterTitlesController.m in Sources */ = {isa = PBXBuildFile; fileRef = A91726E6197291BC00D1AFEF /* HBChapterTitlesController.m */; }; - A91806711A4807B000FC9BED /* HBRange.m in Sources */ = {isa = PBXBuildFile; fileRef = A91806701A4807B000FC9BED /* HBRange.m */; }; - A9181CB21BD76F8400E5C8B0 /* HBSubtitlesTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = A9181CB11BD76F8400E5C8B0 /* HBSubtitlesTrack.m */; }; + A916180E1C845161000556C6 /* NSDictionary+HBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A93B0DF71C804CF50051A3FA /* NSDictionary+HBAdditions.m */; }; + A916C9921C84498F00C7B560 /* DockTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AB433415F98A2B009C0961 /* DockTextField.m */; }; + A916C9931C8449A100C7B560 /* HBAddPresetController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */; }; + A916C9951C8449B000C7B560 /* HBChapterTitlesController.m in Sources */ = {isa = PBXBuildFile; fileRef = A91726E6197291BC00D1AFEF /* HBChapterTitlesController.m */; }; + A916C9961C8449BE00C7B560 /* HBJobOutputFileWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = A91AFD0E1A949472009BECED /* HBJobOutputFileWriter.m */; }; + A916C9971C8449CA00C7B560 /* HBAudioDefaultsController.m in Sources */ = {isa = PBXBuildFile; fileRef = A932E26E198833920047D13E /* HBAudioDefaultsController.m */; }; + A916C9981C8449DB00C7B560 /* HBTitleSelectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C183941A716B8F00C897C2 /* HBTitleSelectionController.m */; }; + A916C9991C8449E200C7B560 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 273F20BD14ADC09F0021BE6D /* main.mm */; }; + A916C99A1C8449FB00C7B560 /* HBHUDView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C9F88819A733FE00DC8923 /* HBHUDView.m */; }; + A916C99B1C844A0800C7B560 /* HBQueueOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EA43671A2210C400785E95 /* HBQueueOutlineView.m */; }; A91AFD0C1A948827009BECED /* HBOutputFileWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = A91AFD0B1A948827009BECED /* HBOutputFileWriter.m */; }; - A91AFD0F1A949472009BECED /* HBJobOutputFileWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = A91AFD0E1A949472009BECED /* HBJobOutputFileWriter.m */; }; + A91CE27D1C7DA7320068F46F /* HBCore.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8731A23C87500C79B48 /* HBCore.m */; }; + A91CE27F1C7DA7320068F46F /* HBTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = A971281E1A2C75180088C076 /* HBTitle.m */; }; + A91CE2821C7DA7320068F46F /* HBJob.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC87E1A23DF6F00C79B48 /* HBJob.m */; }; + A91CE2841C7DA7320068F46F /* HBJob+HBJobConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = A990D9061A64562200139032 /* HBJob+HBJobConversion.m */; }; + A91CE2861C7DA7320068F46F /* HBRange.m in Sources */ = {isa = PBXBuildFile; fileRef = A91806701A4807B000FC9BED /* HBRange.m */; }; + A91CE2881C7DA7320068F46F /* HBVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8761A23C88D00C79B48 /* HBVideo.m */; }; + A91CE28A1C7DA7320068F46F /* HBPicture.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8791A23C89E00C79B48 /* HBPicture.m */; }; + A91CE28C1C7DA7320068F46F /* HBFilters.m in Sources */ = {isa = PBXBuildFile; fileRef = A9523936199A6AAE00588AEF /* HBFilters.m */; }; + A91CE28E1C7DA7320068F46F /* HBChapter.m in Sources */ = {isa = PBXBuildFile; fileRef = A988AF9C1BC7C35F00932543 /* HBChapter.m */; }; + A91CE2901C7DA7320068F46F /* HBAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A93FD4741A62ABE800A6AC43 /* HBAudio.m */; }; + A91CE2921C7DA7320068F46F /* HBAudioTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209214ADBE670021BE6D /* HBAudioTrack.m */; }; + A91CE2941C7DA7320068F46F /* HBAudioDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A932E272198834130047D13E /* HBAudioDefaults.m */; }; + A91CE2961C7DA7320068F46F /* HBAudioTrackPreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A90A0CAE1988D57200DA65CE /* HBAudioTrackPreset.m */; }; + A91CE2981C7DA7320068F46F /* HBSubtitles.m in Sources */ = {isa = PBXBuildFile; fileRef = A91017B31A64440A00039BFB /* HBSubtitles.m */; }; + A91CE29A1C7DA7320068F46F /* HBSubtitlesTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = A9181CB11BD76F8400E5C8B0 /* HBSubtitlesTrack.m */; }; + A91CE29C1C7DA7320068F46F /* HBSubtitlesDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F4728C1976BAA70009EC65 /* HBSubtitlesDefaults.m */; }; + A91CE29E1C7DA7320068F46F /* HBJob+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BEF1A48A85C00141102 /* HBJob+UIAdditions.m */; }; + A91CE2A01C7DA7320068F46F /* HBRange+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9597A291A49749D00007771 /* HBRange+UIAdditions.m */; }; + A91CE2A21C7DA7320068F46F /* HBVideo+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF21A48A99500141102 /* HBVideo+UIAdditions.m */; }; + A91CE2A41C7DA7320068F46F /* HBPicture+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF51A48AB6300141102 /* HBPicture+UIAdditions.m */; }; + A91CE2A61C7DA7320068F46F /* HBFilters+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF81A48AC9000141102 /* HBFilters+UIAdditions.m */; }; + A91CE2A81C7DA7320068F46F /* HBDVDDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209814ADBE670021BE6D /* HBDVDDetector.m */; }; + A91CE2AA1C7DA7320068F46F /* HBCodingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9160A341AE7A165009A7818 /* HBCodingUtilities.m */; }; + A91CE2AD1C7DA7320068F46F /* HBStateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = A975C08D1AE8C5270061870D /* HBStateFormatter.m */; }; + A91CE2B01C7DA9FB0068F46F /* HBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9AA44791970664A00D7DEFC /* HBUtilities.m */; }; + A91CE2B11C7DAA530068F46F /* libhandbrake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72414B1019100B785E4 /* libhandbrake.a */; }; + A91CE2B21C7DAB550068F46F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202F14ADB9790021BE6D /* AudioToolbox.framework */; }; + A91CE2B31C7DABBC0068F46F /* libass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72814B102DA00B785E4 /* libass.a */; }; + A91CE2B41C7DABBC0068F46F /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72914B102DA00B785E4 /* libavcodec.a */; }; + A91CE2B51C7DABBC0068F46F /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E165511C523016003EF30E /* libavfilter.a */; }; + A91CE2B61C7DABBC0068F46F /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72A14B102DA00B785E4 /* libavformat.a */; }; + A91CE2B71C7DABBC0068F46F /* libavresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226268DF1572CC7300477B4E /* libavresample.a */; }; + A91CE2B81C7DABBC0068F46F /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72B14B102DA00B785E4 /* libavutil.a */; }; + A91CE2B91C7DABBC0068F46F /* libbluray.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72C14B102DA00B785E4 /* libbluray.a */; }; + A91CE2BA1C7DABBC0068F46F /* libdvdnav.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72E14B102DA00B785E4 /* libdvdnav.a */; }; + A91CE2BB1C7DABBC0068F46F /* libdvdread.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72F14B102DA00B785E4 /* libdvdread.a */; }; + A91CE2BC1C7DABBC0068F46F /* libfontconfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73114B102DA00B785E4 /* libfontconfig.a */; }; + A91CE2BD1C7DABBC0068F46F /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73214B102DA00B785E4 /* libfreetype.a */; }; + A91CE2BE1C7DABBC0068F46F /* libfribidi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73314B102DA00B785E4 /* libfribidi.a */; }; + A91CE2BF1C7DABBC0068F46F /* libjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A95512881A320A12001BFC6F /* libjansson.a */; }; + A91CE2C01C7DABBC0068F46F /* libmp3lame.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73614B102DA00B785E4 /* libmp3lame.a */; }; + A91CE2C11C7DABBC0068F46F /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73914B102DA00B785E4 /* libogg.a */; }; + A91CE2C21C7DABBC0068F46F /* libsamplerate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73A14B102DA00B785E4 /* libsamplerate.a */; }; + A91CE2C31C7DABBC0068F46F /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73B14B102DA00B785E4 /* libswscale.a */; }; + A91CE2C41C7DABBC0068F46F /* libtheora.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73C14B102DA00B785E4 /* libtheora.a */; }; + A91CE2C51C7DABBC0068F46F /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73D14B102DA00B785E4 /* libvorbis.a */; }; + A91CE2C61C7DABBC0068F46F /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73E14B102DA00B785E4 /* libvorbisenc.a */; }; + A91CE2C71C7DABBC0068F46F /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DD2C49177B94DB00EF50D3 /* libvpx.a */; }; + A91CE2C81C7DABBC0068F46F /* libx264.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73F14B102DA00B785E4 /* libx264.a */; }; + A91CE2C91C7DABBC0068F46F /* libx265.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22CC9E74191EBEA500C69D81 /* libx265.a */; }; + A91CE2CA1C7DABBC0068F46F /* libxml2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C74014B102DA00B785E4 /* libxml2.a */; }; + A91CE2CD1C7DABBC0068F46F /* libltdl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A91CE2CB1C7DABBC0068F46F /* libltdl.a */; }; + A91CE2CE1C7DABBC0068F46F /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A91CE2CC1C7DABBC0068F46F /* libvorbisfile.a */; }; + A91CE2D01C7DABCE0068F46F /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A91CE2CF1C7DABCE0068F46F /* libbz2.tbd */; }; + A91CE2D21C7DABDA0068F46F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A91CE2D11C7DABDA0068F46F /* libz.tbd */; }; + A91CE2D41C7DABE40068F46F /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A91CE2D31C7DABE40068F46F /* libiconv.tbd */; }; + A91CE2D71C7DAEEE0068F46F /* HBCore.h in Headers */ = {isa = PBXBuildFile; fileRef = A9DEC8721A23C87500C79B48 /* HBCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2D81C7DAEEE0068F46F /* HBTitle.h in Headers */ = {isa = PBXBuildFile; fileRef = A971281D1A2C75180088C076 /* HBTitle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2D91C7DAEEE0068F46F /* HBJob.h in Headers */ = {isa = PBXBuildFile; fileRef = A9DEC87D1A23DF6F00C79B48 /* HBJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DA1C7DAEEE0068F46F /* HBRange.h in Headers */ = {isa = PBXBuildFile; fileRef = A918066F1A4807B000FC9BED /* HBRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DB1C7DAEEE0068F46F /* HBVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9DEC8751A23C88D00C79B48 /* HBVideo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DC1C7DAEEE0068F46F /* HBPicture.h in Headers */ = {isa = PBXBuildFile; fileRef = A9DEC8781A23C89E00C79B48 /* HBPicture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DD1C7DAEEE0068F46F /* HBFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = A9523935199A6AAE00588AEF /* HBFilters.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DE1C7DAEEE0068F46F /* HBChapter.h in Headers */ = {isa = PBXBuildFile; fileRef = A988AF9B1BC7C35F00932543 /* HBChapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2DF1C7DAEEE0068F46F /* HBAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A93FD4731A62ABE800A6AC43 /* HBAudio.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E01C7DAEEE0068F46F /* HBAudioTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 273F209114ADBE670021BE6D /* HBAudioTrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E11C7DAEEE0068F46F /* HBAudioDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = A932E271198834130047D13E /* HBAudioDefaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E21C7DAEEE0068F46F /* HBAudioTrackPreset.h in Headers */ = {isa = PBXBuildFile; fileRef = A90A0CAD1988D57200DA65CE /* HBAudioTrackPreset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E31C7DAEEE0068F46F /* HBSubtitles.h in Headers */ = {isa = PBXBuildFile; fileRef = A91017B21A64440A00039BFB /* HBSubtitles.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E41C7DAEEE0068F46F /* HBSubtitlesTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = A9181CB01BD76F8400E5C8B0 /* HBSubtitlesTrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E61C7DAEEE0068F46F /* HBJob+UIAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9537BEE1A48A85C00141102 /* HBJob+UIAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E71C7DAEEE0068F46F /* HBRange+UIAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9597A281A49749D00007771 /* HBRange+UIAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E81C7DAEEE0068F46F /* HBVideo+UIAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9537BF11A48A99500141102 /* HBVideo+UIAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2E91C7DAEEE0068F46F /* HBPicture+UIAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9537BF41A48AB6300141102 /* HBPicture+UIAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2EA1C7DAEEE0068F46F /* HBFilters+UIAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9537BF71A48AC9000141102 /* HBFilters+UIAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2EB1C7DAEEE0068F46F /* HBDVDDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = 273F209714ADBE670021BE6D /* HBDVDDetector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2EC1C7DAEEE0068F46F /* HBStateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = A975C08C1AE8C5270061870D /* HBStateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2ED1C7DAEEE0068F46F /* HBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A9AA44781970664A00D7DEFC /* HBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2F61C7DB96D0068F46F /* NSJSONSerialization+HBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A99422DF1B1887B000DDB077 /* NSJSONSerialization+HBAdditions.m */; }; + A91CE2F71C7DB96D0068F46F /* HBPresetsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A214ADBE670021BE6D /* HBPresetsManager.m */; }; + A91CE2F81C7DB96D0068F46F /* HBPreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CF25F31990D64E0023F727 /* HBPreset.m */; }; + A91CE2F91C7DB96D0068F46F /* HBMutablePreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A96CD1751BCC5F9100F372F1 /* HBMutablePreset.m */; }; + A91CE2FA1C7DB96D0068F46F /* HBTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D488A41996270300E9B1BA /* HBTreeNode.m */; }; + A91CE2FB1C7DB99D0068F46F /* HBPresetsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 273F20A114ADBE670021BE6D /* HBPresetsManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2FC1C7DB99D0068F46F /* HBPreset.h in Headers */ = {isa = PBXBuildFile; fileRef = A9CF25F21990D64E0023F727 /* HBPreset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2FD1C7DB99D0068F46F /* HBMutablePreset.h in Headers */ = {isa = PBXBuildFile; fileRef = A96CD1741BCC5F9100F372F1 /* HBMutablePreset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A91CE2FE1C7DB99D0068F46F /* HBTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D488A31996270300E9B1BA /* HBTreeNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; A92268781A6E555500A8D5C5 /* HBAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A92268771A6E555500A8D5C5 /* HBAppDelegate.m */; }; A922687B1A6E569B00A8D5C5 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A92268791A6E569B00A8D5C5 /* MainWindow.xib */; }; A932E26C1988334B0047D13E /* AudioDefaults.xib in Resources */ = {isa = PBXBuildFile; fileRef = A932E26A1988334B0047D13E /* AudioDefaults.xib */; }; - A932E26F198833920047D13E /* HBAudioDefaultsController.m in Sources */ = {isa = PBXBuildFile; fileRef = A932E26E198833920047D13E /* HBAudioDefaultsController.m */; }; - A932E273198834130047D13E /* HBAudioDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A932E272198834130047D13E /* HBAudioDefaults.m */; }; A937EECB1C6C7C0300EEAE6D /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = A937EECA1C6C7C0300EEAE6D /* dsa_pub.pem */; }; - A93B0DF81C804CF50051A3FA /* NSDictionary+HBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A93B0DF71C804CF50051A3FA /* NSDictionary+HBAdditions.m */; }; A93E0ED31972957000FD67FB /* HBVideoController.m in Sources */ = {isa = PBXBuildFile; fileRef = A93E0ED11972957000FD67FB /* HBVideoController.m */; }; A93E0ED71972958C00FD67FB /* Video.xib in Resources */ = {isa = PBXBuildFile; fileRef = A93E0ED51972958C00FD67FB /* Video.xib */; }; - A93FD4751A62ABE800A6AC43 /* HBAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A93FD4741A62ABE800A6AC43 /* HBAudio.m */; }; + A94A98F51C858EFB004BA9BA /* HBDictTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A94A98F41C858EFB004BA9BA /* HBDictTests.m */; }; A95121E61B5F7BE700FD773D /* NSArray+HBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A95121E51B5F7BE700FD773D /* NSArray+HBAdditions.m */; }; - A9523937199A6AAE00588AEF /* HBFilters.m in Sources */ = {isa = PBXBuildFile; fileRef = A9523936199A6AAE00588AEF /* HBFilters.m */; }; - A9537BF01A48A85C00141102 /* HBJob+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BEF1A48A85C00141102 /* HBJob+UIAdditions.m */; }; - A9537BF31A48A99500141102 /* HBVideo+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF21A48A99500141102 /* HBVideo+UIAdditions.m */; }; - A9537BF61A48AB6300141102 /* HBPicture+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF51A48AB6300141102 /* HBPicture+UIAdditions.m */; }; - A9537BF91A48AC9000141102 /* HBFilters+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF81A48AC9000141102 /* HBFilters+UIAdditions.m */; }; - A955128A1A320A6F001BFC6F /* libjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A95512881A320A12001BFC6F /* libjansson.a */; }; A955128B1A320B02001BFC6F /* libjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A95512881A320A12001BFC6F /* libjansson.a */; }; - A9597A2A1A49749D00007771 /* HBRange+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9597A291A49749D00007771 /* HBRange+UIAdditions.m */; }; - A96CD1761BCC5F9100F372F1 /* HBMutablePreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A96CD1751BCC5F9100F372F1 /* HBMutablePreset.m */; }; A9706CB41AC1436F00BAEAA8 /* HBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = A9706CB31AC1436F00BAEAA8 /* HBApplication.m */; }; A9706CB71AC1437800BAEAA8 /* HBExceptionAlertController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9706CB61AC1437800BAEAA8 /* HBExceptionAlertController.m */; }; A9706CBA1AC1452800BAEAA8 /* ExceptionAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9706CB81AC1452800BAEAA8 /* ExceptionAlert.xib */; }; - A971281F1A2C75180088C076 /* HBTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = A971281E1A2C75180088C076 /* HBTitle.m */; }; - A975C08E1AE8C5270061870D /* HBStateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = A975C08D1AE8C5270061870D /* HBStateFormatter.m */; }; - A988AF9D1BC7C35F00932543 /* HBChapter.m in Sources */ = {isa = PBXBuildFile; fileRef = A988AF9C1BC7C35F00932543 /* HBChapter.m */; }; + A9736F051C7DA5FE008F1D18 /* HandBrakeKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A9736F041C7DA5FE008F1D18 /* HandBrakeKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9736F0C1C7DA5FE008F1D18 /* HandBrakeKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */; }; + A9736F171C7DA5FE008F1D18 /* HandBrakeKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */; }; + A9736F181C7DA5FE008F1D18 /* HandBrakeKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A9736F1F1C7DA667008F1D18 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F204014ADBC210021BE6D /* Foundation.framework */; }; + A98B8E241C7DD2A200B810C9 /* HBPresetCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = A997D8EB1A4ABB0900E19B6F /* HBPresetCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; A98C29C41977B10600AF5DED /* HBLanguagesSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = A98C29C31977B10600AF5DED /* HBLanguagesSelection.m */; }; - A98FD5931B19C63800FCC7A5 /* HBMockTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = A98FD5921B19C63800FCC7A5 /* HBMockTitle.m */; }; + A98F38071C7DCA7E00E469C8 /* HBStateFormatter+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = A98F38051C7DCA7E00E469C8 /* HBStateFormatter+Private.m */; }; A9906B2C1A710920001D82D5 /* HBQueueController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9906B2B1A710920001D82D5 /* HBQueueController.m */; }; - A990D9071A64562200139032 /* HBJob+HBJobConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = A990D9061A64562200139032 /* HBJob+HBJobConversion.m */; }; A9935213196F38A70069C6B7 /* ChaptersTitles.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9935211196F38A70069C6B7 /* ChaptersTitles.xib */; }; - A99422E01B1887B000DDB077 /* NSJSONSerialization+HBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A99422DF1B1887B000DDB077 /* NSJSONSerialization+HBAdditions.m */; }; A99F40CF1B624E7E00750170 /* HBPictureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A99F40CD1B624E7E00750170 /* HBPictureViewController.m */; }; A99F40D31B624EA500750170 /* HBPictureViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A99F40D11B624EA500750170 /* HBPictureViewController.xib */; }; - A9A24B2D1B09F6FD00AD1FAB /* HBPresetsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A24B2C1B09F6FD00AD1FAB /* HBPresetsTests.m */; }; - A9A24B2F1B09F87400AD1FAB /* HBJobTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A24B2E1B09F87400AD1FAB /* HBJobTests.m */; }; - A9AA447A1970664A00D7DEFC /* HBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9AA44791970664A00D7DEFC /* HBUtilities.m */; }; A9BB0F2719A0ECE40079F1C1 /* HBHUDButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BB0F2619A0ECE40079F1C1 /* HBHUDButtonCell.m */; }; A9BC24C91A69293E007DC41A /* HBAttributedStringAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BC24C81A69293E007DC41A /* HBAttributedStringAdditions.m */; }; A9C0DB85197E7B0000DF55B3 /* SubtitlesDefaults.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9C0DB83197E7B0000DF55B3 /* SubtitlesDefaults.xib */; }; - A9C183961A716B8F00C897C2 /* HBTitleSelectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C183941A716B8F00C897C2 /* HBTitleSelectionController.m */; }; A9C1839D1A716BCC00C897C2 /* HBTitleSelection.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9C1839B1A716BCC00C897C2 /* HBTitleSelection.xib */; }; - A9C9F88919A733FE00DC8923 /* HBHUDView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C9F88819A733FE00DC8923 /* HBHUDView.m */; }; A9CF25F11990D62C0023F727 /* Presets.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9CF25EF1990D62C0023F727 /* Presets.xib */; }; - A9CF25F41990D64E0023F727 /* HBPreset.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CF25F31990D64E0023F727 /* HBPreset.m */; }; A9CF25F71990D6820023F727 /* HBPresetsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CF25F61990D6820023F727 /* HBPresetsViewController.m */; }; A9D0FA771C1C284D0003F2A9 /* HBFocusRingView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D0FA761C1C284D0003F2A9 /* HBFocusRingView.m */; }; A9D0FA7A1C1C36820003F2A9 /* HBTabView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D0FA791C1C36820003F2A9 /* HBTabView.m */; }; A9D1E41718262364002F6424 /* HBPreviewGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D1E41618262364002F6424 /* HBPreviewGenerator.m */; }; - A9D488A51996270300E9B1BA /* HBTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D488A41996270300E9B1BA /* HBTreeNode.m */; }; A9DC6C52196F04F6002AE6B4 /* HBSubtitlesController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DC6C50196F04F6002AE6B4 /* HBSubtitlesController.m */; }; A9DC6C56196F0517002AE6B4 /* Subtitles.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9DC6C54196F0517002AE6B4 /* Subtitles.xib */; }; - A9DEC8741A23C87500C79B48 /* HBCore.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8731A23C87500C79B48 /* HBCore.m */; }; - A9DEC8771A23C88D00C79B48 /* HBVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8761A23C88D00C79B48 /* HBVideo.m */; }; - A9DEC87A1A23C89E00C79B48 /* HBPicture.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC8791A23C89E00C79B48 /* HBPicture.m */; }; - A9DEC87F1A23DF6F00C79B48 /* HBJob.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DEC87E1A23DF6F00C79B48 /* HBJob.m */; }; + A9DF49271C884C4E008AC14A /* HBJobTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DF49221C884C4E008AC14A /* HBJobTests.m */; }; + A9DF49281C884C4E008AC14A /* HBJobUndoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DF49231C884C4E008AC14A /* HBJobUndoTests.m */; }; + A9DF49291C884C4E008AC14A /* HBMockTitle.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DF49251C884C4E008AC14A /* HBMockTitle.m */; }; + A9DF492A1C884C4E008AC14A /* HBPresetsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A9DF49261C884C4E008AC14A /* HBPresetsTests.m */; }; A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */; }; A9E1468016BC2AD800C307BC /* next-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467C16BC2AD800C307BC /* next-p.pdf */; }; A9E1468116BC2AD800C307BC /* pause-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467D16BC2AD800C307BC /* pause-p.pdf */; }; A9E1468216BC2AD800C307BC /* play-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467E16BC2AD800C307BC /* play-p.pdf */; }; A9E1468316BC2AD800C307BC /* prev-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467F16BC2AD800C307BC /* prev-p.pdf */; }; A9E165521C523016003EF30E /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E165511C523016003EF30E /* libavfilter.a */; }; - A9E165531C52302A003EF30E /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E165511C523016003EF30E /* libavfilter.a */; }; - A9E2FD271A21BC4A000E8D3F /* HBAddPresetController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */; }; A9E2FD2B1A21BC6F000E8D3F /* AddPreset.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9E2FD291A21BC6F000E8D3F /* AddPreset.xib */; }; - A9E66D701A67A2A8007B641D /* HBDistributedArray.m in Sources */ = {isa = PBXBuildFile; fileRef = A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */; }; - A9EA43681A2210C400785E95 /* HBQueueOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EA43671A2210C400785E95 /* HBQueueOutlineView.m */; }; A9F2EB6F196F12C800066546 /* Audio.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9F2EB6D196F12C800066546 /* Audio.xib */; }; A9F472891976B7F30009EC65 /* HBSubtitlesDefaultsController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F472871976B7F30009EC65 /* HBSubtitlesDefaultsController.m */; }; - A9F4728D1976BAA70009EC65 /* HBSubtitlesDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F4728C1976BAA70009EC65 /* HBSubtitlesDefaults.m */; }; A9F7102619A475EC00F61301 /* HBDockTile.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F7102519A475EC00F61301 /* HBDockTile.m */; }; D86C9DD51C6D372500F06F1B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D86C9DD41C6D372500F06F1B /* Assets.xcassets */; }; /* End PBXBuildFile section */ @@ -188,20 +228,34 @@ remoteGlobalIDString = 273F216E14ADD2170021BE6D; remoteInfo = external; }; - 2781697014B02B1B00A28B61 /* PBXContainerItemProxy */ = { + A91CE2AE1C7DA74D0068F46F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 273F1FE014AD9DA40021BE6D /* Project object */; proxyType = 1; remoteGlobalIDString = 273F216E14ADD2170021BE6D; remoteInfo = external; }; - A95B8D991B09F16700F2F152 /* PBXContainerItemProxy */ = { + A91CE2EE1C7DB40D0068F46F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 273F1FE014AD9DA40021BE6D /* Project object */; + proxyType = 1; + remoteGlobalIDString = A9736F011C7DA5FE008F1D18; + remoteInfo = HandBrakeKit; + }; + A91CE2FF1C7DBA2C0068F46F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 273F1FE014AD9DA40021BE6D /* Project object */; proxyType = 1; remoteGlobalIDString = 273F203814ADBC200021BE6D; remoteInfo = HandBrake; }; + A9736F0D1C7DA5FE008F1D18 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 273F1FE014AD9DA40021BE6D /* Project object */; + proxyType = 1; + remoteGlobalIDString = A9736F011C7DA5FE008F1D18; + remoteInfo = HandBrakeKit; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -222,6 +276,7 @@ files = ( 273F20CB14ADC89A0021BE6D /* Growl.framework in CopyFiles */, 273F20CC14ADC8A10021BE6D /* Sparkle.framework in CopyFiles */, + A9736F181C7DA5FE008F1D18 /* HandBrakeKit.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -321,7 +376,6 @@ A90A0CAE1988D57200DA65CE /* HBAudioTrackPreset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAudioTrackPreset.m; sourceTree = ""; }; A91017B21A64440A00039BFB /* HBSubtitles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBSubtitles.h; sourceTree = ""; }; A91017B31A64440A00039BFB /* HBSubtitles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBSubtitles.m; sourceTree = ""; }; - A91404601BDBB7DE00BE29A7 /* HBJobUndoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJobUndoTests.m; sourceTree = ""; }; A914BCB11BC441C700157917 /* HBPreviewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPreviewView.h; sourceTree = ""; }; A914BCB21BC441C700157917 /* HBPreviewView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPreviewView.m; sourceTree = ""; }; A914BCB41BC441D100157917 /* QTKit+HBQTMovieExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QTKit+HBQTMovieExtensions.h"; sourceTree = ""; }; @@ -338,6 +392,11 @@ A91AFD0B1A948827009BECED /* HBOutputFileWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBOutputFileWriter.m; sourceTree = ""; }; A91AFD0D1A949472009BECED /* HBJobOutputFileWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBJobOutputFileWriter.h; sourceTree = ""; }; A91AFD0E1A949472009BECED /* HBJobOutputFileWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJobOutputFileWriter.m; sourceTree = ""; }; + A91CE2CB1C7DABBC0068F46F /* libltdl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libltdl.a; path = "../../../Library/Developer/Xcode/DerivedData/HandBrake-bmmnjzrlaitphwcfpfkndzpwsyph/Build/Products/release/external/contrib/lib/libltdl.a"; sourceTree = ""; }; + A91CE2CC1C7DABBC0068F46F /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisfile.a; path = "../../../Library/Developer/Xcode/DerivedData/HandBrake-bmmnjzrlaitphwcfpfkndzpwsyph/Build/Products/release/external/contrib/lib/libvorbisfile.a"; sourceTree = ""; }; + A91CE2CF1C7DABCE0068F46F /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; + A91CE2D11C7DABDA0068F46F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + A91CE2D31C7DABE40068F46F /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; A92268761A6E555500A8D5C5 /* HBAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAppDelegate.h; sourceTree = ""; }; A92268771A6E555500A8D5C5 /* HBAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAppDelegate.m; sourceTree = ""; }; A922687A1A6E569B00A8D5C5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = MainWindow.xib; sourceTree = ""; }; @@ -354,6 +413,7 @@ A93E0ED61972958C00FD67FB /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Video.xib; sourceTree = ""; }; A93FD4731A62ABE800A6AC43 /* HBAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAudio.h; sourceTree = ""; }; A93FD4741A62ABE800A6AC43 /* HBAudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAudio.m; sourceTree = ""; }; + A94A98F41C858EFB004BA9BA /* HBDictTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBDictTests.m; sourceTree = ""; }; A95121E41B5F7BE700FD773D /* NSArray+HBAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+HBAdditions.h"; sourceTree = ""; }; A95121E51B5F7BE700FD773D /* NSArray+HBAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+HBAdditions.m"; sourceTree = ""; }; A9523935199A6AAE00588AEF /* HBFilters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBFilters.h; sourceTree = ""; }; @@ -369,8 +429,6 @@ A95512881A320A12001BFC6F /* libjansson.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjansson.a; path = external/contrib/lib/libjansson.a; sourceTree = BUILT_PRODUCTS_DIR; }; A9597A281A49749D00007771 /* HBRange+UIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HBRange+UIAdditions.h"; sourceTree = ""; }; A9597A291A49749D00007771 /* HBRange+UIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "HBRange+UIAdditions.m"; sourceTree = ""; }; - A95B8D931B09F16700F2F152 /* HandBrake Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "HandBrake Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - A95B8D961B09F16700F2F152 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A96CD1741BCC5F9100F372F1 /* HBMutablePreset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBMutablePreset.h; sourceTree = ""; }; A96CD1751BCC5F9100F372F1 /* HBMutablePreset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBMutablePreset.m; sourceTree = ""; }; A9706CB21AC1436F00BAEAA8 /* HBApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBApplication.h; sourceTree = ""; }; @@ -380,14 +438,19 @@ A9706CB91AC1452800BAEAA8 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = ExceptionAlert.xib; sourceTree = ""; }; A971281D1A2C75180088C076 /* HBTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBTitle.h; sourceTree = ""; }; A971281E1A2C75180088C076 /* HBTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBTitle.m; sourceTree = ""; }; + A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HandBrakeKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A9736F041C7DA5FE008F1D18 /* HandBrakeKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandBrakeKit.h; sourceTree = ""; }; + A9736F061C7DA5FE008F1D18 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A9736F0B1C7DA5FE008F1D18 /* HandBrakeKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HandBrakeKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + A9736F141C7DA5FE008F1D18 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A975C08C1AE8C5270061870D /* HBStateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBStateFormatter.h; sourceTree = ""; }; A975C08D1AE8C5270061870D /* HBStateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBStateFormatter.m; sourceTree = ""; }; A988AF9B1BC7C35F00932543 /* HBChapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBChapter.h; sourceTree = ""; }; A988AF9C1BC7C35F00932543 /* HBChapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBChapter.m; sourceTree = ""; }; A98C29C21977B10600AF5DED /* HBLanguagesSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBLanguagesSelection.h; sourceTree = ""; }; A98C29C31977B10600AF5DED /* HBLanguagesSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBLanguagesSelection.m; sourceTree = ""; }; - A98FD5911B19C63800FCC7A5 /* HBMockTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBMockTitle.h; sourceTree = ""; }; - A98FD5921B19C63800FCC7A5 /* HBMockTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBMockTitle.m; sourceTree = ""; }; + A98F38041C7DCA7E00E469C8 /* HBStateFormatter+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HBStateFormatter+Private.h"; sourceTree = ""; }; + A98F38051C7DCA7E00E469C8 /* HBStateFormatter+Private.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "HBStateFormatter+Private.m"; sourceTree = ""; }; A98FD5941B19C6E400FCC7A5 /* HBTitlePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBTitlePrivate.h; sourceTree = ""; }; A9906B2B1A710920001D82D5 /* HBQueueController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBQueueController.m; sourceTree = ""; }; A990D9051A64562200139032 /* HBJob+HBJobConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HBJob+HBJobConversion.h"; sourceTree = ""; }; @@ -399,10 +462,8 @@ A99F40CC1B624E7E00750170 /* HBPictureViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPictureViewController.h; sourceTree = ""; }; A99F40CD1B624E7E00750170 /* HBPictureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPictureViewController.m; sourceTree = ""; }; A99F40D21B624EA500750170 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = HBPictureViewController.xib; sourceTree = ""; }; - A9A24B2C1B09F6FD00AD1FAB /* HBPresetsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPresetsTests.m; sourceTree = ""; }; - A9A24B2E1B09F87400AD1FAB /* HBJobTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJobTests.m; sourceTree = ""; }; - A9AA44781970664A00D7DEFC /* HBUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBUtilities.h; sourceTree = ""; }; - A9AA44791970664A00D7DEFC /* HBUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBUtilities.m; sourceTree = ""; }; + A9AA44781970664A00D7DEFC /* HBUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HBUtilities.h; path = ../HBUtilities.h; sourceTree = ""; }; + A9AA44791970664A00D7DEFC /* HBUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HBUtilities.m; path = ../HBUtilities.m; sourceTree = ""; }; A9AA447B1970724D00D7DEFC /* HBAdvancedController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBAdvancedController.h; sourceTree = ""; }; A9AA447C1970726500D7DEFC /* HBQueueController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBQueueController.h; sourceTree = ""; }; A9AA447D1970729300D7DEFC /* HBPreviewGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBPreviewGenerator.h; sourceTree = ""; }; @@ -440,6 +501,11 @@ A9DEC8791A23C89E00C79B48 /* HBPicture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPicture.m; sourceTree = ""; }; A9DEC87D1A23DF6F00C79B48 /* HBJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBJob.h; sourceTree = ""; }; A9DEC87E1A23DF6F00C79B48 /* HBJob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJob.m; sourceTree = ""; }; + A9DF49221C884C4E008AC14A /* HBJobTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJobTests.m; sourceTree = ""; }; + A9DF49231C884C4E008AC14A /* HBJobUndoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBJobUndoTests.m; sourceTree = ""; }; + A9DF49241C884C4E008AC14A /* HBMockTitle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBMockTitle.h; sourceTree = ""; }; + A9DF49251C884C4E008AC14A /* HBMockTitle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBMockTitle.m; sourceTree = ""; }; + A9DF49261C884C4E008AC14A /* HBPresetsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPresetsTests.m; sourceTree = ""; }; A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; A9E1467C16BC2AD800C307BC /* next-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "next-p.pdf"; sourceTree = ""; }; A9E1467D16BC2AD800C307BC /* pause-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "pause-p.pdf"; sourceTree = ""; }; @@ -449,8 +515,8 @@ A9E2FD241A21BC4A000E8D3F /* HBAddPresetController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAddPresetController.h; sourceTree = ""; }; A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAddPresetController.m; sourceTree = ""; }; A9E2FD2A1A21BC6F000E8D3F /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = AddPreset.xib; sourceTree = ""; }; - A9E66D6E1A67A2A8007B641D /* HBDistributedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBDistributedArray.h; sourceTree = ""; }; - A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBDistributedArray.m; sourceTree = ""; }; + A9E66D6E1A67A2A8007B641D /* HBDistributedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HBDistributedArray.h; path = ../HBDistributedArray.h; sourceTree = ""; }; + A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HBDistributedArray.m; path = ../HBDistributedArray.m; sourceTree = ""; }; A9EA43661A2210C400785E95 /* HBQueueOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBQueueOutlineView.h; sourceTree = ""; }; A9EA43671A2210C400785E95 /* HBQueueOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBQueueOutlineView.m; sourceTree = ""; }; A9F2EB6E196F12C800066546 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Audio.xib; sourceTree = ""; }; @@ -506,47 +572,61 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A9E165531C52302A003EF30E /* libavfilter.a in Frameworks */, - 273F20C914ADC5150021BE6D /* AudioToolbox.framework in Frameworks */, 273F203C14ADBC210021BE6D /* Cocoa.framework in Frameworks */, 273F21C114ADE7A20021BE6D /* Growl.framework in Frameworks */, - 273F20C614ADC4F50021BE6D /* IOKit.framework in Frameworks */, 273F20C814ADC4FF0021BE6D /* QTKit.framework in Frameworks */, A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */, 273F21C214ADE7BC0021BE6D /* Sparkle.framework in Frameworks */, - 273F20C414ADC4B60021BE6D /* libbz2.dylib in Frameworks */, - 273F20C314ADC4AE0021BE6D /* libiconv.dylib in Frameworks */, - 273F20C514ADC4BD0021BE6D /* libz.dylib in Frameworks */, - 27D6C72514B1019100B785E4 /* libhandbrake.a in Frameworks */, - 27D6C74314B102DA00B785E4 /* libass.a in Frameworks */, - 27D6C74514B102DA00B785E4 /* libavcodec.a in Frameworks */, - 27D6C74714B102DA00B785E4 /* libavformat.a in Frameworks */, - 226268E01572CC7300477B4E /* libavresample.a in Frameworks */, - 27D6C74914B102DA00B785E4 /* libavutil.a in Frameworks */, - 27D6C74B14B102DA00B785E4 /* libbluray.a in Frameworks */, - 27D6C74F14B102DA00B785E4 /* libdvdnav.a in Frameworks */, - 27D6C75114B102DA00B785E4 /* libdvdread.a in Frameworks */, - 27D6C75514B102DA00B785E4 /* libfontconfig.a in Frameworks */, - 27D6C75714B102DA00B785E4 /* libfreetype.a in Frameworks */, - 27D6C75914B102DA00B785E4 /* libfribidi.a in Frameworks */, - 27D6C75E14B102DA00B785E4 /* libmp3lame.a in Frameworks */, - 27D6C76414B102DA00B785E4 /* libogg.a in Frameworks */, - 27D6C76614B102DA00B785E4 /* libsamplerate.a in Frameworks */, - 27D6C76814B102DA00B785E4 /* libswscale.a in Frameworks */, - 27D6C76A14B102DA00B785E4 /* libtheora.a in Frameworks */, - 27D6C76C14B102DA00B785E4 /* libvorbis.a in Frameworks */, - 27D6C76E14B102DA00B785E4 /* libvorbisenc.a in Frameworks */, - 22DD2C4A177B94DB00EF50D3 /* libvpx.a in Frameworks */, - 27D6C77014B102DA00B785E4 /* libx264.a in Frameworks */, - 27D6C77214B102DA00B785E4 /* libxml2.a in Frameworks */, - A955128A1A320A6F001BFC6F /* libjansson.a in Frameworks */, + A9736F171C7DA5FE008F1D18 /* HandBrakeKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9736EFE1C7DA5FE008F1D18 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A91119A31C7DD591001C463C /* IOKit.framework in Frameworks */, + A91119A21C7DD58B001C463C /* Cocoa.framework in Frameworks */, + A9736F1F1C7DA667008F1D18 /* Foundation.framework in Frameworks */, + A91CE2B21C7DAB550068F46F /* AudioToolbox.framework in Frameworks */, + A91CE2D41C7DABE40068F46F /* libiconv.tbd in Frameworks */, + A91CE2D21C7DABDA0068F46F /* libz.tbd in Frameworks */, + A91CE2D01C7DABCE0068F46F /* libbz2.tbd in Frameworks */, + A91CE2CD1C7DABBC0068F46F /* libltdl.a in Frameworks */, + A91CE2CE1C7DABBC0068F46F /* libvorbisfile.a in Frameworks */, + A91CE2B31C7DABBC0068F46F /* libass.a in Frameworks */, + A91CE2B41C7DABBC0068F46F /* libavcodec.a in Frameworks */, + A91CE2B51C7DABBC0068F46F /* libavfilter.a in Frameworks */, + A91CE2B61C7DABBC0068F46F /* libavformat.a in Frameworks */, + A91CE2B71C7DABBC0068F46F /* libavresample.a in Frameworks */, + A91CE2B81C7DABBC0068F46F /* libavutil.a in Frameworks */, + A91CE2B91C7DABBC0068F46F /* libbluray.a in Frameworks */, + A91CE2BA1C7DABBC0068F46F /* libdvdnav.a in Frameworks */, + A91CE2BB1C7DABBC0068F46F /* libdvdread.a in Frameworks */, + A91CE2BC1C7DABBC0068F46F /* libfontconfig.a in Frameworks */, + A91CE2BD1C7DABBC0068F46F /* libfreetype.a in Frameworks */, + A91CE2BE1C7DABBC0068F46F /* libfribidi.a in Frameworks */, + A91CE2BF1C7DABBC0068F46F /* libjansson.a in Frameworks */, + A91CE2C01C7DABBC0068F46F /* libmp3lame.a in Frameworks */, + A91CE2C11C7DABBC0068F46F /* libogg.a in Frameworks */, + A91CE2C21C7DABBC0068F46F /* libsamplerate.a in Frameworks */, + A91CE2C31C7DABBC0068F46F /* libswscale.a in Frameworks */, + A91CE2C41C7DABBC0068F46F /* libtheora.a in Frameworks */, + A91CE2C51C7DABBC0068F46F /* libvorbis.a in Frameworks */, + A91CE2C61C7DABBC0068F46F /* libvorbisenc.a in Frameworks */, + A91CE2C71C7DABBC0068F46F /* libvpx.a in Frameworks */, + A91CE2C81C7DABBC0068F46F /* libx264.a in Frameworks */, + A91CE2C91C7DABBC0068F46F /* libx265.a in Frameworks */, + A91CE2CA1C7DABBC0068F46F /* libxml2.a in Frameworks */, + A91CE2B11C7DAA530068F46F /* libhandbrake.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A95B8D901B09F16700F2F152 /* Frameworks */ = { + A9736F081C7DA5FE008F1D18 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A9736F0C1C7DA5FE008F1D18 /* HandBrakeKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -597,7 +677,8 @@ children = ( 273F204114ADBC210021BE6D /* HandBrake */, 273F200214ADAE950021BE6D /* HandBrakeCLI */, - A95B8D941B09F16700F2F152 /* HandBrake Tests */, + A9736F031C7DA5FE008F1D18 /* HandBrakeKit */, + A9736F111C7DA5FE008F1D18 /* HandBrakeKitTests */, 273F200014ADAE950021BE6D /* Products */, 27D6C72314B1013400B785E4 /* Products (external) */, 273F20CD14ADC8E60021BE6D /* Resources */, @@ -611,7 +692,8 @@ children = ( 273F1FFF14ADAE950021BE6D /* HandBrakeCLI */, 273F203914ADBC210021BE6D /* HandBrake.app */, - A95B8D931B09F16700F2F152 /* HandBrake Tests.xctest */, + A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */, + A9736F0B1C7DA5FE008F1D18 /* HandBrakeKitTests.xctest */, ); name = Products; sourceTree = ""; @@ -631,6 +713,11 @@ 273F203414ADBAC30021BE6D /* Frameworks */ = { isa = PBXGroup; children = ( + A91CE2D31C7DABE40068F46F /* libiconv.tbd */, + A91CE2D11C7DABDA0068F46F /* libz.tbd */, + A91CE2CF1C7DABCE0068F46F /* libbz2.tbd */, + A91CE2CB1C7DABBC0068F46F /* libltdl.a */, + A91CE2CC1C7DABBC0068F46F /* libvorbisfile.a */, A9B34D74197696FE00871B7D /* DiskArbitration.framework */, 273F202F14ADB9790021BE6D /* AudioToolbox.framework */, 273F203B14ADBC210021BE6D /* Cocoa.framework */, @@ -661,11 +748,7 @@ isa = PBXGroup; children = ( A9B34D6F197683FE00871B7D /* Controllers */, - A98C29C51977C00000AF5DED /* Core */, - A952392E199A647F00588AEF /* Presets */, A98F00771A972007001C2298 /* Output Redirect */, - A9AA44781970664A00D7DEFC /* HBUtilities.h */, - A9AA44791970664A00D7DEFC /* HBUtilities.m */, A901C2431BC7D05000D77735 /* Others */, A9B34D711976844500871B7D /* UI Views */, ); @@ -785,8 +868,6 @@ children = ( A9EA43661A2210C400785E95 /* HBQueueOutlineView.h */, A9EA43671A2210C400785E95 /* HBQueueOutlineView.m */, - A9E66D6E1A67A2A8007B641D /* HBDistributedArray.h */, - A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */, A9AA447C1970726500D7DEFC /* HBQueueController.h */, A9906B2B1A710920001D82D5 /* HBQueueController.m */, ); @@ -824,6 +905,8 @@ A975C08D1AE8C5270061870D /* HBStateFormatter.m */, A93B0DF61C804CF50051A3FA /* NSDictionary+HBAdditions.h */, A93B0DF71C804CF50051A3FA /* NSDictionary+HBAdditions.m */, + A98F38041C7DCA7E00E469C8 /* HBStateFormatter+Private.h */, + A98F38051C7DCA7E00E469C8 /* HBStateFormatter+Private.m */, ); name = Others; sourceTree = ""; @@ -881,6 +964,7 @@ A9D488A41996270300E9B1BA /* HBTreeNode.m */, ); name = Presets; + path = ..; sourceTree = ""; }; A9537BED1A48A7F900141102 /* UI Bindings Additions */ = { @@ -900,25 +984,33 @@ name = "UI Bindings Additions"; sourceTree = ""; }; - A95B8D941B09F16700F2F152 /* HandBrake Tests */ = { + A9736F031C7DA5FE008F1D18 /* HandBrakeKit */ = { isa = PBXGroup; children = ( - A98FD5911B19C63800FCC7A5 /* HBMockTitle.h */, - A98FD5921B19C63800FCC7A5 /* HBMockTitle.m */, - A91404601BDBB7DE00BE29A7 /* HBJobUndoTests.m */, - A9A24B2E1B09F87400AD1FAB /* HBJobTests.m */, - A9A24B2C1B09F6FD00AD1FAB /* HBPresetsTests.m */, - A95B8D951B09F16700F2F152 /* Supporting Files */, - ); - path = "HandBrake Tests"; + A98C29C51977C00000AF5DED /* Core */, + A952392E199A647F00588AEF /* Presets */, + A9E66D6E1A67A2A8007B641D /* HBDistributedArray.h */, + A9E66D6F1A67A2A8007B641D /* HBDistributedArray.m */, + A9AA44781970664A00D7DEFC /* HBUtilities.h */, + A9AA44791970664A00D7DEFC /* HBUtilities.m */, + A9736F041C7DA5FE008F1D18 /* HandBrakeKit.h */, + A9736F061C7DA5FE008F1D18 /* Info.plist */, + ); + path = HandBrakeKit; sourceTree = ""; }; - A95B8D951B09F16700F2F152 /* Supporting Files */ = { + A9736F111C7DA5FE008F1D18 /* HandBrakeKitTests */ = { isa = PBXGroup; children = ( - A95B8D961B09F16700F2F152 /* Info.plist */, - ); - name = "Supporting Files"; + A9DF49221C884C4E008AC14A /* HBJobTests.m */, + A9DF49231C884C4E008AC14A /* HBJobUndoTests.m */, + A9DF49241C884C4E008AC14A /* HBMockTitle.h */, + A9DF49251C884C4E008AC14A /* HBMockTitle.m */, + A9DF49261C884C4E008AC14A /* HBPresetsTests.m */, + A94A98F41C858EFB004BA9BA /* HBDictTests.m */, + A9736F141C7DA5FE008F1D18 /* Info.plist */, + ); + path = HandBrakeKitTests; sourceTree = ""; }; A98C29C51977C00000AF5DED /* Core */ = { @@ -949,6 +1041,7 @@ A901C2421BC7D01900D77735 /* Others */, ); name = Core; + path = ..; sourceTree = ""; }; A98F00771A972007001C2298 /* Output Redirect */ = { @@ -1052,6 +1145,46 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + A9736EFF1C7DA5FE008F1D18 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A9736F051C7DA5FE008F1D18 /* HandBrakeKit.h in Headers */, + A91CE2D71C7DAEEE0068F46F /* HBCore.h in Headers */, + A91CE2D81C7DAEEE0068F46F /* HBTitle.h in Headers */, + A91CE2D91C7DAEEE0068F46F /* HBJob.h in Headers */, + A91CE2DA1C7DAEEE0068F46F /* HBRange.h in Headers */, + A91CE2DB1C7DAEEE0068F46F /* HBVideo.h in Headers */, + A91CE2DC1C7DAEEE0068F46F /* HBPicture.h in Headers */, + A91CE2DD1C7DAEEE0068F46F /* HBFilters.h in Headers */, + A91119A51C7DD644001C463C /* HBDistributedArray.h in Headers */, + A91CE2DE1C7DAEEE0068F46F /* HBChapter.h in Headers */, + A91CE2DF1C7DAEEE0068F46F /* HBAudio.h in Headers */, + A91CE2E01C7DAEEE0068F46F /* HBAudioTrack.h in Headers */, + A91CE2E11C7DAEEE0068F46F /* HBAudioDefaults.h in Headers */, + A91CE2E21C7DAEEE0068F46F /* HBAudioTrackPreset.h in Headers */, + A91CE2E31C7DAEEE0068F46F /* HBSubtitles.h in Headers */, + A91CE2E41C7DAEEE0068F46F /* HBSubtitlesTrack.h in Headers */, + A91CE2E61C7DAEEE0068F46F /* HBJob+UIAdditions.h in Headers */, + A91CE2E71C7DAEEE0068F46F /* HBRange+UIAdditions.h in Headers */, + A91119A41C7DD614001C463C /* HBSubtitlesDefaults.h in Headers */, + A91CE2E81C7DAEEE0068F46F /* HBVideo+UIAdditions.h in Headers */, + A91CE2E91C7DAEEE0068F46F /* HBPicture+UIAdditions.h in Headers */, + A91CE2EA1C7DAEEE0068F46F /* HBFilters+UIAdditions.h in Headers */, + A91CE2EB1C7DAEEE0068F46F /* HBDVDDetector.h in Headers */, + A91CE2EC1C7DAEEE0068F46F /* HBStateFormatter.h in Headers */, + A91CE2ED1C7DAEEE0068F46F /* HBUtilities.h in Headers */, + A91CE2FB1C7DB99D0068F46F /* HBPresetsManager.h in Headers */, + A91CE2FC1C7DB99D0068F46F /* HBPreset.h in Headers */, + A91CE2FD1C7DB99D0068F46F /* HBMutablePreset.h in Headers */, + A98B8E241C7DD2A200B810C9 /* HBPresetCoding.h in Headers */, + A91CE2FE1C7DB99D0068F46F /* HBTreeNode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXLegacyTarget section */ 273F216E14ADD2170021BE6D /* external */ = { isa = PBXLegacyTarget; @@ -1100,29 +1233,49 @@ buildRules = ( ); dependencies = ( - 2781697114B02B1B00A28B61 /* PBXTargetDependency */, + A91CE2EF1C7DB40D0068F46F /* PBXTargetDependency */, ); name = HandBrake; productName = HandBrake; productReference = 273F203914ADBC210021BE6D /* HandBrake.app */; productType = "com.apple.product-type.application"; }; - A95B8D921B09F16700F2F152 /* HandBrake Tests */ = { + A9736F011C7DA5FE008F1D18 /* HandBrakeKit */ = { isa = PBXNativeTarget; - buildConfigurationList = A95B8D9D1B09F16800F2F152 /* Build configuration list for PBXNativeTarget "HandBrake Tests" */; + buildConfigurationList = A9736F1D1C7DA5FE008F1D18 /* Build configuration list for PBXNativeTarget "HandBrakeKit" */; buildPhases = ( - A95B8D8F1B09F16700F2F152 /* Sources */, - A95B8D901B09F16700F2F152 /* Frameworks */, - A95B8D911B09F16700F2F152 /* Resources */, + A9736EFD1C7DA5FE008F1D18 /* Sources */, + A9736EFE1C7DA5FE008F1D18 /* Frameworks */, + A9736EFF1C7DA5FE008F1D18 /* Headers */, + A9736F001C7DA5FE008F1D18 /* Resources */, ); buildRules = ( ); dependencies = ( - A95B8D9A1B09F16700F2F152 /* PBXTargetDependency */, + A91CE2AF1C7DA74D0068F46F /* PBXTargetDependency */, + ); + name = HandBrakeKit; + productName = HandBrakeKit; + productReference = A9736F021C7DA5FE008F1D18 /* HandBrakeKit.framework */; + productType = "com.apple.product-type.framework"; + }; + A9736F0A1C7DA5FE008F1D18 /* HandBrakeKitTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = A9736F1E1C7DA5FE008F1D18 /* Build configuration list for PBXNativeTarget "HandBrakeKitTests" */; + buildPhases = ( + A9736F071C7DA5FE008F1D18 /* Sources */, + A9736F081C7DA5FE008F1D18 /* Frameworks */, + A9736F091C7DA5FE008F1D18 /* Resources */, ); - name = "HandBrake Tests"; - productName = "HandBrake Tests"; - productReference = A95B8D931B09F16700F2F152 /* HandBrake Tests.xctest */; + buildRules = ( + ); + dependencies = ( + A9736F0E1C7DA5FE008F1D18 /* PBXTargetDependency */, + A91CE3001C7DBA2C0068F46F /* PBXTargetDependency */, + ); + name = HandBrakeKitTests; + productName = HandBrakeKitTests; + productReference = A9736F0B1C7DA5FE008F1D18 /* HandBrakeKitTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ @@ -1133,8 +1286,11 @@ attributes = { LastUpgradeCheck = 0710; TargetAttributes = { - A95B8D921B09F16700F2F152 = { - CreatedOnToolsVersion = 6.3.1; + A9736F011C7DA5FE008F1D18 = { + CreatedOnToolsVersion = 7.3; + }; + A9736F0A1C7DA5FE008F1D18 = { + CreatedOnToolsVersion = 7.3; TestTargetID = 273F203814ADBC200021BE6D; }; }; @@ -1153,10 +1309,11 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 273F203814ADBC200021BE6D /* HandBrake */, - 273F1FFE14ADAE950021BE6D /* HandBrakeCLI */, 273F216E14ADD2170021BE6D /* external */, - A95B8D921B09F16700F2F152 /* HandBrake Tests */, + 273F1FFE14ADAE950021BE6D /* HandBrakeCLI */, + A9736F011C7DA5FE008F1D18 /* HandBrakeKit */, + A9736F0A1C7DA5FE008F1D18 /* HandBrakeKitTests */, + 273F203814ADBC200021BE6D /* HandBrake */, ); }; /* End PBXProject section */ @@ -1196,7 +1353,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A95B8D911B09F16700F2F152 /* Resources */ = { + A9736F001C7DA5FE008F1D18 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9736F091C7DA5FE008F1D18 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1220,87 +1384,96 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A916C99B1C844A0800C7B560 /* HBQueueOutlineView.m in Sources */, + A916C99A1C8449FB00C7B560 /* HBHUDView.m in Sources */, + A916C9991C8449E200C7B560 /* main.mm in Sources */, + A916C9981C8449DB00C7B560 /* HBTitleSelectionController.m in Sources */, + A916C9971C8449CA00C7B560 /* HBAudioDefaultsController.m in Sources */, + A916C9961C8449BE00C7B560 /* HBJobOutputFileWriter.m in Sources */, + A916C9951C8449B000C7B560 /* HBChapterTitlesController.m in Sources */, + A916C9931C8449A100C7B560 /* HBAddPresetController.m in Sources */, + A916C9921C84498F00C7B560 /* DockTextField.m in Sources */, + A9706CB41AC1436F00BAEAA8 /* HBApplication.m in Sources */, + 273F20B514ADBE670021BE6D /* HBPreferencesController.m in Sources */, + 273F20AC14ADBE670021BE6D /* HBController.m in Sources */, + A93E0ED31972957000FD67FB /* HBVideoController.m in Sources */, + A99F40CF1B624E7E00750170 /* HBPictureViewController.m in Sources */, + 273F20AF14ADBE670021BE6D /* HBAudioController.m in Sources */, + A9DC6C52196F04F6002AE6B4 /* HBSubtitlesController.m in Sources */, + A9F472891976B7F30009EC65 /* HBSubtitlesDefaultsController.m in Sources */, + 273F20AD14ADBE670021BE6D /* HBAdvancedController.m in Sources */, + A9906B2C1A710920001D82D5 /* HBQueueController.m in Sources */, A9F7102619A475EC00F61301 /* HBDockTile.m in Sources */, A98C29C41977B10600AF5DED /* HBLanguagesSelection.m in Sources */, - A9160A351AE7A165009A7818 /* HBCodingUtilities.m in Sources */, A9BB0F2719A0ECE40079F1C1 /* HBHUDButtonCell.m in Sources */, - A932E273198834130047D13E /* HBAudioDefaults.m in Sources */, A9706CB71AC1437800BAEAA8 /* HBExceptionAlertController.m in Sources */, A92268781A6E555500A8D5C5 /* HBAppDelegate.m in Sources */, - A9D0FA771C1C284D0003F2A9 /* HBFocusRingView.m in Sources */, - A91806711A4807B000FC9BED /* HBRange.m in Sources */, - A9DEC8771A23C88D00C79B48 /* HBVideo.m in Sources */, - A9523937199A6AAE00588AEF /* HBFilters.m in Sources */, - A9AA447A1970664A00D7DEFC /* HBUtilities.m in Sources */, A9BC24C91A69293E007DC41A /* HBAttributedStringAdditions.m in Sources */, - 273F20AC14ADBE670021BE6D /* HBController.m in Sources */, A914BCB61BC441D100157917 /* QTKit+HBQTMovieExtensions.m in Sources */, - 273F20AD14ADBE670021BE6D /* HBAdvancedController.m in Sources */, - 273F20AE14ADBE670021BE6D /* HBAudioTrack.m in Sources */, - A9DEC87A1A23C89E00C79B48 /* HBPicture.m in Sources */, - A96CD1761BCC5F9100F372F1 /* HBMutablePreset.m in Sources */, - 273F20AF14ADBE670021BE6D /* HBAudioController.m in Sources */, - A9537BF31A48A99500141102 /* HBVideo+UIAdditions.m in Sources */, - 273F20B114ADBE670021BE6D /* HBDVDDetector.m in Sources */, 273F20B214ADBE670021BE6D /* HBImageAndTextCell.m in Sources */, - A9537BF61A48AB6300141102 /* HBPicture+UIAdditions.m in Sources */, 273F20B314ADBE670021BE6D /* HBOutputPanelController.m in Sources */, 273F20B414ADBE670021BE6D /* HBOutputRedirect.m in Sources */, - A93FD4751A62ABE800A6AC43 /* HBAudio.m in Sources */, - A971281F1A2C75180088C076 /* HBTitle.m in Sources */, - 273F20B514ADBE670021BE6D /* HBPreferencesController.m in Sources */, + A9D0FA771C1C284D0003F2A9 /* HBFocusRingView.m in Sources */, A9D0FA7A1C1C36820003F2A9 /* HBTabView.m in Sources */, - A9E66D701A67A2A8007B641D /* HBDistributedArray.m in Sources */, - A99422E01B1887B000DDB077 /* NSJSONSerialization+HBAdditions.m in Sources */, - A9DC6C52196F04F6002AE6B4 /* HBSubtitlesController.m in Sources */, - A988AF9D1BC7C35F00932543 /* HBChapter.m in Sources */, - A9F472891976B7F30009EC65 /* HBSubtitlesDefaultsController.m in Sources */, A91AFD0C1A948827009BECED /* HBOutputFileWriter.m in Sources */, - A9906B2C1A710920001D82D5 /* HBQueueController.m in Sources */, - A914BCB31BC441C700157917 /* HBPreviewView.m in Sources */, - A9CF25F41990D64E0023F727 /* HBPreset.m in Sources */, A95121E61B5F7BE700FD773D /* NSArray+HBAdditions.m in Sources */, - A9DEC8741A23C87500C79B48 /* HBCore.m in Sources */, - A9F4728D1976BAA70009EC65 /* HBSubtitlesDefaults.m in Sources */, - A93E0ED31972957000FD67FB /* HBVideoController.m in Sources */, - 273F20B614ADBE670021BE6D /* HBPresetsManager.m in Sources */, + A914BCB31BC441C700157917 /* HBPreviewView.m in Sources */, 273F20B714ADBE670021BE6D /* HBPreviewController.m in Sources */, - A990D9071A64562200139032 /* HBJob+HBJobConversion.m in Sources */, A9D1E41718262364002F6424 /* HBPreviewGenerator.m in Sources */, - A90A0CAF1988D57200DA65CE /* HBAudioTrackPreset.m in Sources */, - A91017B41A64440A00039BFB /* HBSubtitles.m in Sources */, 273F20BA14ADBE670021BE6D /* HBPictureController.m in Sources */, - A9706CB41AC1436F00BAEAA8 /* HBApplication.m in Sources */, - A99F40CF1B624E7E00750170 /* HBPictureViewController.m in Sources */, A9CF25F71990D6820023F727 /* HBPresetsViewController.m in Sources */, - A9537BF91A48AC9000141102 /* HBFilters+UIAdditions.m in Sources */, - 273F20BE14ADC09F0021BE6D /* main.mm in Sources */, - A9537BF01A48A85C00141102 /* HBJob+UIAdditions.m in Sources */, - A9EA43681A2210C400785E95 /* HBQueueOutlineView.m in Sources */, - A9C183961A716B8F00C897C2 /* HBTitleSelectionController.m in Sources */, - A91726E7197291BC00D1AFEF /* HBChapterTitlesController.m in Sources */, - A9C9F88919A733FE00DC8923 /* HBHUDView.m in Sources */, - A932E26F198833920047D13E /* HBAudioDefaultsController.m in Sources */, - A91AFD0F1A949472009BECED /* HBJobOutputFileWriter.m in Sources */, - A93B0DF81C804CF50051A3FA /* NSDictionary+HBAdditions.m in Sources */, - 46AB433515F98A2B009C0961 /* DockTextField.m in Sources */, - A9DEC87F1A23DF6F00C79B48 /* HBJob.m in Sources */, - A9E2FD271A21BC4A000E8D3F /* HBAddPresetController.m in Sources */, - A975C08E1AE8C5270061870D /* HBStateFormatter.m in Sources */, - A9181CB21BD76F8400E5C8B0 /* HBSubtitlesTrack.m in Sources */, - A9D488A51996270300E9B1BA /* HBTreeNode.m in Sources */, - A9597A2A1A49749D00007771 /* HBRange+UIAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A95B8D8F1B09F16700F2F152 /* Sources */ = { + A9736EFD1C7DA5FE008F1D18 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A98FD5931B19C63800FCC7A5 /* HBMockTitle.m in Sources */, - A91404611BDBB7DE00BE29A7 /* HBJobUndoTests.m in Sources */, - A9A24B2D1B09F6FD00AD1FAB /* HBPresetsTests.m in Sources */, - A9A24B2F1B09F87400AD1FAB /* HBJobTests.m in Sources */, + A916180E1C845161000556C6 /* NSDictionary+HBAdditions.m in Sources */, + A91CE2F61C7DB96D0068F46F /* NSJSONSerialization+HBAdditions.m in Sources */, + A91CE2F71C7DB96D0068F46F /* HBPresetsManager.m in Sources */, + A91CE2F81C7DB96D0068F46F /* HBPreset.m in Sources */, + A98F38071C7DCA7E00E469C8 /* HBStateFormatter+Private.m in Sources */, + A91CE2F91C7DB96D0068F46F /* HBMutablePreset.m in Sources */, + A91CE2FA1C7DB96D0068F46F /* HBTreeNode.m in Sources */, + A91CE2B01C7DA9FB0068F46F /* HBUtilities.m in Sources */, + A91CE27D1C7DA7320068F46F /* HBCore.m in Sources */, + A91CE27F1C7DA7320068F46F /* HBTitle.m in Sources */, + A91CE2821C7DA7320068F46F /* HBJob.m in Sources */, + A91CE2841C7DA7320068F46F /* HBJob+HBJobConversion.m in Sources */, + A91CE2861C7DA7320068F46F /* HBRange.m in Sources */, + A91CE2881C7DA7320068F46F /* HBVideo.m in Sources */, + A91CE28A1C7DA7320068F46F /* HBPicture.m in Sources */, + A91CE28C1C7DA7320068F46F /* HBFilters.m in Sources */, + A91CE28E1C7DA7320068F46F /* HBChapter.m in Sources */, + A91CE2901C7DA7320068F46F /* HBAudio.m in Sources */, + A91CE2921C7DA7320068F46F /* HBAudioTrack.m in Sources */, + A91CE2941C7DA7320068F46F /* HBAudioDefaults.m in Sources */, + A91CE2961C7DA7320068F46F /* HBAudioTrackPreset.m in Sources */, + A91CE2981C7DA7320068F46F /* HBSubtitles.m in Sources */, + A91CE29A1C7DA7320068F46F /* HBSubtitlesTrack.m in Sources */, + A91CE29C1C7DA7320068F46F /* HBSubtitlesDefaults.m in Sources */, + A91CE29E1C7DA7320068F46F /* HBJob+UIAdditions.m in Sources */, + A91CE2A01C7DA7320068F46F /* HBRange+UIAdditions.m in Sources */, + A91CE2A21C7DA7320068F46F /* HBVideo+UIAdditions.m in Sources */, + A91CE2A41C7DA7320068F46F /* HBPicture+UIAdditions.m in Sources */, + A91119A61C7DD64A001C463C /* HBDistributedArray.m in Sources */, + A91CE2A61C7DA7320068F46F /* HBFilters+UIAdditions.m in Sources */, + A91CE2A81C7DA7320068F46F /* HBDVDDetector.m in Sources */, + A91CE2AA1C7DA7320068F46F /* HBCodingUtilities.m in Sources */, + A91CE2AD1C7DA7320068F46F /* HBStateFormatter.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9736F071C7DA5FE008F1D18 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A94A98F51C858EFB004BA9BA /* HBDictTests.m in Sources */, + A9DF49271C884C4E008AC14A /* HBJobTests.m in Sources */, + A9DF49291C884C4E008AC14A /* HBMockTitle.m in Sources */, + A9DF49281C884C4E008AC14A /* HBJobUndoTests.m in Sources */, + A9DF492A1C884C4E008AC14A /* HBPresetsTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1312,15 +1485,25 @@ target = 273F216E14ADD2170021BE6D /* external */; targetProxy = 273F217614ADD2580021BE6D /* PBXContainerItemProxy */; }; - 2781697114B02B1B00A28B61 /* PBXTargetDependency */ = { + A91CE2AF1C7DA74D0068F46F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 273F216E14ADD2170021BE6D /* external */; - targetProxy = 2781697014B02B1B00A28B61 /* PBXContainerItemProxy */; + targetProxy = A91CE2AE1C7DA74D0068F46F /* PBXContainerItemProxy */; }; - A95B8D9A1B09F16700F2F152 /* PBXTargetDependency */ = { + A91CE2EF1C7DB40D0068F46F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A9736F011C7DA5FE008F1D18 /* HandBrakeKit */; + targetProxy = A91CE2EE1C7DB40D0068F46F /* PBXContainerItemProxy */; + }; + A91CE3001C7DBA2C0068F46F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 273F203814ADBC200021BE6D /* HandBrake */; - targetProxy = A95B8D991B09F16700F2F152 /* PBXContainerItemProxy */; + targetProxy = A91CE2FF1C7DBA2C0068F46F /* PBXContainerItemProxy */; + }; + A9736F0E1C7DA5FE008F1D18 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A9736F011C7DA5FE008F1D18 /* HandBrakeKit */; + targetProxy = A9736F0D1C7DA5FE008F1D18 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1493,6 +1676,8 @@ baseConfigurationReference = 275916DA14B2AB27007211E9 /* native.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; @@ -1534,6 +1719,7 @@ OTHER_LDFLAGS = ( "-filelist", "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt", + "-lc++", ); SDKROOT = macosx; SHARED_PRECOMPS_DIR = "$(CONFIGURATION_TEMP_DIR)/PrecompiledHeaders"; @@ -1546,6 +1732,8 @@ baseConfigurationReference = 275916DA14B2AB27007211E9 /* native.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; @@ -1583,6 +1771,7 @@ OTHER_LDFLAGS = ( "-filelist", "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt", + "-lc++", ); SDKROOT = macosx; SHARED_PRECOMPS_DIR = "$(CONFIGURATION_TEMP_DIR)/PrecompiledHeaders"; @@ -1593,6 +1782,7 @@ 273F200814ADAE950021BE6D /* debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = NO; CLANG_WARN_BOOL_CONVERSION = NO; CLANG_WARN_CONSTANT_CONVERSION = NO; CLANG_WARN_ENUM_CONVERSION = NO; @@ -1617,6 +1807,7 @@ 273F200914ADAE950021BE6D /* release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = NO; CLANG_WARN_BOOL_CONVERSION = NO; CLANG_WARN_CONSTANT_CONVERSION = NO; CLANG_WARN_ENUM_CONVERSION = NO; @@ -1642,8 +1833,10 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -1655,7 +1848,7 @@ "\"$(EXTERNAL_BUILD)/contrib/include\"", ); INFOPLIST_FILE = "$(EXTERNAL_BUILD)/macosx/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(EXTERNAL_BUILD)/libhb\"", @@ -1671,8 +1864,10 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -1684,7 +1879,7 @@ "\"$(EXTERNAL_BUILD)/contrib/include\"", ); INFOPLIST_FILE = "$(EXTERNAL_BUILD)/macosx/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(EXTERNAL_BUILD)/libhb\"", @@ -1710,14 +1905,11 @@ }; name = release; }; - A95B8D9B1B09F16800F2F152 /* debug */ = { + A9736F191C7DA5FE008F1D18 /* debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; + CLANG_ANALYZER_NONNULL = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -1728,14 +1920,137 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", + ENABLE_TESTABILITY = YES; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", "$(inherited)", ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "\"$(EXTERNAL_BUILD)/libhb\"", + "\"$(EXTERNAL_BUILD)/contrib/include\"", + ); + INFOPLIST_FILE = HandBrakeKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(EXTERNAL_BUILD)/libhb\"", + "\"$(EXTERNAL_BUILD)/contrib/lib\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = debug; + }; + A9736F1A1C7DA5FE008F1D18 /* release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "\"$(EXTERNAL_BUILD)/libhb\"\n", + "\"$(EXTERNAL_BUILD)/contrib/include\"", + ); + INFOPLIST_FILE = HandBrakeKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(EXTERNAL_BUILD)/libhb\"", + "\"$(EXTERNAL_BUILD)/contrib/lib\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = release; + }; + A9736F1B1C7DA5FE008F1D18 /* debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1744,33 +2059,35 @@ "DEBUG=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "HandBrake Tests/Info.plist"; + HEADER_SEARCH_PATHS = ( + "\"$(EXTERNAL_BUILD)/libhb\"", + "\"$(EXTERNAL_BUILD)/contrib/include\"", + ); + INFOPLIST_FILE = HandBrakeKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "HB.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HandBrake.app/Contents/MacOS/HandBrake"; }; name = debug; }; - A95B8D9C1B09F16800F2F152 /* release */ = { + A9736F1C1C7DA5FE008F1D18 /* release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -1781,15 +2098,12 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1798,11 +2112,15 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "HandBrake Tests/Info.plist"; + HEADER_SEARCH_PATHS = ( + "\"$(EXTERNAL_BUILD)/libhb\"", + "\"$(EXTERNAL_BUILD)/contrib/include\"", + ); + INFOPLIST_FILE = HandBrakeKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "HB.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HandBrake.app/Contents/MacOS/HandBrake"; @@ -1848,11 +2166,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = release; }; - A95B8D9D1B09F16800F2F152 /* Build configuration list for PBXNativeTarget "HandBrake Tests" */ = { + A9736F1D1C7DA5FE008F1D18 /* Build configuration list for PBXNativeTarget "HandBrakeKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A9736F191C7DA5FE008F1D18 /* debug */, + A9736F1A1C7DA5FE008F1D18 /* release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = release; + }; + A9736F1E1C7DA5FE008F1D18 /* Build configuration list for PBXNativeTarget "HandBrakeKitTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - A95B8D9B1B09F16800F2F152 /* debug */, - A95B8D9C1B09F16800F2F152 /* release */, + A9736F1B1C7DA5FE008F1D18 /* debug */, + A9736F1C1C7DA5FE008F1D18 /* release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = release; diff --git a/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [DEBUG].xcscheme b/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [DEBUG].xcscheme index 5cb8429ea..29dd0e4d0 100644 --- a/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [DEBUG].xcscheme +++ b/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [DEBUG].xcscheme @@ -11,7 +11,8 @@ buildForRunning = "YES" buildForProfiling = "YES" buildForArchiving = "YES" - buildForAnalyzing = "YES"> + buildForAnalyzing = "YES" + hideIssues = "NO"> + buildForAnalyzing = "YES" + hideIssues = "NO"> - - - - diff --git a/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [RELEASE].xcscheme b/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [RELEASE].xcscheme index 60d62e5a4..91183912c 100644 --- a/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [RELEASE].xcscheme +++ b/macosx/HandBrake.xcodeproj/xcshareddata/xcschemes/HandBrake [RELEASE].xcscheme @@ -11,7 +11,8 @@ buildForRunning = "YES" buildForProfiling = "YES" buildForArchiving = "YES" - buildForAnalyzing = "YES"> + buildForAnalyzing = "YES" + hideIssues = "NO"> + buildForAnalyzing = "YES" + hideIssues = "NO"> + buildForAnalyzing = "NO" + hideIssues = "NO"> @@ -60,9 +63,9 @@ skipped = "NO"> diff --git a/macosx/HandBrakeKit/HandBrakeKit.h b/macosx/HandBrakeKit/HandBrakeKit.h new file mode 100644 index 000000000..40d756e85 --- /dev/null +++ b/macosx/HandBrakeKit/HandBrakeKit.h @@ -0,0 +1,51 @@ +/* HandBrakeKit.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import + +//! Project version number for HandBrakeKit. +FOUNDATION_EXPORT double HandBrakeKitVersionNumber; + +//! Project version string for HandBrakeKit. +FOUNDATION_EXPORT const unsigned char HandBrakeKitVersionString[]; + + +#import +#import +#import + +#import +#import + +#import +#import +#import + +#import +#import +#import +#import + +#import +#import +#import + +#import + +#import +#import +#import + +#import +#import +#import +#import + +#import +#import +#import +#import +#import diff --git a/macosx/HandBrakeKit/Info.plist b/macosx/HandBrakeKit/Info.plist new file mode 100644 index 000000000..d3de8eefb --- /dev/null +++ b/macosx/HandBrakeKit/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/macosx/HandBrakeKitTests/HBDictTests.m b/macosx/HandBrakeKitTests/HBDictTests.m new file mode 100644 index 000000000..905426488 --- /dev/null +++ b/macosx/HandBrakeKitTests/HBDictTests.m @@ -0,0 +1,100 @@ +// +// HBDictTests.m +// HandBrake +// +// Created by Damiano Galassi on 01/03/16. +// +// + +#import +#import "NSDictionary+HBAdditions.h" +#include "hb.h" + +@interface HBDictTests : XCTestCase + +@property (nonatomic, strong) NSDictionary *dict; + +@end + +@implementation HBDictTests + +- (void)setUp +{ + [super setUp]; + self.dict = @{@"DoubleKey": @(20.3), + @"StringKey": @"miao", + @"BoolKey": @YES, + @"ArrayKey": @[@"First", @"Second", @20]}; +} + +- (void)tearDown +{ + self.dict = nil; + [super tearDown]; +} + +- (void)testNSDictionaryToHBDict +{ + hb_dict_t *hbdict = self.dict.hb_value; + + double doubleValue = hb_value_get_double(hb_dict_get(hbdict, "DoubleKey")); + XCTAssertEqual(doubleValue, [self.dict[@"DoubleKey"] doubleValue]); + + const char *stringValue = hb_value_get_string(hb_dict_get(hbdict, "StringKey")); + XCTAssertEqualObjects(@(stringValue), self.dict[@"StringKey"]); + + BOOL boolValue = (BOOL)hb_value_get_bool(hb_dict_get(hbdict, "BoolKey")); + XCTAssertEqual(boolValue, [self.dict[@"BoolKey"] boolValue]); + + hb_value_array_t *array = hb_dict_get(hbdict, "ArrayKey"); + + size_t count = hb_value_array_len(array); + XCTAssertEqual(count, [self.dict[@"ArrayKey"] count]); + + const char *arrayString = hb_value_get_string(hb_value_array_get(array, 0)); + XCTAssertEqualObjects(@(arrayString), self.dict[@"ArrayKey"][0]); + + long long arrayInt = hb_value_get_int(hb_value_array_get(array, 2)); + XCTAssertEqual(arrayInt, [self.dict[@"ArrayKey"][2] integerValue]); + + hb_dict_free(&hbdict); +} + +- (void)testNSDictionaryToHBDictToNSDictionary +{ + hb_dict_t *hbdict = self.dict.hb_value; + NSDictionary *result = [[NSDictionary alloc] initWithHBDict:hbdict]; + + XCTAssertEqualObjects(result[@"DoubleKey"], self.dict[@"DoubleKey"]); + XCTAssertEqualObjects(result[@"StringKey"], self.dict[@"StringKey"]); + XCTAssertEqualObjects(result[@"BoolKey"], self.dict[@"BoolKey"]); + XCTAssertEqualObjects(result[@"ArrayKey"], self.dict[@"ArrayKey"]); +} + +- (void)testPerformanceHBDict +{ + NSDictionary *dict = self.dict; + + [self measureBlock:^{ + for (int i = 0; i < 10000; i++) + { + hb_dict_t *result = dict.hb_value; + hb_dict_free(&result); + } + }]; +} + +- (void)testPerformanceNSDictionary +{ + NSDictionary *dict = self.dict; + hb_dict_t *hbdict = dict.hb_value; + + [self measureBlock:^{ + for (int i = 0; i < 10000; i++) + { + __unused NSDictionary *result = [[NSDictionary alloc] initWithHBDict:hbdict]; + } + }]; +} + +@end diff --git a/macosx/HandBrakeKitTests/HBJobTests.m b/macosx/HandBrakeKitTests/HBJobTests.m new file mode 100644 index 000000000..55726deea --- /dev/null +++ b/macosx/HandBrakeKitTests/HBJobTests.m @@ -0,0 +1,114 @@ +/* HBJobTests.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import +#import + +#import "HBMockTitle.h" +#import "HBJob.h" +#import "HBPicture.h" +#import "HBJob+UIAdditions.h" +#import "HBPresetsManager.h" +#import "HBPreset.h" +#import "HBMutablePreset.h" + +@interface HBJobTests : XCTestCase + +@property (nonatomic, readonly) HBPresetsManager *manager; + +@property (nonatomic, readwrite) HBPreset *preset; +@property (nonatomic, readwrite) HBTitle *title; +@property (nonatomic, readwrite) HBJob *job; + +@end + +@implementation HBJobTests + +- (void)setUp +{ + [super setUp]; + + _manager = [[HBPresetsManager alloc] init]; + [_manager generateBuiltInPresets]; + + self.preset = self.manager.defaultPreset; + + self.title = [[HBMockTitle alloc] init]; + + self.job = [[HBJob alloc] initWithTitle:self.title andPreset:self.preset]; + self.job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; +} + +- (void)tearDown +{ + [super tearDown]; +} + +- (void)testJobCreation +{ + HBJob *job = [[HBJob alloc] init]; + + XCTAssert(job, @"Pass"); +} + +- (void)testApplyPreset +{ + HBMockTitle *title = [[HBMockTitle alloc] init]; + HBPreset *preset = self.manager.defaultPreset; + + HBJob *job = [[HBJob alloc] initWithTitle:title andPreset:preset]; + job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; + + [job applyPreset:preset]; +} + +- (void)testAudio +{ + XCTAssertGreaterThan(self.job.audio.tracks.count, 1); +} + +- (void)testPictureSize +{ + XCTAssertEqual(self.job.picture.width, 1254); + XCTAssertEqual(self.job.picture.height, 678); +} + +- (void)testAutoCrop +{ + XCTAssertEqual([self.preset[@"PictureAutoCrop"] boolValue], self.job.picture.autocrop); +} + +- (void)testAutoCropValues +{ + XCTAssertEqual(self.title.autoCropTop, self.job.picture.cropTop); + XCTAssertEqual(self.title.autoCropBottom, self.job.picture.cropBottom); + XCTAssertEqual(self.title.autoCropLeft, self.job.picture.cropLeft); + XCTAssertEqual(self.title.autoCropRight, self.job.picture.cropRight); +} + +- (void)testCustomAnamorphic +{ + HBMutablePreset *preset = [self.preset mutableCopy]; + + preset[@"UsesPictureSettings"] = @1; + + preset[@"PictureWidth"] = @720; + preset[@"PictureHeight"] = @576; + + preset[@"PicturePAR"] = @"custom"; + preset[@"PicturePARWidth"] = @64; + preset[@"PicturePARHeight"] = @45; + + HBJob *job = [self.job copy]; + [job applyPreset:preset]; + + XCTAssertEqual(job.picture.width, 720); + XCTAssertEqual(job.picture.height, 576); + + XCTAssertEqual(job.picture.displayWidth, 1064); +} + +@end diff --git a/macosx/HandBrakeKitTests/HBJobUndoTests.m b/macosx/HandBrakeKitTests/HBJobUndoTests.m new file mode 100644 index 000000000..c62d4b1f3 --- /dev/null +++ b/macosx/HandBrakeKitTests/HBJobUndoTests.m @@ -0,0 +1,182 @@ +/* HBJobUndoTests.m + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import + +#import "HBMockTitle.h" +#import "HBJob.h" +#import "HBChapter.h" +#import "HBAudioTrack.h" +#import "HBSubtitlesTrack.h" +#import "HBPicture.h" +#import "HBPresetsManager.h" +#import "HBPreset.h" + +@interface HBJobUndoTests : XCTestCase + +@property (nonatomic, readonly) HBPresetsManager *manager; + +@property (nonatomic, readwrite) HBPreset *preset; +@property (nonatomic, readwrite) HBTitle *title; +@property (nonatomic, readwrite) HBJob *job; +@property (nonatomic, readwrite) HBJob *modifiedJob; + +@end + +@implementation HBJobUndoTests + +- (void)setUp +{ + [super setUp]; + + _manager = [[HBPresetsManager alloc] init]; + [_manager generateBuiltInPresets]; + + self.preset = self.manager.defaultPreset; + + self.title = [[HBMockTitle alloc] init]; + + self.job = [[HBJob alloc] initWithTitle:self.title andPreset:self.preset]; + self.job.destURL = [NSURL fileURLWithPath:@"/Dest.mp4"]; + + NSUndoManager *undoManager = [[NSUndoManager alloc] init]; + undoManager.groupsByEvent = NO; + + self.modifiedJob = [self.job copy]; + self.modifiedJob.undo = undoManager; + + [self.manager.root enumerateObjectsUsingBlock:^(HBPreset * _Nonnull obj, NSIndexPath * _Nonnull idx, BOOL * _Nonnull stop) + { + if (obj.isLeaf) + { + [undoManager beginUndoGrouping]; + [self.modifiedJob applyPreset:obj]; + [undoManager endUndoGrouping]; + } + }]; + + // Container changed + [undoManager beginUndoGrouping]; + self.modifiedJob.container = 0x200000; + [undoManager endUndoGrouping]; + + // Chapters changed + [undoManager beginUndoGrouping]; + self.modifiedJob.chapterTitles[0].title = @"Test chapter"; + self.modifiedJob.range.type = HBRangeTypeFrames; + [undoManager endUndoGrouping]; + + // Undo, redo and undo again the whole thing one time + while (undoManager.canUndo) + { + [undoManager undo]; + } + while (undoManager.canRedo) + { + [undoManager redo]; + } + while (undoManager.canUndo) + { + [undoManager undo]; + } +} + +- (void)tearDown { + [super tearDown]; +} + +- (void)testJob +{ + XCTAssertEqualObjects(self.job.presetName, self.modifiedJob.presetName); + XCTAssertEqual(self.job.container, self.modifiedJob.container); + + XCTAssertEqual(self.job.mp4HttpOptimize, self.modifiedJob.mp4HttpOptimize); + XCTAssertEqual(self.job.mp4iPodCompatible, self.modifiedJob.mp4iPodCompatible); + + XCTAssertEqual(self.job.angle, self.modifiedJob.angle); +} + +- (void)testAudio +{ + XCTAssertEqual([self.job.audio countOfTracks], [self.modifiedJob.audio countOfTracks]); + + for (NSUInteger idx = 0; idx < [self.job.audio countOfTracks]; idx++) + { + HBAudioTrack *t1 = self.job.audio.tracks[idx]; + HBAudioTrack *t2 = self.modifiedJob.audio.tracks[idx]; + + XCTAssertEqualObjects(t1.track, t2.track); + } +} + +- (void)testRange +{ + XCTAssertEqual(self.job.range.type, self.modifiedJob.range.type); +} + +- (void)testPicture +{ + XCTAssertEqual(self.job.picture.width, self.modifiedJob.picture.width); + XCTAssertEqual(self.job.picture.height, self.modifiedJob.picture.height); + + XCTAssertEqual(self.job.picture.displayWidth, self.modifiedJob.picture.displayWidth); + XCTAssertEqual(self.job.picture.parWidth, self.modifiedJob.picture.parWidth); + XCTAssertEqual(self.job.picture.parHeight, self.modifiedJob.picture.parHeight); + + XCTAssertEqual(self.job.picture.autocrop, self.modifiedJob.picture.autocrop); + + XCTAssertEqual(self.job.picture.cropTop, self.modifiedJob.picture.cropTop); + XCTAssertEqual(self.job.picture.cropBottom, self.modifiedJob.picture.cropBottom); + XCTAssertEqual(self.job.picture.cropLeft, self.modifiedJob.picture.cropLeft); + XCTAssertEqual(self.job.picture.cropRight, self.modifiedJob.picture.cropRight); +} + +- (void)testFilters +{ + XCTAssertEqualObjects(self.job.filters.deinterlace, self.modifiedJob.filters.deinterlace); + XCTAssertEqualObjects(self.job.filters.deinterlacePreset, self.modifiedJob.filters.deinterlacePreset); + XCTAssertEqualObjects(self.job.filters.deinterlaceCustomString, self.modifiedJob.filters.deinterlaceCustomString); + + XCTAssertEqualObjects(self.job.filters.detelecine, self.modifiedJob.filters.detelecine); + XCTAssertEqualObjects(self.job.filters.detelecineCustomString, self.modifiedJob.filters.detelecineCustomString); + + XCTAssertEqualObjects(self.job.filters.denoise, self.modifiedJob.filters.denoise); + XCTAssertEqualObjects(self.job.filters.denoisePreset, self.modifiedJob.filters.denoisePreset); + XCTAssertEqualObjects(self.job.filters.denoiseTune, self.modifiedJob.filters.denoiseTune); + XCTAssertEqualObjects(self.job.filters.denoiseCustomString, self.modifiedJob.filters.denoiseCustomString); + + XCTAssertEqual(self.job.filters.deblock, self.modifiedJob.filters.deblock); + XCTAssertEqual(self.job.filters.grayscale, self.modifiedJob.filters.grayscale); +} + +- (void)testSubtitles +{ + XCTAssertEqual([self.job.subtitles countOfTracks], [self.modifiedJob.subtitles countOfTracks]); + + for (NSUInteger idx = 0; idx < [self.job.subtitles countOfTracks]; idx++) + { + HBSubtitlesTrack *t1 = self.job.subtitles.tracks[idx]; + HBSubtitlesTrack *t2 = self.modifiedJob.subtitles.tracks[idx]; + + XCTAssertEqual(t1.sourceTrackIdx, t2.sourceTrackIdx); + XCTAssertEqual(t1.type, t2.type); + XCTAssertEqual(t1.burnedIn, t2.burnedIn); + XCTAssertEqual(t1.forcedOnly, t2.forcedOnly); + XCTAssertEqual(t1.def, t2.def); + } +} + +- (void)testChapters +{ + XCTAssertEqual(self.job.chaptersEnabled, self.modifiedJob.chaptersEnabled); + + for (NSUInteger idx = 0; idx < [self.job.subtitles countOfTracks]; idx++) + { + XCTAssertEqualObjects(self.job.chapterTitles[idx].title, self.modifiedJob.chapterTitles[idx].title); + } +} + +@end diff --git a/macosx/HandBrakeKitTests/HBMockTitle.h b/macosx/HandBrakeKitTests/HBMockTitle.h new file mode 100644 index 000000000..e83a13ad2 --- /dev/null +++ b/macosx/HandBrakeKitTests/HBMockTitle.h @@ -0,0 +1,12 @@ +/* HBMockTitle + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import +#import "HBTitle.h" + +@interface HBMockTitle : HBTitle + +@end diff --git a/macosx/HandBrakeKitTests/HBMockTitle.m b/macosx/HandBrakeKitTests/HBMockTitle.m new file mode 100644 index 000000000..217f56bfc --- /dev/null +++ b/macosx/HandBrakeKitTests/HBMockTitle.m @@ -0,0 +1,167 @@ +/* HBMockTitle + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import "HBMockTitle.h" +#import "HBChapter.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 *keySubTrackLanguageIsoCode; +extern NSString *keySubTrackType; + +@implementation HBMockTitle + +- (instancetype)init +{ + self = [super init]; + return self; +} + +- (NSString *)name +{ + return @"Test.mkv"; +} + +- (BOOL)isStream +{ + return YES; +} + +- (NSString *)description +{ + return @"Test Title"; +} + +- (NSURL *)url +{ + return [NSURL fileURLWithPath:@"/Test.mkv"]; +} + +- (int)index +{ + return 1; +} + +- (int)angles +{ + return 1; +} + +- (int)duration +{ + return 60; +} + +- (int)frames +{ + return 60 * 25; +} + +- (NSString *)timeCode +{ + return @"00:01:00"; +} + +- (int)width +{ + return 1280; +} + +- (int)height +{ + return 720; +} + +- (int)parWidth +{ + return 1; +} + +- (int)parHeight +{ + return 1; +} + +- (int)autoCropTop +{ + return 20; +} + +- (int)autoCropBottom +{ + return 22; +} + +- (int)autoCropLeft +{ + return 12; +} + +- (int)autoCropRight +{ + return 15; +} + +- (NSArray *)audioTracks +{ + NSMutableArray *tracks = [NSMutableArray array]; + [tracks addObject: @{keyAudioTrackIndex: @1, + keyAudioTrackName: [NSString stringWithFormat: @"%d: %s", 0, "English"], + keyAudioInputBitrate: @104, + keyAudioInputSampleRate: @48000, + keyAudioInputCodec: @65536, + keyAudioInputCodecParam: @86018, + keyAudioInputChannelLayout: @3, + keyAudioTrackLanguageIsoCode: @"eng"}]; + + [tracks addObject: @{keyAudioTrackIndex: @2, + keyAudioTrackName: [NSString stringWithFormat: @"%d: %s", 1, "Italian"], + keyAudioInputBitrate: @104, + keyAudioInputSampleRate: @48000, + keyAudioInputCodec: @65536, + keyAudioInputCodecParam: @86018, + keyAudioInputChannelLayout: @3, + keyAudioTrackLanguageIsoCode: @"ita"}]; + return [tracks copy]; +} + +- (NSArray *)subtitlesTracks +{ + NSMutableArray *tracks = [NSMutableArray array]; + NSString *nativeLanguage = @"English"; + + // create a dictionary of source subtitle information to store in our array + [tracks addObject:@{keySubTrackName: [NSString stringWithFormat:@"%d: %@ (%@) (%@)", 0, nativeLanguage, @"Bitmap", @"VobSub"], + keySubTrackType: @0, + keySubTrackLanguageIsoCode: @"eng"}]; + + return [tracks copy]; +} + +- (NSArray *)chapters +{ + NSMutableArray *chapters = [NSMutableArray array]; + + for (int i = 0; i < 10; i++) + { + NSString *title = [NSString stringWithFormat:@"Chapter %d", i + 1]; + [chapters addObject:[[HBChapter alloc] initWithTitle:title + index:i + 1 + duration:100]]; + } + return [chapters copy]; +} + + +@end diff --git a/macosx/HandBrakeKitTests/HBPresetsTests.m b/macosx/HandBrakeKitTests/HBPresetsTests.m new file mode 100644 index 000000000..af7e48ddd --- /dev/null +++ b/macosx/HandBrakeKitTests/HBPresetsTests.m @@ -0,0 +1,104 @@ +/* HBPresetsTests.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ + +#import +#import + +#import "HBPreset.h" +#import "HBPresetsManager.h" + +@interface HBPresetsTests : XCTestCase + +@end + +@implementation HBPresetsTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown +{ + [super tearDown]; +} + +- (void)testManagerCreation +{ + HBPresetsManager *manager = [[HBPresetsManager alloc] init]; + + XCTAssert(manager, @"Pass"); +} + +- (void)testDefaultPresets +{ + HBPresetsManager *manager = [[HBPresetsManager alloc] init]; + [manager generateBuiltInPresets]; + + XCTAssert(manager.root.children.count > 1, @"Pass"); +} + +- (void)testCreationTime +{ + HBPresetsManager *manager = [[HBPresetsManager alloc] init]; + + [self measureBlock:^{ + [manager generateBuiltInPresets]; + }]; +} + +- (void)testSave +{ + NSURL *tempURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; + NSURL *presetsURL = [tempURL URLByAppendingPathComponent:@"test.json"]; + HBPresetsManager *manager = [[HBPresetsManager alloc] initWithURL:presetsURL]; + [manager savePresets]; + + XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:presetsURL.path]); + + // Remove the temp files. + [[NSFileManager defaultManager] removeItemAtURL:presetsURL error:NULL]; +} + +- (void)testUpgrade +{ + NSURL *tempURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; + NSURL *presetsURL = [tempURL URLByAppendingPathComponent:@"test.json"]; + NSURL *modifiedPresetsURL = [tempURL URLByAppendingPathComponent:@"test2.json"]; + + // Create a new presets manager with the defaults presets. + HBPresetsManager *manager = [[HBPresetsManager alloc] initWithURL:presetsURL]; + [manager savePresets]; + + // Read the json and change the version to the previous major + // so it will kick in the import routine. + NSData *data = [NSData dataWithContentsOfURL:presetsURL]; + NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL]; + dict[@"VersionMajor"] = @([dict[@"VersionMajor"] integerValue] - 1); + + + NSString *backupName = [NSString stringWithFormat:@"%@.%d.%d.%d.json", + modifiedPresetsURL.lastPathComponent.stringByDeletingPathExtension, + [dict[@"VersionMajor"] intValue], + [dict[@"VersionMinor"] intValue], + [dict[@"VersionMicro"] intValue]]; + NSURL *backupURL = [tempURL URLByAppendingPathComponent:backupName]; + + NSData *modifiedData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL]; + [modifiedData writeToURL:modifiedPresetsURL atomically:YES]; + + // Create a new manager and init it with the modified json. + HBPresetsManager *newManager = [[HBPresetsManager alloc] initWithURL:modifiedPresetsURL]; + + XCTAssert(newManager); + XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:backupURL.path]); + + // Remove the temp files. + [[NSFileManager defaultManager] removeItemAtURL:presetsURL error:NULL]; + [[NSFileManager defaultManager] removeItemAtURL:modifiedPresetsURL error:NULL]; + [[NSFileManager defaultManager] removeItemAtURL:backupURL error:NULL]; +} + +@end diff --git a/macosx/HandBrakeKitTests/Info.plist b/macosx/HandBrakeKitTests/Info.plist new file mode 100644 index 000000000..ba72822e8 --- /dev/null +++ b/macosx/HandBrakeKitTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/macosx/NSArray+HBAdditions.h b/macosx/NSArray+HBAdditions.h index b423e1e2b..7e7c8bce4 100644 --- a/macosx/NSArray+HBAdditions.h +++ b/macosx/NSArray+HBAdditions.h @@ -1,10 +1,8 @@ -// -// NSArray+NSArray_HBArrayAdditions.h -// HandBrake -// -// Created by Damiano Galassi on 22/07/15. -// -// +/* NSArray+HBAdditions.h $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import diff --git a/macosx/NSArray+HBAdditions.m b/macosx/NSArray+HBAdditions.m index c54147098..cad90ba70 100644 --- a/macosx/NSArray+HBAdditions.m +++ b/macosx/NSArray+HBAdditions.m @@ -1,10 +1,8 @@ -// -// NSArray+NSArray_HBArrayAdditions.m -// HandBrake -// -// Created by Damiano Galassi on 22/07/15. -// -// +/* NSArray+HBAdditions.m $ + + This file is part of the HandBrake source code. + Homepage: . + It may be used under the terms of the GNU General Public License. */ #import "NSArray+HBAdditions.h" -- cgit v1.2.3