Homepage: <http://handbrake.fr/>.
It may be used under the terms of the GNU General Public License. */
-#include "Controller.h"
-#include "a52dec/a52.h"
+#import "Controller.h"
#import "HBOutputPanelController.h"
#import "HBPreferencesController.h"
-/* Added to integrate scanning into HBController */
-#include <IOKit/IOKitLib.h>
-#include <IOKit/storage/IOMedia.h>
-#include <IOKit/storage/IODVDMedia.h>
-#include "HBDVDDetector.h"
-#include "dvdread/dvd_reader.h"
-#include "HBPresets.h"
+#import "HBDVDDetector.h"
+#import "HBPresets.h"
#define DragDropSimplePboardType @"MyCustomOutlineViewPboardType"
{
/* Init libhb with check for updates libhb style set to "0" so its ignored and lets sparkle take care of it */
fHandle = hb_init(HB_DEBUG_ALL, 0);
-
+
// Set the Growl Delegate
- [GrowlApplicationBridge setGrowlDelegate: self];
+ [GrowlApplicationBridge setGrowlDelegate: self];
/* Init others controllers */
[fPictureController SetHandle: fHandle];
[fQueueController setHandle: fHandle];
[fQueueController setHBController: self];
-
+
fChapterTitlesDelegate = [[ChapterTitles alloc] init];
[fChapterTable setDataSource:fChapterTitlesDelegate];
[fChapterTable setDelegate:fChapterTitlesDelegate];
-
+
/* Call UpdateUI every 1/2 sec */
- [[NSRunLoop currentRunLoop] addTimer: [NSTimer
- scheduledTimerWithTimeInterval: 0.5 target: self
- selector: @selector( updateUI: ) userInfo: NULL repeats: YES]
- forMode: NSEventTrackingRunLoopMode];
-
+ [[NSRunLoop currentRunLoop] addTimer:[NSTimer
+ scheduledTimerWithTimeInterval:0.5 target:self
+ selector:@selector(updateUI:) userInfo:nil 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];
-
+
/* Show Browse Sources Window ASAP */
- [self performSelectorOnMainThread: @selector(browseSources:)
- withObject: NULL waitUntilDone: NO];
+ [self performSelectorOnMainThread:@selector(browseSources:)
+ withObject:nil waitUntilDone:NO];
}
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication *) app
/* Initialize currentScanCount so HB can use it to
evaluate successive scans */
currentScanCount = 0;
-
+
/* Init UserPresets .plist */
[self loadPresets];
-
+
fRipIndicatorShown = NO; // initially out of view in the nib
-
+
/* Show/Dont Show Presets drawer upon launch based
on user preference DefaultPresetsDrawerShow*/
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultPresetsDrawerShow"] > 0)
menuItem = [[fDstFormatPopUp menu] addItemWithTitle:@"OGM file" action: NULL keyEquivalent: @""];
[menuItem setTag: HB_MUX_OGM];
[fDstFormatPopUp selectItemAtIndex: 0];
-
- [self formatPopUpChanged: NULL];
-
- /* We enable the create chapters checkbox here since we are .mp4 */
+
+ [self formatPopUpChanged:nil];
+
+ /* We enable the create chapters checkbox here since we are .mp4 */
[fCreateChapterMarkers setEnabled: YES];
if ([fDstFormatPopUp indexOfSelectedItem] == 0 && [[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultChapterMarkers"] > 0)
{
[fCreateChapterMarkers setState: NSOnState];
}
-
-
-
-
+
+
+
+
[fDstFile2Field setStringValue: [NSString stringWithFormat:
@"%@/Desktop/Movie.mp4", NSHomeDirectory()]];
-
+
/* Video encoder */
[fVidEncoderPopUp removeAllItems];
[fVidEncoderPopUp addItemWithTitle: @"FFmpeg"];
[fVidEncoderPopUp addItemWithTitle: @"XviD"];
-
-
-
+
+
+
/* Video quality */
[fVidTargetSizeField setIntValue: 700];
[fVidBitrateField setIntValue: 1000];
-
+
[fVidQualityMatrix selectCell: fVidBitrateCell];
- [self videoMatrixChanged: NULL];
-
+ [self videoMatrixChanged:nil];
+
/* Video framerate */
[fVidRatePopUp removeAllItems];
[fVidRatePopUp addItemWithTitle: NSLocalizedString( @"Same as source", @"" )];
/* Bottom */
[fStatusField setStringValue: @""];
-
+
[self enableUI: NO];
[self setupToolbar];
-
- [fPresetsActionButton setMenu:fPresetsActionMenu];
-
+
/* We disable the Turbo 1st pass checkbox since we are not x264 */
[fVidTurboPassCheck setEnabled: NO];
[fVidTurboPassCheck setState: NSOffState];
-
-
+
+
/* lets get our default prefs here */
- [self getDefaultPresets: NULL];
+ [self getDefaultPresets:nil];
/* lets initialize the current successful scancount here to 0 */
currentSuccessfulScanCount = 0;
-
}
- (void) enableUI: (bool) b
[controls[i] setEnabled: b];
}
-
+
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];
+ [self setEnabledStateOfAudioMixdownControls:nil];
/* we also call calculatePictureSizing here to sense check if we already have vfr selected */
- [self calculatePictureSizing: NULL];
-
+ [self calculatePictureSizing:nil];
+ [self shouldEnableHttpMp4CheckBox: nil];
+
} else {
[fPresetsOutlineView setEnabled: NO];
-
+
}
- [self videoMatrixChanged: NULL];
+ [self videoMatrixChanged:nil];
[fAdvancedOptions enableUI:b];
}
- (void) updateUI: (NSTimer *) timer
{
-
hb_list_t * list;
- list = hb_get_titles( fHandle );
+ list = hb_get_titles( fHandle );
/* check to see if there has been a new scan done
this bypasses the constraints of HB_STATE_WORKING
not allowing setting a newly scanned source */
int checkScanCount = hb_get_scancount( fHandle );
- if (checkScanCount > currentScanCount)
+ if( checkScanCount > currentScanCount )
{
-
currentScanCount = checkScanCount;
[fScanIndicator setIndeterminate: NO];
[fScanIndicator setDoubleValue: 0.0];
[fScanIndicator setHidden: YES];
- [self showNewScan: NULL];
+ [self showNewScan:nil];
}
-
+
hb_state_t s;
hb_get_state( fHandle, &s );
-
-
+
switch( s.state )
{
case HB_STATE_IDLE:
break;
-#define p s.param.scanning
+#define p s.param.scanning
case HB_STATE_SCANNING:
{
[fSrcDVD2Field setStringValue: [NSString stringWithFormat:
[fScanIndicator setIndeterminate: NO];
[fScanIndicator setDoubleValue: 0.0];
[fScanIndicator setHidden: YES];
- [self showNewScan: NULL];
+ [self showNewScan:nil];
[[fWindow toolbar] validateVisibleItems];
break;
}
nasty but working cocoa solution */
/* Update text field */
string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding: task %d of %d, %.2f %%", @"" ), p.job_cur, p.job_count, 100.0 * p.progress];
-
+
if( p.seconds > -1 )
{
[string appendFormat:
NSLocalizedString( @" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", @"" ),
p.rate_cur, p.rate_avg, p.hours, p.minutes, p.seconds];
}
+
[fStatusField setStringValue: string];
-
+
/* Update slider */
progress_total = ( p.progress + p.job_cur - 1 ) / p.job_count;
[fRipIndicator setIndeterminate: NO];
[fRipIndicator setDoubleValue: 100.0 * progress_total];
-
+
// If progress bar hasn't been revealed at the bottom of the window, do
// that now. This code used to be in doRip. I moved it to here to handle
// the case where hb_start is called by HBQueueController and not from
// HBController.
- if (!fRipIndicatorShown)
+ if( !fRipIndicatorShown )
{
NSRect frame = [fWindow frame];
- if (frame.size.width <= 591)
+ if( frame.size.width <= 591 )
frame.size.width = 591;
frame.size.height += 36;
frame.origin.y -= 36;
/* Update dock icon */
[self UpdateDockIcon: progress_total];
-
+
// Has current job changed? That means the queue has probably changed as
// well so update it
[fQueueController libhbStateChanged: s];
-
+
break;
}
#undef p
-
+
#define p s.param.muxing
case HB_STATE_MUXING:
{
- NSMutableString * string;
-
/* Update text field */
- string = [NSMutableString stringWithFormat:
- NSLocalizedString( @"Muxing...", @"" )];
- [fStatusField setStringValue: string];
-
+ [fStatusField setStringValue: NSLocalizedString( @"Muxing...", @"" )];
+
/* Update slider */
[fRipIndicator setIndeterminate: YES];
[fRipIndicator startAnimation: nil];
-
+
/* Update dock icon */
[self UpdateDockIcon: 1.0];
-
+
// Pass along the info to HBQueueController
[fQueueController libhbStateChanged: s];
-
+
break;
}
#undef p
-
+
case HB_STATE_PAUSED:
[fStatusField setStringValue: NSLocalizedString( @"Paused", @"" )];
-
+
// Pass along the info to HBQueueController
[fQueueController libhbStateChanged: s];
break;
-
+
case HB_STATE_WORKDONE:
{
// HB_STATE_WORKDONE happpens as a result of libhb finishing all its jobs
/* Restore dock icon */
[self UpdateDockIcon: -1.0];
- if (fRipIndicatorShown)
+ if( fRipIndicatorShown )
{
NSRect frame = [fWindow frame];
- if (frame.size.width <= 591)
+ if( frame.size.width <= 591 )
frame.size.width = 591;
frame.size.height += -36;
frame.origin.y -= -36;
[fWindow setFrame:frame display:YES animate:YES];
fRipIndicatorShown = NO;
}
-
+
// Pass along the info to HBQueueController
[fQueueController libhbStateChanged: s];
-
+
/* Check to see if the encode state has not been cancelled
to determine if we should check for encode done notifications */
- if (fEncodeState != 2) {
- /* If Alert Window or Window and Growl has been selected */
- if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Alert Window"] ||
- [[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Alert Window And Growl"])
+ if( fEncodeState != 2 )
+ {
+ /* If Alert Window or Window and Growl has been selected */
+ if( [[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Alert Window"] ||
+ [[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Alert Window And Growl"] )
{
/*On Screen Notification*/
int status;
NSBeep();
status = NSRunAlertPanel(@"Put down that cocktail...",@"Your HandBrake encode is done!", @"OK", nil, nil);
[NSApp requestUserAttention:NSCriticalRequest];
- if ( status == NSAlertDefaultReturn )
- {
- [self enableUI: YES];
- }
}
- else
- {
- [self enableUI: YES];
- }
- /* If sleep has been selected */
- if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Put Computer To Sleep"])
- {
- /* Sleep */
- NSDictionary* errorDict;
- NSAppleEventDescriptor* returnDescriptor = NULL;
- NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
- @"tell application \"Finder\" to sleep"];
- returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
- [scriptObject release];
- [self enableUI: YES];
- }
- /* If Shutdown has been selected */
- if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Shut Down Computer"])
- {
- /* Shut Down */
- NSDictionary* errorDict;
- NSAppleEventDescriptor* returnDescriptor = NULL;
- NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
- @"tell application \"Finder\" to shut down"];
- returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
- [scriptObject release];
- [self enableUI: YES];
+ /* If sleep has been selected */
+ if( [[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Put Computer To Sleep"] )
+ {
+ /* Sleep */
+ NSDictionary* errorDict;
+ NSAppleEventDescriptor* returnDescriptor = nil;
+ NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
+ @"tell application \"Finder\" to sleep"];
+ returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
+ [scriptObject release];
+ }
+ /* If Shutdown has been selected */
+ if( [[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Shut Down Computer"] )
+ {
+ /* Shut Down */
+ NSDictionary* errorDict;
+ NSAppleEventDescriptor* returnDescriptor = nil;
+ NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
+ @"tell application \"Finder\" to shut down"];
+ returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
+ [scriptObject release];
}
-
}
- else
- {
- [self enableUI: YES];
- }
break;
}
}
-
+
/* Lets show the queue status here in the main window */
int queue_count = [fQueueController pendingCount];
- if( queue_count == 1)
+ if( queue_count == 1 )
[fQueueStatus setStringValue: NSLocalizedString( @"1 encode queued", @"" ) ];
- else if (queue_count > 1)
+ else if( queue_count > 1 )
[fQueueStatus setStringValue: [NSString stringWithFormat: NSLocalizedString( @"%d encodes queued", @"" ), queue_count]];
else
[fQueueStatus setStringValue: @""];
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"])
else
return NO;
}
-
+ }
+ if( action == @selector(setDefaultPreset:) )
+ {
+ return [fPresetsOutlineView selectedRow] != -1;
+ }
+
return YES;
}
/*Opens the source browse window, called from Open Source widgets */
- (IBAction) browseSources: (id) sender
{
- [self enableUI: NO];
NSOpenPanel * panel;
panel = [NSOpenPanel openPanel];
* purposes in the title panel
*/
/* Full Path */
- [fScanSrcTitlePathField setStringValue: [NSString stringWithFormat:@"%@", scanPath]];
+ [fScanSrcTitlePathField setStringValue:scanPath];
NSString *displayTitlescanSourceName;
-
+
if ([[scanPath lastPathComponent] isEqualToString: @"VIDEO_TS"])
{
- /* If VIDEO_TS Folder is chosen, choose its parent folder for the source display name
+ /* 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]];
+ displayTitlescanSourceName = [[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]];
+ displayTitlescanSourceName = [scanPath lastPathComponent];
}
/* we set the source display name in the title selection dialogue */
- [fSrcDsplyNameTitleScan setStringValue: [NSString stringWithFormat:@"%@", displayTitlescanSourceName]];
+ [fSrcDsplyNameTitleScan setStringValue:displayTitlescanSourceName];
/* we set the attempted scans display name for main window to displayTitlescanSourceName*/
browsedSourceDisplayName = [displayTitlescanSourceName retain];
- /* We show the actual sheet where the user specifies the title to be scanned
+ /* 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];
+ [self showSourceTitleScanPanel:nil];
}
else
{
[self writeToActivityLog:"trying to open eyetv package"];
/* We're looking at an EyeTV package - try to open its enclosed
.mpg media file */
- browsedSourceDisplayName = [[NSString stringWithFormat:@"%@",[[path stringByDeletingPathExtension] lastPathComponent]] retain];
+ browsedSourceDisplayName = [[[path stringByDeletingPathExtension] lastPathComponent] retain];
NSString *mpgname;
int n = [[path stringByAppendingString: @"/"]
completePathIntoString: &mpgname caseSensitive: NO
else if ([[path pathExtension] isEqualToString: @"dvdmedia"])
{
/* path IS a package - but dvdmedia packages can be treaded like normal directories */
- browsedSourceDisplayName = [[NSString stringWithFormat:@"%@",[[path stringByDeletingPathExtension] lastPathComponent]] retain];
+ browsedSourceDisplayName = [[[path stringByDeletingPathExtension] lastPathComponent] retain];
[self writeToActivityLog:"trying to open dvdmedia package"];
[self performScan:path scanTitleNum:0];
}
- else
+ else
{
/* The package is not an eyetv package, so we do not call performScan */
[self writeToActivityLog:"unable to open package"];
}
}
- else // path is not a package, so we treat it as a dvd parent folder or VIDEO_TS folder
+ else // path is not a package, so we treat it as a dvd parent folder or VIDEO_TS folder
{
/* path is not a package, so we call perform scan directly on our file */
if ([[path lastPathComponent] isEqualToString: @"VIDEO_TS"])
{
[self writeToActivityLog:"trying to open video_ts folder (video_ts folder chosen)"];
/* If VIDEO_TS Folder is chosen, choose its parent folder for the source display name*/
- browsedSourceDisplayName = [[NSString stringWithFormat:@"%@",[[path stringByDeletingLastPathComponent] lastPathComponent]] retain];
+ browsedSourceDisplayName = [[[path stringByDeletingLastPathComponent] lastPathComponent] retain];
}
else
{
[self writeToActivityLog:"trying to open video_ts folder (parent directory chosen)"];
/* if not the VIDEO_TS Folder, we can assume the chosen folder is the source name */
/* make sure we remove any path extension as this can also be an '.mpg' file */
- browsedSourceDisplayName = [[NSString stringWithFormat:@"%@",[path lastPathComponent]] retain];
+ browsedSourceDisplayName = [[path lastPathComponent] retain];
}
[self performScan:path scanTitleNum:0];
}
-
- }
-
- }
- else // User clicked Cancel in browse window
- {
- /* if we have a title loaded up */
- if ([[fSrcDVD2Field stringValue] length] > 0)
- {
- [self enableUI: YES];
+
}
+
}
}
*/
[fScanSrcTitleNumField setStringValue: @"0"];
/* Show the panel */
- [NSApp beginSheet: fScanSrcTitlePanel modalForWindow: fWindow modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+ [NSApp beginSheet:fScanSrcTitlePanel modalForWindow:fWindow modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
}
- (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 */
}
}
-
/* 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
{
BOOL cancelScanDecrypt = 0;
NSString *path = scanPath;
HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
+
+ // Notify ChapterTitles that there's no title
+ [fChapterTitlesDelegate resetWithTitle:nil];
+ [fChapterTable reloadData];
+
+ [self enableUI: NO];
+
if( [detector isVideoDVD] )
{
// The chosen path was actually on a DVD, so use the raw block
// device path instead.
path = [detector devicePath];
[self writeToActivityLog: "trying to open a physical dvd at: %s", [scanPath UTF8String]];
-
+
/* lets check for vlc here to make sure we have a dylib available to use for decrypting */
NSString *vlcPath = @"/Applications/VLC.app";
NSFileManager * fileManager = [NSFileManager defaultManager];
cancelScanDecrypt = 0;
[self writeToActivityLog: "user overrode vlc warning -trying to open physical dvd without decryption"];
}
-
+
}
else
{
/* VLC was found in /Applications so all is well, we can carry on using vlc's libdvdcss.dylib for decrypting if needed */
[self writeToActivityLog: "VLC app found for decrypting physical dvd"];
}
-
}
-
-
-
+
if (cancelScanDecrypt == 0)
{
-
/* we actually pass the scan off to libhb here */
/* If there is no title number passed to scan, we use "0"
* which causes the default behavior of a full source scan
{
[self writeToActivityLog: "scanning specifically for title: %d", scanTitleNum];
}
+
hb_scan( fHandle, [path UTF8String], scanTitleNum );
- [fSrcDVD2Field setStringValue: [NSString stringWithFormat: @"Scanning new source ..."]];
- }
- else
- {
- /* if we have a title loaded up */
- if ([[fSrcDVD2Field stringValue] length] > 0)
- {
- [self enableUI: YES];
- }
+ [fSrcDVD2Field setStringValue:@"Scanning new source ..."];
}
-
-
}
- (IBAction) showNewScan:(id)sender
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 Source Found"];
SuccessfulScan = NO;
-
+
// Notify ChapterTitles that there's no title
[fChapterTitlesDelegate resetWithTitle:nil];
[fChapterTable reloadData];
for( int i = 0; i < hb_list_count( list ); i++ )
{
title = (hb_title_t *) hb_list_item( list, i );
-
+
currentSource = [NSString stringWithUTF8String: title->name];
-
+
/*Set DVD Name at top of window with the browsedSourceDisplayName grokked right before -performScan */
- [fSrcDVD2Field setStringValue: [NSString stringWithFormat: @"%@",browsedSourceDisplayName]];
-
- /* Use the dvd name in the default output field here
+ [fSrcDVD2Field setStringValue:browsedSourceDisplayName];
+
+ /* 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"])
title->index, title->hours, title->minutes,
title->seconds]];
}
-
+
// Select the longuest title
[fSrcTitlePopUp selectItemAtIndex: indxpri];
- [self titlePopUpChanged: NULL];
-
+ [self titlePopUpChanged:nil];
+
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];
- }
+ [self selectDefaultPreset:nil];
+ /* initially set deinterlace to 0, will be overridden reset by the default preset anyway */
+ //[fPictureController setDeinterlace:0];
+
/* lets set Denoise to index 0 or "None" since this is the first scan */
- [fPictureController setDenoise:0];
+ //[fPictureController setDenoise:0];
[fPictureController setInitialPictureFilters];
}
/* If mpeg-4, then set mpeg-4 specific options like chapters and > 4gb file sizes */
- if ([fDstFormatPopUp indexOfSelectedItem] == 0)
+ if( [fDstFormatPopUp indexOfSelectedItem] == 0 )
{
/* We set the largeFileSize (64 bit formatting) variable here to allow for > 4gb files based on the format being
mpeg4 and the checkbox being checked
*Note: this will break compatibility with some target devices like iPod, etc.!!!!*/
- if ([fDstMp4LargeFileCheck state] == NSOnState)
+ if( [fDstMp4LargeFileCheck state] == NSOnState )
{
job->largeFileSize = 1;
}
job->largeFileSize = 0;
}
/* We set http optimized mp4 here */
- if ([fDstMp4HttpOptFileCheck state] == NSOnState)
+ if( [fDstMp4HttpOptFileCheck state] == NSOnState && [fDstMp4HttpOptFileCheck isEnabled] )
{
job->mp4_optimize = 1;
}
job->mp4_optimize = 0;
}
}
- if ([fDstFormatPopUp indexOfSelectedItem] == 0 || [fDstFormatPopUp indexOfSelectedItem] == 1)
+ if( [fDstFormatPopUp indexOfSelectedItem] == 0 || [fDstFormatPopUp indexOfSelectedItem] == 1 )
{
/* We set the chapter marker extraction here based on the format being
mpeg4 or mkv and the checkbox being checked */
[fDstFile2Field stringValue]] )
{
NSBeginCriticalAlertSheet( NSLocalizedString( @"File already exists", @"" ),
- NSLocalizedString( @"Cancel", @"" ), NSLocalizedString( @"Overwrite", @"" ), NULL, fWindow, self,
+ NSLocalizedString( @"Cancel", @"" ), NSLocalizedString( @"Overwrite", @"" ), nil, fWindow, self,
@selector( overwriteAddToQueueAlertDone:returnCode:contextInfo: ),
NULL, NULL, [NSString stringWithFormat:
NSLocalizedString( @"Do you want to overwrite %@?", @"" ),
[fDstFile2Field stringValue]] );
// overwriteAddToQueueAlertDone: will be called when the alert is dismissed.
}
-
+
// Warn if another pending job in the queue has the same destination path
else if ( ([fQueueController pendingJobGroupWithDestinationPath:[fDstFile2Field stringValue]] != nil)
|| ([[[fQueueController currentJobGroup] destinationPath] isEqualToString: [fDstFile2Field stringValue]]) )
{
NSBeginCriticalAlertSheet( NSLocalizedString( @"Another queued encode has specified the same destination.", @"" ),
- NSLocalizedString( @"Cancel", @"" ), NSLocalizedString( @"Overwrite", @"" ), NULL, fWindow, self,
+ NSLocalizedString( @"Cancel", @"" ), NSLocalizedString( @"Overwrite", @"" ), nil, fWindow, self,
@selector( overwriteAddToQueueAlertDone:returnCode:contextInfo: ),
NULL, NULL, [NSString stringWithFormat:
NSLocalizedString( @"Do you want to overwrite %@?", @"" ),
if( [[NSFileManager defaultManager] fileExistsAtPath:[fDstFile2Field stringValue]] )
{
NSBeginCriticalAlertSheet( NSLocalizedString( @"File already exists", @"" ),
- NSLocalizedString( @"Cancel", "" ), NSLocalizedString( @"Overwrite", @"" ), NULL, fWindow, self,
+ NSLocalizedString( @"Cancel", "" ), NSLocalizedString( @"Overwrite", @"" ), nil, fWindow, self,
@selector( overWriteAlertDone:returnCode:contextInfo: ),
NULL, NULL, [NSString stringWithFormat:
NSLocalizedString( @"Do you want to overwrite %@?", @"" ),
[fDstFile2Field stringValue]] );
-
+
// overWriteAlertDone: will be called when the alert is dismissed. It will call doRip.
}
else
{
- /* if there are no jobs in the queue, then add this one to the queue and rip
+ /* if there are no jobs in the queue, then add this one to the queue and rip
otherwise, just rip the queue */
if( hb_count( fHandle ) == 0)
{
NSBeep();
reminduser = NSRunAlertPanel(@"The computer will sleep after encoding is done.",@"You have selected to sleep the computer after encoding. To turn off sleeping, go to the HandBrake preferences.", @"OK", @"Preferences...", nil);
[NSApp requestUserAttention:NSCriticalRequest];
- if ( reminduser == NSAlertAlternateReturn )
+ if ( reminduser == NSAlertAlternateReturn )
{
- [self showPreferencesWindow:NULL];
+ [self showPreferencesWindow:nil];
}
- }
+ }
else if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AlertWhenDone"] isEqualToString: @"Shut Down Computer"])
{
/*Warn that computer will shut down after encoding*/
NSBeep();
reminduser = NSRunAlertPanel(@"The computer will shut down after encoding is done.",@"You have selected to shut down the computer after encoding. To turn off shut down, go to the HandBrake preferences.", @"OK", @"Preferences...", nil);
[NSApp requestUserAttention:NSCriticalRequest];
- if ( reminduser == NSAlertAlternateReturn )
+ if ( reminduser == NSAlertAlternateReturn )
{
- [self showPreferencesWindow:NULL];
+ [self showPreferencesWindow:nil];
}
}
[self doCancelCurrentJob]; // <- this also stops libhb
}
-
-
-
-
- (IBAction) Pause: (id) sender
{
hb_state_t s;
hb_list_t * list = hb_get_titles( fHandle );
hb_title_t * title = (hb_title_t*)
hb_list_item( list, [fSrcTitlePopUp indexOfSelectedItem] );
-
-
+
/* If Auto Naming is on. We create an output filename of dvd name - title number */
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultAutoNaming"] > 0)
+ if( [[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultAutoNaming"] > 0 && ( hb_list_count( list ) > 1 ) )
{
[fDstFile2Field setStringValue: [NSString stringWithFormat:
@"%@/%@-%d.%@", [[fDstFile2Field stringValue] stringByDeletingLastPathComponent],
- browsedSourceDisplayName,
- title->index,
+ [browsedSourceDisplayName stringByDeletingPathExtension],
+ title->index,
[[fDstFile2Field stringValue] pathExtension]]];
}
[fSrcChapterEndPopUp addItemWithTitle: [NSString
stringWithFormat: @"%d", i + 1]];
}
+
[fSrcChapterStartPopUp selectItemAtIndex: 0];
[fSrcChapterEndPopUp selectItemAtIndex:
hb_list_count( title->list_chapter ) - 1];
- [self chapterPopUpChanged: NULL];
+ [self chapterPopUpChanged:nil];
-/* Start Get and set the initial pic size for display */
+ /* Start Get and set the initial pic size for display */
hb_job_t * job = title->job;
- fTitle = title;
+ fTitle = title;
- /* Pixel Ratio Setting */
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"PixelRatio"])
- {
- job->pixel_ratio = 1 ;
- }
- else
- {
- job->pixel_ratio = 0 ;
- }
/*Set Source Size Field Here */
[fPicSettingsSrc setStringValue: [NSString stringWithFormat: @"%d x %d", fTitle->width, fTitle->height]];
subtitle->lang] action: NULL keyEquivalent: @""];
}
[fSubPopUp selectItemAtIndex: 0];
-
- [self subtitleSelectionChanged: NULL];
-
+
+ [self subtitleSelectionChanged:nil];
+
/* Update chapter table */
[fChapterTitlesDelegate resetWithTitle:title];
[fChapterTable reloadData];
-
+
/* Lets make sure there arent any erroneous audio tracks in the job list, so lets make sure its empty*/
int audiotrack_count = hb_list_count(job->list_audio);
for( int i = 0; i < audiotrack_count;i++)
hb_audio_t * temp_audio = (hb_audio_t*) hb_list_item( job->list_audio, 0 );
hb_list_rem(job->list_audio, temp_audio);
}
-
+
/* Update audio popups */
[self addAllAudioTracksToPopUp: fAudLang1PopUp];
[self addAllAudioTracksToPopUp: fAudLang2PopUp];
/* search for the first instance of our prefs default language for track 1, and set track 2 to "none" */
NSString * audioSearchPrefix = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultLanguage"];
[self selectAudioTrackInPopUp: fAudLang1PopUp searchPrefixString: audioSearchPrefix selectIndexIfNotFound: 1];
- [self selectAudioTrackInPopUp: fAudLang2PopUp searchPrefixString: NULL selectIndexIfNotFound: 0];
- [self selectAudioTrackInPopUp: fAudLang3PopUp searchPrefixString: NULL selectIndexIfNotFound: 0];
- [self selectAudioTrackInPopUp: fAudLang4PopUp searchPrefixString: NULL selectIndexIfNotFound: 0];
-
+ [self selectAudioTrackInPopUp:fAudLang2PopUp searchPrefixString:nil selectIndexIfNotFound:0];
+ [self selectAudioTrackInPopUp:fAudLang3PopUp searchPrefixString:nil selectIndexIfNotFound:0];
+ [self selectAudioTrackInPopUp:fAudLang4PopUp searchPrefixString:nil selectIndexIfNotFound:0];
+
/* changing the title may have changed the audio channels on offer, */
/* so call audioTrackPopUpChanged for both audio tracks to update the mixdown popups */
[self audioTrackPopUpChanged: fAudLang1PopUp];
[self audioTrackPopUpChanged: fAudLang2PopUp];
[self audioTrackPopUpChanged: fAudLang3PopUp];
[self audioTrackPopUpChanged: fAudLang4PopUp];
-
- /* 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];
-
+
/* we run the picture size values through calculatePictureSizing to get all picture setting information*/
- [self calculatePictureSizing: NULL];
-
+ [self calculatePictureSizing:nil];
+
/* lets call tableViewSelected to make sure that any preset we have selected is enforced after a title change */
- [self selectPreset:NULL];
-
+ [self selectPreset:nil];
}
- (IBAction) chapterPopUpChanged: (id) sender
{
-
+
/* If start chapter popup is greater than end chapter popup,
we set the end chapter popup to the same as start chapter popup */
if ([fSrcChapterStartPopUp indexOfSelectedItem] > [fSrcChapterEndPopUp indexOfSelectedItem])
break;
}
[fVidEncoderPopUp selectItemAtIndex: 0];
-
+
[self audioAddAudioTrackCodecs: fAudTrack1CodecPopUp];
[self audioAddAudioTrackCodecs: fAudTrack2CodecPopUp];
[self audioAddAudioTrackCodecs: fAudTrack3CodecPopUp];
[self audioAddAudioTrackCodecs: fAudTrack4CodecPopUp];
-
- /* FIX ME: we need to restore changing the file extension as pwer */
-
- 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 )
+
+ if( format == 0 )
+ [self autoSetM4vExtension: sender];
+ else
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:@"%@.%s", [string stringByDeletingPathExtension], ext]];
+
+ if( SuccessfulScan )
{
/* Add/replace to the correct extension */
[self audioTrackPopUpChanged: fAudLang1PopUp];
[self audioTrackPopUpChanged: fAudLang2PopUp];
[self audioTrackPopUpChanged: fAudLang3PopUp];
[self audioTrackPopUpChanged: fAudLang4PopUp];
-
- if ( [fVidEncoderPopUp selectedItem] == NULL )
+
+ if( [fVidEncoderPopUp selectedItem] == nil )
{
-
+
[fVidEncoderPopUp selectItemAtIndex:0];
- [self videoEncoderPopUpChanged: NULL];
-
+ [self videoEncoderPopUpChanged:nil];
+
/* 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 */
-
-
-
+
/* 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*/
}
}
-
- /* Lets check to see if we want to auto set the .m4v extension for mp4 */
- [self autoSetM4vExtension: sender];
- [self customSettingUsed: sender];
+ [self customSettingUsed: sender];
}
+- (IBAction) autoSetM4vExtension: (id) sender
+{
+ if ( [fDstFormatPopUp indexOfSelectedItem] )
+ return;
+ NSString * extension = @"mp4";
- /* if MP4 format and [fDstCodecsPopUp indexOfSelectedItem] > 1 we know that the audio is going to be
- * either aac + ac3 passthru, or just ac3 passthru so we need to make sure the output file extension is m4v
- * otherwise Quicktime will not play it at all */
-- (IBAction) autoSetM4vExtension: (id) sender
+ if( [[fAudTrack1CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 || [[fAudTrack2CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 ||
+ [[fAudTrack3CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 ||
+ [[fAudTrack4CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 ||
+ [fCreateChapterMarkers state] == NSOnState ||
+ [[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultMpegName"] > 0 )
+ {
+ extension = @"m4v";
+ }
+
+ if( [extension isEqualTo: [[fDstFile2Field stringValue] pathExtension]] )
+ return;
+ else
+ [fDstFile2Field setStringValue: [NSString stringWithFormat:@"%@.%@",
+ [[fDstFile2Field stringValue] stringByDeletingPathExtension], extension]];
+}
+
+- (void) shouldEnableHttpMp4CheckBox: (id) sender
{
- /*FIX ME: for this to work, we will now have to iterate through the audio list to see if ac3 in an mp4 is chosen
- * for now just comment it out.
- */
- /*
- if ([fDstFormatPopUp indexOfSelectedItem] == 0 && [fDstCodecsPopUp indexOfSelectedItem] > 1)
- {
- NSString *newpath = [[[fDstFile2Field stringValue] stringByDeletingPathExtension] stringByAppendingPathExtension: @"m4v"];
- [fDstFile2Field setStringValue: [NSString stringWithFormat:
- @"%@", newpath]];
- }
- */
+ if( [[fAudTrack1CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 || [[fAudTrack2CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 ||
+ [[fAudTrack3CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 ||
+ [[fAudTrack4CodecPopUp selectedItem] tag] == HB_ACODEC_AC3 )
+ [fDstMp4HttpOptFileCheck setEnabled: NO];
+ else
+ [fDstMp4HttpOptFileCheck setEnabled: YES];
}
+
/* 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)
+ if ([sender stringValue])
{
/* Deselect the currently selected Preset if there is one*/
[fPresetsOutlineView deselectRow:[fPresetsOutlineView selectedRow]];
- [[fPresetsActionMenu itemAtIndex:0] setEnabled: NO];
/* Change UI to show "Custom" settings are being used */
[fPresetSelectedDisplay setStringValue: @"Custom"];
-
+
curUserPresetChosenNum = nil;
}
-
}
- (void) controlTextDidChange: (NSNotification *) notification
{
- [self calculateBitrate: NULL];
+ [self calculateBitrate:nil];
}
- (IBAction) calculateBitrate: (id) sender
*/
- (void)pictureSettingsDidChange {
- [self calculatePictureSizing: NULL];
+ [self calculatePictureSizing:nil];
}
/* Get and Display Current Pic Settings in main window */
hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height);
int display_width;
display_width = output_width * output_par_width / output_par_height;
-
+
[fPicSettingsOutp setStringValue: [NSString stringWithFormat:@"%d x %d", output_width, output_height]];
[fPicSettingsAnamorphic setStringValue: [NSString stringWithFormat:@"%d x %d Loose", display_width, output_height]];
-
+
fTitle->job->keep_ratio = 0;
}
else
{
- [fPicSettingsAnamorphic setStringValue: [NSString stringWithFormat:@"Off"]];
+ [fPicSettingsAnamorphic setStringValue:@"Off"];
}
-
- /* Set ON/Off values for the deinterlace/keep aspect ratio according to boolean */
+
+ /* Set ON/Off values for the deinterlace/keep aspect ratio according to boolean */
if (fTitle->job->keep_ratio > 0)
{
[fPicSettingARkeep setStringValue: @"On"];
}
else if ([fPictureController decomb] == 1)
{
- [fPicSettingDecomb setStringValue: @"4:10:15:9:10:35:9"];
+ [fPicSettingDecomb setStringValue: @"1:2:6:9:80:16:16"];
}
else if ([fPictureController decomb] == 2)
{
- [fPicSettingDecomb setStringValue: [[NSUserDefaults standardUserDefaults] valueForKey:@"DecombCustomString"]];
- ///[[NSUserDefaults standardUserDefaults] valueForKey:@"DecombCustomString"]
+ [fPicSettingDecomb setStringValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"DecombCustomString"]];
}
-
+
/* VFR (Variable Frame Rate) */
if ([fPictureController vfr]) {
/* We change the string of the fps popup to warn that vfr is on Framerate (FPS): */
/* 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)
+
+ if (searchPrefixString)
{
for( int i = 0; i < [sender numberOfItems]; i++ )
sampleratePopUp = fAudTrack4RatePopUp;
bitratePopUp = fAudTrack4BitratePopUp;
}
-
+
/* get the index of the selected audio Track*/
int thisAudioIndex = [sender indexOfSelectedItem] - 1;
-
+
/* pointer for the hb_audio_s struct we will use later on */
hb_audio_config_t * audio;
-
+
int acodec;
/* check if the audio mixdown controls need their enabled state changing */
- [self setEnabledStateOfAudioMixdownControls: NULL];
-
+ [self setEnabledStateOfAudioMixdownControls:nil];
+
if (thisAudioIndex != -1)
{
-
+
/* get the audio */
audio = (hb_audio_config_t *) hb_list_audio_config_item( fTitle->list_audio, thisAudioIndex );// Should "fTitle" be title and be setup ?
-
+
/* actually manipulate the proper mixdowns here */
/* delete the previous audio mixdown options */
[mixdownPopUp removeAllItems];
-
+
acodec = [[audiocodecPopUp selectedItem] tag];
-
+
if (audio != NULL)
{
-
+
/* find out if our selected output audio codec supports mono and / or 6ch */
/* we also check for an input codec of AC3 or DCA,
as they are the only libraries able to do the mixdown to mono / conversion to 6-ch */
}
}
-
+ if( [fDstFormatPopUp indexOfSelectedItem] == 0 )
+ {
+ [self autoSetM4vExtension: sender];
+ [self shouldEnableHttpMp4CheckBox: sender];
+ }
}
+
- (IBAction) audioTrackMixdownChanged: (id) sender
{
/* initialize the tooltip contents variable */
NSString *loc_tip;
/* if there is a description for the preset, we show it in the tooltip */
- if ([item valueForKey:@"PresetDescription"])
+ if ([item objectForKey:@"PresetDescription"])
{
- loc_tip = [NSString stringWithFormat: @"%@",[item valueForKey:@"PresetDescription"]];
+ loc_tip = [item objectForKey:@"PresetDescription"];
return (loc_tip);
}
else
- (IBAction)selectPreset:(id)sender
{
-
+
if ([fPresetsOutlineView selectedRow] >= 0)
{
chosenPreset = [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]];
/* we set the preset display field in main window here */
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
+ [fPresetSelectedDisplay setStringValue:[chosenPreset objectForKey:@"PresetName"]];
if ([[chosenPreset objectForKey:@"Default"] intValue] == 1)
{
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@ (Default)",[chosenPreset valueForKey:@"PresetName"]]];
+ [fPresetSelectedDisplay setStringValue:[NSString stringWithFormat:@"%@ (Default)", [chosenPreset objectForKey:@"PresetName"]]];
}
else
{
- [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@",[chosenPreset valueForKey:@"PresetName"]]];
+ [fPresetSelectedDisplay setStringValue:[chosenPreset objectForKey:@"PresetName"]];
}
/* File Format */
- [fDstFormatPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileFormat"]]];
- [self formatPopUpChanged: NULL];
-
+ [fDstFormatPopUp selectItemWithTitle:[chosenPreset objectForKey:@"FileFormat"]];
+ [self formatPopUpChanged:nil];
+
/* Chapter Markers*/
[fCreateChapterMarkers setState:[[chosenPreset objectForKey:@"ChapterMarkers"] intValue]];
/* Allow Mpeg4 64 bit formatting +4GB file sizes */
[fDstMp4LargeFileCheck setState:[[chosenPreset objectForKey:@"Mp4LargeFile"] intValue]];
/* Mux mp4 with http optimization */
[fDstMp4HttpOptFileCheck setState:[[chosenPreset objectForKey:@"Mp4HttpOptimize"] intValue]];
-
+
/* Video encoder */
/* We set the advanced opt string here if applicable*/
- [fAdvancedOptions setOptions: [NSString stringWithFormat:[chosenPreset valueForKey:@"x264Option"]]];
+ [fAdvancedOptions setOptions:[chosenPreset objectForKey:@"x264Option"]];
/* We use a conditional to account for the new x264 encoder dropdown as well as presets made using legacy x264 settings*/
- if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"x264 (h.264 Main)"] ||
- [[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"x264 (h.264 iPod)"] ||
- [[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"x264"])
+ if ([[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"x264 (h.264 Main)"] ||
+ [[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"x264 (h.264 iPod)"] ||
+ [[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"x264"])
{
- [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:@"H.264 (x264)"]];
+ [fVidEncoderPopUp selectItemWithTitle:@"H.264 (x264)"];
/* special case for legacy preset to check the new fDstMp4HttpOptFileCheck checkbox to set the ipod atom */
- if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"x264 (h.264 iPod)"])
+ if ([[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"x264 (h.264 iPod)"])
{
[fDstMp4iPodFileCheck setState:NSOnState];
/* We also need to add "level=30:" to the advanced opts string to set the correct level for the iPod when
encountering a legacy preset as it used to be handled separately from the opt string*/
- [fAdvancedOptions setOptions: [NSString stringWithFormat:[@"level=30:" stringByAppendingString:[fAdvancedOptions optionsString]]]];
+ [fAdvancedOptions setOptions:[@"level=30:" stringByAppendingString:[fAdvancedOptions optionsString]]];
}
else
{
[fDstMp4iPodFileCheck setState:NSOffState];
}
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"FFmpeg"])
+ else if ([[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"FFmpeg"])
{
- [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:@"MPEG-4 (FFmpeg)"]];
+ [fVidEncoderPopUp selectItemWithTitle:@"MPEG-4 (FFmpeg)"];
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]] isEqualToString: @"XviD"])
+ else if ([[chosenPreset objectForKey:@"VideoEncoder"] isEqualToString:@"XviD"])
{
- [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:@"MPEG-4 (XviD)"]];
+ [fVidEncoderPopUp selectItemWithTitle:@"MPEG-4 (XviD)"];
}
else
{
- [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]]];
+ [fVidEncoderPopUp selectItemWithTitle:[chosenPreset objectForKey:@"VideoEncoder"]];
}
-
+
/* Lets run through the following functions to get variables set there */
- [self videoEncoderPopUpChanged: NULL];
+ [self videoEncoderPopUpChanged:nil];
/* Set the state of ipod compatible with Mp4iPodCompatible. Only for x264*/
[fDstMp4iPodFileCheck setState:[[chosenPreset objectForKey:@"Mp4iPodCompatible"] intValue]];
- [self calculateBitrate: NULL];
-
+ [self calculateBitrate:nil];
+
/* 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];
-
+
+ [fVidTargetSizeField setStringValue:[chosenPreset objectForKey:@"VideoTargetSize"]];
+ [fVidBitrateField setStringValue:[chosenPreset objectForKey:@"VideoAvgBitrate"]];
+ [fVidQualitySlider setFloatValue:[[chosenPreset objectForKey:@"VideoQualitySlider"] floatValue]];
+
+ [self videoMatrixChanged:nil];
+
/* 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"])
+ if ([[chosenPreset objectForKey:@"VideoFramerate"] isEqualToString:@"Same as source"])
{
[fVidRatePopUp selectItemAtIndex: 0];
}
else
{
- [fVidRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoFramerate"]]];
+ [fVidRatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"VideoFramerate"]];
}
-
+
/* GrayScale */
[fVidGrayscaleCheck setState:[[chosenPreset objectForKey:@"VideoGrayScale"] intValue]];
-
+
/* 2 Pass Encoding */
[fVidTwoPassCheck setState:[[chosenPreset objectForKey:@"VideoTwoPass"] intValue]];
- [self twoPassCheckboxChanged: NULL];
+ [self twoPassCheckboxChanged:nil];
/* Turbo 1st pass for 2 Pass Encoding */
[fVidTurboPassCheck setState:[[chosenPreset objectForKey:@"VideoTurboTwoPass"] intValue]];
-
+
/*Audio*/
- if ([chosenPreset valueForKey:@"FileCodecs"])
+ if ([chosenPreset objectForKey:@"FileCodecs"])
{
/* We need to handle the audio codec popup by determining what was chosen from the deprecated Codecs PopUp for past presets*/
- if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"AVC/H.264 Video / AAC + AC3 Audio"])
+ if ([[chosenPreset objectForKey:@"FileCodecs"] isEqualToString: @"AVC/H.264 Video / AAC + AC3 Audio"])
{
/* We need to address setting languages etc. here in the new multi track audio panel */
/* Track One set here */
[fAudTrack2CodecPopUp selectItemWithTitle: @"AC3 Passthru"];
[self audioTrackPopUpChanged: fAudTrack2CodecPopUp];
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"MPEG-4 Video / AAC Audio"] ||
- [[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"AVC/H.264 Video / AAC Audio"])
+ else if ([[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"MPEG-4 Video / AAC Audio"] ||
+ [[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"AVC/H.264 Video / AAC Audio"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0)
{
[self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
}
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"MPEG-4 Video / AC-3 Audio"] ||
- [[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"AVC/H.264 Video / AC-3 Audio"])
+ else if ([[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"MPEG-4 Video / AC-3 Audio"] ||
+ [[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"AVC/H.264 Video / AC-3 Audio"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0)
{
[self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
}
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"MPEG-4 Video / MP3 Audio"] ||
- [[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"AVC/H.264 Video / MP3 Audio"])
+ else if ([[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"MPEG-4 Video / MP3 Audio"] ||
+ [[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"AVC/H.264 Video / MP3 Audio"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0)
{
[self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
}
}
- else if ([[NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]] isEqualToString: @"MPEG-4 Video / Vorbis Audio"])
+ else if ([[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"MPEG-4 Video / Vorbis Audio"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0)
{
[self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
}
}
- /* We detect here if we have the old audio sample rate and if so we apply samplerate and bitrate to the existing four tracks if chosen
+ /* We detect here if we have the old audio sample rate and if so we apply samplerate and bitrate to the existing four tracks if chosen
* UNLESS the CodecPopUp is AC3 in which case the preset values are ignored in favor of rates set in audioTrackMixdownChanged*/
- if ([chosenPreset valueForKey:@"AudioSampleRate"])
+ if ([chosenPreset objectForKey:@"AudioSampleRate"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0 && [fAudTrack1CodecPopUp titleOfSelectedItem] != @"AC3 Passthru")
{
- [fAudTrack1RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
- [fAudTrack1BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+ [fAudTrack1RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioSampleRate"]];
+ [fAudTrack1BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioBitRate"]];
}
if ([fAudLang2PopUp indexOfSelectedItem] > 0 && [fAudTrack2CodecPopUp titleOfSelectedItem] != @"AC3 Passthru")
{
- [fAudTrack2RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
- [fAudTrack2BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+ [fAudTrack2RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioSampleRate"]];
+ [fAudTrack2BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioBitRate"]];
}
if ([fAudLang3PopUp indexOfSelectedItem] > 0 && [fAudTrack3CodecPopUp titleOfSelectedItem] != @"AC3 Passthru")
{
- [fAudTrack3RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
- [fAudTrack3BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+ [fAudTrack3RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioSampleRate"]];
+ [fAudTrack3BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioBitRate"]];
}
if ([fAudLang4PopUp indexOfSelectedItem] > 0 && [fAudTrack4CodecPopUp titleOfSelectedItem] != @"AC3 Passthru")
{
- [fAudTrack4RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
- [fAudTrack4BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+ [fAudTrack4RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioSampleRate"]];
+ [fAudTrack4BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"AudioBitRate"]];
}
}
/* We detect here if we have the old DRC Slider and if so we apply it to the existing four tracks if chosen */
- if ([chosenPreset valueForKey:@"AudioDRCSlider"])
+ if ([chosenPreset objectForKey:@"AudioDRCSlider"])
{
if ([fAudLang1PopUp indexOfSelectedItem] > 0)
{
- [fAudTrack1DrcSlider setFloatValue: [[chosenPreset valueForKey:@"AudioDRCSlider"] floatValue]];
+ [fAudTrack1DrcSlider setFloatValue:[[chosenPreset objectForKey:@"AudioDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack1DrcSlider];
}
if ([fAudLang2PopUp indexOfSelectedItem] > 0)
{
- [fAudTrack2DrcSlider setFloatValue: [[chosenPreset valueForKey:@"AudioDRCSlider"] floatValue]];
+ [fAudTrack2DrcSlider setFloatValue:[[chosenPreset objectForKey:@"AudioDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack2DrcSlider];
}
if ([fAudLang3PopUp indexOfSelectedItem] > 0)
{
- [fAudTrack3DrcSlider setFloatValue: [[chosenPreset valueForKey:@"AudioDRCSlider"] floatValue]];
+ [fAudTrack3DrcSlider setFloatValue:[[chosenPreset objectForKey:@"AudioDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack3DrcSlider];
}
if ([fAudLang4PopUp indexOfSelectedItem] > 0)
{
- [fAudTrack4DrcSlider setFloatValue: [[chosenPreset valueForKey:@"AudioDRCSlider"] floatValue]];
+ [fAudTrack4DrcSlider setFloatValue:[[chosenPreset objectForKey:@"AudioDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack4DrcSlider];
}
}
}
else // since there was no codecs key in the preset we know we can use new multi-audio track presets
{
- if ([chosenPreset valueForKey:@"Audio1Track"] > 0)
+ if ([chosenPreset objectForKey:@"Audio1Track"] > 0)
{
if ([fAudLang1PopUp indexOfSelectedItem] == 0)
{
[fAudLang1PopUp selectItemAtIndex: 1];
- [self audioTrackPopUpChanged: fAudLang1PopUp];
}
- [fAudTrack1CodecPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio1Encoder"]]];
+ [self audioTrackPopUpChanged: fAudLang1PopUp];
+ [fAudTrack1CodecPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio1Encoder"]];
[self audioTrackPopUpChanged: fAudTrack1CodecPopUp];
- [fAudTrack1MixPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio1Mixdown"]]];
- [fAudTrack1RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio1Samplerate"]]];
- [fAudTrack1BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio1Bitrate"]]];
- [fAudTrack1DrcSlider setFloatValue: [[chosenPreset valueForKey:@"Audio1TrackDRCSlider"] floatValue]];
+ [fAudTrack1MixPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio1Mixdown"]];
+ /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default
+ * mixdown*/
+ if ([fAudTrack1MixPopUp selectedItem] == nil)
+ {
+ [self audioTrackPopUpChanged: fAudTrack1CodecPopUp];
+ }
+ [fAudTrack1RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio1Samplerate"]];
+ /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */
+ if (![[chosenPreset objectForKey:@"Audio1Encoder"] isEqualToString:@"AC3 Passthru"])
+ {
+ [fAudTrack1BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio1Bitrate"]];
+ }
+ [fAudTrack1DrcSlider setFloatValue:[[chosenPreset objectForKey:@"Audio1TrackDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack1DrcSlider];
}
- if ([chosenPreset valueForKey:@"Audio2Track"] > 0)
+ if ([chosenPreset objectForKey:@"Audio2Track"] > 0)
{
if ([fAudLang2PopUp indexOfSelectedItem] == 0)
{
[fAudLang2PopUp selectItemAtIndex: 1];
- [self audioTrackPopUpChanged: fAudLang2PopUp];
}
- [fAudTrack2CodecPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio2Encoder"]]];
+ [self audioTrackPopUpChanged: fAudLang2PopUp];
+ [fAudTrack2CodecPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio2Encoder"]];
[self audioTrackPopUpChanged: fAudTrack2CodecPopUp];
- [fAudTrack2MixPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio2Mixdown"]]];
- [fAudTrack2RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio2Samplerate"]]];
- [fAudTrack2BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio2Bitrate"]]];
- [fAudTrack2DrcSlider setFloatValue: [[chosenPreset valueForKey:@"Audio2TrackDRCSlider"] floatValue]];
+ [fAudTrack2MixPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio2Mixdown"]];
+ /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default
+ * mixdown*/
+ if ([fAudTrack2MixPopUp selectedItem] == nil)
+ {
+ [self audioTrackPopUpChanged: fAudTrack2CodecPopUp];
+ }
+ [fAudTrack2RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio2Samplerate"]];
+ /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */
+ if (![[chosenPreset objectForKey:@"Audio2Encoder"] isEqualToString:@"AC3 Passthru"])
+ {
+ [fAudTrack2BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio2Bitrate"]];
+ }
+ [fAudTrack2DrcSlider setFloatValue:[[chosenPreset objectForKey:@"Audio2TrackDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack2DrcSlider];
}
- if ([chosenPreset valueForKey:@"Audio3Track"] > 0)
+ if ([chosenPreset objectForKey:@"Audio3Track"] > 0)
{
if ([fAudLang3PopUp indexOfSelectedItem] == 0)
{
[fAudLang3PopUp selectItemAtIndex: 1];
- [self audioTrackPopUpChanged: fAudLang3PopUp];
}
- [fAudTrack3CodecPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio3Encoder"]]];
+ [self audioTrackPopUpChanged: fAudLang3PopUp];
+ [fAudTrack3CodecPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio3Encoder"]];
[self audioTrackPopUpChanged: fAudTrack3CodecPopUp];
- [fAudTrack3MixPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio3Mixdown"]]];
- [fAudTrack3RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio3Samplerate"]]];
- [fAudTrack3BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio3Bitrate"]]];
- [fAudTrack3DrcSlider setFloatValue: [[chosenPreset valueForKey:@"Audio3TrackDRCSlider"] floatValue]];
+ [fAudTrack3MixPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio3Mixdown"]];
+ /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default
+ * mixdown*/
+ if ([fAudTrack3MixPopUp selectedItem] == nil)
+ {
+ [self audioTrackPopUpChanged: fAudTrack3CodecPopUp];
+ }
+ [fAudTrack3RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio3Samplerate"]];
+ /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */
+ if (![[chosenPreset objectForKey:@"Audio3Encoder"] isEqualToString: @"AC3 Passthru"])
+ {
+ [fAudTrack3BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio3Bitrate"]];
+ }
+ [fAudTrack3DrcSlider setFloatValue:[[chosenPreset objectForKey:@"Audio3TrackDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack3DrcSlider];
}
- if ([chosenPreset valueForKey:@"Audio4Track"] > 0)
+ if ([chosenPreset objectForKey:@"Audio4Track"] > 0)
{
if ([fAudLang4PopUp indexOfSelectedItem] == 0)
{
[fAudLang4PopUp selectItemAtIndex: 1];
- [self audioTrackPopUpChanged: fAudLang4PopUp];
}
- [fAudTrack4CodecPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio4Encoder"]]];
+ [self audioTrackPopUpChanged: fAudLang4PopUp];
+ [fAudTrack4CodecPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio4Encoder"]];
[self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
- [fAudTrack4MixPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio4Mixdown"]]];
- [fAudTrack4RatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio4Samplerate"]]];
- [fAudTrack4BitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Audio4Bitrate"]]];
- [fAudTrack4DrcSlider setFloatValue: [[chosenPreset valueForKey:@"Audio4TrackDRCSlider"] floatValue]];
+ [fAudTrack4MixPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio4Mixdown"]];
+ /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default
+ * mixdown*/
+ if ([fAudTrack4MixPopUp selectedItem] == nil)
+ {
+ [self audioTrackPopUpChanged: fAudTrack4CodecPopUp];
+ }
+ [fAudTrack4RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio4Samplerate"]];
+ /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */
+ if (![[chosenPreset objectForKey:@"Audio4Encoder"] isEqualToString:@"AC3 Passthru"])
+ {
+ [fAudTrack4BitratePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio4Bitrate"]];
+ }
+ [fAudTrack4DrcSlider setFloatValue:[[chosenPreset objectForKey:@"Audio4TrackDRCSlider"] floatValue]];
[self audioDRCSliderChanged: fAudTrack4DrcSlider];
}
-
-
+
+
}
-
+
+ /* We now cleanup any extra audio tracks that may be previously set if we need to, we do it here so we don't have to
+ * duplicate any code for legacy presets.*/
+ /* First we handle the legacy Codecs crazy AVC/H.264 Video / AAC + AC3 Audio atv hybrid */
+ if ([chosenPreset objectForKey:@"FileCodecs"] && [[chosenPreset objectForKey:@"FileCodecs"] isEqualToString:@"AVC/H.264 Video / AAC + AC3 Audio"])
+ {
+ [fAudLang3PopUp selectItemAtIndex: 0];
+ [self audioTrackPopUpChanged: fAudLang3PopUp];
+ [fAudLang4PopUp selectItemAtIndex: 0];
+ [self audioTrackPopUpChanged: fAudLang4PopUp];
+ }
+ else
+ {
+ if (![chosenPreset objectForKey:@"Audio2Track"] || [chosenPreset objectForKey:@"Audio2Track"] == 0)
+ {
+ [fAudLang2PopUp selectItemAtIndex: 0];
+ [self audioTrackPopUpChanged: fAudLang2PopUp];
+ }
+ if (![chosenPreset objectForKey:@"Audio3Track"] || [chosenPreset objectForKey:@"Audio3Track"] > 0)
+ {
+ [fAudLang3PopUp selectItemAtIndex: 0];
+ [self audioTrackPopUpChanged: fAudLang3PopUp];
+ }
+ if (![chosenPreset objectForKey:@"Audio4Track"] || [chosenPreset objectForKey:@"Audio4Track"] > 0)
+ {
+ [fAudLang4PopUp selectItemAtIndex: 0];
+ [self audioTrackPopUpChanged: fAudLang4PopUp];
+ }
+ }
+
/*Subtitles*/
- [fSubPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Subtitles"]]];
+ [fSubPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Subtitles"]];
/* Forced Subtitles */
[fSubForcedCheck setState:[[chosenPreset objectForKey:@"SubtitlesForced"] intValue]];
-
+
/* Picture Settings */
/* Note: objectForKey:@"UsesPictureSettings" now refers to picture size, this encompasses:
* height, width, keep ar, anamorphic and crop settings.
if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] == 2 || [[chosenPreset objectForKey:@"UsesMaxPictureSettings"] intValue] == 1)
{
/* Use Max Picture settings for whatever the dvd is.*/
- [self revertPictureSizeToMax: NULL];
+ [self revertPictureSizeToMax:nil];
job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
if (job->keep_ratio == 1)
{
{
[fPictureController setDeblock:0];
}
-
- [self calculatePictureSizing: NULL];
+
+ [self calculatePictureSizing:nil];
}
-
+
}
-
-
+
+
}
/* If the preset has an objectForKey:@"UsesPictureFilters", then we know it is a newer style filters preset
* and handle the filters here depending on whether or not the preset specifies applying the filter.
else
{
[fPictureController setDecomb:0];
- }
+ }
}
- [self calculatePictureSizing: NULL];
- [[fPresetsActionMenu itemAtIndex:0] setEnabled: YES];
+ [self calculatePictureSizing:nil];
}
}
UserPresetsFile = @"~/Library/Application Support/HandBrake/UserPresets.plist";
UserPresetsFile = [[UserPresetsFile stringByExpandingTildeInPath]retain];
/* We check for the presets.plist */
- if ([fileManager fileExistsAtPath:UserPresetsFile] == 0)
+ if ([fileManager fileExistsAtPath:UserPresetsFile] == 0)
{
[fileManager createFileAtPath:UserPresetsFile contents:nil attributes:nil];
}
-
+
UserPresets = [[NSMutableArray alloc] initWithContentsOfFile:UserPresetsFile];
- if (nil == UserPresets)
+ if (nil == UserPresets)
{
UserPresets = [[NSMutableArray alloc] init];
- [self addFactoryPresets:NULL];
+ [self addFactoryPresets:nil];
}
[fPresetsOutlineView reloadData];
}
[fPresetNewName setStringValue: @""];
[fPresetNewDesc setStringValue: @""];
/* Show the panel */
- [NSApp beginSheet: fAddPresetPanel modalForWindow: fWindow modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+ [NSApp beginSheet:fAddPresetPanel modalForWindow:fWindow modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
}
- (IBAction) closeAddPresetPanel: (id) sender
/* Here we create a custom user preset */
[UserPresets addObject:[self createPreset]];
[self addPreset];
-
- [self closeAddPresetPanel:NULL];
+
+ [self closeAddPresetPanel:nil];
}
}
- (void)addPreset
[preset setObject:[NSNumber numberWithInt:[fDstMp4HttpOptFileCheck state]] forKey:@"Mp4HttpOptimize"];
/* Add iPod uuid atom */
[preset setObject:[NSNumber numberWithInt:[fDstMp4iPodFileCheck state]] forKey:@"Mp4iPodCompatible"];
-
+
/* Codecs */
/* 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 */
if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source is selected
{
- [preset setObject:[NSString stringWithFormat: @"Same as source"] forKey:@"VideoFramerate"];
+ [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
}
else // we can record the actual titleOfSelectedItem
{
{
[UserPresets writeToFile:UserPresetsFile atomically:YES];
/* We get the default preset in case it changed */
- [self getDefaultPresets: NULL];
+ [self getDefaultPresets:nil];
}
if (presetUserDefault)
{
[fPresetsOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetUserDefault] byExtendingSelection:NO];
- [self selectPreset:NULL];
+ [self selectPreset:nil];
}
else if (presetHbDefault) //else we use the built in default presetHbDefault
{
[fPresetsOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetHbDefault] byExtendingSelection:NO];
- [self selectPreset:NULL];
+ [self selectPreset:nil];
}
}