{ { HB_MUX_MP4 | HB_VCODEC_FFMPEG | HB_ACODEC_FAAC,
HB_MUX_MP4 | HB_VCODEC_X264 | HB_ACODEC_FAAC,
0,
- 0},
- { HB_MUX_AVI | HB_VCODEC_FFMPEG | HB_ACODEC_LAME,
- HB_MUX_AVI | HB_VCODEC_FFMPEG | HB_ACODEC_AC3,
- HB_MUX_AVI | HB_VCODEC_X264 | HB_ACODEC_LAME,
- HB_MUX_AVI | HB_VCODEC_X264 | HB_ACODEC_AC3},
- { HB_MUX_OGM | HB_VCODEC_FFMPEG | HB_ACODEC_VORBIS,
- HB_MUX_OGM | HB_VCODEC_FFMPEG | HB_ACODEC_LAME,
- 0,
0 },
{ HB_MUX_MKV | HB_VCODEC_FFMPEG | HB_ACODEC_FAAC,
HB_MUX_MKV | HB_VCODEC_FFMPEG | HB_ACODEC_AC3,
HB_MUX_MKV | HB_VCODEC_X264 | HB_ACODEC_LAME,
HB_MUX_MKV | HB_VCODEC_X264 | HB_ACODEC_VORBIS,
0,
+ 0 },
+ { HB_MUX_AVI | HB_VCODEC_FFMPEG | HB_ACODEC_LAME,
+ HB_MUX_AVI | HB_VCODEC_FFMPEG | HB_ACODEC_AC3,
+ HB_MUX_AVI | HB_VCODEC_X264 | HB_ACODEC_LAME,
+ HB_MUX_AVI | HB_VCODEC_X264 | HB_ACODEC_AC3},
+ { HB_MUX_OGM | HB_VCODEC_FFMPEG | HB_ACODEC_VORBIS,
+ HB_MUX_OGM | HB_VCODEC_FFMPEG | HB_ACODEC_LAME,
+ 0,
0 } };
-
/* We setup the toolbar values here */
static NSString * ToggleDrawerIdentifier = @"Toggle Drawer Item Identifier";
static NSString * StartEncodingIdentifier = @"Start Encoding Item Identifier";
self = [super init];
[HBPreferencesController registerUserDefaults];
fHandle = NULL;
+ /* Check for check for the app support directory here as
+ * outputPanel needs it right away, as may other future methods
+ */
+ /* We declare the default NSFileManager into fileManager */
+ NSFileManager * fileManager = [NSFileManager defaultManager];
+ /* we set the files and support paths here */
+ AppSupportDirectory = @"~/Library/Application Support/HandBrake";
+ AppSupportDirectory = [AppSupportDirectory stringByExpandingTildeInPath];
+ /* We check for the app support directory for handbrake */
+ if ([fileManager fileExistsAtPath:AppSupportDirectory] == 0)
+ {
+ // If it doesnt exist yet, we create it here
+ [fileManager createDirectoryAtPath:AppSupportDirectory attributes:nil];
+ }
+
outputPanel = [[HBOutputPanelController alloc] init];
fPictureController = [[PictureController alloc] initWithDelegate:self];
fQueueController = [[HBQueueController alloc] init];
return self;
}
+
- (void) applicationDidFinishLaunching: (NSNotification *) notification
{
int build;
char * version;
-
+
// Init libhb
int debugLevel = [[NSUserDefaults standardUserDefaults] boolForKey:@"ShowVerboseOutput"] ? HB_DEBUG_ALL : HB_DEBUG_NONE;
fHandle = hb_init(debugLevel, [[NSUserDefaults standardUserDefaults] boolForKey:@"CheckForUpdates"]);
-
+
// Set the Growl Delegate
[GrowlApplicationBridge setGrowlDelegate: self];
/* Init others controllers */
fChapterTitlesDelegate = [[ChapterTitles alloc] init];
[fChapterTable setDataSource:fChapterTitlesDelegate];
-
- /* Call UpdateUI every 1/2 sec */
+
+ /* Call UpdateUI every 1/2 sec */
[[NSRunLoop currentRunLoop] addTimer: [NSTimer
scheduledTimerWithTimeInterval: 0.5 target: self
- selector: @selector( updateUI: ) userInfo: NULL repeats: YES]
- forMode: NSEventTrackingRunLoopMode];
-
- if( ( build = hb_check_update( fHandle, &version ) ) > -1 )
- {
- /* Update available - tell the user */
-
- NSBeginInformationalAlertSheet( _( @"Update is available" ),
- _( @"Go get it!" ), _( @"Discard" ), NULL, fWindow, self,
- @selector( updateAlertDone:returnCode:contextInfo: ),
- NULL, NULL, [NSString stringWithFormat:
- _( @"HandBrake %s (build %d) is now available for download." ),
- version, build] );
- return;
-
- }
-
+ selector: @selector( updateUI: ) userInfo: NULL repeats: YES]
+ forMode: NSEventTrackingRunLoopMode];
+
// Open debug output window now if it was visible when HB was closed
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OutputPanelIsOpen"])
[self showDebugOutputPanel:nil];
-
+
// Open queue window now if it was visible when HB was closed
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"QueueWindowIsOpen"])
[self showQueueWindow:nil];
-
+
[self openMainWindow:nil];
+
+ if( ( build = hb_check_update( fHandle, &version ) ) > -1 )
+ {
+ /* Update available - tell the user */
+
+ NSBeginInformationalAlertSheet( _( @"Update is available" ),
+ _( @"Go get it!" ), _( @"Discard" ), NULL, fWindow, self,
+ @selector( updateAlertDone:returnCode:contextInfo: ),
+ NULL, NULL, [NSString stringWithFormat:
+ _( @"HandBrake %s (build %d) is now available for download." ),
+ version, build] );
+ return;
+
+ }
- /* Show scan panel ASAP */
- [self performSelectorOnMainThread: @selector(showScanPanel:)
- withObject: NULL waitUntilDone: NO];
+ /* Show Browse Sources Window ASAP */
+ [self performSelectorOnMainThread: @selector(browseSources:)
+ withObject: NULL waitUntilDone: NO];
+ }
+
+- (void) updateAlertDone: (NSWindow *) sheet
+ returnCode: (int) returnCode contextInfo: (void *) contextInfo
+{
+ if( returnCode == NSAlertDefaultReturn )
+ {
+ /* Go to HandBrake homepage and exit */
+ [self openHomepage: NULL];
+ [NSApp terminate: self];
+
+ }
+ else
+ {
+ /* Show scan panel */
+ [self performSelectorOnMainThread: @selector(showScanPanel:)
+ withObject: NULL waitUntilDone: NO];
+ return;
+ /* Go to HandBrake homepage and exit */
+ [self openHomepage: NULL];
+ [NSApp terminate: self];
+ }
}
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication *) app
/* Destination box*/
[fDstFormatPopUp removeAllItems];
[fDstFormatPopUp addItemWithTitle: _( @"MP4 file" )];
+ [fDstFormatPopUp addItemWithTitle: _( @"MKV file" )];
[fDstFormatPopUp addItemWithTitle: _( @"AVI file" )];
[fDstFormatPopUp addItemWithTitle: _( @"OGM file" )];
- [fDstFormatPopUp addItemWithTitle: _( @"MKV file" )];
[fDstFormatPopUp selectItemAtIndex: 0];
[self formatPopUpChanged: NULL];
}
-- (void) loadPresets {
- /* We declare the default NSFileManager into fileManager */
- NSFileManager * fileManager = [NSFileManager defaultManager];
- /* we set the files and support paths here */
- AppSupportDirectory = @"~/Library/Application Support/HandBrake";
- AppSupportDirectory = [AppSupportDirectory stringByExpandingTildeInPath];
- //UserPresetsFile = @"~/Library/Application Support/HandBrake/UserPresets.plist";
- //UserPresetsFile = [UserPresetsFile stringByExpandingTildeInPath];
- /* We check for the app support directory for handbrake */
- if ([fileManager fileExistsAtPath:AppSupportDirectory] == 0)
- {
- // If it doesnt exist yet, we create it here
- [fileManager createDirectoryAtPath:AppSupportDirectory attributes:nil];
- }
- /* We check for the presets.plist here */
- if ([fileManager fileExistsAtPath:UserPresetsFile] == 0)
- {
- [fileManager createFileAtPath:UserPresetsFile contents:nil attributes:nil];
- }
- UserPresetsFile = @"~/Library/Application Support/HandBrake/UserPresets.plist";
- UserPresetsFile = [[UserPresetsFile stringByExpandingTildeInPath]retain];
-
- UserPresets = [[NSMutableArray alloc] initWithContentsOfFile:UserPresetsFile];
- if (nil == UserPresets)
- {
- UserPresets = [[NSMutableArray alloc] init];
- [self addFactoryPresets:NULL];
- }
-
-}
-
-// ============================================================
-// NSToolbar Related Methods
-// ============================================================
-
-- (void) setupToolbar {
- toolbar = [[[NSToolbar alloc] initWithIdentifier: @"HandBrake Toolbar"] autorelease];
-
- [toolbar setAllowsUserCustomization: YES];
- [toolbar setAutosavesConfiguration: YES];
- [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
-
- [toolbar setDelegate: self];
-
- [fWindow setToolbar: toolbar];
-}
+- (void) TranslateStrings
+{
+ [fSrcTitleField setStringValue: _( @"Title:" )];
+ [fSrcChapterField setStringValue: _( @"Chapters:" )];
+ [fSrcChapterToField setStringValue: _( @"to" )];
+ [fSrcDuration1Field setStringValue: _( @"Duration:" )];
-- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier:
- (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted {
- NSToolbarItem * item = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdent];
-
- if ([itemIdent isEqualToString: ToggleDrawerIdentifier])
- {
- [item setLabel: @"Toggle Presets"];
- [item setPaletteLabel: @"Toggler Presets"];
- [item setToolTip: @"Open/Close Preset Drawer"];
- [item setImage: [NSImage imageNamed: @"Drawer"]];
- [item setTarget: self];
- [item setAction: @selector(toggleDrawer:)];
- [item setAutovalidates: NO];
- }
- else if ([itemIdent isEqualToString: StartEncodingIdentifier])
- {
- [item setLabel: @"Start"];
- [item setPaletteLabel: @"Start Encoding"];
- [item setToolTip: @"Start Encoding"];
- [item setImage: [NSImage imageNamed: @"Play"]];
- [item setTarget: self];
- [item setAction: @selector(Rip:)];
- }
- else if ([itemIdent isEqualToString: ShowQueueIdentifier])
- {
- [item setLabel: @"Show Queue"];
- [item setPaletteLabel: @"Show Queue"];
- [item setToolTip: @"Show Queue"];
- [item setImage: [NSImage imageNamed: @"Queue"]];
- [item setTarget: self];
- [item setAction: @selector(showQueueWindow:)];
- [item setAutovalidates: NO];
- }
- else if ([itemIdent isEqualToString: AddToQueueIdentifier])
- {
- [item setLabel: @"Add to Queue"];
- [item setPaletteLabel: @"Add to Queue"];
- [item setToolTip: @"Add to Queue"];
- [item setImage: [NSImage imageNamed: @"AddToQueue"]];
- [item setTarget: self];
- [item setAction: @selector(addToQueue:)];
- }
- else if ([itemIdent isEqualToString: PauseEncodingIdentifier])
- {
- [item setLabel: @"Pause"];
- [item setPaletteLabel: @"Pause Encoding"];
- [item setToolTip: @"Pause Encoding"];
- [item setImage: [NSImage imageNamed: @"Pause"]];
- [item setTarget: self];
- [item setAction: @selector(Pause:)];
- }
- else if ([itemIdent isEqualToString: ShowActivityIdentifier]) {
- [item setLabel: @"Activity Window"];
- [item setPaletteLabel: @"Show Activity Window"];
- [item setToolTip: @"Show Activity Window"];
- [item setImage: [NSImage imageNamed: @"ActivityWindow"]];
- [item setTarget: self];
- [item setAction: @selector(showDebugOutputPanel:)];
- [item setAutovalidates: NO];
- }
- else if ([itemIdent isEqualToString: ChooseSourceIdentifier])
- {
- [item setLabel: @"Source"];
- [item setPaletteLabel: @"Source"];
- [item setToolTip: @"Choose Video Source"];
- [item setImage: [NSImage imageNamed: @"Source"]];
- [item setTarget: self];
- [item setAction: @selector(showScanPanel:)];
- }
- else
- {
- [item release];
- return nil;
- }
+ [fDstFormatField setStringValue: _( @"Format:" )];
+ [fDstCodecsField setStringValue: _( @"Codecs:" )];
+ [fDstFile1Field setStringValue: _( @"File:" )];
+ [fDstBrowseButton setTitle: _( @"Browse" )];
- return item;
+ [fVidRateField setStringValue: _( @"Framerate (fps):" )];
+ [fVidEncoderField setStringValue: _( @"Encoder:" )];
+ [fVidQualityField setStringValue: _( @"Quality:" )];
}
-- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
-{
- return [NSArray arrayWithObjects: ChooseSourceIdentifier, NSToolbarSeparatorItemIdentifier, StartEncodingIdentifier,
- PauseEncodingIdentifier, AddToQueueIdentifier, ShowQueueIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
- NSToolbarSpaceItemIdentifier, ShowActivityIdentifier, ToggleDrawerIdentifier, nil];
-}
-- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
+- (void) enableUI: (bool) b
{
- return [NSArray arrayWithObjects: StartEncodingIdentifier, PauseEncodingIdentifier, AddToQueueIdentifier,
- ChooseSourceIdentifier, ShowQueueIdentifier, ShowActivityIdentifier, ToggleDrawerIdentifier,
- NSToolbarCustomizeToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
- NSToolbarSpaceItemIdentifier, NSToolbarSeparatorItemIdentifier, nil];
-}
+ NSControl * controls[] =
+ { fSrcTitleField, fSrcTitlePopUp,
+ fSrcChapterField, fSrcChapterStartPopUp, fSrcChapterToField,
+ fSrcChapterEndPopUp, fSrcDuration1Field, fSrcDuration2Field,
+ fDstFormatField, fDstFormatPopUp, fDstCodecsField,
+ fDstCodecsPopUp, fDstFile1Field, fDstFile2Field,
+ fDstBrowseButton, fVidRateField, fVidRatePopUp,
+ fVidEncoderField, fVidEncoderPopUp, fVidQualityField,
+ fVidQualityMatrix, fVidGrayscaleCheck, fSubField, fSubPopUp,
+ fAudLang1Field, fAudLang1PopUp, fAudLang2Field, fAudLang2PopUp,
+ fAudTrack1MixLabel, fAudTrack1MixPopUp, fAudTrack2MixLabel, fAudTrack2MixPopUp,
+ fAudRateField, fAudRatePopUp, fAudBitrateField,
+ fAudBitratePopUp, fPictureButton,fQueueStatus,
+ fPicSrcWidth,fPicSrcHeight,fPicSettingWidth,fPicSettingHeight,fPicSettingARkeep,
+ fPicSettingDeinterlace,fPicLabelSettings,fPicLabelSrc,fPicLabelOutp,
+ fPicLabelAr,fPicLabelDeinterlace,fPicLabelSrcX,fPicLabelOutputX,
+ fPicLabelPAROutputX,fPicSettingPARWidth,fPicSettingPARHeight,
+ fPicSettingPAR,fPicLabelAnamorphic,tableView,fPresetsAdd,fPresetsDelete,
+ fCreateChapterMarkers,fVidTurboPassCheck,fDstMpgLargeFileCheck,fPicLabelAutoCrop,
+ fPicSettingAutoCrop,fPicSettingDetelecine,fPicLabelDetelecine,fPicLabelDenoise,fPicSettingDenoise,
+ fSubForcedCheck,fPicSettingDeblock,fPicLabelDeblock,};
-- (BOOL) validateToolbarItem: (NSToolbarItem *) toolbarItem
-{
- NSString * ident = [toolbarItem itemIdentifier];
-
- if (fHandle)
+ for( unsigned i = 0;
+ i < sizeof( controls ) / sizeof( NSControl * ); i++ )
{
- hb_state_t s;
- hb_get_state2( fHandle, &s );
-
- if (s.state == HB_STATE_WORKING || s.state == HB_STATE_MUXING)
+ if( [[controls[i] className] isEqualToString: @"NSTextField"] )
{
- if ([ident isEqualToString: StartEncodingIdentifier])
+ NSTextField * tf = (NSTextField *) controls[i];
+ if( ![tf isBezeled] )
{
- [toolbarItem setImage: [NSImage imageNamed: @"Stop"]];
- [toolbarItem setLabel: @"Stop"];
- [toolbarItem setPaletteLabel: @"Stop"];
- [toolbarItem setToolTip: @"Stop Encoding"];
- return YES;
+ [tf setTextColor: b ? [NSColor controlTextColor] :
+ [NSColor disabledControlTextColor]];
+ continue;
}
- if ([ident isEqualToString: PauseEncodingIdentifier])
- {
- [toolbarItem setImage: [NSImage imageNamed: @"Pause"]];
- [toolbarItem setLabel: @"Pause"];
- [toolbarItem setPaletteLabel: @"Pause Encoding"];
- [toolbarItem setToolTip: @"Pause Encoding"];
- return YES;
- }
- if (SuccessfulScan)
- if ([ident isEqualToString: AddToQueueIdentifier])
- return YES;
- }
- else if (s.state == HB_STATE_PAUSED)
- {
- if ([ident isEqualToString: PauseEncodingIdentifier])
- {
- [toolbarItem setImage: [NSImage imageNamed: @"Play"]];
- [toolbarItem setLabel: @"Resume"];
- [toolbarItem setPaletteLabel: @"Resume Encoding"];
- [toolbarItem setToolTip: @"Resume Encoding"];
- return YES;
- }
- if ([ident isEqualToString: StartEncodingIdentifier])
- return YES;
- if ([ident isEqualToString: AddToQueueIdentifier])
- return YES;
- }
- else if (s.state == HB_STATE_SCANNING)
- return NO;
- else if (s.state == HB_STATE_WORKDONE || s.state == HB_STATE_SCANDONE || SuccessfulScan)
- {
- if ([ident isEqualToString: StartEncodingIdentifier])
- {
- [toolbarItem setImage: [NSImage imageNamed: @"Play"]];
- if (hb_count(fHandle) > 0)
- [toolbarItem setLabel: @"Start Queue"];
- else
- [toolbarItem setLabel: @"Start"];
- [toolbarItem setPaletteLabel: @"Start Encoding"];
- [toolbarItem setToolTip: @"Start Encoding"];
- return YES;
- }
- if ([ident isEqualToString: AddToQueueIdentifier])
- return YES;
}
+ [controls[i] setEnabled: b];
}
-
- if ([ident isEqualToString: ShowQueueIdentifier])
- return YES;
- if ([ident isEqualToString: ToggleDrawerIdentifier])
- return YES;
- if ([ident isEqualToString: ChooseSourceIdentifier])
- return YES;
- if ([ident isEqualToString: ShowActivityIdentifier])
- return YES;
-
- return NO;
-}
-
-- (BOOL) validateMenuItem: (NSMenuItem *) menuItem
-{
- SEL action = [menuItem action];
-
- hb_state_t s;
- hb_get_state2( fHandle, &s );
-
- if (fHandle)
- {
- if (action == @selector(addToQueue:) || action == @selector(showPicturePanel:) || action == @selector(showAddPresetPanel:))
- return SuccessfulScan && [fWindow attachedSheet] == nil;
-
- if (action == @selector(showScanPanel:))
- {
- if (s.state == HB_STATE_SCANNING)
- return NO;
- else
- return [fWindow attachedSheet] == nil;
- }
- if (action == @selector(selectDefaultPreset:))
- return [tableView selectedRow] >= 0 && [fWindow attachedSheet] == nil;
- if (action == @selector(Pause:))
- {
- if (s.state == HB_STATE_WORKING)
- {
- if(![[menuItem title] isEqualToString:@"Pause Encoding"])
- [menuItem setTitle:@"Pause Encoding"];
- return YES;
- }
- else if (s.state == HB_STATE_PAUSED)
- {
- if(![[menuItem title] isEqualToString:@"Resume Encoding"])
- [menuItem setTitle:@"Resume Encoding"];
- return YES;
- }
- else
- return NO;
- }
- if (action == @selector(Rip:))
- if (s.state == HB_STATE_WORKING || s.state == HB_STATE_MUXING || s.state == HB_STATE_PAUSED)
- {
- if(![[menuItem title] isEqualToString:@"Stop Encoding"])
- [menuItem setTitle:@"Stop Encoding"];
- return YES;
- }
- else if (SuccessfulScan)
- {
- if(![[menuItem title] isEqualToString:@"Start Encoding"])
- [menuItem setTitle:@"Start Encoding"];
- return [fWindow attachedSheet] == nil;
- }
- else
- return NO;
- }
-
- return YES;
-}
-
-
-// register a test notification and make
-// it enabled by default
-#define SERVICE_NAME @"Encode Done"
-- (NSDictionary *)registrationDictionaryForGrowl
-{
- NSDictionary *registrationDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSArray arrayWithObjects:SERVICE_NAME,nil], GROWL_NOTIFICATIONS_ALL,
- [NSArray arrayWithObjects:SERVICE_NAME,nil], GROWL_NOTIFICATIONS_DEFAULT,
- nil];
-
- return registrationDictionary;
-}
+
+ if (b) {
-- (void) TranslateStrings
-{
- [fSrcTitleField setStringValue: _( @"Title:" )];
- [fSrcChapterField setStringValue: _( @"Chapters:" )];
- [fSrcChapterToField setStringValue: _( @"to" )];
- [fSrcDuration1Field setStringValue: _( @"Duration:" )];
+ /* if we're enabling the interface, check if the audio mixdown controls need to be enabled or not */
+ /* these will have been enabled by the mass control enablement above anyway, so we're sense-checking it here */
+ [self setEnabledStateOfAudioMixdownControls: NULL];
+
+ } else {
- [fDstFormatField setStringValue: _( @"Format:" )];
- [fDstCodecsField setStringValue: _( @"Codecs:" )];
- [fDstFile1Field setStringValue: _( @"File:" )];
- [fDstBrowseButton setTitle: _( @"Browse" )];
+ [tableView setEnabled: NO];
+
+ }
- [fVidRateField setStringValue: _( @"Framerate (fps):" )];
- [fVidEncoderField setStringValue: _( @"Encoder:" )];
- [fVidQualityField setStringValue: _( @"Quality:" )];
+ [self videoMatrixChanged: NULL];
+ [fAdvancedOptions enableUI:b];
}
+
/***********************************************************************
* UpdateDockIcon
***********************************************************************
// Has current job changed? That means the queue has probably changed as
// well so update it
- if (fLastKnownCurrentJob != hb_current_job(fHandle))
- {
- fLastKnownCurrentJob = hb_current_job(fHandle);
- [fQueueController updateQueueUI];
- }
- [fQueueController updateCurrentJobUI];
+ [fQueueController hblibStateChanged: s];
break;
}
[self UpdateDockIcon: 1.0];
// Pass along the info to HBQueueController
- [fQueueController updateCurrentJobUI];
+ [fQueueController hblibStateChanged: s];
break;
}
[fStatusField setStringValue: _( @"Paused" )];
// Pass along the info to HBQueueController
- [fQueueController updateCurrentJobUI];
+ [fQueueController hblibStateChanged: s];
break;
fRipIndicatorShown = NO;
}
- // Queue has been modified so update the UI
- fLastKnownCurrentJob = nil;
- [fQueueController updateQueueUI];
- [fQueueController updateCurrentJobUI];
+ // Pass along the info to HBQueueController
+ [fQueueController hblibStateChanged: s];
/* Check to see if the encode state has not been cancelled
to determine if we should check for encode done notifications */
}
}
-- (IBAction) showNewScan:(id)sender
-{
- hb_list_t * list;
- hb_title_t * title;
- int indxpri=0; // Used to search the longuest title (default in combobox)
- int longuestpri=0; // Used to search the longuest title (default in combobox)
-
- list = hb_get_titles( fHandle );
-
- if( !hb_list_count( list ) )
- {
- /* We display a message if a valid dvd source was not chosen */
- [fSrcDVD2Field setStringValue: @"No Valid Title Found"];
- SuccessfulScan = 0;
- }
- else
- {
- /* We increment the successful scancount here by one,
- which we use at the end of this function to tell the gui
- if this is the first successful scan since launch and whether
- or not we should set all settings to the defaults */
-
- currentSuccessfulScanCount++;
-
- [toolbar validateVisibleItems];
-
- [fSrcTitlePopUp removeAllItems];
- for( int i = 0; i < hb_list_count( list ); i++ )
- {
- title = (hb_title_t *) hb_list_item( list, i );
-
- currentSource = [NSString stringWithUTF8String: title->dvd];
-
- /* To get the source name as well as the default output name, first we check to see if
- the selected directory is the VIDEO_TS Directory */
- if ([[currentSource lastPathComponent] isEqualToString: @"VIDEO_TS"])
- {
- /* If VIDEO_TS Folder is chosen, choose its parent folder for the source display name */
- sourceDisplayName = [NSString stringWithFormat:[[currentSource stringByDeletingLastPathComponent] lastPathComponent]];
- }
- else
- {
- /* if not the VIDEO_TS Folder, we can assume the chosen folder is the source name */
- sourceDisplayName = [NSString stringWithFormat:[currentSource lastPathComponent]];
- }
- /*Set DVD Name at top of window*/
- [fSrcDVD2Field setStringValue:[NSString stringWithFormat: @"%@", sourceDisplayName]];
-
- /* Use the dvd name in the default output field here
- May want to add code to remove blank spaces for some dvd names*/
- /* Check to see if the last destination has been set,use if so, if not, use Desktop */
- if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"])
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@/%@.mp4", [[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"],sourceDisplayName]];
- }
- else
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@/Desktop/%@.mp4", NSHomeDirectory(),sourceDisplayName]];
- }
-
-
- if (longuestpri < title->hours*60*60 + title->minutes *60 + title->seconds)
- {
- longuestpri=title->hours*60*60 + title->minutes *60 + title->seconds;
- indxpri=i;
- }
-
-
- int format = [fDstFormatPopUp indexOfSelectedItem];
- char * ext = NULL;
- switch( format )
- {
- case 0:
-
- /*Get Default MP4 File Extension for mpeg4 (.mp4 or .m4v) from prefs*/
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultMpegName"] > 0)
- {
- ext = "m4v";
- }
- else
- {
- ext = "mp4";
- }
- break;
- case 1:
- ext = "avi";
- break;
- case 2:
- ext = "ogm";
- break;
- case 3:
- ext = "mkv";
- break;
- }
-
-
- NSString * string = [fDstFile2Field stringValue];
- /* Add/replace File Output name to the correct extension*/
- if( [string characterAtIndex: [string length] - 4] == '.' )
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@.%s", [string substringToIndex: [string length] - 4],
- ext]];
- }
- else
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@.%s", string, ext]];
- }
-
-
- [fSrcTitlePopUp addItemWithTitle: [NSString
- stringWithFormat: @"%d - %02dh%02dm%02ds",
- title->index, title->hours, title->minutes,
- title->seconds]];
-
- }
- // Select the longuest title
- [fSrcTitlePopUp selectItemAtIndex: indxpri];
- [self titlePopUpChanged: NULL];
-
-
- SuccessfulScan = 1;
- [self enableUI: YES];
-
- /* if its the initial successful scan after awakeFromNib */
- if (currentSuccessfulScanCount == 1)
- {
- [self selectDefaultPreset: NULL];
- /* if Deinterlace upon launch is specified in the prefs, then set to 1 for "Fast",
- if not, then set to 0 for none */
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultDeinterlaceOn"] > 0)
- [fPictureController setDeinterlace:1];
- else
- [fPictureController setDeinterlace:0];
- }
-
- }
-}
--(IBAction)showGrowlDoneNotification:(id)sender
-{
- [GrowlApplicationBridge
- notifyWithTitle:@"Put down that cocktail..."
- description:@"your HandBrake encode is done!"
- notificationName:SERVICE_NAME
- iconData:nil
- priority:0
- isSticky:1
- clickContext:nil];
-}
+#pragma mark -
+#pragma mark Toolbar
+// ============================================================
+// NSToolbar Related Methods
+// ============================================================
-- (void) enableUI: (bool) b
-{
- NSControl * controls[] =
- { fSrcTitleField, fSrcTitlePopUp,
- fSrcChapterField, fSrcChapterStartPopUp, fSrcChapterToField,
- fSrcChapterEndPopUp, fSrcDuration1Field, fSrcDuration2Field,
- fDstFormatField, fDstFormatPopUp, fDstCodecsField,
- fDstCodecsPopUp, fDstFile1Field, fDstFile2Field,
- fDstBrowseButton, fVidRateField, fVidRatePopUp,
- fVidEncoderField, fVidEncoderPopUp, fVidQualityField,
- fVidQualityMatrix, fVidGrayscaleCheck, fSubField, fSubPopUp,
- fAudLang1Field, fAudLang1PopUp, fAudLang2Field, fAudLang2PopUp,
- fAudTrack1MixLabel, fAudTrack1MixPopUp, fAudTrack2MixLabel, fAudTrack2MixPopUp,
- fAudRateField, fAudRatePopUp, fAudBitrateField,
- fAudBitratePopUp, fPictureButton,fQueueStatus,
- fPicSrcWidth,fPicSrcHeight,fPicSettingWidth,fPicSettingHeight,fPicSettingARkeep,
- fPicSettingDeinterlace,fPicLabelSettings,fPicLabelSrc,fPicLabelOutp,
- fPicLabelAr,fPicLabelDeinterlace,fPicLabelSrcX,fPicLabelOutputX,
- fPicLabelPAROutputX,fPicSettingPARWidth,fPicSettingPARHeight,
- fPicSettingPAR,fPicLabelAnamorphic,tableView,fPresetsAdd,fPresetsDelete,
- fCreateChapterMarkers,fVidTurboPassCheck,fDstMpgLargeFileCheck,fPicLabelAutoCrop,
- fPicSettingAutoCrop,fPicSettingDetelecine,fPicLabelDetelecine,fPicLabelDenoise,fPicSettingDenoise,fSubForcedCheck,};
+- (void) setupToolbar {
+ toolbar = [[[NSToolbar alloc] initWithIdentifier: @"HandBrake Toolbar"] autorelease];
+
+ [toolbar setAllowsUserCustomization: YES];
+ [toolbar setAutosavesConfiguration: YES];
+ [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
+
+ [toolbar setDelegate: self];
+
+ [fWindow setToolbar: toolbar];
+}
- for( unsigned i = 0;
- i < sizeof( controls ) / sizeof( NSControl * ); i++ )
+- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier:
+ (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted {
+ NSToolbarItem * item = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdent];
+
+ if ([itemIdent isEqualToString: ToggleDrawerIdentifier])
{
- if( [[controls[i] className] isEqualToString: @"NSTextField"] )
- {
- NSTextField * tf = (NSTextField *) controls[i];
- if( ![tf isBezeled] )
- {
- [tf setTextColor: b ? [NSColor controlTextColor] :
- [NSColor disabledControlTextColor]];
- continue;
- }
- }
- [controls[i] setEnabled: b];
-
+ [item setLabel: @"Toggle Presets"];
+ [item setPaletteLabel: @"Toggler Presets"];
+ [item setToolTip: @"Open/Close Preset Drawer"];
+ [item setImage: [NSImage imageNamed: @"Drawer"]];
+ [item setTarget: self];
+ [item setAction: @selector(toggleDrawer:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([itemIdent isEqualToString: StartEncodingIdentifier])
+ {
+ [item setLabel: @"Start"];
+ [item setPaletteLabel: @"Start Encoding"];
+ [item setToolTip: @"Start Encoding"];
+ [item setImage: [NSImage imageNamed: @"Play"]];
+ [item setTarget: self];
+ [item setAction: @selector(Rip:)];
+ }
+ else if ([itemIdent isEqualToString: ShowQueueIdentifier])
+ {
+ [item setLabel: @"Show Queue"];
+ [item setPaletteLabel: @"Show Queue"];
+ [item setToolTip: @"Show Queue"];
+ [item setImage: [NSImage imageNamed: @"Queue"]];
+ [item setTarget: self];
+ [item setAction: @selector(showQueueWindow:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([itemIdent isEqualToString: AddToQueueIdentifier])
+ {
+ [item setLabel: @"Add to Queue"];
+ [item setPaletteLabel: @"Add to Queue"];
+ [item setToolTip: @"Add to Queue"];
+ [item setImage: [NSImage imageNamed: @"AddToQueue"]];
+ [item setTarget: self];
+ [item setAction: @selector(addToQueue:)];
+ }
+ else if ([itemIdent isEqualToString: PauseEncodingIdentifier])
+ {
+ [item setLabel: @"Pause"];
+ [item setPaletteLabel: @"Pause Encoding"];
+ [item setToolTip: @"Pause Encoding"];
+ [item setImage: [NSImage imageNamed: @"Pause"]];
+ [item setTarget: self];
+ [item setAction: @selector(Pause:)];
+ }
+ else if ([itemIdent isEqualToString: ShowActivityIdentifier]) {
+ [item setLabel: @"Activity Window"];
+ [item setPaletteLabel: @"Show Activity Window"];
+ [item setToolTip: @"Show Activity Window"];
+ [item setImage: [NSImage imageNamed: @"ActivityWindow"]];
+ [item setTarget: self];
+ [item setAction: @selector(showDebugOutputPanel:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([itemIdent isEqualToString: ChooseSourceIdentifier])
+ {
+ [item setLabel: @"Source"];
+ [item setPaletteLabel: @"Source"];
+ [item setToolTip: @"Choose Video Source"];
+ [item setImage: [NSImage imageNamed: @"Source"]];
+ [item setTarget: self];
+ [item setAction: @selector(browseSources:)];
+ }
+ else
+ {
+ [item release];
+ return nil;
}
-
- if (b) {
-
- /* if we're enabling the interface, check if the audio mixdown controls need to be enabled or not */
- /* these will have been enabled by the mass control enablement above anyway, so we're sense-checking it here */
- [self setEnabledStateOfAudioMixdownControls: NULL];
-
- } else {
-
- [tableView setEnabled: NO];
-
- }
- [self videoMatrixChanged: NULL];
- [fAdvancedOptions enableUI:b];
+ return item;
}
-- (IBAction) showScanPanel: (id) sender
+- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
{
- [self enableUI: NO];
-
- [self browseSources:NULL];
+ return [NSArray arrayWithObjects: ChooseSourceIdentifier, NSToolbarSeparatorItemIdentifier, StartEncodingIdentifier,
+ PauseEncodingIdentifier, AddToQueueIdentifier, ShowQueueIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
+ NSToolbarSpaceItemIdentifier, ShowActivityIdentifier, ToggleDrawerIdentifier, nil];
}
-- (void) browseSources: (id) sender
+- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
{
- NSOpenPanel * panel;
-
- panel = [NSOpenPanel openPanel];
- [panel setAllowsMultipleSelection: NO];
- [panel setCanChooseFiles: YES];
- [panel setCanChooseDirectories: YES ];
- NSString * sourceDirectory;
- if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"])
- {
- sourceDirectory = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"];
- }
- else
- {
- sourceDirectory = @"~/Desktop";
- sourceDirectory = [sourceDirectory stringByExpandingTildeInPath];
- }
- [panel beginSheetForDirectory: sourceDirectory file: nil types: nil
- modalForWindow: fWindow modalDelegate: self
- didEndSelector: @selector( browseSourcesDone:returnCode:contextInfo: )
- contextInfo: nil];
+ return [NSArray arrayWithObjects: StartEncodingIdentifier, PauseEncodingIdentifier, AddToQueueIdentifier,
+ ChooseSourceIdentifier, ShowQueueIdentifier, ShowActivityIdentifier, ToggleDrawerIdentifier,
+ NSToolbarCustomizeToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
+ NSToolbarSpaceItemIdentifier, NSToolbarSeparatorItemIdentifier, nil];
}
-- (void) browseSourcesDone: (NSOpenPanel *) sheet
- returnCode: (int) returnCode contextInfo: (void *) contextInfo
+- (BOOL) validateToolbarItem: (NSToolbarItem *) toolbarItem
{
- /* User selected a file to open */
- if( returnCode == NSOKButton )
+ NSString * ident = [toolbarItem itemIdentifier];
+
+ if (fHandle)
{
- [fSrcDVD2Field setStringValue: _( @"Opening a new source ..." )];
- [fScanIndicator setHidden: NO];
- [fScanIndicator setIndeterminate: YES];
- [fScanIndicator startAnimation: nil];
-
- /* we set the last source directory in the prefs here */
- NSString *sourceDirectory = [[[sheet filenames] objectAtIndex: 0] stringByDeletingLastPathComponent];
- [[NSUserDefaults standardUserDefaults] setObject:sourceDirectory forKey:@"LastSourceDirectory"];
-
- NSString *path = [[sheet filenames] objectAtIndex: 0];
- HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
- if( [detector isVideoDVD] )
+ hb_state_t s;
+ hb_get_state2( fHandle, &s );
+
+ if (s.state == HB_STATE_WORKING || s.state == HB_STATE_MUXING)
+ {
+ if ([ident isEqualToString: StartEncodingIdentifier])
+ {
+ [toolbarItem setImage: [NSImage imageNamed: @"Stop"]];
+ [toolbarItem setLabel: @"Stop"];
+ [toolbarItem setPaletteLabel: @"Stop"];
+ [toolbarItem setToolTip: @"Stop Encoding"];
+ return YES;
+ }
+ if ([ident isEqualToString: PauseEncodingIdentifier])
+ {
+ [toolbarItem setImage: [NSImage imageNamed: @"Pause"]];
+ [toolbarItem setLabel: @"Pause"];
+ [toolbarItem setPaletteLabel: @"Pause Encoding"];
+ [toolbarItem setToolTip: @"Pause Encoding"];
+ return YES;
+ }
+ if (SuccessfulScan)
+ if ([ident isEqualToString: AddToQueueIdentifier])
+ return YES;
+ }
+ else if (s.state == HB_STATE_PAUSED)
{
- // The chosen path was actually on a DVD, so use the raw block
- // device path instead.
- path = [detector devicePath];
+ if ([ident isEqualToString: PauseEncodingIdentifier])
+ {
+ [toolbarItem setImage: [NSImage imageNamed: @"Play"]];
+ [toolbarItem setLabel: @"Resume"];
+ [toolbarItem setPaletteLabel: @"Resume Encoding"];
+ [toolbarItem setToolTip: @"Resume Encoding"];
+ return YES;
+ }
+ if ([ident isEqualToString: StartEncodingIdentifier])
+ return YES;
+ if ([ident isEqualToString: AddToQueueIdentifier])
+ return YES;
}
-
- hb_scan( fHandle, [path UTF8String], 0 );
- }
- else // User clicked Cancel in browse window
- {
- /* if we have a title loaded up */
- if ([[fSrcDVD2Field stringValue] length] > 0)
- {
- [self enableUI: YES];
+ else if (s.state == HB_STATE_SCANNING)
+ return NO;
+ else if (s.state == HB_STATE_WORKDONE || s.state == HB_STATE_SCANDONE || SuccessfulScan)
+ {
+ if ([ident isEqualToString: StartEncodingIdentifier])
+ {
+ [toolbarItem setImage: [NSImage imageNamed: @"Play"]];
+ if (hb_count(fHandle) > 0)
+ [toolbarItem setLabel: @"Start Queue"];
+ else
+ [toolbarItem setLabel: @"Start"];
+ [toolbarItem setPaletteLabel: @"Start Encoding"];
+ [toolbarItem setToolTip: @"Start Encoding"];
+ return YES;
+ }
+ if ([ident isEqualToString: AddToQueueIdentifier])
+ return YES;
}
- }
-}
-- (IBAction) openMainWindow: (id) sender
-{
- [fWindow makeKeyAndOrderFront:nil];
- [fWindow setReleasedWhenClosed: YES];
-}
-
-- (BOOL) windowShouldClose: (id) sender
-{
- [fWindow setReleasedWhenClosed: NO];
- return YES;
+ }
+
+ if ([ident isEqualToString: ShowQueueIdentifier])
+ return YES;
+ if ([ident isEqualToString: ToggleDrawerIdentifier])
+ return YES;
+ if ([ident isEqualToString: ChooseSourceIdentifier])
+ return YES;
+ if ([ident isEqualToString: ShowActivityIdentifier])
+ return YES;
+
+ return NO;
}
-- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
+- (BOOL) validateMenuItem: (NSMenuItem *) menuItem
{
- if( !flag ) {
- [fWindow makeKeyAndOrderFront:nil];
- [fWindow setReleasedWhenClosed: YES];
+ SEL action = [menuItem action];
+
+ hb_state_t s;
+ hb_get_state2( fHandle, &s );
+
+ if (fHandle)
+ {
+ if (action == @selector(addToQueue:) || action == @selector(showPicturePanel:) || action == @selector(showAddPresetPanel:))
+ return SuccessfulScan && [fWindow attachedSheet] == nil;
- return YES;
- }
+ if (action == @selector(browseSources:))
+ {
+ if (s.state == HB_STATE_SCANNING)
+ return NO;
+ else
+ return [fWindow attachedSheet] == nil;
+ }
+ if (action == @selector(selectDefaultPreset:))
+ return [tableView selectedRow] >= 0 && [fWindow attachedSheet] == nil;
+ if (action == @selector(Pause:))
+ {
+ if (s.state == HB_STATE_WORKING)
+ {
+ if(![[menuItem title] isEqualToString:@"Pause Encoding"])
+ [menuItem setTitle:@"Pause Encoding"];
+ return YES;
+ }
+ else if (s.state == HB_STATE_PAUSED)
+ {
+ if(![[menuItem title] isEqualToString:@"Resume Encoding"])
+ [menuItem setTitle:@"Resume Encoding"];
+ return YES;
+ }
+ else
+ return NO;
+ }
+ if (action == @selector(Rip:))
+ if (s.state == HB_STATE_WORKING || s.state == HB_STATE_MUXING || s.state == HB_STATE_PAUSED)
+ {
+ if(![[menuItem title] isEqualToString:@"Stop Encoding"])
+ [menuItem setTitle:@"Stop Encoding"];
+ return YES;
+ }
+ else if (SuccessfulScan)
+ {
+ if(![[menuItem title] isEqualToString:@"Start Encoding"])
+ [menuItem setTitle:@"Start Encoding"];
+ return [fWindow attachedSheet] == nil;
+ }
+ else
+ return NO;
+ }
- return NO;
+ return YES;
}
-- (IBAction) videoMatrixChanged: (id) sender;
+#pragma mark -
+#pragma mark Growl
+// register a test notification and make
+// it enabled by default
+#define SERVICE_NAME @"Encode Done"
+- (NSDictionary *)registrationDictionaryForGrowl
+{
+ NSDictionary *registrationDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSArray arrayWithObjects:SERVICE_NAME,nil], GROWL_NOTIFICATIONS_ALL,
+ [NSArray arrayWithObjects:SERVICE_NAME,nil], GROWL_NOTIFICATIONS_DEFAULT,
+ nil];
+
+ return registrationDictionary;
+}
+
+-(IBAction)showGrowlDoneNotification:(id)sender
{
- bool target, bitrate, quality;
+ [GrowlApplicationBridge
+ notifyWithTitle:@"Put down that cocktail..."
+ description:@"your HandBrake encode is done!"
+ notificationName:SERVICE_NAME
+ iconData:nil
+ priority:0
+ isSticky:1
+ clickContext:nil];
+}
- target = bitrate = quality = false;
- if( [fVidQualityMatrix isEnabled] )
+#pragma mark -
+#pragma mark Get New Source
+
+/*Opens the source browse window, called from Open Source widgets */
+- (IBAction) browseSources: (id) sender
+{
+ [self enableUI: NO];
+ NSOpenPanel * panel;
+
+ panel = [NSOpenPanel openPanel];
+ [panel setAllowsMultipleSelection: NO];
+ [panel setCanChooseFiles: YES];
+ [panel setCanChooseDirectories: YES ];
+ NSString * sourceDirectory;
+ if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"])
+ {
+ sourceDirectory = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"];
+ }
+ else
+ {
+ sourceDirectory = @"~/Desktop";
+ sourceDirectory = [sourceDirectory stringByExpandingTildeInPath];
+ }
+ /* we open up the browse sources sheet here and call for browseSourcesDone after the sheet is closed
+ * to evaluate whether we want to specify a title, we pass the sender in the contextInfo variable
+ */
+ [panel beginSheetForDirectory: sourceDirectory file: nil types: nil
+ modalForWindow: fWindow modalDelegate: self
+ didEndSelector: @selector( browseSourcesDone:returnCode:contextInfo: )
+ contextInfo: sender];
+}
+
+- (void) browseSourcesDone: (NSOpenPanel *) sheet
+ returnCode: (int) returnCode contextInfo: (void *) contextInfo
+{
+ /* we convert the sender content of contextInfo back into a variable called sender
+ * mostly just for consistency for evaluation later
+ */
+ id sender = (id)contextInfo;
+ /* User selected a file to open */
+ if( returnCode == NSOKButton )
{
- switch( [fVidQualityMatrix selectedRow] )
+
+ NSString *scanPath = [[sheet filenames] objectAtIndex: 0];
+ /* we order out sheet, which is the browse window as we need to open
+ * the title selection sheet right away
+ */
+ [sheet orderOut: self];
+
+ if (sender == fOpenSourceTitleMMenu)
{
- case 0:
- target = true;
- break;
- case 1:
- bitrate = true;
- break;
- case 2:
- quality = true;
- break;
+ /* We put the chosen source path in the source display text field for the
+ * source title selection sheet in which the user specifies the specific title to be
+ * scanned as well as the short source name in fSrcDsplyNameTitleScan just for display
+ * purposes in the title panel
+ */
+ /* Full Path */
+ [fScanSrcTitlePathField setStringValue: [NSString stringWithFormat:@"%@", scanPath]];
+ NSString *displayTitlescanSourceName;
+
+ if ([[scanPath lastPathComponent] isEqualToString: @"VIDEO_TS"])
+ {
+ /* If VIDEO_TS Folder is chosen, choose its parent folder for the source display name
+ we have to use the title->dvd value so we get the proper name of the volume if a physical dvd is the source*/
+ displayTitlescanSourceName = [NSString stringWithFormat:[[scanPath stringByDeletingLastPathComponent] lastPathComponent]];
+ }
+ else
+ {
+ /* if not the VIDEO_TS Folder, we can assume the chosen folder is the source name */
+ displayTitlescanSourceName = [NSString stringWithFormat:[scanPath lastPathComponent]];
+ }
+ /* we set the source display name in the title selection dialogue */
+ [fSrcDsplyNameTitleScan setStringValue: [NSString stringWithFormat:@"%@", displayTitlescanSourceName]];
+ /* We show the actual sheet where the user specifies the title to be scanned
+ * as we are going to do a title specific scan
+ */
+ [self showSourceTitleScanPanel:NULL];
}
+ else
+ {
+ /* We are just doing a standard full source scan, so we specify "0" to libhb */
+ NSString *path = [[sheet filenames] objectAtIndex: 0];
+ [self performScan:path scanTitleNum:0];
+ }
+
}
- [fVidTargetSizeField setEnabled: target];
- [fVidBitrateField setEnabled: bitrate];
- [fVidQualitySlider setEnabled: quality];
- [fVidTwoPassCheck setEnabled: !quality &&
- [fVidQualityMatrix isEnabled]];
- if( quality )
+ else // User clicked Cancel in browse window
{
- [fVidTwoPassCheck setState: NSOffState];
- [fVidTurboPassCheck setHidden: YES];
- [fVidTurboPassCheck setState: NSOffState];
+ /* if we have a title loaded up */
+ if ([[fSrcDVD2Field stringValue] length] > 0)
+ {
+ [self enableUI: YES];
+ }
}
+}
+
+/* Here we open the title selection sheet where we can specify an exact title to be scanned */
+- (IBAction) showSourceTitleScanPanel: (id) sender
+{
+ /* We default the title number to be scanned to "0" which results in a full source scan, unless the
+ * user changes it
+ */
+ [fScanSrcTitleNumField setStringValue: @"0"];
+ /* Show the panel */
+ [NSApp beginSheet: fScanSrcTitlePanel modalForWindow: fWindow modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+}
- [self qualitySliderChanged: sender];
- [self calculateBitrate: sender];
- [self customSettingUsed: sender];
+- (IBAction) closeSourceTitleScanPanel: (id) sender
+{
+ [NSApp endSheet: fScanSrcTitlePanel];
+ [fScanSrcTitlePanel orderOut: self];
+ if(sender == fScanSrcTitleOpenButton)
+ {
+ /* We setup the scan status in the main window to indicate a source title scan */
+ [fSrcDVD2Field setStringValue: _( @"Opening a new source title ..." )];
+ [fScanIndicator setHidden: NO];
+ [fScanIndicator setIndeterminate: YES];
+ [fScanIndicator startAnimation: nil];
+
+ /* we set the last source directory in the prefs here */
+ NSString *sourceDirectory = [[fScanSrcTitlePathField stringValue] stringByDeletingLastPathComponent];
+ [[NSUserDefaults standardUserDefaults] setObject:sourceDirectory forKey:@"LastSourceDirectory"];
+ /* We use the performScan method to actually perform the specified scan passing the path and the title
+ * to be scanned
+ */
+ [self performScan:[fScanSrcTitlePathField stringValue] scanTitleNum:[fScanSrcTitleNumField intValue]];
+ }
}
-- (IBAction) qualitySliderChanged: (id) sender
+
+/* Here we actually tell hb_scan to perform the source scan, using the path to source and title number*/
+- (void) performScan:(NSString *) scanPath scanTitleNum: (int) scanTitleNum
{
- [fVidConstantCell setTitle: [NSString stringWithFormat:
- _( @"Constant quality: %.0f %%" ), 100.0 *
- [fVidQualitySlider floatValue]]];
- [self customSettingUsed: sender];
+ NSString *path = scanPath;
+ HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
+ if( [detector isVideoDVD] )
+ {
+ // The chosen path was actually on a DVD, so use the raw block
+ // device path instead.
+ path = [detector devicePath];
+ }
+ /* If there is no title number passed to scan, we use "0"
+ * which causes the default behavior of a full source scan
+ */
+ if (!scanTitleNum)
+ {
+ scanTitleNum = 0;
+ }
+ hb_scan( fHandle, [path UTF8String], scanTitleNum );
+}
+
+- (IBAction) showNewScan:(id)sender
+{
+ hb_list_t * list;
+ hb_title_t * title;
+ int indxpri=0; // Used to search the longuest title (default in combobox)
+ int longuestpri=0; // Used to search the longuest title (default in combobox)
+
+ list = hb_get_titles( fHandle );
+
+ if( !hb_list_count( list ) )
+ {
+ /* We display a message if a valid dvd source was not chosen */
+ [fSrcDVD2Field setStringValue: @"No Valid Title Found"];
+ SuccessfulScan = NO;
+ }
+ else
+ {
+ /* We increment the successful scancount here by one,
+ which we use at the end of this function to tell the gui
+ if this is the first successful scan since launch and whether
+ or not we should set all settings to the defaults */
+
+ currentSuccessfulScanCount++;
+
+ [toolbar validateVisibleItems];
+
+ [fSrcTitlePopUp removeAllItems];
+ for( int i = 0; i < hb_list_count( list ); i++ )
+ {
+ title = (hb_title_t *) hb_list_item( list, i );
+
+ currentSource = [NSString stringWithUTF8String: title->name];
+
+ /* To get the source name as well as the default output name, first we check to see if
+ the selected directory is the VIDEO_TS Directory */
+ if ([[currentSource lastPathComponent] isEqualToString: @"VIDEO_TS"])
+ {
+ /* If VIDEO_TS Folder is chosen, choose its parent folder for the source display name
+ we have to use the title->dvd value so we get the proper name of the volume if a physical dvd is the source*/
+ sourceDisplayName = [NSString stringWithFormat:[[[NSString stringWithUTF8String: title->dvd] stringByDeletingLastPathComponent] lastPathComponent]];
+ }
+ else
+ {
+ /* if not the VIDEO_TS Folder, we can assume the chosen folder is the source name */
+ sourceDisplayName = [NSString stringWithFormat:[currentSource lastPathComponent]];
+ }
+ /*Set DVD Name at top of window*/
+ [fSrcDVD2Field setStringValue:[NSString stringWithFormat: @"%@", sourceDisplayName]];
+
+ /* Use the dvd name in the default output field here
+ May want to add code to remove blank spaces for some dvd names*/
+ /* Check to see if the last destination has been set,use if so, if not, use Desktop */
+ if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"])
+ {
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:
+ @"%@/%@.mp4", [[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"],sourceDisplayName]];
+ }
+ else
+ {
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:
+ @"%@/Desktop/%@.mp4", NSHomeDirectory(),sourceDisplayName]];
+ }
+
+ if (longuestpri < title->hours*60*60 + title->minutes *60 + title->seconds)
+ {
+ longuestpri=title->hours*60*60 + title->minutes *60 + title->seconds;
+ indxpri=i;
+ }
+
+ [self formatPopUpChanged:NULL];
+
+ [fSrcTitlePopUp addItemWithTitle: [NSString
+ stringWithFormat: @"%d - %02dh%02dm%02ds",
+ title->index, title->hours, title->minutes,
+ title->seconds]];
+ }
+
+ // Select the longuest title
+ [fSrcTitlePopUp selectItemAtIndex: indxpri];
+ [self titlePopUpChanged: NULL];
+
+ SuccessfulScan = YES;
+ [self enableUI: YES];
+
+ /* if its the initial successful scan after awakeFromNib */
+ if (currentSuccessfulScanCount == 1)
+ {
+ [self selectDefaultPreset: NULL];
+ /* if Deinterlace upon launch is specified in the prefs, then set to 1 for "Fast",
+ if not, then set to 0 for none */
+ if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultDeinterlaceOn"] > 0)
+ [fPictureController setDeinterlace:1];
+ else
+ [fPictureController setDeinterlace:0];
+ }
+
+ }
}
+
+#pragma mark -
+#pragma mark New Output Destination
+
- (IBAction) browseFile: (id) sender
{
/* Open a panel to let the user choose and update the text field */
}
}
-- (IBAction) showPicturePanel: (id) sender
+
+#pragma mark -
+#pragma mark Main Window Control
+
+- (IBAction) openMainWindow: (id) sender
{
- hb_list_t * list = hb_get_titles( fHandle );
- hb_title_t * title = (hb_title_t *) hb_list_item( list,
- [fSrcTitlePopUp indexOfSelectedItem] );
- [fPictureController showPanelInWindow:fWindow forTitle:title];
+ [fWindow makeKeyAndOrderFront:nil];
}
-- (void)pictureSettingsDidChange {
- [self calculatePictureSizing: NULL];
+- (BOOL) windowShouldClose: (id) sender
+{
+ return YES;
}
-- (void) PrepareJob
+- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
+{
+ if( !flag ) {
+ [fWindow makeKeyAndOrderFront:nil];
+
+ return YES;
+ }
+
+ return NO;
+}
+
+#pragma mark -
+#pragma mark Job Handling
+
+
+- (void) prepareJob
{
hb_list_t * list = hb_get_titles( fHandle );
hb_title_t * title = (hb_title_t *) hb_list_item( list,
indexOfSelectedItem]].rate;
job->abitrate = [[fAudBitratePopUp selectedItem] tag];
+ /* set vfr according to the Picture Window */
+ if ([fPictureController vfr])
+ {
+ job->vfr = 1;
+ }
+ else
+ {
+ job->vfr = 0;
+ }
+
+ /* Filters */
job->filters = hb_list_init();
/* Detelecine */
hb_filter_denoise.settings = "7:7:5:5";
hb_list_add( job->filters, &hb_filter_denoise );
}
+
+ /* Deblock (uses pp7 default) */
+ if ([fPictureController deblock])
+ {
+ hb_list_add( job->filters, &hb_filter_deblock );
+ }
}
// be lumped together in the UI.
job->sequence_id = -1;
- [self PrepareJob];
+ [self prepareJob];
/* Destination file */
job->file = [[fDstFile2Field stringValue] UTF8String];
hb_subtitle_t **subtitle_tmp = job->select_subtitle;
job->indepth_scan = 0;
+ /*
+ * Do not autoselect subtitles on the first pass of a two pass
+ */
+ job->select_subtitle = NULL;
+
job->pass = 1;
job->sequence_id++; // for job grouping
hb_add( fHandle, job );
NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
[[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"];
- /* Lets try to update stuff, taken from remove in the queue controller */
- [fQueueController performSelectorOnMainThread: @selector( updateQueueUI )
- withObject: NULL waitUntilDone: NO];
+
+ // Notify the queue
+ [fQueueController hblibJobListChanged];
}
/* Rip: puts up an alert before ultimately calling doRip
}
}
-- (void) updateAlertDone: (NSWindow *) sheet
- returnCode: (int) returnCode contextInfo: (void *) contextInfo
-{
- if( returnCode == NSAlertAlternateReturn )
- {
- /* Show scan panel */
- [self performSelectorOnMainThread: @selector(showScanPanel:)
- withObject: NULL waitUntilDone: NO];
- return;
- }
-
- /* Go to HandBrake homepage and exit */
- [self openHomepage: NULL];
- [NSApp terminate: self];
-}
-
- (void) remindUserOfSleepOrShutdown
{
if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Put Computer To Sleep"])
// remaining passes of the job and then start the queue back up if there are any
// remaining jobs.
+ [fQueueController hblibWillStop];
hb_stop( fHandle );
fEncodeState = 2; // don't alert at end of processing since this was a cancel
}
}
+#pragma mark -
+#pragma mark GUI Controls Changed Methods
+
- (IBAction) titlePopUpChanged: (id) sender
{
hb_list_t * list = hb_get_titles( fHandle );
/* so call audioTrackPopUpChanged for both audio tracks to update the mixdown popups */
[self audioTrackPopUpChanged: fAudLang1PopUp];
[self audioTrackPopUpChanged: fAudLang2PopUp];
- /* lets call tableViewSelected to make sure that any preset we have selected is enforced after a title change */
- [self tableViewSelected:NULL];
+
+ /* We repopulate the Video Framerate popup and show the detected framerate along with "Same as Source"*/
+ [fVidRatePopUp removeAllItems];
+ if (fTitle->rate_base == 1126125) // 23.976 NTSC Film
+ {
+ [fVidRatePopUp addItemWithTitle: @"Same as source (23.976)"];
+ }
+ else if (fTitle->rate_base == 1080000) // 25 PAL Film/Video
+ {
+ [fVidRatePopUp addItemWithTitle: @"Same as source (25)"];
+ }
+ else if (fTitle->rate_base == 900900) // 29.97 NTSC Video
+ {
+ [fVidRatePopUp addItemWithTitle: @"Same as source (29.97)"];
+ }
+ else
+ {
+ /* if none of the common dvd source framerates is detected, just use "Same as source" */
+ [fVidRatePopUp addItemWithTitle: @"Same as source"];
+ }
+ for( int i = 0; i < hb_video_rates_count; i++ )
+ {
+ if ([[NSString stringWithCString: hb_video_rates[i].string] isEqualToString: [NSString stringWithFormat: @"%.3f",23.976]])
+ {
+ [fVidRatePopUp addItemWithTitle:[NSString stringWithFormat: @"%@%@",
+ [NSString stringWithCString: hb_video_rates[i].string], @" (NTSC Film)"]];
+ }
+ else if ([[NSString stringWithCString: hb_video_rates[i].string] isEqualToString: [NSString stringWithFormat: @"%d",25]])
+ {
+ [fVidRatePopUp addItemWithTitle:[NSString stringWithFormat: @"%@%@",
+ [NSString stringWithCString: hb_video_rates[i].string], @" (PAL Film/Video)"]];
+ }
+ else if ([[NSString stringWithCString: hb_video_rates[i].string] isEqualToString: [NSString stringWithFormat: @"%.2f",29.97]])
+ {
+ [fVidRatePopUp addItemWithTitle:[NSString stringWithFormat: @"%@%@",
+ [NSString stringWithCString: hb_video_rates[i].string], @" (NTSC Video)"]];
+ }
+ else
+ {
+ [fVidRatePopUp addItemWithTitle:
+ [NSString stringWithCString: hb_video_rates[i].string]];
+ }
+ }
+ [fVidRatePopUp selectItemAtIndex: 0];
+
+ /* lets call tableViewSelected to make sure that any preset we have selected is enforced after a title change */
+ [self tableViewSelected:NULL];
+
}
- (IBAction) chapterPopUpChanged: (id) sender
- (IBAction) formatPopUpChanged: (id) sender
{
NSString * string = [fDstFile2Field stringValue];
+ NSString * selectedCodecs = [fDstCodecsPopUp titleOfSelectedItem];
int format = [fDstFormatPopUp indexOfSelectedItem];
char * ext = NULL;
/* Initially set the large file (64 bit formatting) output checkbox to hidden */
{
ext = "mp4";
}
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / AAC Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / AAC Audio" )];
+
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / AAC Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / AAC Audio" )];
+
/* We enable the create chapters checkbox here since we are .mp4*/
[fCreateChapterMarkers setEnabled: YES];
/* We show the Large File (64 bit formatting) checkbox since we are .mp4
{
/* if not enable in global preferences, we additionaly sanity check that the
hidden checkbox is set to off. */
- [fDstMpgLargeFileCheck setState: NSOffState];
+ [fDstMpgLargeFileCheck setState: NSOffState];
}
- break;
- case 1:
+ break;
+
+ case 1:
+ ext = "mkv";
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / AAC Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / AC-3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / MP3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / Vorbis Audio" )];
+
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / AAC Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / AC-3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / MP3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / Vorbis Audio" )];
+ /* We enable the create chapters checkbox here */
+ [fCreateChapterMarkers setEnabled: YES];
+ break;
+
+ case 2:
ext = "avi";
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / MP3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / AC-3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / MP3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / AC-3 Audio" )];
- /* We disable the create chapters checkbox here since we are NOT .mp4
- and make sure it is unchecked*/
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / MP3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / AC-3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / MP3 Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"AVC/H.264 Video / AC-3 Audio" )];
+ /* We disable the create chapters checkbox here and make sure it is unchecked*/
[fCreateChapterMarkers setEnabled: NO];
[fCreateChapterMarkers setState: NSOffState];
break;
- case 2:
+
+ case 3:
ext = "ogm";
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / Vorbis Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / MP3 Audio" )];
- /* We disable the create chapters checkbox here since we are NOT .mp4
- and make sure it is unchecked*/
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / Vorbis Audio" )];
+ [fDstCodecsPopUp addItemWithTitle:_( @"MPEG-4 Video / MP3 Audio" )];
+ /* We disable the create chapters checkbox here and make sure it is unchecked*/
[fCreateChapterMarkers setEnabled: NO];
[fCreateChapterMarkers setState: NSOffState];
break;
- case 3:
- ext = "mkv";
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / AAC Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / AC-3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / MP3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"MPEG-4 Video / Vorbis Audio" )];
-
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / AAC Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / AC-3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / MP3 Audio" )];
- [fDstCodecsPopUp addItemWithTitle:
- _( @"AVC/H.264 Video / Vorbis Audio" )];
- /* We enable the create chapters checkbox here since */
- [fCreateChapterMarkers setEnabled: YES];
- break;
- }
- [self codecsPopUpChanged: NULL];
-
- /* Add/replace to the correct extension */
- if( [string characterAtIndex: [string length] - 4] == '.' )
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@.%s", [string substringToIndex: [string length] - 4],
- ext]];
}
- else
- {
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@.%s", string, ext]];
+
+ if ( SuccessfulScan ) {
+ [fDstCodecsPopUp selectItemWithTitle:selectedCodecs];
+
+ /* Add/replace to the correct extension */
+ if( [string characterAtIndex: [string length] - 4] == '.' )
+ {
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:
+ @"%@.%s", [string substringToIndex: [string length] - 4],
+ ext]];
+ }
+ else
+ {
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:
+ @"%@.%s", string, ext]];
+ }
+
+ if ( [fDstCodecsPopUp selectedItem] == NULL )
+ {
+ [fDstCodecsPopUp selectItemAtIndex:0];
+ [self codecsPopUpChanged: NULL];
+
+ /* changing the format may mean that we can / can't offer mono or 6ch, */
+ /* so call audioTrackPopUpChanged for both audio tracks to update the mixdown popups */
+ [self audioTrackPopUpChanged: fAudLang1PopUp];
+ [self audioTrackPopUpChanged: fAudLang2PopUp];
+ /* We call the method to properly enable/disable turbo 2 pass */
+ [self twoPassCheckboxChanged: sender];
+ /* We call method method to change UI to reflect whether a preset is used or not*/
+ }
}
-
- /* changing the format may mean that we can / can't offer mono or 6ch, */
- /* so call audioTrackPopUpChanged for both audio tracks to update the mixdown popups */
- [self audioTrackPopUpChanged: fAudLang1PopUp];
- [self audioTrackPopUpChanged: fAudLang2PopUp];
- /* We call the method to properly enable/disable turbo 2 pass */
- [self twoPassCheckboxChanged: sender];
- /* We call method method to change UI to reflect whether a preset is used or not*/
+
[self customSettingUsed: sender];
-
}
- (IBAction) codecsPopUpChanged: (id) sender
[self twoPassCheckboxChanged: sender];
}
+/* Method to determine if we should change the UI
+To reflect whether or not a Preset is being used or if
+the user is using "Custom" settings by determining the sender*/
+- (IBAction) customSettingUsed: (id) sender
+{
+ if ([sender stringValue] != NULL)
+ {
+ /* Deselect the currently selected Preset if there is one*/
+ [tableView deselectRow:[tableView selectedRow]];
+ [[fPresetsActionMenu itemAtIndex:0] setEnabled: NO];
+ /* Change UI to show "Custom" settings are being used */
+ [fPresetSelectedDisplay setStringValue: @"Custom"];
+
+ curUserPresetChosenNum = nil;
+ }
+
+}
+
+
+#pragma mark -
+#pragma mark - Video
+
- (IBAction) twoPassCheckboxChanged: (id) sender
{
/* check to see if x264 is chosen */
/* We call method method to change UI to reflect whether a preset is used or not*/
[self customSettingUsed: sender];
}
-
-- (IBAction) setEnabledStateOfAudioMixdownControls: (id) sender
-{
-
- /* enable/disable the mixdown text and popupbutton for audio track 1 */
- [fAudTrack1MixPopUp setEnabled: ([fAudLang1PopUp indexOfSelectedItem] == 0) ? NO : YES];
- [fAudTrack1MixLabel setTextColor: ([fAudLang1PopUp indexOfSelectedItem] == 0) ?
- [NSColor disabledControlTextColor] : [NSColor controlTextColor]];
-
- /* enable/disable the mixdown text and popupbutton for audio track 2 */
- [fAudTrack2MixPopUp setEnabled: ([fAudLang2PopUp indexOfSelectedItem] == 0) ? NO : YES];
- [fAudTrack2MixLabel setTextColor: ([fAudLang2PopUp indexOfSelectedItem] == 0) ?
- [NSColor disabledControlTextColor] : [NSColor controlTextColor]];
-
-}
-
-- (IBAction) addAllAudioTracksToPopUp: (id) sender
+- (IBAction) videoMatrixChanged: (id) sender;
{
+ bool target, bitrate, quality;
- hb_list_t * list = hb_get_titles( fHandle );
- hb_title_t * title = (hb_title_t*)
- hb_list_item( list, [fSrcTitlePopUp indexOfSelectedItem] );
-
- hb_audio_t * audio;
-
- [sender removeAllItems];
- [sender addItemWithTitle: _( @"None" )];
- for( int i = 0; i < hb_list_count( title->list_audio ); i++ )
+ target = bitrate = quality = false;
+ if( [fVidQualityMatrix isEnabled] )
{
- audio = (hb_audio_t *) hb_list_item( title->list_audio, i );
- [[sender menu] addItemWithTitle:
- [NSString stringWithCString: audio->lang]
- action: NULL keyEquivalent: @""];
- }
- [sender selectItemAtIndex: 0];
-
-}
-
-- (IBAction) selectAudioTrackInPopUp: (id) sender searchPrefixString: (NSString *) searchPrefixString selectIndexIfNotFound: (int) selectIndexIfNotFound
-{
-
- /* this method can be used to find a language, or a language-and-source-format combination, by passing in the appropriate string */
- /* e.g. to find the first French track, pass in an NSString * of "Francais" */
- /* e.g. to find the first English 5.1 AC3 track, pass in an NSString * of "English (AC3) (5.1 ch)" */
- /* if no matching track is found, then selectIndexIfNotFound is used to choose which track to select instead */
-
- if (searchPrefixString != NULL)
- {
-
- for( int i = 0; i < [sender numberOfItems]; i++ )
+ switch( [fVidQualityMatrix selectedRow] )
{
- /* Try to find the desired search string */
- if ([[[sender itemAtIndex: i] title] hasPrefix:searchPrefixString])
- {
- [sender selectItemAtIndex: i];
- return;
- }
+ case 0:
+ target = true;
+ break;
+ case 1:
+ bitrate = true;
+ break;
+ case 2:
+ quality = true;
+ break;
}
- /* couldn't find the string, so select the requested "search string not found" item */
- /* index of 0 means select the "none" item */
- /* index of 1 means select the first audio track */
- [sender selectItemAtIndex: selectIndexIfNotFound];
- }
- else
+ }
+ [fVidTargetSizeField setEnabled: target];
+ [fVidBitrateField setEnabled: bitrate];
+ [fVidQualitySlider setEnabled: quality];
+ [fVidTwoPassCheck setEnabled: !quality &&
+ [fVidQualityMatrix isEnabled]];
+ if( quality )
{
- /* if no search string is provided, then select the selectIndexIfNotFound item */
- [sender selectItemAtIndex: selectIndexIfNotFound];
+ [fVidTwoPassCheck setState: NSOffState];
+ [fVidTurboPassCheck setHidden: YES];
+ [fVidTurboPassCheck setState: NSOffState];
}
+ [self qualitySliderChanged: sender];
+ [self calculateBitrate: sender];
+ [self customSettingUsed: sender];
}
-- (IBAction) audioTrackPopUpChanged: (id) sender
+- (IBAction) qualitySliderChanged: (id) sender
{
- /* utility function to call audioTrackPopUpChanged without passing in a mixdown-to-use */
- [self audioTrackPopUpChanged: sender mixdownToUse: 0];
+ [fVidConstantCell setTitle: [NSString stringWithFormat:
+ _( @"Constant quality: %.0f %%" ), 100.0 *
+ [fVidQualitySlider floatValue]]];
+ [self customSettingUsed: sender];
}
-- (IBAction) audioTrackPopUpChanged: (id) sender mixdownToUse: (int) mixdownToUse
+- (void) controlTextDidChange: (NSNotification *) notification
{
+ [self calculateBitrate: NULL];
+}
- /* make sure we have a selected title before continuing */
- if (fTitle == NULL) return;
+- (IBAction) calculateBitrate: (id) sender
+{
+ if( !fHandle || [fVidQualityMatrix selectedRow] != 0 || !SuccessfulScan )
+ {
+ return;
+ }
- /* find out if audio track 1 or 2 was changed - this is passed to us in the tag of the sender */
- /* the sender will have been either fAudLang1PopUp (tag = 0) or fAudLang2PopUp (tag = 1) */
- int thisAudio = [sender tag];
+ hb_list_t * list = hb_get_titles( fHandle );
+ hb_title_t * title = (hb_title_t *) hb_list_item( list,
+ [fSrcTitlePopUp indexOfSelectedItem] );
+ hb_job_t * job = title->job;
- /* get the index of the selected audio */
- int thisAudioIndex = [sender indexOfSelectedItem] - 1;
+ [self prepareJob];
- /* Handbrake can't currently cope with ripping the same source track twice */
- /* So, if this audio is also selected in the other audio track popup, set that popup's selection to "none" */
- /* get a reference to the two audio track popups */
- NSPopUpButton * thisAudioPopUp = (thisAudio == 1 ? fAudLang2PopUp : fAudLang1PopUp);
- NSPopUpButton * otherAudioPopUp = (thisAudio == 1 ? fAudLang1PopUp : fAudLang2PopUp);
- /* if the same track is selected in the other audio popup, then select "none" in that popup */
+ [fVidBitrateField setIntValue: hb_calc_bitrate( job,
+ [fVidTargetSizeField intValue] )];
+}
+
+#pragma mark -
+#pragma mark - Picture
+
+/* lets set the picture size back to the max from right after title scan
+ Lets use an IBAction here as down the road we could always use a checkbox
+ in the gui to easily take the user back to max. Remember, the compiler
+ resolves IBActions down to -(void) during compile anyway */
+- (IBAction) revertPictureSizeToMax: (id) sender
+{
+ hb_job_t * job = fTitle->job;
+ /* We use the output picture width and height
+ as calculated from libhb right after title is set
+ in TitlePopUpChanged */
+ job->width = PicOrigOutputWidth;
+ job->height = PicOrigOutputHeight;
+ [fPictureController setAutoCrop:YES];
+ /* Here we use the auto crop values determined right after scan */
+ job->crop[0] = AutoCropTop;
+ job->crop[1] = AutoCropBottom;
+ job->crop[2] = AutoCropLeft;
+ job->crop[3] = AutoCropRight;
+
+
+ [self calculatePictureSizing: sender];
+ /* We call method method to change UI to reflect whether a preset is used or not*/
+ [self customSettingUsed: sender];
+}
+
+/**
+ * Registers changes made in the Picture Settings Window.
+ */
+
+- (void)pictureSettingsDidChange {
+ [self calculatePictureSizing: NULL];
+}
+
+/* Get and Display Current Pic Settings in main window */
+- (IBAction) calculatePictureSizing: (id) sender
+{
+ [fPicSettingWidth setStringValue: [NSString stringWithFormat:@"%d", fTitle->job->width]];
+ [fPicSettingHeight setStringValue: [NSString stringWithFormat:@"%d", fTitle->job->height]];
+
+ if (fTitle->job->pixel_ratio == 1)
+ {
+ int titlewidth = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3];
+ int arpwidth = fTitle->job->pixel_aspect_width;
+ int arpheight = fTitle->job->pixel_aspect_height;
+ int displayparwidth = titlewidth * arpwidth / arpheight;
+ int displayparheight = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1];
+
+ [fPicSettingWidth setStringValue: [NSString stringWithFormat:@"%d", titlewidth]];
+ [fPicSettingHeight setStringValue: [NSString stringWithFormat:@"%d", displayparheight]];
+ [fPicLabelPAROutputX setStringValue: @"x"];
+ [fPicSettingPARWidth setStringValue: [NSString stringWithFormat:@"%d", displayparwidth]];
+ [fPicSettingPARHeight setStringValue: [NSString stringWithFormat:@"%d", displayparheight]];
+
+ fTitle->job->keep_ratio = 0;
+ }
+ else
+ {
+ [fPicLabelPAROutputX setStringValue: @""];
+ [fPicSettingPARWidth setStringValue: @""];
+ [fPicSettingPARHeight setStringValue: @""];
+ }
+
+ /* Set ON/Off values for the deinterlace/keep aspect ratio according to boolean */
+ if (fTitle->job->keep_ratio > 0)
+ {
+ [fPicSettingARkeep setStringValue: @"On"];
+ }
+ else
+ {
+ [fPicSettingARkeep setStringValue: @"Off"];
+ }
+ /* Detelecine */
+ if ([fPictureController detelecine]) {
+ [fPicSettingDetelecine setStringValue: @"Yes"];
+ }
+ else {
+ [fPicSettingDetelecine setStringValue: @"No"];
+ }
+
+ /* VFR (Variable Frame Rate) */
+ if ([fPictureController vfr]) {
+ /* vfr has to set the framerate to 29.97 (ntsc video)
+ and disable the framerate popup */
+ [fVidRatePopUp selectItemAtIndex: 8];
+ [fVidRatePopUp setEnabled: NO];
+ /* We change the string of the fps popup to warn that vfr is on Framerate (FPS): */
+ [fVidRateField setStringValue: @"Framerate (VFR On):"];
+
+ }
+ else {
+ /* vfr is off, make sure the framerate popup is enabled */
+ [fVidRatePopUp setEnabled: YES];
+ /* and make sure the label for framerate is set to its default */
+ [fVidRateField setStringValue: @"Framerate (FPS):"];
+ }
+
+ /* Deinterlace */
+ if ([fPictureController deinterlace] == 0)
+ {
+ [fPicSettingDeinterlace setStringValue: @"Off"];
+ }
+ else if ([fPictureController deinterlace] == 1)
+ {
+ [fPicSettingDeinterlace setStringValue: @"Fast"];
+ }
+ else if ([fPictureController deinterlace] == 2)
+ {
+ [fPicSettingDeinterlace setStringValue: @"Slow"];
+ }
+ else if ([fPictureController deinterlace] == 3)
+ {
+ [fPicSettingDeinterlace setStringValue: @"Slower"];
+ }
+ else if ([fPictureController deinterlace] ==4)
+ {
+ [fPicSettingDeinterlace setStringValue: @"Slowest"];
+ }
+ /* Denoise */
+ if ([fPictureController denoise] == 0)
+ {
+ [fPicSettingDenoise setStringValue: @"Off"];
+ }
+ else if ([fPictureController denoise] == 1)
+ {
+ [fPicSettingDenoise setStringValue: @"Weak"];
+ }
+ else if ([fPictureController denoise] == 2)
+ {
+ [fPicSettingDenoise setStringValue: @"Medium"];
+ }
+ else if ([fPictureController denoise] == 3)
+ {
+ [fPicSettingDenoise setStringValue: @"Strong"];
+ }
+
+ /* Deblock */
+ if ([fPictureController deblock]) {
+ [fPicSettingDeblock setStringValue: @"Yes"];
+ }
+ else {
+ [fPicSettingDeblock setStringValue: @"No"];
+ }
+
+ if (fTitle->job->pixel_ratio > 0)
+ {
+ [fPicSettingPAR setStringValue: @""];
+ }
+ else
+ {
+ [fPicSettingPAR setStringValue: @"Off"];
+ }
+ /* Set the display field for crop as per boolean */
+ if (![fPictureController autoCrop])
+ {
+ [fPicSettingAutoCrop setStringValue: @"Custom"];
+ }
+ else
+ {
+ [fPicSettingAutoCrop setStringValue: @"Auto"];
+ }
+
+
+}
+
+
+#pragma mark -
+#pragma mark - Audio and Subtitles
+
+- (IBAction) setEnabledStateOfAudioMixdownControls: (id) sender
+{
+
+ /* enable/disable the mixdown text and popupbutton for audio track 1 */
+ [fAudTrack1MixPopUp setEnabled: ([fAudLang1PopUp indexOfSelectedItem] == 0) ? NO : YES];
+ [fAudTrack1MixLabel setTextColor: ([fAudLang1PopUp indexOfSelectedItem] == 0) ?
+ [NSColor disabledControlTextColor] : [NSColor controlTextColor]];
+
+ /* enable/disable the mixdown text and popupbutton for audio track 2 */
+ [fAudTrack2MixPopUp setEnabled: ([fAudLang2PopUp indexOfSelectedItem] == 0) ? NO : YES];
+ [fAudTrack2MixLabel setTextColor: ([fAudLang2PopUp indexOfSelectedItem] == 0) ?
+ [NSColor disabledControlTextColor] : [NSColor controlTextColor]];
+
+}
+
+- (IBAction) addAllAudioTracksToPopUp: (id) sender
+{
+
+ hb_list_t * list = hb_get_titles( fHandle );
+ hb_title_t * title = (hb_title_t*)
+ hb_list_item( list, [fSrcTitlePopUp indexOfSelectedItem] );
+
+ hb_audio_t * audio;
+
+ [sender removeAllItems];
+ [sender addItemWithTitle: _( @"None" )];
+ for( int i = 0; i < hb_list_count( title->list_audio ); i++ )
+ {
+ audio = (hb_audio_t *) hb_list_item( title->list_audio, i );
+ [[sender menu] addItemWithTitle:
+ [NSString stringWithCString: audio->lang]
+ action: NULL keyEquivalent: @""];
+ }
+ [sender selectItemAtIndex: 0];
+
+}
+
+- (IBAction) selectAudioTrackInPopUp: (id) sender searchPrefixString: (NSString *) searchPrefixString selectIndexIfNotFound: (int) selectIndexIfNotFound
+{
+
+ /* this method can be used to find a language, or a language-and-source-format combination, by passing in the appropriate string */
+ /* e.g. to find the first French track, pass in an NSString * of "Francais" */
+ /* e.g. to find the first English 5.1 AC3 track, pass in an NSString * of "English (AC3) (5.1 ch)" */
+ /* if no matching track is found, then selectIndexIfNotFound is used to choose which track to select instead */
+
+ if (searchPrefixString != NULL)
+ {
+
+ for( int i = 0; i < [sender numberOfItems]; i++ )
+ {
+ /* Try to find the desired search string */
+ if ([[[sender itemAtIndex: i] title] hasPrefix:searchPrefixString])
+ {
+ [sender selectItemAtIndex: i];
+ return;
+ }
+ }
+ /* couldn't find the string, so select the requested "search string not found" item */
+ /* index of 0 means select the "none" item */
+ /* index of 1 means select the first audio track */
+ [sender selectItemAtIndex: selectIndexIfNotFound];
+ }
+ else
+ {
+ /* if no search string is provided, then select the selectIndexIfNotFound item */
+ [sender selectItemAtIndex: selectIndexIfNotFound];
+ }
+
+}
+
+- (IBAction) audioTrackPopUpChanged: (id) sender
+{
+ /* utility function to call audioTrackPopUpChanged without passing in a mixdown-to-use */
+ [self audioTrackPopUpChanged: sender mixdownToUse: 0];
+}
+
+- (IBAction) audioTrackPopUpChanged: (id) sender mixdownToUse: (int) mixdownToUse
+{
+
+ /* make sure we have a selected title before continuing */
+ if (fTitle == NULL) return;
+
+ /* find out if audio track 1 or 2 was changed - this is passed to us in the tag of the sender */
+ /* the sender will have been either fAudLang1PopUp (tag = 0) or fAudLang2PopUp (tag = 1) */
+ int thisAudio = [sender tag];
+
+ /* get the index of the selected audio */
+ int thisAudioIndex = [sender indexOfSelectedItem] - 1;
+
+ /* Handbrake can't currently cope with ripping the same source track twice */
+ /* So, if this audio is also selected in the other audio track popup, set that popup's selection to "none" */
+ /* get a reference to the two audio track popups */
+ NSPopUpButton * thisAudioPopUp = (thisAudio == 1 ? fAudLang2PopUp : fAudLang1PopUp);
+ NSPopUpButton * otherAudioPopUp = (thisAudio == 1 ? fAudLang1PopUp : fAudLang2PopUp);
+ /* if the same track is selected in the other audio popup, then select "none" in that popup */
/* unless, of course, both are selected as "none!" */
if ([thisAudioPopUp indexOfSelectedItem] != 0 && [thisAudioPopUp indexOfSelectedItem] == [otherAudioPopUp indexOfSelectedItem]) {
[otherAudioPopUp selectItemAtIndex: 0];
}
-/* lets set the picture size back to the max from right after title scan
- Lets use an IBAction here as down the road we could always use a checkbox
- in the gui to easily take the user back to max. Remember, the compiler
- resolves IBActions down to -(void) during compile anyway */
-- (IBAction) revertPictureSizeToMax: (id) sender
-{
- hb_job_t * job = fTitle->job;
- /* We use the output picture width and height
- as calculated from libhb right after title is set
- in TitlePopUpChanged */
- job->width = PicOrigOutputWidth;
- job->height = PicOrigOutputHeight;
- [fPictureController setAutoCrop:YES];
- /* Here we use the auto crop values determined right after scan */
- job->crop[0] = AutoCropTop;
- job->crop[1] = AutoCropBottom;
- job->crop[2] = AutoCropLeft;
- job->crop[3] = AutoCropRight;
-
-
- [self calculatePictureSizing: sender];
- /* We call method method to change UI to reflect whether a preset is used or not*/
- [self customSettingUsed: sender];
-}
-/* Get and Display Current Pic Settings in main window */
-- (IBAction) calculatePictureSizing: (id) sender
-{
- [fPicSettingWidth setStringValue: [NSString stringWithFormat:@"%d", fTitle->job->width]];
- [fPicSettingHeight setStringValue: [NSString stringWithFormat:@"%d", fTitle->job->height]];
-
- if (fTitle->job->pixel_ratio == 1)
- {
- int titlewidth = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3];
- int arpwidth = fTitle->job->pixel_aspect_width;
- int arpheight = fTitle->job->pixel_aspect_height;
- int displayparwidth = titlewidth * arpwidth / arpheight;
- int displayparheight = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1];
-
- [fPicSettingWidth setStringValue: [NSString stringWithFormat:@"%d", titlewidth]];
- [fPicSettingHeight setStringValue: [NSString stringWithFormat:@"%d", displayparheight]];
- [fPicLabelPAROutputX setStringValue: @"x"];
- [fPicSettingPARWidth setStringValue: [NSString stringWithFormat:@"%d", displayparwidth]];
- [fPicSettingPARHeight setStringValue: [NSString stringWithFormat:@"%d", displayparheight]];
-
- fTitle->job->keep_ratio = 0;
- }
- else
- {
- [fPicLabelPAROutputX setStringValue: @""];
- [fPicSettingPARWidth setStringValue: @""];
- [fPicSettingPARHeight setStringValue: @""];
- }
-
- /* Set ON/Off values for the deinterlace/keep aspect ratio according to boolean */
- if (fTitle->job->keep_ratio > 0)
- {
- [fPicSettingARkeep setStringValue: @"On"];
- }
- else
- {
- [fPicSettingARkeep setStringValue: @"Off"];
- }
- /* Detelecine */
- if ([fPictureController detelecine]) {
- [fPicSettingDetelecine setStringValue: @"Yes"];
- }
- else {
- [fPicSettingDetelecine setStringValue: @"No"];
- }
- /* Deinterlace */
- if ([fPictureController deinterlace] == 0)
- {
- [fPicSettingDeinterlace setStringValue: @"Off"];
- }
- else if ([fPictureController deinterlace] == 1)
- {
- [fPicSettingDeinterlace setStringValue: @"Fast"];
- }
- else if ([fPictureController deinterlace] == 2)
- {
- [fPicSettingDeinterlace setStringValue: @"Slow"];
- }
- else if ([fPictureController deinterlace] == 3)
- {
- [fPicSettingDeinterlace setStringValue: @"Slower"];
- }
- else if ([fPictureController deinterlace] ==4)
- {
- [fPicSettingDeinterlace setStringValue: @"Slowest"];
- }
- /* Denoise */
- if ([fPictureController denoise] == 0)
- {
- [fPicSettingDenoise setStringValue: @"Off"];
- }
- else if ([fPictureController denoise] == 1)
- {
- [fPicSettingDenoise setStringValue: @"Weak"];
- }
- else if ([fPictureController denoise] == 2)
- {
- [fPicSettingDenoise setStringValue: @"Medium"];
- }
- else if ([fPictureController denoise] == 3)
- {
- [fPicSettingDenoise setStringValue: @"Strong"];
- }
-
- if (fTitle->job->pixel_ratio > 0)
- {
- [fPicSettingPAR setStringValue: @""];
- }
- else
- {
- [fPicSettingPAR setStringValue: @"Off"];
- }
- /* Set the display field for crop as per boolean */
- if (![fPictureController autoCrop])
- {
- [fPicSettingAutoCrop setStringValue: @"Custom"];
- }
- else
- {
- [fPicSettingAutoCrop setStringValue: @"Auto"];
- }
- /* check video framerate and turn off detelecine if necessary */
- if (fTitle->rate_base == 1126125 || [[fVidRatePopUp titleOfSelectedItem] isEqualToString: @"23.976 (NTSC Film)"])
- {
- [fPictureController setDetelecine:0];
- }
-
-
-
- /* below will trigger the preset, if selected, to be
- changed to "Custom". Lets comment out for now until
- we figure out a way to determine if the picture values
- changed modify the preset values */
- //[self customSettingUsed: sender];
-}
+#pragma mark -
+#pragma mark Open New Windows
-- (IBAction) calculateBitrate: (id) sender
+- (IBAction) openHomepage: (id) sender
{
- if( !fHandle || [fVidQualityMatrix selectedRow] != 0 || !SuccessfulScan )
- {
- return;
- }
-
- hb_list_t * list = hb_get_titles( fHandle );
- hb_title_t * title = (hb_title_t *) hb_list_item( list,
- [fSrcTitlePopUp indexOfSelectedItem] );
- hb_job_t * job = title->job;
-
- [self PrepareJob];
-
- [fVidBitrateField setIntValue: hb_calc_bitrate( job,
- [fVidTargetSizeField intValue] )];
+ [[NSWorkspace sharedWorkspace] openURL: [NSURL
+ URLWithString:@"http://handbrake.m0k.org/"]];
}
-/* Method to determine if we should change the UI
-To reflect whether or not a Preset is being used or if
-the user is using "Custom" settings by determining the sender*/
-- (IBAction) customSettingUsed: (id) sender
+- (IBAction) openForums: (id) sender
{
- if ([sender stringValue] != NULL)
- {
- /* Deselect the currently selected Preset if there is one*/
- [tableView deselectRow:[tableView selectedRow]];
- [[fPresetsActionMenu itemAtIndex:0] setEnabled: NO];
- /* Change UI to show "Custom" settings are being used */
- [fPresetSelectedDisplay setStringValue: @"Custom"];
-
- curUserPresetChosenNum = nil;
- }
-
+ [[NSWorkspace sharedWorkspace] openURL: [NSURL
+ URLWithString:@"http://handbrake.m0k.org/forum/"]];
}
-
- /* We use this method to recreate new, updated factory
- presets */
-- (IBAction)addFactoryPresets:(id)sender
+- (IBAction) openUserGuide: (id) sender
{
- /* First, we delete any existing built in presets */
- [self deleteFactoryPresets: sender];
- /* Then, we re-create new built in presets programmatically CreateIpodOnlyPreset*/
- [UserPresets addObject:[self createNormalPreset]];
- [UserPresets addObject:[self createClassicPreset]];
- [UserPresets addObject:[self createQuickTimePreset]];
- [UserPresets addObject:[self createIpodLowPreset]];
- [UserPresets addObject:[self createIpodHighPreset]];
- [UserPresets addObject:[self createAppleTVPreset]];
- [UserPresets addObject:[self createiPhonePreset]];
- [UserPresets addObject:[self createPSThreePreset]];
- [UserPresets addObject:[self createPSPPreset]];
- [UserPresets addObject:[self createFilmPreset]];
- [UserPresets addObject:[self createTelevisionPreset]];
- [UserPresets addObject:[self createAnimationPreset]];
- [UserPresets addObject:[self createBedlamPreset]];
- [UserPresets addObject:[self createDeuxSixQuatrePreset]];
- [UserPresets addObject:[self createBrokePreset]];
- [UserPresets addObject:[self createBlindPreset]];
- [UserPresets addObject:[self createCRFPreset]];
-
- [self addPreset];
+ [[NSWorkspace sharedWorkspace] openURL: [NSURL
+ URLWithString:@"http://handbrake.m0k.org/trac/wiki/HandBrakeGuide"]];
}
-- (IBAction)deleteFactoryPresets:(id)sender
-{
- //int status;
- NSEnumerator *enumerator = [UserPresets objectEnumerator];
- id tempObject;
-
- //NSNumber *index;
- NSMutableArray *tempArray;
-
-
- tempArray = [NSMutableArray array];
- /* we look here to see if the preset is we move on to the next one */
- while ( tempObject = [enumerator nextObject] )
- {
- /* if the preset is "Factory" then we put it in the array of
- presets to delete */
- if ([[tempObject objectForKey:@"Type"] intValue] == 0)
- {
- [tempArray addObject:tempObject];
- }
- }
-
- [UserPresets removeObjectsInArray:tempArray];
- [tableView reloadData];
- [self savePreset];
+/**
+ * Shows debug output window.
+ */
+- (IBAction)showDebugOutputPanel:(id)sender
+{
+ [outputPanel showOutputPanel:sender];
}
-- (IBAction) showAddPresetPanel: (id) sender
+/**
+ * Shows preferences window.
+ */
+- (IBAction) showPreferencesWindow: (id) sender
{
- /* Deselect the currently selected Preset if there is one*/
- [tableView deselectRow:[tableView selectedRow]];
+ NSWindow * window = [fPreferencesController window];
+ if (![window isVisible])
+ [window center];
- /* Populate the preset picture settings popup here */
- [fPresetNewPicSettingsPopUp removeAllItems];
- [fPresetNewPicSettingsPopUp addItemWithTitle:@"None"];
- [fPresetNewPicSettingsPopUp addItemWithTitle:@"Current"];
- [fPresetNewPicSettingsPopUp addItemWithTitle:@"Source Maximum (post source scan)"];
- [fPresetNewPicSettingsPopUp selectItemAtIndex: 0];
-
- /* Erase info from the input fields fPresetNewDesc*/
- [fPresetNewName setStringValue: @""];
- [fPresetNewDesc setStringValue: @""];
- /* Show the panel */
- [NSApp beginSheet: fAddPresetPanel modalForWindow: fWindow modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+ [window makeKeyAndOrderFront: nil];
}
-- (IBAction) closeAddPresetPanel: (id) sender
+/**
+ * Shows queue window.
+ */
+- (IBAction) showQueueWindow:(id)sender
{
- [NSApp endSheet: fAddPresetPanel];
- [fAddPresetPanel orderOut: self];
+ [fQueueController showQueueWindow:sender];
}
-- (IBAction)addUserPreset:(id)sender
-{
- if (![[fPresetNewName stringValue] length])
- NSRunAlertPanel(@"Warning!", @"You need to insert a name for the preset.", @"OK", nil , nil);
- else
- {
- /* Here we create a custom user preset */
- [UserPresets addObject:[self createPreset]];
- [self addPreset];
-
- [self closeAddPresetPanel:NULL];
- }
-}
-- (void)addPreset
-{
-
-
- /* We Sort the Presets By Factory or Custom */
- NSSortDescriptor * presetTypeDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"Type"
- ascending:YES] autorelease];
- /* We Sort the Presets Alphabetically by name */
- NSSortDescriptor * presetNameDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"PresetName"
- ascending:YES selector:@selector(caseInsensitiveCompare:)] autorelease];
- NSArray *sortDescriptors=[NSArray arrayWithObjects:presetTypeDescriptor,presetNameDescriptor,nil];
- NSArray *sortedArray=[UserPresets sortedArrayUsingDescriptors:sortDescriptors];
- [UserPresets setArray:sortedArray];
-
-
- /* We Reload the New Table data for presets */
- [tableView reloadData];
- /* We save all of the preset data here */
- [self savePreset];
-}
-- (IBAction)insertPreset:(id)sender
-{
- int index = [tableView selectedRow];
- [UserPresets insertObject:[self createPreset] atIndex:index];
- [tableView reloadData];
- [self savePreset];
+- (IBAction) toggleDrawer:(id)sender {
+ [fPresetDrawer toggle:self];
}
-- (NSDictionary *)createPreset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:[fPresetNewName stringValue] forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:[fPresetNewPicSettingsPopUp indexOfSelectedItem]] forKey:@"UsesPictureSettings"];
- /* Get New Preset Description from the field in the AddPresetPanel*/
- [preset setObject:[fPresetNewDesc stringValue] forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:[fDstFormatPopUp titleOfSelectedItem] forKey:@"FileFormat"];
- /* Chapter Markers fCreateChapterMarkers*/
- [preset setObject:[NSNumber numberWithInt:[fCreateChapterMarkers state]] forKey:@"ChapterMarkers"];
- /* Allow Mpeg4 64 bit formatting +4GB file sizes */
- [preset setObject:[NSNumber numberWithInt:[fDstMpgLargeFileCheck state]] forKey:@"Mp4LargeFile"];
- /* Codecs */
- [preset setObject:[fDstCodecsPopUp titleOfSelectedItem] forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:[fAdvancedOptions optionsString] forKey:@"x264Option"];
-
- [preset setObject:[NSNumber numberWithInt:[fVidQualityMatrix selectedRow]] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:[fVidRatePopUp titleOfSelectedItem] forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:[fVidGrayscaleCheck state]] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
- /* Turbo 2 pass Encoding fVidTurboPassCheck*/
- [preset setObject:[NSNumber numberWithInt:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
- /*Picture Settings*/
- hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:fTitle->job->width] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:fTitle->job->keep_ratio] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:[fPictureController deinterlace]] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:fTitle->job->pixel_ratio] forKey:@"PicturePAR"];
- [preset setObject:[NSNumber numberWithInt:[fPictureController detelecine]] forKey:@"PictureDetelecine"];
- [preset setObject:[NSNumber numberWithInt:[fPictureController denoise]] forKey:@"PictureDenoise"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:[fPictureController autoCrop]] forKey:@"PictureAutoCrop"];
-
- [preset setObject:[NSNumber numberWithInt:job->crop[0]] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:job->crop[1]] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:job->crop[2]] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:job->crop[3]] forKey:@"PictureRightCrop"];
-
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:[fAudRatePopUp titleOfSelectedItem] forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:[fAudBitratePopUp titleOfSelectedItem] forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:[fSubPopUp titleOfSelectedItem] forKey:@"Subtitles"];
-
-
- [preset autorelease];
- return preset;
-
-}
+/**
+ * Shows Picture Settings Window.
+ */
-- (NSDictionary *)createIpodLowPreset
+- (IBAction) showPicturePanel: (id) sender
{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"iPod Low-Rez" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's low resolution settings for the iPod. Optimized for great playback on the iPod screen, with smaller file size." forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"700" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:320] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
-
- [preset autorelease];
- return preset;
-
+ hb_list_t * list = hb_get_titles( fHandle );
+ hb_title_t * title = (hb_title_t *) hb_list_item( list,
+ [fSrcTitlePopUp indexOfSelectedItem] );
+ [fPictureController showPanelInWindow:fWindow forTitle:title];
}
+#pragma mark -
+#pragma mark Preset Table View Methods
-- (NSDictionary *)createIpodHighPreset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"iPod High-Rez" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's high resolution settings for the iPod. Good video quality, great for viewing on a TV using your iPod" forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
-
- [preset autorelease];
- return preset;
-
-}
-
-- (NSDictionary *)createAppleTVPreset
+- (IBAction)tableViewSelected:(id)sender
{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"AppleTV" forKey:@"PresetName"];
- /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for the AppleTV. Provides a good balance between quality and file size, and optimizes performance." forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String (We can use this to tweak the appleTV output)*/
- [preset setObject:@"bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2:cabac=0" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /*Picture Settings*/
- /* For AppleTV we only want to retain UsesMaxPictureSettings
- which depend on the source dvd picture settings, so we don't
- record the current dvd's picture info since it will vary from
- source to source*/
- //hb_job_t * job = fTitle->job;
- //hb_job_t * job = title->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+ /* Since we cannot disable the presets tableView in terms of clickability
+ we will use the enabled state of the add presets button to determine whether
+ or not clicking on a preset will do anything */
+ if ([fPresetsAdd isEnabled])
+ {
+ if ([tableView selectedRow] >= 0)
+ {
+ /* we get the chosen preset from the UserPresets array */
+ chosenPreset = [UserPresets objectAtIndex:[tableView selectedRow]];
+ curUserPresetChosenNum = [sender selectedRow];
+ /* we set the preset display field in main window here */
+ [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
+ if ([[chosenPreset objectForKey:@"Default"] intValue] == 1)
+ {
+ [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@ (Default)",[chosenPreset valueForKey:@"PresetName"]]];
+ }
+ else
+ {
+ [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
+ }
+ /* File Format */
+ [fDstFormatPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileFormat"]]];
+ [self formatPopUpChanged: NULL];
+
+ /* Chapter Markers*/
+ [fCreateChapterMarkers setState:[[chosenPreset objectForKey:@"ChapterMarkers"] intValue]];
+ /* Allow Mpeg4 64 bit formatting +4GB file sizes */
+ [fDstMpgLargeFileCheck setState:[[chosenPreset objectForKey:@"Mp4LargeFile"] intValue]];
+ /* Codecs */
+ [fDstCodecsPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]]];
+ [self codecsPopUpChanged: NULL];
+ /* Video encoder */
+ [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]]];
+
+ /* We can show the preset options here in the gui if we want to
+ so we check to see it the user has specified it in the prefs */
+ [fAdvancedOptions setOptions: [NSString stringWithFormat:[chosenPreset valueForKey:@"x264Option"]]];
+
+ /* Lets run through the following functions to get variables set there */
+ [self encoderPopUpChanged: NULL];
+
+ [self calculateBitrate: NULL];
+
+ /* Video quality */
+ [fVidQualityMatrix selectCellAtRow:[[chosenPreset objectForKey:@"VideoQualityType"] intValue] column:0];
+
+ [fVidTargetSizeField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoTargetSize"]]];
+ [fVidBitrateField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoAvgBitrate"]]];
+
+ [fVidQualitySlider setFloatValue: [[chosenPreset valueForKey:@"VideoQualitySlider"] floatValue]];
+ [self videoMatrixChanged: NULL];
+
+ /* Video framerate */
+ /* For video preset video framerate, we want to make sure that Same as source does not conflict with the
+ detected framerate in the fVidRatePopUp so we use index 0*/
+ if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoFramerate"]] isEqualToString: @"Same as source"])
+ {
+ [fVidRatePopUp selectItemAtIndex: 0];
+ }
+ else
+ {
+ [fVidRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoFramerate"]]];
+ }
+
+ /* GrayScale */
+ [fVidGrayscaleCheck setState:[[chosenPreset objectForKey:@"VideoGrayScale"] intValue]];
+
+ /* 2 Pass Encoding */
+ [fVidTwoPassCheck setState:[[chosenPreset objectForKey:@"VideoTwoPass"] intValue]];
+ [self twoPassCheckboxChanged: NULL];
+ /* Turbo 1st pass for 2 Pass Encoding */
+ [fVidTurboPassCheck setState:[[chosenPreset objectForKey:@"VideoTurboTwoPass"] intValue]];
+
+ /*Audio*/
+
+ /* Audio Sample Rate*/
+ [fAudRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
+ /* Audio Bitrate Rate*/
+ [fAudBitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+ /*Subtitles*/
+ [fSubPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Subtitles"]]];
+
+ /* Picture Settings */
+ /* Look to see if we apply these here in objectForKey:@"UsesPictureSettings"] */
+ if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] > 0)
+ {
+ hb_job_t * job = fTitle->job;
+ /* Check to see if we should use the max picture setting for the current title*/
+ if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] == 2 || [[chosenPreset objectForKey:@"UsesMaxPictureSettings"] intValue] == 1)
+ {
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [self revertPictureSizeToMax: NULL];
+ job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
+ if (job->keep_ratio == 1)
+ {
+ hb_fix_aspect( job, HB_KEEP_WIDTH );
+ if( job->height > fTitle->height )
+ {
+ job->height = fTitle->height;
+ hb_fix_aspect( job, HB_KEEP_HEIGHT );
+ }
+ }
+ job->pixel_ratio = [[chosenPreset objectForKey:@"PicturePAR"] intValue];
+ }
+ else // Apply picture settings that were in effect at the time the preset was saved
+ {
+ job->width = [[chosenPreset objectForKey:@"PictureWidth"] intValue];
+ job->height = [[chosenPreset objectForKey:@"PictureHeight"] intValue];
+ job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
+ if (job->keep_ratio == 1)
+ {
+ hb_fix_aspect( job, HB_KEEP_WIDTH );
+ if( job->height > fTitle->height )
+ {
+ job->height = fTitle->height;
+ hb_fix_aspect( job, HB_KEEP_HEIGHT );
+ }
+ }
+ job->pixel_ratio = [[chosenPreset objectForKey:@"PicturePAR"] intValue];
+
+ /* Filters */
+ [fPictureController setDeinterlace:[[chosenPreset objectForKey:@"PictureDeinterlace"] intValue]];
+
+ if ([chosenPreset objectForKey:@"PictureDetelecine"])
+ {
+ [fPictureController setDetelecine:[[chosenPreset objectForKey:@"PictureDetelecine"] intValue]];
+ }
+ if ([chosenPreset objectForKey:@"PictureDenoise"])
+ {
+ [fPictureController setDenoise:[[chosenPreset objectForKey:@"PictureDenoise"] intValue]];
+ }
+ if ([chosenPreset objectForKey:@"PictureDeblock"])
+ {
+ [fPictureController setDeblock:[[chosenPreset objectForKey:@"PictureDeblock"] intValue]];
+ }
+ /* If Cropping is set to custom, then recall all four crop values from
+ when the preset was created and apply them */
+ if ([[chosenPreset objectForKey:@"PictureAutoCrop"] intValue] == 0)
+ {
+ [fPictureController setAutoCrop:NO];
+
+ /* Here we use the custom crop values saved at the time the preset was saved */
+ job->crop[0] = [[chosenPreset objectForKey:@"PictureTopCrop"] intValue];
+ job->crop[1] = [[chosenPreset objectForKey:@"PictureBottomCrop"] intValue];
+ job->crop[2] = [[chosenPreset objectForKey:@"PictureLeftCrop"] intValue];
+ job->crop[3] = [[chosenPreset objectForKey:@"PictureRightCrop"] intValue];
+
+ }
+ else /* if auto crop has been saved in preset, set to auto and use post scan auto crop */
+ {
+ [fPictureController setAutoCrop:YES];
+ /* Here we use the auto crop values determined right after scan */
+ job->crop[0] = AutoCropTop;
+ job->crop[1] = AutoCropBottom;
+ job->crop[2] = AutoCropLeft;
+ job->crop[3] = AutoCropRight;
+
+ }
+ }
+ [self calculatePictureSizing: NULL];
+ }
+
+
+ [[fPresetsActionMenu itemAtIndex:0] setEnabled: YES];
+ }
+}
+}
+
+
+
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+{
+ return [UserPresets count];
+}
+
+/* we use this to determine display characteristics for
+each table cell based on content currently only used to
+show the built in presets in a blue font. */
+- (void)tableView:(NSTableView *)aTableView
+ willDisplayCell:(id)aCell
+ forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
+{
+ NSDictionary *userPresetDict = [UserPresets objectAtIndex:rowIndex];
+ NSFont *txtFont;
+ NSColor *fontColor;
+ NSColor *shadowColor;
+ txtFont = [NSFont systemFontOfSize: [NSFont smallSystemFontSize]];
+ /* First, we check to see if its a selected row, if so, we use white since its highlighted in blue */
+ if ([[aTableView selectedRowIndexes] containsIndex:rowIndex] && ([tableView editedRow] != rowIndex))
+ {
+
+ fontColor = [NSColor whiteColor];
+ shadowColor = [NSColor colorWithDeviceRed:(127.0/255.0) green:(140.0/255.0) blue:(160.0/255.0) alpha:1.0];
+ }
+ else
+ {
+ /* We set the properties of unselected rows */
+ /* if built-in preset (defined by "type" == 0) we use a blue font */
+ if ([[userPresetDict objectForKey:@"Type"] intValue] == 0)
+ {
+ fontColor = [NSColor blueColor];
+ }
+ else // User created preset, use a black font
+ {
+ fontColor = [NSColor blackColor];
+ }
+ shadowColor = nil;
+ }
+ /* We check to see if this is the HB default, if so, color it appropriately */
+ if (!presetUserDefault && presetHbDefault && rowIndex == presetHbDefault)
+ {
+ txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
+ }
+ /* We check to see if this is the User Specified default, if so, color it appropriately */
+ if (presetUserDefault && rowIndex == presetUserDefault)
+ {
+ txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
+ }
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
+ [aCell setTextColor:fontColor];
+ [aCell setFont:txtFont];
+ /* this shadow stuff (like mail app) for some reason looks crappy, commented out
+ temporarily in case we want to resurrect it */
+ /*
+ NSShadow *shadow = [[NSShadow alloc] init];
+ NSSize shadowOffset = { width: 1.0, height: -1.5};
+ [shadow setShadowOffset:shadowOffset];
+ [shadow setShadowColor:shadowColor];
+ [shadow set];
+ */
+}
+/* Method to display tooltip with the description for each preset, if available */
+- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell
+ rect:(NSRectPointer)aRect tableColumn:(NSTableColumn *)aTableColumn
+ row:(int)rowIndex mouseLocation:(NSPoint)aPos
+{
+ /* initialize the tooltip contents variable */
+ NSString *loc_tip;
+ /* if there is a description for the preset, we show it in the tooltip */
+ if ([[UserPresets objectAtIndex:rowIndex] valueForKey:@"PresetDescription"])
+ {
+ loc_tip = [NSString stringWithFormat: @"%@",[[UserPresets objectAtIndex:rowIndex] valueForKey:@"PresetDescription"]];
+ return (loc_tip);
+ }
+ else
+ {
+ loc_tip = @"No description available";
+ }
+ return (loc_tip);
- [preset autorelease];
- return preset;
+}
+- (id)tableView:(NSTableView *)aTableView
+ objectValueForTableColumn:(NSTableColumn *)aTableColumn
+ row:(int)rowIndex
+{
+id theRecord, theValue;
+
+ theRecord = [UserPresets objectAtIndex:rowIndex];
+ theValue = [theRecord objectForKey:[aTableColumn identifier]];
+ return theValue;
}
-- (NSDictionary *)createPSThreePreset
+// NSTableDataSource method that we implement to edit values directly in the table...
+- (void)tableView:(NSTableView *)aTableView
+ setObjectValue:(id)anObject
+ forTableColumn:(NSTableColumn *)aTableColumn
+ row:(int)rowIndex
{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"PS3" forKey:@"PresetName"];
- /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for the Sony PlayStation 3." forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String (We can use this to tweak the appleTV output)*/
- [preset setObject:@"level=41:subme=5:me=umh" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+ id theRecord;
+
+ theRecord = [UserPresets objectAtIndex:rowIndex];
+ [theRecord setObject:anObject forKey:@"PresetName"];
+ /* We Sort the Presets By Factory or Custom */
+ NSSortDescriptor * presetTypeDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"Type"
+ ascending:YES] autorelease];
+ /* We Sort the Presets Alphabetically by name */
+ NSSortDescriptor * presetNameDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"PresetName"
+ ascending:YES selector:@selector(caseInsensitiveCompare:)] autorelease];
+ NSArray *sortDescriptors=[NSArray arrayWithObjects:presetTypeDescriptor,presetNameDescriptor,nil];
+ NSArray *sortedArray=[UserPresets sortedArrayUsingDescriptors:sortDescriptors];
+ [UserPresets setArray:sortedArray];
+ /* We Reload the New Table data for presets */
+ [tableView reloadData];
+ /* We save all of the preset data here */
+ [self savePreset];
+}
+
+
+
+
+#pragma mark -
+#pragma mark Manage Presets
+
+- (void) loadPresets {
+ /* We declare the default NSFileManager into fileManager */
+ NSFileManager * fileManager = [NSFileManager defaultManager];
+ /*We define the location of the user presets file */
+ UserPresetsFile = @"~/Library/Application Support/HandBrake/UserPresets.plist";
+ UserPresetsFile = [[UserPresetsFile stringByExpandingTildeInPath]retain];
+ /* We check for the presets.plist */
+ if ([fileManager fileExistsAtPath:UserPresetsFile] == 0)
+ {
+ [fileManager createFileAtPath:UserPresetsFile contents:nil attributes:nil];
+ }
+
+ UserPresets = [[NSMutableArray alloc] initWithContentsOfFile:UserPresetsFile];
+ if (nil == UserPresets)
+ {
+ UserPresets = [[NSMutableArray alloc] init];
+ [self addFactoryPresets:NULL];
+ }
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+}
+
+
+- (IBAction) showAddPresetPanel: (id) sender
+{
+ /* Deselect the currently selected Preset if there is one*/
+ [tableView deselectRow:[tableView selectedRow]];
+
+ /* Populate the preset picture settings popup here */
+ [fPresetNewPicSettingsPopUp removeAllItems];
+ [fPresetNewPicSettingsPopUp addItemWithTitle:@"None"];
+ [fPresetNewPicSettingsPopUp addItemWithTitle:@"Current"];
+ [fPresetNewPicSettingsPopUp addItemWithTitle:@"Source Maximum (post source scan)"];
+ [fPresetNewPicSettingsPopUp selectItemAtIndex: 0];
- /*Picture Settings*/
- /* For PS3 we only want to retain UsesMaxPictureSettings
- which depend on the source dvd picture settings, so we don't
- record the current dvd's picture info since it will vary from
- source to source*/
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+ /* Erase info from the input fields fPresetNewDesc*/
+ [fPresetNewName setStringValue: @""];
+ [fPresetNewDesc setStringValue: @""];
+ /* Show the panel */
+ [NSApp beginSheet: fAddPresetPanel modalForWindow: fWindow modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+}
+
+- (IBAction) closeAddPresetPanel: (id) sender
+{
+ [NSApp endSheet: fAddPresetPanel];
+ [fAddPresetPanel orderOut: self];
+}
+
+- (IBAction)addUserPreset:(id)sender
+{
+ if (![[fPresetNewName stringValue] length])
+ NSRunAlertPanel(@"Warning!", @"You need to insert a name for the preset.", @"OK", nil , nil);
+ else
+ {
+ /* Here we create a custom user preset */
+ [UserPresets addObject:[self createPreset]];
+ [self addPreset];
+
+ [self closeAddPresetPanel:NULL];
+ }
+}
+- (void)addPreset
+{
+
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
+ /* We Sort the Presets By Factory or Custom */
+ NSSortDescriptor * presetTypeDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"Type"
+ ascending:YES] autorelease];
+ /* We Sort the Presets Alphabetically by name */
+ NSSortDescriptor * presetNameDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"PresetName"
+ ascending:YES selector:@selector(caseInsensitiveCompare:)] autorelease];
+ NSArray *sortDescriptors=[NSArray arrayWithObjects:presetTypeDescriptor,presetNameDescriptor,nil];
+ NSArray *sortedArray=[UserPresets sortedArrayUsingDescriptors:sortDescriptors];
+ [UserPresets setArray:sortedArray];
+
+ /* We Reload the New Table data for presets */
+ [tableView reloadData];
+ /* We save all of the preset data here */
+ [self savePreset];
+}
- [preset autorelease];
- return preset;
-
+- (IBAction)insertPreset:(id)sender
+{
+ int index = [tableView selectedRow];
+ [UserPresets insertObject:[self createPreset] atIndex:index];
+ [tableView reloadData];
+ [self savePreset];
}
-- (NSDictionary *)createPSPPreset
+
+- (NSDictionary *)createPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"PSP" forKey:@"PresetName"];
- /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ [preset setObject:[fPresetNewName stringValue] forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for the Sony PlayStation Portable." forKey:@"PresetDescription"];
+ [preset setObject:[NSNumber numberWithInt:[fPresetNewPicSettingsPopUp indexOfSelectedItem]] forKey:@"UsesPictureSettings"];
+ /* Get New Preset Description from the field in the AddPresetPanel*/
+ [preset setObject:[fPresetNewDesc stringValue] forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ [preset setObject:[fDstFormatPopUp titleOfSelectedItem] forKey:@"FileFormat"];
+ /* Chapter Markers fCreateChapterMarkers*/
+ [preset setObject:[NSNumber numberWithInt:[fCreateChapterMarkers state]] forKey:@"ChapterMarkers"];
+ /* Allow Mpeg4 64 bit formatting +4GB file sizes */
+ [preset setObject:[NSNumber numberWithInt:[fDstMpgLargeFileCheck state]] forKey:@"Mp4LargeFile"];
/* Codecs */
- [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
+ [preset setObject:[fDstCodecsPopUp titleOfSelectedItem] forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
- /* x264 Option String (We can use this to tweak the appleTV output)*/
- [preset setObject:@"" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:[fAdvancedOptions optionsString] forKey:@"x264Option"];
+
+ [preset setObject:[NSNumber numberWithInt:[fVidQualityMatrix selectedRow]] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1024" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source is selected
+ {
+ [preset setObject:[NSString stringWithFormat: @"Same as source"] forKey:@"VideoFramerate"];
+ }
+ else // we can record the actual titleOfSelectedItem
+ {
+ [preset setObject:[fVidRatePopUp titleOfSelectedItem] forKey:@"VideoFramerate"];
+ }
/* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ [preset setObject:[NSNumber numberWithInt:[fVidGrayscaleCheck state]] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
+ [preset setObject:[NSNumber numberWithInt:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
+ /* Turbo 2 pass Encoding fVidTurboPassCheck*/
+ [preset setObject:[NSNumber numberWithInt:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
/*Picture Settings*/
- /* For PS3 we only want to retain UsesMaxPictureSettings
- which depend on the source dvd picture settings, so we don't
- record the current dvd's picture info since it will vary from
- source to source*/
+ hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:@"368" forKey:@"PictureWidth"];
- [preset setObject:@"208" forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:fTitle->job->width] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:fTitle->job->keep_ratio] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:[fPictureController deinterlace]] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:fTitle->job->pixel_ratio] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:[fPictureController detelecine]] forKey:@"PictureDetelecine"];
+ [preset setObject:[NSNumber numberWithInt:[fPictureController denoise]] forKey:@"PictureDenoise"];
+ [preset setObject:[NSNumber numberWithInt:[fPictureController deblock]] forKey:@"PictureDeblock"];
+
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+ [preset setObject:[NSNumber numberWithInt:[fPictureController autoCrop]] forKey:@"PictureAutoCrop"];
+
+ [preset setObject:[NSNumber numberWithInt:job->crop[0]] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:job->crop[1]] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:job->crop[2]] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:job->crop[3]] forKey:@"PictureRightCrop"];
/*Audio*/
/* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ [preset setObject:[fAudRatePopUp titleOfSelectedItem] forKey:@"AudioSampleRate"];
/* Audio Bitrate Rate*/
- [preset setObject:@"128" forKey:@"AudioBitRate"];
+ [preset setObject:[fAudBitratePopUp titleOfSelectedItem] forKey:@"AudioBitRate"];
/* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
+ [preset setObject:[fSubPopUp titleOfSelectedItem] forKey:@"Subtitles"];
[preset autorelease];
}
-- (NSDictionary *)createNormalPreset
+- (void)savePreset
+{
+ [UserPresets writeToFile:UserPresetsFile atomically:YES];
+ /* We get the default preset in case it changed */
+ [self getDefaultPresets: NULL];
+
+}
+
+- (IBAction)deletePreset:(id)sender
+{
+ int status;
+ NSEnumerator *enumerator;
+ NSNumber *index;
+ NSMutableArray *tempArray;
+ id tempObject;
+
+ if ( [tableView numberOfSelectedRows] == 0 )
+ return;
+ /* Alert user before deleting preset */
+ /* Comment out for now, tie to user pref eventually */
+
+ //NSBeep();
+ status = NSRunAlertPanel(@"Warning!", @"Are you sure that you want to delete the selected preset?", @"OK", @"Cancel", nil);
+
+ if ( status == NSAlertDefaultReturn ) {
+ enumerator = [tableView selectedRowEnumerator];
+ tempArray = [NSMutableArray array];
+
+ while ( (index = [enumerator nextObject]) ) {
+ tempObject = [UserPresets objectAtIndex:[index intValue]];
+ [tempArray addObject:tempObject];
+ }
+
+ [UserPresets removeObjectsInArray:tempArray];
+ [tableView reloadData];
+ [self savePreset];
+ }
+}
+
+#pragma mark -
+#pragma mark Manage Default Preset
+
+- (IBAction)getDefaultPresets:(id)sender
+{
+ int i = 0;
+ NSEnumerator *enumerator = [UserPresets objectEnumerator];
+ id tempObject;
+ while (tempObject = [enumerator nextObject])
+ {
+ NSDictionary *thisPresetDict = tempObject;
+ if ([[thisPresetDict objectForKey:@"Default"] intValue] == 1) // 1 is HB default
+ {
+ presetHbDefault = i;
+ }
+ if ([[thisPresetDict objectForKey:@"Default"] intValue] == 2) // 2 is User specified default
+ {
+ presetUserDefault = i;
+ }
+ i++;
+ }
+}
+
+- (IBAction)setDefaultPreset:(id)sender
+{
+ int i = 0;
+ NSEnumerator *enumerator = [UserPresets objectEnumerator];
+ id tempObject;
+ /* First make sure the old user specified default preset is removed */
+ while (tempObject = [enumerator nextObject])
+ {
+ /* make sure we are not removing the default HB preset */
+ if ([[[UserPresets objectAtIndex:i] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
+ {
+ [[UserPresets objectAtIndex:i] setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ }
+ i++;
+ }
+ /* Second, go ahead and set the appropriate user specfied preset */
+ /* we get the chosen preset from the UserPresets array */
+ if ([[[UserPresets objectAtIndex:[tableView selectedRow]] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
+ {
+ [[UserPresets objectAtIndex:[tableView selectedRow]] setObject:[NSNumber numberWithInt:2] forKey:@"Default"];
+ }
+ presetUserDefault = [tableView selectedRow];
+
+ /* We save all of the preset data here */
+ [self savePreset];
+ /* We Reload the New Table data for presets */
+ [tableView reloadData];
+}
+
+- (IBAction)selectDefaultPreset:(id)sender
+{
+ /* if there is a user specified default, we use it */
+ if (presetUserDefault)
+ {
+ [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetUserDefault] byExtendingSelection:NO];
+ [self tableViewSelected:NULL];
+ }
+ else if (presetHbDefault) //else we use the built in default presetHbDefault
+ {
+ [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetHbDefault] byExtendingSelection:NO];
+ [self tableViewSelected:NULL];
+ }
+}
+
+
+#pragma mark -
+#pragma mark Manage Built In Presets
+
+
+- (IBAction)deleteFactoryPresets:(id)sender
+{
+ //int status;
+ NSEnumerator *enumerator = [UserPresets objectEnumerator];
+ id tempObject;
+
+ //NSNumber *index;
+ NSMutableArray *tempArray;
+
+
+ tempArray = [NSMutableArray array];
+ /* we look here to see if the preset is we move on to the next one */
+ while ( tempObject = [enumerator nextObject] )
+ {
+ /* if the preset is "Factory" then we put it in the array of
+ presets to delete */
+ if ([[tempObject objectForKey:@"Type"] intValue] == 0)
+ {
+ [tempArray addObject:tempObject];
+ }
+ }
+
+ [UserPresets removeObjectsInArray:tempArray];
+ [tableView reloadData];
+ [self savePreset];
+
+}
+
+ /* We use this method to recreate new, updated factory
+ presets */
+- (IBAction)addFactoryPresets:(id)sender
{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Normal" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's normal, default settings." forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"ref=2:bframes=2:subme=5:me=umh" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
-
- /*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
-
- [preset autorelease];
- return preset;
-
+ /* First, we delete any existing built in presets */
+ [self deleteFactoryPresets: sender];
+ /* Then, we re-create new built in presets programmatically CreateIpodOnlyPreset*/
+ [UserPresets addObject:[self createNormalPreset]];
+ [UserPresets addObject:[self createClassicPreset]];
+ [UserPresets addObject:[self createQuickTimePreset]];
+ [UserPresets addObject:[self createIpodLowPreset]];
+ [UserPresets addObject:[self createIpodHighPreset]];
+ [UserPresets addObject:[self createAppleTVPreset]];
+ [UserPresets addObject:[self createiPhonePreset]];
+ [UserPresets addObject:[self createPSThreePreset]];
+ [UserPresets addObject:[self createPSPPreset]];
+ [UserPresets addObject:[self createFilmPreset]];
+ [UserPresets addObject:[self createTelevisionPreset]];
+ [UserPresets addObject:[self createAnimationPreset]];
+ [UserPresets addObject:[self createBedlamPreset]];
+ [UserPresets addObject:[self createDeuxSixQuatrePreset]];
+ [UserPresets addObject:[self createBrokePreset]];
+ [UserPresets addObject:[self createBlindPreset]];
+ [UserPresets addObject:[self createCRFPreset]];
+
+ [self addPreset];
}
-- (NSDictionary *)createClassicPreset
+#pragma mark -
+#pragma mark Built In Preset Definitions
+/* These NSDictionary Buit In Preset definitions contain all of the settings for one built in preset */
+- (NSDictionary *)createIpodLowPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Classic" forKey:@"PresetName"];
+ [preset setObject:@"iPod Low-Rez" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's traditional, faster, lower-quality settings." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's low resolution settings for the iPod. Optimized for great playback on the iPod screen, with smaller file size." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Codecs */
- [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
+ [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:@"keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"700" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
//hb_job_t * job = fTitle->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:320] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
}
-- (NSDictionary *)createFilmPreset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Film" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for feature films." forKey:@"PresetDescription"];
- /* File Format */
- [preset setObject:@"MKV file" forKey:@"FileFormat"];
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
- /* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip" forKey:@"x264Option"];
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
-
- /*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /*Audio*/
- /* Audio Sample Rate*/
- [preset setObject:@"48" forKey:@"AudioSampleRate"];
- /* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
-
- [preset autorelease];
- return preset;
-
-}
-- (NSDictionary *)createTelevisionPreset
+- (NSDictionary *)createIpodHighPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Television" forKey:@"PresetName"];
+ [preset setObject:@"iPod High-Rez" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for video from television." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's high resolution settings for the iPod. Good video quality, great for viewing on a TV using your iPod" forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Codecs */
[preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip" forKey:@"x264Option"];
+ [preset setObject:@"keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1300" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
//hb_job_t * job = fTitle->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
}
-- (NSDictionary *)createAnimationPreset
+- (NSDictionary *)createAppleTVPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Animation" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:@"AppleTV" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for cartoons, anime, and CGI." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's settings for the AppleTV. Provides a good balance between quality and file size, and optimizes performance." forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
+ /* Codecs */
[preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
[preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2" forKey:@"x264Option"];
+ /* x264 Option String (We can use this to tweak the appleTV output)*/
+ [preset setObject:@"bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2:cabac=0" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
+ /* For AppleTV we only want to retain UsesMaxPictureSettings
+ which depend on the source dvd picture settings, so we don't
+ record the current dvd's picture info since it will vary from
+ source to source*/
//hb_job_t * job = fTitle->job;
+ //hb_job_t * job = title->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
}
-- (NSDictionary *)createQuickTimePreset
+- (NSDictionary *)createPSThreePreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"QuickTime" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:@"PS3" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's high quality settings for use with QuickTime. It can be slow, so use it when the Normal preset doesn't look good enough." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's settings for the Sony PlayStation 3." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
+ /* Codecs */
[preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
[preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip" forKey:@"x264Option"];
+ /* x264 Option String (We can use this to tweak the appleTV output)*/
+ [preset setObject:@"level=41:subme=5:me=umh" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
+ /* For PS3 we only want to retain UsesMaxPictureSettings
+ which depend on the source dvd picture settings, so we don't
+ record the current dvd's picture info since it will vary from
+ source to source*/
/* Use Max Picture settings for whatever the dvd is.*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
return preset;
}
-
-- (NSDictionary *)createBedlamPreset
+- (NSDictionary *)createPSPPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Bedlam" forKey:@"PresetName"];
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:@"PSP" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings maxed out for slowest encoding and highest quality. Use at your own risk. So slow it's not just insane...it's a trip to the looney bin." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's settings for the Sony PlayStation Portable." forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
- /* Codecs */
- [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ /* Codecs */
+ [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
- /* x264 Option String */
- [preset setObject:@"ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1" forKey:@"x264Option"];
+ [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
+ /* x264 Option String (We can use this to tweak the appleTV output)*/
+ [preset setObject:@"" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"1024" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
- //hb_job_t * job = fTitle->job;
- /* Basic Picture Settings */
+ /* For PS3 we only want to retain UsesMaxPictureSettings
+ which depend on the source dvd picture settings, so we don't
+ record the current dvd's picture info since it will vary from
+ source to source*/
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:@"368" forKey:@"PictureWidth"];
+ [preset setObject:@"208" forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
/* Audio Sample Rate*/
[preset setObject:@"48" forKey:@"AudioSampleRate"];
/* Audio Bitrate Rate*/
- [preset setObject:@"160" forKey:@"AudioBitRate"];
+ [preset setObject:@"128" forKey:@"AudioBitRate"];
/* Subtitles*/
[preset setObject:@"None" forKey:@"Subtitles"];
}
-- (NSDictionary *)createiPhonePreset
+- (NSDictionary *)createNormalPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"iPhone" forKey:@"PresetName"];
+ [preset setObject:@"Normal" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Default"];
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's settings for the iPhone." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's normal, default settings." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
/* Codecs */
[preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1" forKey:@"x264Option"];
+ [preset setObject:@"ref=2:bframes=2:subme=5:me=umh" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"960" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
/*Picture Settings*/
//hb_job_t * job = fTitle->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:480] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
/* Audio Sample Rate*/
[preset setObject:@"48" forKey:@"AudioSampleRate"];
/* Audio Bitrate Rate*/
- [preset setObject:@"128" forKey:@"AudioBitRate"];
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
/* Subtitles*/
[preset setObject:@"None" forKey:@"Subtitles"];
}
-- (NSDictionary *)createDeuxSixQuatrePreset
+- (NSDictionary *)createClassicPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Deux Six Quatre" forKey:@"PresetName"];
+ [preset setObject:@"Classic" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for true high profile x264 quality. A good balance of quality and speed, based on community standards found in the wild. This preset will give you a much better sense of x264's capabilities than vanilla main profile." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's traditional, faster, lower-quality settings." forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
/* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
/* Codecs */
- [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
//hb_job_t * job = fTitle->job;
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
}
-- (NSDictionary *)createBrokePreset
+- (NSDictionary *)createFilmPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Broke" forKey:@"PresetName"];
+ [preset setObject:@"Film" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for people without a lot of money to waste on hard drives. Tries to maximize quality for burning to CDs, so you can party like it's 1999." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's preset for feature films." forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ [preset setObject:@"MKV file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Codecs */
- [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
+ [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
/* Video encoder */
[preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
+ [preset setObject:@"ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip" forKey:@"x264Option"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoQualityType"];
- [preset setObject:@"695" forKey:@"VideoTargetSize"];
- [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
//hb_job_t * job = fTitle->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
/* Audio Sample Rate*/
[preset setObject:@"48" forKey:@"AudioSampleRate"];
/* Audio Bitrate Rate*/
- [preset setObject:@"128" forKey:@"AudioBitRate"];
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
/* Subtitles*/
[preset setObject:@"None" forKey:@"Subtitles"];
}
-- (NSDictionary *)createBlindPreset
+- (NSDictionary *)createTelevisionPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Blind" forKey:@"PresetName"];
+ [preset setObject:@"Television" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for impatient people who don't care about picture quality." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's settings for video from television." forKey:@"PresetDescription"];
/* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ [preset setObject:@"MKV file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Codecs */
- [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
- [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:@"ref=3:mixed-refs:bframes=16:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip" forKey:@"x264Option"];
/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"512" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"1300" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
/*Picture Settings*/
//hb_job_t * job = fTitle->job;
/* Basic Picture Settings */
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:512] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
/* Audio Sample Rate*/
[preset setObject:@"48" forKey:@"AudioSampleRate"];
/* Audio Bitrate Rate*/
- [preset setObject:@"128" forKey:@"AudioBitRate"];
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
/* Subtitles*/
[preset setObject:@"None" forKey:@"Subtitles"];
}
-- (NSDictionary *)createCRFPreset
+- (NSDictionary *)createAnimationPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Constant Quality Rate" forKey:@"PresetName"];
+ [preset setObject:@"Animation" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
/*Set whether or not this is default, at creation set to 0*/
/*Get the whether or not to apply pic settings in the AddPresetPanel*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
/* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for consistently excellent quality in one pass, with the downside of entirely unpredictable file sizes and bitrates." forKey:@"PresetDescription"];
+ [preset setObject:@"HandBrake's settings for cartoons, anime, and CGI." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MKV file" forKey:@"FileFormat"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Codecs */
- [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
/* Video encoder */
[preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh" forKey:@"x264Option"];
+ [preset setObject:@"ref=5:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2" forKey:@"x264Option"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
- [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+ [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
/* Video framerate */
[preset setObject:@"Same as source" forKey:@"VideoFramerate"];
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
/* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTurboTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
/*Picture Settings*/
//hb_job_t * job = fTitle->job;
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
}
-
-- (IBAction)deletePreset:(id)sender
-{
- int status;
- NSEnumerator *enumerator;
- NSNumber *index;
- NSMutableArray *tempArray;
- id tempObject;
-
- if ( [tableView numberOfSelectedRows] == 0 )
- return;
- /* Alert user before deleting preset */
- /* Comment out for now, tie to user pref eventually */
-
- //NSBeep();
- status = NSRunAlertPanel(@"Warning!", @"Are you sure that you want to delete the selected preset?", @"OK", @"Cancel", nil);
-
- if ( status == NSAlertDefaultReturn ) {
- enumerator = [tableView selectedRowEnumerator];
- tempArray = [NSMutableArray array];
-
- while ( (index = [enumerator nextObject]) ) {
- tempObject = [UserPresets objectAtIndex:[index intValue]];
- [tempArray addObject:tempObject];
- }
-
- [UserPresets removeObjectsInArray:tempArray];
- [tableView reloadData];
- [self savePreset];
- }
-}
-
-- (IBAction)getDefaultPresets:(id)sender
-{
- int i = 0;
- NSEnumerator *enumerator = [UserPresets objectEnumerator];
- id tempObject;
- while (tempObject = [enumerator nextObject])
- {
- NSDictionary *thisPresetDict = tempObject;
- if ([[thisPresetDict objectForKey:@"Default"] intValue] == 1) // 1 is HB default
- {
- presetHbDefault = i;
- }
- if ([[thisPresetDict objectForKey:@"Default"] intValue] == 2) // 2 is User specified default
- {
- presetUserDefault = i;
- }
- i++;
- }
-}
-
-- (IBAction)setDefaultPreset:(id)sender
+- (NSDictionary *)createQuickTimePreset
{
- int i = 0;
- NSEnumerator *enumerator = [UserPresets objectEnumerator];
- id tempObject;
- /* First make sure the old user specified default preset is removed */
- while (tempObject = [enumerator nextObject])
- {
- /* make sure we are not removing the default HB preset */
- if ([[[UserPresets objectAtIndex:i] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
- {
- [[UserPresets objectAtIndex:i] setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
- }
- i++;
- }
- /* Second, go ahead and set the appropriate user specfied preset */
- /* we get the chosen preset from the UserPresets array */
- if ([[[UserPresets objectAtIndex:[tableView selectedRow]] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
- {
- [[UserPresets objectAtIndex:[tableView selectedRow]] setObject:[NSNumber numberWithInt:2] forKey:@"Default"];
- }
- presetUserDefault = [tableView selectedRow];
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"QuickTime" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's high quality settings for use with QuickTime. It can be slow, so use it when the Normal preset doesn't look good enough." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:subme=5:analyse=all:trellis=1:no-fast-pskip" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
- /* We save all of the preset data here */
- [self savePreset];
- /* We Reload the New Table data for presets */
- [tableView reloadData];
-}
-- (IBAction)selectDefaultPreset:(id)sender
-{
- /* if there is a user specified default, we use it */
- if (presetUserDefault)
- {
- [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetUserDefault] byExtendingSelection:NO];
- [self tableViewSelected:NULL];
- }
- else if (presetHbDefault) //else we use the built in default presetHbDefault
- {
- [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetHbDefault] byExtendingSelection:NO];
- [self tableViewSelected:NULL];
- }
+ [preset autorelease];
+ return preset;
+
}
-- (IBAction)tableViewSelected:(id)sender
+- (NSDictionary *)createBedlamPreset
{
- /* Since we cannot disable the presets tableView in terms of clickability
- we will use the enabled state of the add presets button to determine whether
- or not clicking on a preset will do anything */
- if ([fPresetsAdd isEnabled])
- {
- if ([tableView selectedRow] >= 0)
- {
- /* we get the chosen preset from the UserPresets array */
- chosenPreset = [UserPresets objectAtIndex:[tableView selectedRow]];
- curUserPresetChosenNum = [sender selectedRow];
- /* we set the preset display field in main window here */
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
- if ([[chosenPreset objectForKey:@"Default"] intValue] == 1)
- {
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@ (Default)",[chosenPreset valueForKey:@"PresetName"]]];
- }
- else
- {
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
- }
- /* File Format */
- [fDstFormatPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileFormat"]]];
- [self formatPopUpChanged: NULL];
-
- /* Chapter Markers*/
- [fCreateChapterMarkers setState:[[chosenPreset objectForKey:@"ChapterMarkers"] intValue]];
- /* Allow Mpeg4 64 bit formatting +4GB file sizes */
- [fDstMpgLargeFileCheck setState:[[chosenPreset objectForKey:@"Mp4LargeFile"] intValue]];
- /* Codecs */
- [fDstCodecsPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]]];
- [self codecsPopUpChanged: NULL];
- /* Video encoder */
- [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]]];
-
- /* We can show the preset options here in the gui if we want to
- so we check to see it the user has specified it in the prefs */
- [fAdvancedOptions setOptions: [NSString stringWithFormat:[chosenPreset valueForKey:@"x264Option"]]];
-
- /* Lets run through the following functions to get variables set there */
- [self encoderPopUpChanged: NULL];
-
- [self calculateBitrate: NULL];
-
- /* Video quality */
- [fVidQualityMatrix selectCellAtRow:[[chosenPreset objectForKey:@"VideoQualityType"] intValue] column:0];
-
- [fVidTargetSizeField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoTargetSize"]]];
- [fVidBitrateField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoAvgBitrate"]]];
-
- [fVidQualitySlider setFloatValue: [[chosenPreset valueForKey:@"VideoQualitySlider"] floatValue]];
- [self videoMatrixChanged: NULL];
-
- /* Video framerate */
- [fVidRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoFramerate"]]];
-
- /* GrayScale */
- [fVidGrayscaleCheck setState:[[chosenPreset objectForKey:@"VideoGrayScale"] intValue]];
-
- /* 2 Pass Encoding */
- [fVidTwoPassCheck setState:[[chosenPreset objectForKey:@"VideoTwoPass"] intValue]];
- [self twoPassCheckboxChanged: NULL];
- /* Turbo 1st pass for 2 Pass Encoding */
- [fVidTurboPassCheck setState:[[chosenPreset objectForKey:@"VideoTurboTwoPass"] intValue]];
-
- /*Audio*/
-
- /* Audio Sample Rate*/
- [fAudRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
- /* Audio Bitrate Rate*/
- [fAudBitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
- /*Subtitles*/
- [fSubPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Subtitles"]]];
-
- /* Picture Settings */
- /* Look to see if we apply these here in objectForKey:@"UsesPictureSettings"] */
- if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] > 0)
- {
- hb_job_t * job = fTitle->job;
- /* Check to see if we should use the max picture setting for the current title*/
- if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] == 2 || [[chosenPreset objectForKey:@"UsesMaxPictureSettings"] intValue] == 1)
- {
- /* Use Max Picture settings for whatever the dvd is.*/
- [self revertPictureSizeToMax: NULL];
- job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
- if (job->keep_ratio == 1)
- {
- hb_fix_aspect( job, HB_KEEP_WIDTH );
- if( job->height > fTitle->height )
- {
- job->height = fTitle->height;
- hb_fix_aspect( job, HB_KEEP_HEIGHT );
- }
- }
- job->pixel_ratio = [[chosenPreset objectForKey:@"PicturePAR"] intValue];
- }
- else // Apply picture settings that were in effect at the time the preset was saved
- {
- job->width = [[chosenPreset objectForKey:@"PictureWidth"] intValue];
- job->height = [[chosenPreset objectForKey:@"PictureHeight"] intValue];
- job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
- if (job->keep_ratio == 1)
- {
- hb_fix_aspect( job, HB_KEEP_WIDTH );
- if( job->height > fTitle->height )
- {
- job->height = fTitle->height;
- hb_fix_aspect( job, HB_KEEP_HEIGHT );
- }
- }
- job->pixel_ratio = [[chosenPreset objectForKey:@"PicturePAR"] intValue];
- [fPictureController setDeinterlace:[[chosenPreset objectForKey:@"PictureDeinterlace"] intValue]];
-
- if ([chosenPreset objectForKey:@"PictureDetelecine"])
- {
- [fPictureController setDetelecine:[[chosenPreset objectForKey:@"PictureDetelecine"] intValue]];
- }
- if ([chosenPreset objectForKey:@"PictureDenoise"])
- {
- [fPictureController setDenoise:[[chosenPreset objectForKey:@"PictureDenoise"] intValue]];
- }
- /* If Cropping is set to custom, then recall all four crop values from
- when the preset was created and apply them */
- if ([[chosenPreset objectForKey:@"PictureAutoCrop"] intValue] == 0)
- {
- [fPictureController setAutoCrop:NO];
-
- /* Here we use the custom crop values saved at the time the preset was saved */
- job->crop[0] = [[chosenPreset objectForKey:@"PictureTopCrop"] intValue];
- job->crop[1] = [[chosenPreset objectForKey:@"PictureBottomCrop"] intValue];
- job->crop[2] = [[chosenPreset objectForKey:@"PictureLeftCrop"] intValue];
- job->crop[3] = [[chosenPreset objectForKey:@"PictureRightCrop"] intValue];
-
- }
- else /* if auto crop has been saved in preset, set to auto and use post scan auto crop */
- {
- [fPictureController setAutoCrop:YES];
- /* Here we use the auto crop values determined right after scan */
- job->crop[0] = AutoCropTop;
- job->crop[1] = AutoCropBottom;
- job->crop[2] = AutoCropLeft;
- job->crop[3] = AutoCropRight;
-
- }
- }
- [self calculatePictureSizing: NULL];
- }
-
-
- [[fPresetsActionMenu itemAtIndex:0] setEnabled: YES];
- }
-}
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"Bedlam" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's settings maxed out for slowest encoding and highest quality. Use at your own risk. So slow it's not just insane...it's a trip to the looney bin." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"ref=16:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
+
+
+ [preset autorelease];
+ return preset;
+
}
+- (NSDictionary *)createiPhonePreset
+{
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"iPhone / iPod Touch" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's settings for the iPhone." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 iPod)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"960" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:480] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"128" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
+
+
+ [preset autorelease];
+ return preset;
+}
-- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+- (NSDictionary *)createDeuxSixQuatrePreset
{
- return [UserPresets count];
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"Deux Six Quatre" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's preset for true high profile x264 quality. A good balance of quality and speed, based on community standards found in the wild. This preset will give you a much better sense of x264's capabilities than vanilla main profile." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
+
+
+ [preset autorelease];
+ return preset;
+
}
-/* we use this to determine display characteristics for
-each table cell based on content currently only used to
-show the built in presets in a blue font. */
-- (void)tableView:(NSTableView *)aTableView
- willDisplayCell:(id)aCell
- forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
+- (NSDictionary *)createBrokePreset
{
- NSDictionary *userPresetDict = [UserPresets objectAtIndex:rowIndex];
- NSFont *txtFont;
- NSColor *fontColor;
- NSColor *shadowColor;
- txtFont = [NSFont systemFontOfSize: [NSFont smallSystemFontSize]];
- /* First, we check to see if its a selected row, if so, we use white since its highlighted in blue */
- if ([[aTableView selectedRowIndexes] containsIndex:rowIndex] && ([tableView editedRow] != rowIndex))
- {
-
- fontColor = [NSColor whiteColor];
- shadowColor = [NSColor colorWithDeviceRed:(127.0/255.0) green:(140.0/255.0) blue:(160.0/255.0) alpha:1.0];
- }
- else
- {
- /* We set the properties of unselected rows */
- /* if built-in preset (defined by "type" == 0) we use a blue font */
- if ([[userPresetDict objectForKey:@"Type"] intValue] == 0)
- {
- fontColor = [NSColor blueColor];
- }
- else // User created preset, use a black font
- {
- fontColor = [NSColor blackColor];
- }
- shadowColor = nil;
- }
- /* We check to see if this is the HB default, if so, color it appropriately */
- if (!presetUserDefault && presetHbDefault && rowIndex == presetHbDefault)
- {
- txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
- }
- /* We check to see if this is the User Specified default, if so, color it appropriately */
- if (presetUserDefault && rowIndex == presetUserDefault)
- {
- txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
- }
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"Broke" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's preset for people without a lot of money to waste on hard drives. Tries to maximize quality for burning to CDs, so you can party like it's 1999." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AAC Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoQualityType"];
+ [preset setObject:@"695" forKey:@"VideoTargetSize"];
+ [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
- [aCell setTextColor:fontColor];
- [aCell setFont:txtFont];
- /* this shadow stuff (like mail app) for some reason looks crappy, commented out
- temporarily in case we want to resurrect it */
- /*
- NSShadow *shadow = [[NSShadow alloc] init];
- NSSize shadowOffset = { width: 1.0, height: -1.5};
- [shadow setShadowOffset:shadowOffset];
- [shadow setShadowColor:shadowColor];
- [shadow set];
- */
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"128" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
-}
-/* Method to display tooltip with the description for each preset, if available */
-- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell
- rect:(NSRectPointer)aRect tableColumn:(NSTableColumn *)aTableColumn
- row:(int)rowIndex mouseLocation:(NSPoint)aPos
-{
- /* initialize the tooltip contents variable */
- NSString *loc_tip;
- /* if there is a description for the preset, we show it in the tooltip */
- if ([[UserPresets objectAtIndex:rowIndex] valueForKey:@"PresetDescription"])
- {
- loc_tip = [NSString stringWithFormat: @"%@",[[UserPresets objectAtIndex:rowIndex] valueForKey:@"PresetDescription"]];
- return (loc_tip);
- }
- else
- {
- loc_tip = @"No description available";
- }
- return (loc_tip);
-
-}
-- (id)tableView:(NSTableView *)aTableView
- objectValueForTableColumn:(NSTableColumn *)aTableColumn
- row:(int)rowIndex
-{
-id theRecord, theValue;
-
- theRecord = [UserPresets objectAtIndex:rowIndex];
- theValue = [theRecord objectForKey:[aTableColumn identifier]];
- return theValue;
-}
+ [preset autorelease];
+ return preset;
-// NSTableDataSource method that we implement to edit values directly in the table...
-- (void)tableView:(NSTableView *)aTableView
- setObjectValue:(id)anObject
- forTableColumn:(NSTableColumn *)aTableColumn
- row:(int)rowIndex
-{
- id theRecord;
-
- theRecord = [UserPresets objectAtIndex:rowIndex];
- [theRecord setObject:anObject forKey:@"PresetName"];
- /* We Sort the Presets By Factory or Custom */
- NSSortDescriptor * presetTypeDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"Type"
- ascending:YES] autorelease];
- /* We Sort the Presets Alphabetically by name */
- NSSortDescriptor * presetNameDescriptor=[[[NSSortDescriptor alloc] initWithKey:@"PresetName"
- ascending:YES selector:@selector(caseInsensitiveCompare:)] autorelease];
- NSArray *sortDescriptors=[NSArray arrayWithObjects:presetTypeDescriptor,presetNameDescriptor,nil];
- NSArray *sortedArray=[UserPresets sortedArrayUsingDescriptors:sortDescriptors];
- [UserPresets setArray:sortedArray];
- /* We Reload the New Table data for presets */
- [tableView reloadData];
- /* We save all of the preset data here */
- [self savePreset];
}
-- (void)savePreset
+- (NSDictionary *)createBlindPreset
{
- [UserPresets writeToFile:UserPresetsFile atomically:YES];
- /* We get the default preset in case it changed */
- [self getDefaultPresets: NULL];
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"Blind" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's preset for impatient people who don't care about picture quality." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"MPEG-4 Video / AAC Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"FFmpeg" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"512" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:512] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"128" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
+
-}
+ [preset autorelease];
+ return preset;
-- (void) controlTextDidChange: (NSNotification *) notification
-{
- [self calculateBitrate: NULL];
}
-- (IBAction) openHomepage: (id) sender
+- (NSDictionary *)createCRFPreset
{
- [[NSWorkspace sharedWorkspace] openURL: [NSURL
- URLWithString:@"http://handbrake.m0k.org/"]];
-}
+ NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+ /* Get the New Preset Name from the field in the AddPresetPanel */
+ [preset setObject:@"Constant Quality Rate" forKey:@"PresetName"];
+ /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+ /*Set whether or not this is default, at creation set to 0*/
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ /* Get the New Preset Description from the field in the AddPresetPanel */
+ [preset setObject:@"HandBrake's preset for consistently excellent quality in one pass, with the downside of entirely unpredictable file sizes and bitrates." forKey:@"PresetDescription"];
+ /* File Format */
+ [preset setObject:@"MKV file" forKey:@"FileFormat"];
+ /* Chapter Markers*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+ /* Codecs */
+ [preset setObject:@"AVC/H.264 Video / AC-3 Audio" forKey:@"FileCodecs"];
+ /* Video encoder */
+ [preset setObject:@"x264 (h.264 Main)" forKey:@"VideoEncoder"];
+ /* x264 Option String */
+ [preset setObject:@"ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh" forKey:@"x264Option"];
+ /* Video quality */
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
+ [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+ [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+
+ /* Video framerate */
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+ /* GrayScale */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+ /* 2 Pass Encoding */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTurboTwoPass"];
+
+ /*Picture Settings*/
+ //hb_job_t * job = fTitle->job;
+ /* Basic Picture Settings */
+ /* Use Max Picture settings for whatever the dvd is.*/
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ /* Set crop settings here */
+ /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+
+ /*Audio*/
+ /* Audio Sample Rate*/
+ [preset setObject:@"48" forKey:@"AudioSampleRate"];
+ /* Audio Bitrate Rate*/
+ [preset setObject:@"160" forKey:@"AudioBitRate"];
+ /* Subtitles*/
+ [preset setObject:@"None" forKey:@"Subtitles"];
+
-- (IBAction) openForums: (id) sender
-{
- [[NSWorkspace sharedWorkspace] openURL: [NSURL
- URLWithString:@"http://handbrake.m0k.org/forum/"]];
-}
-- (IBAction) openUserGuide: (id) sender
-{
- [[NSWorkspace sharedWorkspace] openURL: [NSURL
- URLWithString:@"http://handbrake.m0k.org/trac/wiki/HandBrakeGuide"]];
-}
+ [preset autorelease];
+ return preset;
-/**
- * Shows debug output window.
- */
-- (IBAction)showDebugOutputPanel:(id)sender
-{
- [outputPanel showOutputPanel:sender];
}
-/**
- * Shows preferences window modally.
- */
-- (IBAction) showPreferencesWindow: (id) sender
-{
- NSWindow * window = [fPreferencesController window];
- if (![window isVisible])
- [window center];
-
- [window makeKeyAndOrderFront: nil];
-}
-/**
- * Shows queue window.
- */
-- (IBAction) showQueueWindow:(id)sender
-{
- [fQueueController showQueueWindow:sender];
-}
-- (IBAction) toggleDrawer:(id)sender {
- [fPresetDrawer toggle:self];
-}
@end