summaryrefslogtreecommitdiffstats
path: root/macosx/HBPresetsManager.m
diff options
context:
space:
mode:
authorritsuka <[email protected]>2014-08-07 13:54:14 +0000
committerritsuka <[email protected]>2014-08-07 13:54:14 +0000
commit1d7ed1a09e7796b672175d50bc8491b29c22ad96 (patch)
tree59ea3a867f42733a595853de4a4d915cd57673b4 /macosx/HBPresetsManager.m
parent91b032d618bf897200f3e50e52e97fe94d7c5623 (diff)
MacGui: improved the presets management
Added a class to manage the presets (HBPresetsManager) and moved the presets drawer code to a new view controller (HBPresetsViewController). Removed the limitation of two nested folders and added a way to add to custom folders. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6273 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'macosx/HBPresetsManager.m')
-rw-r--r--macosx/HBPresetsManager.m1742
1 files changed, 1742 insertions, 0 deletions
diff --git a/macosx/HBPresetsManager.m b/macosx/HBPresetsManager.m
new file mode 100644
index 000000000..88a74cdf2
--- /dev/null
+++ b/macosx/HBPresetsManager.m
@@ -0,0 +1,1742 @@
+/* HBPresets.m $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+#import "HBPresetsManager.h"
+#import "HBPreset.h"
+
+#import "HBUtilities.h"
+
+@interface HBPresetsManager ()
+
+@property (nonatomic, readonly, copy) NSURL *fileURL;
+
+@property (nonatomic, readonly, retain) HBPreset *root;
+
+/* Dictionaries for individual presets ("Devices" folder) */
+- (NSDictionary *)createUniversalPreset;
+- (NSDictionary *)createiPodPreset;
+- (NSDictionary *)createiPhoneiPodtouchPreset;
+- (NSDictionary *)createiPadPreset;
+- (NSDictionary *)createAppleTVPreset;
+- (NSDictionary *)createAppleTV2Preset;
+- (NSDictionary *)createAppleTV3Preset;
+- (NSDictionary *)createAndroidPreset;
+- (NSDictionary *)createAndroidTabletPreset;
+- (NSDictionary *)createW8PhonePreset;
+
+/* Dictionaries for individual presets ("Regular" folder) */
+- (NSDictionary *)createNormalPreset;
+- (NSDictionary *)createHighProfilePreset;
+
+@end
+
+@implementation HBPresetsManager
+
+- (instancetype)init
+{
+ self = [super init];
+ if (self)
+ {
+ // Init the root of the tree, it won't never be shown in the UI
+ _root = [[HBPreset alloc] initWithFolderName:@"Root" builtIn:YES];
+ }
+ return self;
+}
+
+- (instancetype)initWithURL:(NSURL *)url
+{
+ self = [self init];
+ if (self)
+ {
+ _fileURL = [url copy];
+ [self loadPresetsFromURL:url];
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [_fileURL release];
+ [_defaultPreset release];
+
+ [_root release];
+
+ [super dealloc];
+}
+
+- (NSMutableArray *)contents
+{
+ return self.root.children;
+}
+
+- (NSIndexPath *)indexPathOfPreset:(HBPreset *)preset
+{
+ __block NSIndexPath *retValue = nil;
+
+ // Visit the whole tree to find the index path.
+ [self.root enumerateObjectsUsingBlock:^(id obj, NSIndexPath *idx, BOOL *stop)
+ {
+ if ([obj isEqualTo:preset])
+ {
+ retValue = [idx retain];
+ *stop = YES;
+ }
+ }];
+
+ return [retValue autorelease];
+}
+
+#pragma mark - Load/Save
+
+- (BOOL)loadPresetsFromURL:(NSURL *)url
+{
+ NSArray *presetsArray = [[NSArray alloc] initWithContentsOfURL:url];
+
+ for (NSDictionary *child in presetsArray)
+ {
+ [self.root.children addObject:[self loadFromDict:child]];
+ }
+
+ [presetsArray release];
+
+ // If the preset list is empty,
+ // readd the built in presets.
+ if (self.root.children.count == 0)
+ {
+ [self generateBuiltInPresets];
+ }
+
+ if (self.defaultPreset == nil)
+ {
+ [self selectNewDefault];
+ }
+
+ return YES;
+}
+
+- (BOOL)savePresetsToURL:(NSURL *)url
+{
+ NSMutableArray *presetsArray = [[[NSMutableArray alloc] init] autorelease];
+
+ for (HBPreset *node in self.contents)
+ {
+ [presetsArray addObject:[self convertToDict:node]];
+ }
+
+ return [presetsArray writeToURL:url atomically:YES];
+
+ return YES;
+}
+
+- (BOOL)savePresets
+{
+ return [self savePresetsToURL:self.fileURL];
+}
+
+#pragma mark - NSDictionary conversions
+
+/**
+ * Converts the NSDictionary to a HBPreset object,
+ */
+- (HBPreset *)loadFromDict:(NSDictionary *)dict
+{
+ HBPreset *node = nil;
+ if ([dict[@"Folder"] boolValue])
+ {
+ node = [[[HBPreset alloc] initWithFolderName:dict[@"PresetName"]
+ builtIn:![dict[@"Type"] boolValue]] autorelease];
+
+ for (NSDictionary *child in dict[@"ChildrenArray"])
+ {
+ [node.children addObject:[self loadFromDict:child]];
+ }
+ }
+ else
+ {
+ node = [[[HBPreset alloc] initWithName:dict[@"PresetName"]
+ content:dict
+ builtIn:![dict[@"Type"] boolValue]] autorelease];
+ node.isDefault = [dict[@"Default"] boolValue];
+
+ if ([dict[@"Default"] boolValue])
+ {
+ self.defaultPreset = node;
+ }
+ }
+
+ return node;
+}
+
+/**
+ * Converts the HBPreset and its childrens to a NSDictionary.
+ */
+- (NSDictionary *)convertToDict:(HBPreset *)node
+{
+ NSMutableDictionary *output = [[NSMutableDictionary alloc] init];
+ [output addEntriesFromDictionary:node.content];
+
+ output[@"PresetName"] = node.name;
+ output[@"Folder"] = @(!node.isLeaf);
+ output[@"Type"] = @(!node.isBuiltIn);
+ output[@"Default"] = @(node.isDefault);
+
+ if (!node.isLeaf)
+ {
+ NSMutableArray *childArray = [[NSMutableArray alloc] init];
+ for (HBPreset *child in node.children)
+ {
+ [childArray addObject:[self convertToDict:child]];
+ }
+
+ output[@"ChildrenArray"] = childArray;
+ [childArray release];
+ }
+
+ return [output autorelease];
+}
+
+#pragma mark - Presets Management
+
+- (BOOL)checkBuiltInsForUpdates
+{
+ __block BOOL retValue = NO;
+
+ [self.root enumerateObjectsUsingBlock:^(id obj, NSIndexPath *idx, BOOL *stop) {
+ NSDictionary *dict = [obj content];
+
+ if ([obj isBuiltIn] && [obj isLeaf])
+ {
+ if (!dict[@"PresetBuildNumber"] ||
+ [dict[@"PresetBuildNumber"] intValue] < [[[NSBundle mainBundle] infoDictionary][@"CFBundleVersion"] intValue])
+ {
+ retValue = YES;
+ *stop = YES;
+ }
+ }
+ }];
+
+ return retValue;
+}
+
+- (void)addPreset:(NSDictionary *)preset
+{
+ HBPreset *presetNode = [[HBPreset alloc] initWithName:preset[@"PresetName"]
+ content:preset
+ builtIn:NO];
+ [self insertObject:presetNode inContentsAtIndex:[self countOfContents]];
+ [presetNode release];
+
+ [self savePresets];
+}
+
+- (void)deletePresetAtIndexPath:(NSIndexPath *)idx
+{
+ [self willChangeValueForKey:@"contents"];
+
+ NSMutableArray *parentArray = self.contents;
+
+ // Find the preset parent array
+ // and delete it.
+ NSUInteger currIdx = 0;
+ NSUInteger i = 0;
+ for (i = 0; i < idx.length - 1; i++)
+ {
+ currIdx = [idx indexAtPosition:i];
+
+ if (parentArray.count > currIdx)
+ {
+ parentArray = [(HBPreset *)[parentArray objectAtIndex:currIdx] children];
+ }
+ }
+
+ currIdx = [idx indexAtPosition:i];
+
+ if (parentArray.count > currIdx)
+ {
+ if ([[parentArray objectAtIndex:currIdx] isDefault])
+ {
+ [parentArray removeObjectAtIndex:currIdx];
+ // Try to select a new default preset
+ [self selectNewDefault];
+ }
+ else
+ {
+ [parentArray removeObjectAtIndex:currIdx];
+ }
+ }
+
+ [self didChangeValueForKey:@"contents"];
+}
+
+/**
+ * Private method to select a new default
+ * when the default preset is deleted.
+ */
+- (void)selectNewDefault
+{
+ __block HBPreset *normalPreset = nil;
+ __block HBPreset *firstUserPreset = nil;
+
+ // Search for a possibile new default preset
+ // Try to use "Normal" or the first user preset.
+ [self.root enumerateObjectsUsingBlock:^(id obj, NSIndexPath *idx, BOOL *stop) {
+ if ([obj isBuiltIn] && [obj isLeaf])
+ {
+ if ([[obj name] isEqualToString:@"Normal"])
+ {
+ normalPreset = obj;
+ }
+ }
+ else if ([obj isLeaf])
+ {
+ firstUserPreset = obj;
+ *stop = YES;
+ }
+ }];
+
+ if (normalPreset)
+ {
+ self.defaultPreset = normalPreset;
+ normalPreset.isDefault = YES;
+ }
+ else if (firstUserPreset)
+ {
+ self.defaultPreset = firstUserPreset;
+ firstUserPreset.isDefault = YES;
+ }
+}
+
+- (void)setDefaultPreset:(HBPreset *)defaultPreset
+{
+ if (defaultPreset && defaultPreset.isLeaf)
+ {
+ if (_defaultPreset)
+ {
+ _defaultPreset.isDefault = NO;
+ [_defaultPreset autorelease];
+ }
+ defaultPreset.isDefault = YES;
+ _defaultPreset = [defaultPreset retain];
+ }
+}
+
+#pragma mark -
+#pragma mark KVC
+
+- (NSUInteger)countOfContents
+{
+ return [self.contents count];
+}
+
+- (HBPreset *)objectInContentsAtIndex:(NSUInteger)index
+{
+ return [self.contents objectAtIndex:index];
+}
+
+- (void)insertObject:(HBPreset *)presetObject inContentsAtIndex:(NSUInteger)index;
+{
+ [self.contents insertObject:presetObject atIndex:index];
+}
+
+- (void)removeObjectFromContentsAtIndex:(NSUInteger)index
+{
+ [self.contents removeObjectAtIndex: index];
+}
+
+#pragma mark - Built In Generation
+
+- (void)loadPresetsForType:(NSString *)type fromSel:(SEL[])selArray length:(int)len
+{
+ HBPreset *folderNode = [[HBPreset alloc] initWithFolderName:type builtIn:YES];
+
+ for (int i = 0; i < len; i++)
+ {
+ NSMutableDictionary *presetDict = [self performSelector:selArray[i]];
+ presetDict[@"PresetBuildNumber"] = [[NSBundle mainBundle] infoDictionary][@"CFBundleVersion"];
+ HBPreset *presetNode = [[HBPreset alloc] initWithName:presetDict[@"PresetName"]
+ content:presetDict
+ builtIn:YES];
+ [folderNode.children addObject:presetNode];
+ [presetNode release];
+ }
+
+ [self.contents insertObject:folderNode atIndex:0];
+ [folderNode release];
+}
+
+/**
+ * Built-in preset folders at the root of the hierarchy
+ *
+ * Re-create new built-in presets programmatically and add them to the array
+ *
+ * Note: the built-in presets will *not* sort themselves alphabetically,
+ * so they will appear in the order you create them.
+ */
+- (void)generateBuiltInPresets
+{
+ SEL devicesPresets[] = { @selector(createUniversalPreset),
+ @selector(createiPodPreset),
+ @selector(createiPhoneiPodtouchPreset),
+ @selector(createiPadPreset),
+ @selector(createAppleTVPreset),
+ @selector(createAppleTV2Preset),
+ @selector(createAppleTV3Preset),
+ @selector(createAndroidPreset),
+ @selector(createAndroidTabletPreset),
+ @selector(createW8PhonePreset)
+ };
+
+ SEL regularPresets[] = { @selector(createNormalPreset),
+ @selector(createHighProfilePreset)};
+
+ [self willChangeValueForKey:@"contents"];
+ NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init];
+ [self.contents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+ if ([obj isBuiltIn])
+ {
+ [indexes addIndex:idx];
+ }
+ }];
+ [self.contents removeObjectsAtIndexes:indexes];
+ [indexes release];
+
+ [self loadPresetsForType:@"Regular" fromSel:regularPresets length:2];
+ [self loadPresetsForType:@"Devices" fromSel:devicesPresets length:10];
+
+ if (self.defaultPreset == nil)
+ {
+ [self selectNewDefault];
+ }
+
+ [self didChangeValueForKey:@"contents"];
+
+ [HBUtilities writeToActivityLog: "built in presets updated to build number: %d", [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] intValue]];
+}
+
+- (void)deleteBuiltInPresets
+{
+ [self willChangeValueForKey:@"contents"];
+ NSMutableArray *nodeToRemove = [[NSMutableArray alloc] init];
+ for (HBPreset *node in self.contents)
+ {
+ if (node.isBuiltIn)
+ {
+ [nodeToRemove addObject:node];
+ }
+ }
+ [self.contents removeObjectsInArray:nodeToRemove];
+ [nodeToRemove release];
+ [self didChangeValueForKey:@"contents"];
+}
+
+#pragma mark -
+#pragma mark Individual Preset Definitions
+/* These NSDictionary definitions contain settings for one built-in preset */
+
+- (NSMutableDictionary *)createUniversalPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"Universal";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for compatibility with all Apple devices (including the iPod 6G and later). Includes Dolby Digital audio for surround sound.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"fast";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"baseline";
+ preset[@"h264Level"] = @"3.0";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @720;
+ preset[@"PictureHeight"] = @576;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Track 2 */
+ NSMutableDictionary *audioTrack2Array = [[NSMutableDictionary alloc] init];
+ audioTrack2Array[@"AudioTrack"] = @1;
+ audioTrack2Array[@"AudioEncoder"] = @"AC3 Passthru";
+ audioTrack2Array[@"AudioMixdown"] = @"None";
+ audioTrack2Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack2Array[@"AudioBitrate"] = @"160";
+ audioTrack2Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack2Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack2Array autorelease];
+ [audioListArray addObject:audioTrack2Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createiPodPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"iPod";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for playback on the iPod with Video (all generations).";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @1;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"baseline";
+ preset[@"h264Level"] = @"1.3";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @22.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @320;
+ preset[@"PictureHeight"] = @240;
+ preset[@"PicturePAR"] = @0; //none
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @1;
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createiPhoneiPodtouchPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"iPhone & iPod touch";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for handheld iOS devices (iPhone 4, iPod touch 3G and later).";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @22.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @960;
+ preset[@"PictureHeight"] = @640;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createiPadPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"iPad";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for playback on the iPad (all generations).";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @1280;
+ preset[@"PictureHeight"] = @720;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createAppleTVPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"AppleTV";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for the original AppleTV. Includes Dolby Digital audio for surround sound. Also compatible with iOS devices released since 2009.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @960;
+ preset[@"PictureHeight"] = @720;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Track 2 */
+ NSMutableDictionary *audioTrack2Array = [[NSMutableDictionary alloc] init];
+ audioTrack2Array[@"AudioTrack"] = @1;
+ audioTrack2Array[@"AudioEncoder"] = @"AC3 Passthru";
+ audioTrack2Array[@"AudioMixdown"] = @"None";
+ audioTrack2Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack2Array[@"AudioBitrate"] = @"160";
+ audioTrack2Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack2Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack2Array autorelease];
+ [audioListArray addObject:audioTrack2Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createAppleTV2Preset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"AppleTV 2";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for the second-generation AppleTV. Includes Dolby Digital audio for surround sound. NOT compatible with the original AppleTV.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @1280;
+ preset[@"PictureHeight"] = @720;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Track 2 */
+ NSMutableDictionary *audioTrack2Array = [[NSMutableDictionary alloc] init];
+ audioTrack2Array[@"AudioTrack"] = @1;
+ audioTrack2Array[@"AudioEncoder"] = @"AC3 Passthru";
+ audioTrack2Array[@"AudioMixdown"] = @"None";
+ audioTrack2Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack2Array[@"AudioBitrate"] = @"160";
+ audioTrack2Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack2Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack2Array autorelease];
+ [audioListArray addObject:audioTrack2Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createAppleTV3Preset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"AppleTV 3";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for the third-generation AppleTV. Includes Dolby Digital audio for surround sound. NOT compatible with the original AppleTV. May stutter on the second-generation AppleTV.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"4.0";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @1920;
+ preset[@"PictureHeight"] = @1080;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @3; //fast
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Track 2 */
+ NSMutableDictionary *audioTrack2Array = [[NSMutableDictionary alloc] init];
+ audioTrack2Array[@"AudioTrack"] = @1;
+ audioTrack2Array[@"AudioEncoder"] = @"AC3 Passthru";
+ audioTrack2Array[@"AudioMixdown"] = @"None";
+ audioTrack2Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack2Array[@"AudioBitrate"] = @"160";
+ audioTrack2Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack2Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack2Array autorelease];
+ [audioListArray addObject:audioTrack2Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createAndroidPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"Android";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's settings for midrange devices running Android 2.3 or later.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @0;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"main";
+ preset[@"h264Level"] = @"3.0";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @22.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @720;
+ preset[@"PictureHeight"] = @576;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"128";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createAndroidTabletPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"Android Tablet";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's preset for tablets running Android 2.3 or later.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @0;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"main";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @22.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @1280;
+ preset[@"PictureHeight"] = @720;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"128";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createW8PhonePreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"Windows Phone 8";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's preset for Windows Phone 8 devices";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @0;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"main";
+ preset[@"h264Level"] = @"3.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @22.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"30";
+ preset[@"VideoFramerateMode"] = @"pfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @1280;
+ preset[@"PictureHeight"] = @720;
+ preset[@"PicturePAR"] = @0; //None
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @1;
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"128";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createNormalPreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"Normal";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @1; //default
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's normal, default settings.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @0;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"veryfast";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"main";
+ preset[@"h264Level"] = @"4.0";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"Same as source";
+ preset[@"VideoFramerateMode"] = @"vfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @0;
+ preset[@"PictureHeight"] = @0;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @0; //off
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+- (NSMutableDictionary *)createHighProfilePreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+
+ /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+ preset[@"PresetName"] = @"High Profile";
+ preset[@"Type"] = @0; //factory
+ preset[@"Default"] = @0;
+ preset[@"Folder"] = @NO;
+ preset[@"PresetDescription"] = @"HandBrake's general-purpose preset for High Profile H.264 video.";
+
+ /* Container format and related settings */
+ preset[@"FileFormat"] = @"MP4 file";
+ preset[@"Mp4LargeFile"] = @1;
+ preset[@"Mp4HttpOptimize"] = @0;
+ preset[@"Mp4iPodCompatible"] = @0;
+
+ /* Chapter markers */
+ preset[@"ChapterMarkers"] = @1;
+
+ /* Video encoder and advanced options */
+ preset[@"VideoEncoder"] = @"H.264 (x264)";
+ preset[@"lavcOption"] = @"";
+ preset[@"x264Option"] = @"";
+ preset[@"x264UseAdvancedOptions"] = @0;
+ preset[@"x264Preset"] = @"medium";
+ preset[@"x264Tune"] = @"";
+ preset[@"x264OptionExtra"] = @"";
+ preset[@"h264Profile"] = @"high";
+ preset[@"h264Level"] = @"4.1";
+
+ /* Video rate control */
+ preset[@"VideoAvgBitrate"] = @"2500";
+ preset[@"VideoTwoPass"] = @0;
+ preset[@"VideoTurboTwoPass"] = @0;
+ preset[@"VideoQualityType"] = @2; //cq
+ preset[@"VideoQualitySlider"] = @20.0f;
+
+ /* Video frame rate */
+ preset[@"VideoFramerate"] = @"Same as source";
+ preset[@"VideoFramerateMode"] = @"vfr";
+
+ /* Picture size */
+ preset[@"UsesPictureSettings"] = @1;
+ preset[@"PictureWidth"] = @0;
+ preset[@"PictureHeight"] = @0;
+ preset[@"PicturePAR"] = @2; //loose
+ preset[@"PictureModulus"] = @2;
+ preset[@"PictureKeepRatio"] = @0; //set to 0 for Loose (FIXME: why?)
+
+ /* Picture filters */
+ preset[@"UsesPictureFilters"] = @1;
+ preset[@"PictureDecomb"] = @2; //default
+ preset[@"PictureDecombCustom"] = @"";
+ preset[@"PictureDecombDeinterlace"] = @1; //decomb
+ preset[@"PictureDeinterlace"] = @0;
+ preset[@"PictureDeinterlaceCustom"] = @"";
+ preset[@"PictureDetelecine"] = @0;
+ preset[@"PictureDetelecineCustom"] = @"";
+ preset[@"PictureDenoise"] = @0;
+ preset[@"PictureDenoiseCustom"] = @"";
+ preset[@"PictureDeblock"] = @0;
+ preset[@"VideoGrayScale"] = @0;
+
+ /* Picture crop */
+ preset[@"PictureAutoCrop"] = @1;
+ preset[@"PictureTopCrop"] = @0;
+ preset[@"PictureBottomCrop"] = @0;
+ preset[@"PictureLeftCrop"] = @0;
+ preset[@"PictureRightCrop"] = @0;
+
+ /* Auto Passthru */
+ preset[@"AudioEncoderFallback"] = @"AC3 (ffmpeg)";
+ preset[@"AudioAllowAACPass"] = @1;
+ preset[@"AudioAllowAC3Pass"] = @1;
+ preset[@"AudioAllowDTSHDPass"] = @1;
+ preset[@"AudioAllowDTSPass"] = @1;
+ preset[@"AudioAllowMP3Pass"] = @1;
+
+ /* Audio track list - no need to add "None" at the end */
+ NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
+ /* Track 1 */
+ NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
+ audioTrack1Array[@"AudioTrack"] = @1;
+ audioTrack1Array[@"AudioEncoder"] = @"AAC (avcodec)";
+ audioTrack1Array[@"AudioMixdown"] = @"Dolby Pro Logic II";
+ audioTrack1Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack1Array[@"AudioBitrate"] = @"160";
+ audioTrack1Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack1Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack1Array autorelease];
+ [audioListArray addObject:audioTrack1Array];
+ /* Track 2 */
+ NSMutableDictionary *audioTrack2Array = [[NSMutableDictionary alloc] init];
+ audioTrack2Array[@"AudioTrack"] = @1;
+ audioTrack2Array[@"AudioEncoder"] = @"AC3 Passthru";
+ audioTrack2Array[@"AudioMixdown"] = @"None";
+ audioTrack2Array[@"AudioSamplerate"] = @"Auto";
+ audioTrack2Array[@"AudioBitrate"] = @"160";
+ audioTrack2Array[@"AudioTrackGainSlider"] = @0.0f;
+ audioTrack2Array[@"AudioTrackDRCSlider"] = @0.0f;
+ [audioTrack2Array autorelease];
+ [audioListArray addObject:audioTrack2Array];
+ /* Add the audio track(s) to the preset's audio list */
+ preset[@"AudioList"] = [NSMutableArray arrayWithArray:audioListArray];
+ [audioListArray release];
+
+ /* Subtitles (note: currently ignored) */
+ preset[@"Subtitles"] = @"None";
+
+ /* Clean up and return the preset */
+ [preset autorelease];
+ return preset;
+}
+
+@end