summaryrefslogtreecommitdiffstats
path: root/macosx/InstantHandBrake/DeviceController.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/InstantHandBrake/DeviceController.m')
-rw-r--r--macosx/InstantHandBrake/DeviceController.m136
1 files changed, 112 insertions, 24 deletions
diff --git a/macosx/InstantHandBrake/DeviceController.m b/macosx/InstantHandBrake/DeviceController.m
index 19a445b27..0834bbc91 100644
--- a/macosx/InstantHandBrake/DeviceController.m
+++ b/macosx/InstantHandBrake/DeviceController.m
@@ -4,7 +4,7 @@
//
// Created by Damiano Galassi on 23/01/08.
// This file is part of the HandBrake source code.
-// Homepage: <http://handbrake.m0k.org/>.
+// Homepage: <http://handbrake.fr/>.
// It may be used under the terms of the GNU General Public License.
//
//
@@ -18,31 +18,84 @@
{
if (self = [super init])
{
- deviceArray = [[NSMutableArray alloc] init];
- [self populateList];
+ devicesArray = [[NSMutableArray alloc] init];
+ appSupportPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/Instant HandBrake"];
+ [self loadBuiltInDevices];
+ [self loadDevices];
}
return self;
}
+- (void) dealloc
+{
+ [devicesArray release];
+ [super dealloc];
+}
+
+- (BOOL) loadBuiltInDevices
+{
+ NSBundle *bundle = [NSBundle mainBundle];
+ NSArray *path = [bundle pathsForResourcesOfType:@"ihbdevice" inDirectory:@"Devices"];
+
+ Device *newDevice;
+ NSString *file;
+
+ NSEnumerator *dirEnum = [path objectEnumerator];
+ while (file = [dirEnum nextObject])
+ {
+ newDevice = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
+ [devicesArray addObject:newDevice];
+ }
+
+ if ( ![devicesArray count] )
+ return NO;
+ else
+ return YES;
+}
+
+- (BOOL) loadDevices
+{
+ NSString *file;
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ Device *newDevice;
+
+ NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtPath:appSupportPath];
+ while (file = [dirEnum nextObject])
+ {
+ if ([[file pathExtension] isEqualToString: @"ihbdevice"])
+ {
+ newDevice = [NSKeyedUnarchiver unarchiveObjectWithFile:[appSupportPath stringByAppendingPathComponent:file]];
+ [devicesArray addObject:newDevice];
+ }
+ }
+
+ if ( ![devicesArray count] )
+ return NO;
+ else
+ return YES;
+}
+
+/* Use this to create a new device preset for now */
+
- (id) populateList
{
- [deviceArray addObject:[[Device alloc] initWithDeviceName: @"iPod"]];
- [deviceArray addObject:[[Device alloc] initWithDeviceName: @"PSP"]];
- [deviceArray addObject:[[Device alloc] initWithDeviceName: @"Zune"]];
- [deviceArray addObject:[[Device alloc] initWithDeviceName: @"AppleTV"]];
+ [devicesArray addObject:[[Device alloc] initWithDeviceName: @"iPod"]];
+ [devicesArray addObject:[[Device alloc] initWithDeviceName: @"PSP"]];
+ [devicesArray addObject:[[Device alloc] initWithDeviceName: @"AppleTV"]];
- Preset * newPreset = [[Preset alloc] initWithMuxer: HB_MUX_IPOD
- videoCodec: HB_VCODEC_X264
- videoBitRate: 1500
- videoCodecOptions: @"bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subq=6:no-fast-pskip=1:level=30"
- audioCodec: HB_ACODEC_FAAC
- audioBitrate: 128
- audioSampleRate: 48000
- maxWidth: 640
- maxHeight: 480
- anamorphic: 0];
+ Preset *newPreset;
+ newPreset = [[Preset alloc] initWithMuxer: HB_MUX_IPOD
+ videoCodec: HB_VCODEC_X264
+ videoBitRate: 1500
+ videoCodecOptions: @"bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subq=6:no-fast-pskip=1:level=30"
+ audioCodec: HB_ACODEC_FAAC
+ audioBitrate: 128
+ audioSampleRate: 48000
+ maxWidth: 640
+ maxHeight: 480
+ anamorphic: 0];
- [[deviceArray objectAtIndex:0] addPreset:newPreset];
+ [[devicesArray objectAtIndex:0] addPreset:newPreset];
newPreset = [[Preset alloc] initWithMuxer: HB_MUX_MP4
videoCodec: HB_VCODEC_X264
@@ -55,17 +108,52 @@
maxHeight: 272
anamorphic: 0];
- [[deviceArray objectAtIndex:1] addPreset:newPreset];
-
+ [[devicesArray objectAtIndex:1] addPreset:newPreset];
+
+ newPreset = [[Preset alloc] initWithMuxer: HB_MUX_MP4
+ videoCodec: HB_VCODEC_X264
+ videoBitRate: 2500
+ videoCodecOptions: @"bframes=3:ref=1:subq=5:me=umh:no-fast-pskip=1:trellis=1:cabac=0"
+ audioCodec: HB_ACODEC_FAAC
+ audioBitrate: 160
+ audioSampleRate: 48000
+ maxWidth: 720
+ maxHeight: 576
+ anamorphic: 1];
+
+ [[devicesArray objectAtIndex:2] addPreset:newPreset];
}
-- (NSArray *) deviceList
+- (NSArray *) devicesList
{
- NSArray *deviceList = [deviceArray copy];
-
+ NSArray *deviceList = [devicesArray copy];
[deviceList autorelease];
return deviceList;
-}
+}
+
+- (BOOL) saveDevices
+{
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ BOOL noErr = YES;
+
+ if( ![fileManager fileExistsAtPath:appSupportPath] )
+ [fileManager createDirectoryAtPath:appSupportPath attributes:nil];
+
+ NSEnumerator *enumerator;
+ Device *object;
+ enumerator = [devicesArray objectEnumerator];
+
+ while( object = [enumerator nextObject] )
+ {
+ NSString * saveLocation = [NSString stringWithFormat:@"%@/%@.ihbdevice", appSupportPath, [object name]];
+ if (![fileManager fileExistsAtPath:saveLocation])
+ {
+ noErr = [NSKeyedArchiver archiveRootObject:object
+ toFile:saveLocation];
+ }
+ }
+ return noErr;
+}
@end