From e77d2db4f0e31f0885b32e13320fc0917e180ed7 Mon Sep 17 00:00:00 2001 From: jbrjake Date: Wed, 11 Feb 2009 15:57:19 +0000 Subject: [PATCH] MacGui: Adds slider widgets for Psy-RD and Psy-Trellis to the x264 advanced tab, and rearranges the layout to fit them. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2140 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- macosx/English.lproj/AdvancedView.xib | 315 ++++++++++++++++++++++---- macosx/HBAdvancedController.h | 4 + macosx/HBAdvancedController.m | 134 ++++++++++- 3 files changed, 400 insertions(+), 53 deletions(-) diff --git a/macosx/English.lproj/AdvancedView.xib b/macosx/English.lproj/AdvancedView.xib index ac8ca5885..e3149a04c 100644 --- a/macosx/English.lproj/AdvancedView.xib +++ b/macosx/English.lproj/AdvancedView.xib @@ -2,12 +2,13 @@ 1050 - 9F33 - 658 - 949.34 + 9F2114 + 672 + 949.41 352.00 YES + YES @@ -25,7 +26,7 @@ NSApplication - + 256 YES @@ -234,7 +235,7 @@ 256 - {{407, 222}, {83, 15}} + {{407, 243}, {83, 15}} YES @@ -304,7 +305,7 @@ 256 - {{263, 142}, {142, 13}} + {{426, 157}, {37, 17}} YES @@ -320,7 +321,7 @@ 256 - {{429, 121}, {96, 13}} + {{564, 243}, {96, 13}} YES @@ -336,7 +337,7 @@ 256 - {{263, 121}, {142, 13}} + {{578, 261}, {82, 17}} YES @@ -536,7 +537,7 @@ 256 - {{263, 244}, {142, 13}} + {{263, 223}, {142, 13}} YES @@ -552,7 +553,7 @@ 256 - {{407, 243}, {83, 15}} + {{407, 222}, {83, 15}} YES @@ -622,7 +623,7 @@ 256 - {{263, 223}, {142, 13}} + {{263, 245}, {142, 13}} YES @@ -667,6 +668,22 @@ + + + 256 + {{254, 127}, {151, 26}} + + YES + + 67239424 + 71434240 + Psychovisual Rate Distortion: + + + + + + 256 @@ -772,7 +789,7 @@ 256 - {{407, 162}, {63, 15}} + {{618, 217}, {63, 15}} YES @@ -842,7 +859,7 @@ 256 - {{479, 162}, {63, 15}} + {{618, 193}, {63, 15}} YES @@ -912,7 +929,7 @@ 256 - {{263, 163}, {142, 13}} + {{554, 214}, {62, 17}} YES @@ -993,7 +1010,7 @@ 256 - {{405, 120}, {22, 16}} + {{660, 264}, {22, 16}} YES @@ -1014,7 +1031,7 @@ 256 - {{525, 120}, {22, 16}} + {{660, 242}, {22, 16}} YES @@ -1035,7 +1052,7 @@ 256 - {{407, 141}, {83, 15}} + {{463, 161}, {83, 15}} YES @@ -1197,7 +1214,7 @@ 256 - {{263, 193}, {142, 13}} + {{358, 192}, {47, 14}} YES @@ -1250,7 +1267,7 @@ 256 - {{525, 99}, {22, 16}} + {{405, 160}, {22, 16}} YES @@ -1271,7 +1288,7 @@ 256 - {{263, 100}, {262, 13}} + {{286, 162}, {119, 13}} YES @@ -1284,8 +1301,69 @@ + + + 268 + {{408, 137}, {96, 16}} + + YES + + -2079981824 + 262144 + + + + 1.000000e+00 + 0.000000e+00 + 1.000000e+00 + 0.000000e+00 + 10 + 0 + YES + NO + + + + + 256 + {{306, 115}, {99, 14}} + + YES + + 67239424 + 71434240 + Psychovisual Trellis + + + + + + + + + 268 + {{408, 113}, {96, 16}} + + YES + + -2079981824 + 262144 + + + + 1.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 10 + 0 + YES + NO + + {700, 290} + NSView NSResponder @@ -1769,6 +1847,54 @@ 257 + + + fX264optPsyRDLabel + + + + 386 + + + + fX264optPsyRDSlider + + + + 387 + + + + fX264optPsyTrellisLabel + + + + 392 + + + + fX264optPsyTrellisSlider + + + + 393 + + + + X264AdvancedOptionsChanged: + + + + 394 + + + + X264AdvancedOptionsChanged: + + + + 395 + @@ -1809,9 +1935,6 @@ - - - @@ -1825,23 +1948,30 @@ - - - - - - - - + + + + + + + + + + + + + + + x264 @@ -2714,6 +2844,62 @@ + + 382 + + + YES + + + + + + 383 + + + + + 384 + + + YES + + + + + + 385 + + + + + 388 + + + YES + + + + + + 389 + + + YES + + + + + + 390 + + + + + 391 + + + @@ -2798,9 +2984,19 @@ 38.IBAttributePlaceholdersKey 38.IBPluginDependency 38.ImportedFromIB2 + 382.IBAttributePlaceholdersKey + 382.IBPluginDependency + 382.ImportedFromIB2 + 384.IBPluginDependency + 385.IBPluginDependency + 388.IBAttributePlaceholdersKey + 388.IBPluginDependency + 388.ImportedFromIB2 + 389.IBPluginDependency 39.IBAttributePlaceholdersKey 39.IBPluginDependency 39.ImportedFromIB2 + 390.IBPluginDependency 40.IBPluginDependency 40.ImportedFromIB2 41.IBPluginDependency @@ -3096,6 +3292,31 @@ cnQgb2YgdGhlIGltYWdlLg com.apple.InterfaceBuilder.CocoaPlugin + + YES + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin ToolTip @@ -3107,6 +3328,7 @@ cnQgb2YgdGhlIGltYWdlLg com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3180,7 +3402,7 @@ Lg com.apple.InterfaceBuilder.CocoaPlugin - {{0, 724}, {700, 290}} + {{319, 354}, {700, 290}} com.apple.InterfaceBuilder.CocoaPlugin {{692, 501}, {700, 290}} @@ -3559,7 +3781,7 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA - 381 + 395 @@ -3579,6 +3801,7 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA YES YES + X264AdvancedOptionsAnimate: X264AdvancedOptionsChanged: X264AdvancedOptionsSet: X264AdvancedOptionsSetCurrentSettings: @@ -3590,6 +3813,7 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA id id id + id @@ -3606,13 +3830,9 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA fX264optAnalysePopUp fX264optBPyramidLabel fX264optBPyramidSwitch - fX264optBRDOLabel - fX264optBRDOSwitch fX264optBetaDeblockPopUp fX264optBframesLabel fX264optBframesPopUp - fX264optBiMELabel - fX264optBiMESwitch fX264optCabacLabel fX264optCabacSwitch fX264optDeblockLabel @@ -3628,6 +3848,10 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA fX264optNfpskipSwitch fX264optNodctdcmtLabel fX264optNodctdcmtSwitch + fX264optPsyRDLabel + fX264optPsyRDSlider + fX264optPsyTrellisLabel + fX264optPsyTrellisSlider fX264optRefLabel fX264optRefPopUp fX264optSubmeLabel @@ -3651,16 +3875,12 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA NSPopUpButton NSTextField NSButton - NSTextField - NSButton NSPopUpButton NSTextField NSPopUpButton NSTextField NSButton NSTextField - NSButton - NSTextField NSTextField NSPopUpButton NSTextField @@ -3674,6 +3894,10 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA NSTextField NSButton NSTextField + NSSlider + NSTextField + NSSlider + NSTextField NSPopUpButton NSTextField NSPopUpButton @@ -3698,13 +3922,6 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA - - NSObject - - IBProjectSource - PictureController.h - - NSObject @@ -3715,7 +3932,7 @@ Yml0cmF0ZSB0byBhY2hpZXZlIHRoZSBzYW1lIHF1YWxpdHkgYXMgQ0FCQUMuA 0 - ../../HandBrake.xcodeproj + ../HandBrake.xcodeproj 3 diff --git a/macosx/HBAdvancedController.h b/macosx/HBAdvancedController.h index 3af5b5be7..8b3638284 100644 --- a/macosx/HBAdvancedController.h +++ b/macosx/HBAdvancedController.h @@ -49,6 +49,10 @@ IBOutlet NSButton * fX264opt8x8dctSwitch; IBOutlet NSTextField * fX264optCabacLabel; IBOutlet NSButton * fX264optCabacSwitch; + IBOutlet NSSlider * fX264optPsyRDSlider; + IBOutlet NSTextField * fX264optPsyRDLabel; + IBOutlet NSSlider * fX264optPsyTrellisSlider; + IBOutlet NSTextField * fX264optPsyTrellisLabel; } // x264 Advanced Panel Methods diff --git a/macosx/HBAdvancedController.m b/macosx/HBAdvancedController.m index c8b26159e..d211f4a2d 100644 --- a/macosx/HBAdvancedController.m +++ b/macosx/HBAdvancedController.m @@ -71,7 +71,7 @@ fX264optWeightBLabel,fX264optWeightBSwitch, fX264optBPyramidLabel,fX264optBPyramidSwitch, fX264optDirectPredLabel,fX264optDirectPredPopUp,fX264optDeblockLabel,fX264optAnalyseLabel, fX264optAnalysePopUp,fX264opt8x8dctLabel,fX264opt8x8dctSwitch,fX264optCabacLabel,fX264optCabacSwitch, - fX264optAlphaDeblockPopUp,fX264optBetaDeblockPopUp}; + fX264optAlphaDeblockPopUp,fX264optBetaDeblockPopUp, fX264optPsyRDSlider, fX264optPsyRDLabel, fX264optPsyTrellisSlider, fX264optPsyTrellisLabel }; for( i = 0; i < sizeof( controls ) / sizeof( NSControl * ); i++ ) { @@ -210,6 +210,22 @@ /* CABAC fX264opCabacSwitch */ [fX264optCabacSwitch setState:1]; + + /* PsyRDO fX264optPsyRDSlider */ + [fX264optPsyRDSlider setMinValue:0.0]; + [fX264optPsyRDSlider setMaxValue:1.0]; + [fX264optPsyRDSlider setTickMarkPosition:NSTickMarkBelow]; + [fX264optPsyRDSlider setNumberOfTickMarks:10]; + [fX264optPsyRDSlider setAllowsTickMarkValuesOnly:YES]; + [fX264optPsyRDSlider setFloatValue:1.0]; + + /* PsyTrellis fX264optPsyRDSlider */ + [fX264optPsyTrellisSlider setMinValue:0.0]; + [fX264optPsyTrellisSlider setMaxValue:1.0]; + [fX264optPsyTrellisSlider setTickMarkPosition:NSTickMarkBelow]; + [fX264optPsyTrellisSlider setNumberOfTickMarks:10]; + [fX264optPsyTrellisSlider setAllowsTickMarkValuesOnly:YES]; + [fX264optPsyTrellisSlider setFloatValue:0.0]; /* Standardize the option string */ [self X264AdvancedOptionsStandardizeOptString:nil]; @@ -373,6 +389,8 @@ - CABAC (when 0 turn off trellis) - analysis (if none, turn off 8x8dct) - refs (under 2, disable mixed-refs) + - subme (if under 6, turn off psy-rd and psy-trel) + - trellis (if 0, turn off psy-trel) */ if ( [fX264optBframesPopUp indexOfSelectedItem ] < 2) @@ -428,11 +446,10 @@ if ( [fX264optCabacSwitch state] == false) { /* Without CABAC entropy coding, trellis doesn't run. */ - [[fX264optTrellisPopUp animator] setHidden:YES]; [[fX264optTrellisLabel animator] setHidden:YES]; [fX264optTrellisPopUp selectItemAtIndex:0]; - if (sender != fX264optTrellisPopUp) + if ( (sender != fX264optTrellisPopUp) && (sender != fX264optPsyTrellisSlider) ) [[fX264optTrellisPopUp cell] performClick:self]; } else @@ -486,6 +503,52 @@ [[fX264optMERangePopUp animator] setHidden:NO]; [[fX264optMERangeLabel animator] setHidden:NO]; } + + if( [fX264optSubmePopUp indexOfSelectedItem] != 0 && [fX264optSubmePopUp indexOfSelectedItem] < 7 ) + { + /* No Psy-RDO or Psy=trel if subme < 6. */ + [[fX264optPsyRDSlider animator] setHidden:YES]; + [[fX264optPsyRDLabel animator] setHidden:YES]; + [[fX264optPsyRDSlider animator] setFloatValue:1]; + if ( (sender != fX264optPsyRDSlider) && (sender != fX264optPsyTrellisSlider) ) + [[fX264optPsyRDSlider cell] performClick:self]; + + [[fX264optPsyTrellisSlider animator] setHidden:YES]; + [[fX264optPsyTrellisLabel animator] setHidden:YES]; + [[fX264optPsyTrellisSlider animator] setFloatValue:0]; + if ( (sender != fX264optPsyTrellisSlider) && (sender != fX264optPsyRDSlider) && (sender != fX264optTrellisPopUp) ) + [[fX264optPsyTrellisSlider cell] performClick:self]; + + } + else + { + [[fX264optPsyRDSlider animator] setHidden:NO]; + [[fX264optPsyRDLabel animator] setHidden:NO]; + + if( [fX264optTrellisPopUp indexOfSelectedItem] >= 2 ) + { + [[fX264optPsyTrellisSlider animator] setHidden:NO]; + [[fX264optPsyTrellisLabel animator] setHidden:NO]; + } + } + + if( [fX264optTrellisPopUp indexOfSelectedItem] < 2 ) + { + /* No Psy-trellis without trellis. */ + [[fX264optPsyTrellisSlider animator] setHidden:YES]; + [[fX264optPsyTrellisLabel animator] setHidden:YES]; + [[fX264optPsyTrellisSlider animator] setFloatValue:0]; + if ( (sender != fX264optTrellisPopUp) && (sender != fX264optPsyTrellisSlider) ) + [[fX264optPsyTrellisSlider cell] performClick:self]; + } + else + { + if( [fX264optSubmePopUp indexOfSelectedItem] == 0 || [fX264optSubmePopUp indexOfSelectedItem] >= 7 ) + { + [[fX264optPsyTrellisSlider animator] setHidden:NO]; + [[fX264optPsyTrellisLabel animator] setHidden:NO]; + } + } } /** @@ -673,7 +736,20 @@ if ([optName isEqualToString:@"cabac"]) { [fX264optCabacSwitch setState:[optValue intValue]]; - } + } + /* Psy-RD and Psy-Trellis NSSliders */ + if ([optName isEqualToString:@"psy-rd"]) + { + NSString * rdOpt = @""; + NSString * trellisOpt = @""; + + NSRange splitRD = [optValue rangeOfString:@","]; + rdOpt = [optValue substringToIndex:splitRD.location]; + trellisOpt = [optValue substringFromIndex:splitRD.location + 1]; + + [fX264optPsyRDSlider setFloatValue:[rdOpt floatValue]]; + [fX264optPsyTrellisSlider setFloatValue:[trellisOpt floatValue]]; + } } } } @@ -755,6 +831,15 @@ { optNameToChange = @"cabac"; } + if( sender == fX264optPsyRDSlider) + { + optNameToChange = @"psy-rd"; + } + if( sender == fX264optPsyTrellisSlider) + { + optNameToChange = @"psy-rd"; + } + /* Set widgets depending on the opt string in field */ NSString * thisOpt; // The separated option such as "bframes=3" @@ -840,6 +925,20 @@ thisOpt = [NSString stringWithFormat:@"%@=%d,%d",optName, ([fX264optAlphaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optAlphaDeblockPopUp indexOfSelectedItem]-7 : 0,([fX264optBetaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optBetaDeblockPopUp indexOfSelectedItem]-7 : 0]; } } + if ([optNameToChange isEqualToString:@"psy-rd"]) + { + if( [fX264optPsyRDSlider floatValue] == 1.0 && [fX264optPsyTrellisSlider floatValue] == 0.0 ) + { + /* When PsyRD is 1 and PsyTrel is 0 they're default values and can be ignored. */ + thisOpt = @""; + } + else + { + /* Otherwise the format is deblock=a,b, where a and b both have an array + offset of 7 because deblocking values start at -6 instead of at zero. */ + thisOpt = [NSString stringWithFormat:@"%@=%0.1f,%0.1f", optName, [fX264optPsyRDSlider floatValue], [fX264optPsyTrellisSlider floatValue] ]; + } + } else if /*Boolean Switches*/ ([optNameToChange isEqualToString:@"mixed-refs"] || [optNameToChange isEqualToString:@"weightb"] || [optNameToChange isEqualToString:@"b-pyramid"] || [optNameToChange isEqualToString:@"no-fast-pskip"] || [optNameToChange isEqualToString:@"no-dct-decimate"] || [optNameToChange isEqualToString:@"8x8dct"] ) { /* Here is where we take care of the boolean options that work overtly: @@ -1107,6 +1206,19 @@ If only one filter is at 0, both need to be overtly specified. */ [fDisplayX264Options setStringValue:[NSString stringWithFormat:@"%@=%@", [NSString stringWithFormat:optNameToChange],[NSString stringWithFormat:@"%d,%d", ([fX264optAlphaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optAlphaDeblockPopUp indexOfSelectedItem]-7 : 0, ([fX264optBetaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optBetaDeblockPopUp indexOfSelectedItem]-7 : 0]]]; } + else if ([optNameToChange isEqualToString:@"psy-rd"]) + { + /* Special case for psy-rd and psy-trellis. */ + if( [fX264optPsyRDSlider floatValue] == 1 && [fX264optPsyTrellisSlider floatValue] == 0 ) + { + /* Defaults, use null string. */ + [fDisplayX264Options setStringValue:@""]; + } + else + { + [fDisplayX264Options setStringValue:[NSString stringWithFormat:@"%@=%0.1f,%0.1f", [NSString stringWithFormat:optNameToChange], [fX264optPsyRDSlider floatValue], [fX264optPsyTrellisSlider floatValue]]]; + } + } else if /*Boolean Switches*/ ([optNameToChange isEqualToString:@"mixed-refs"] || [optNameToChange isEqualToString:@"weightb"] || [optNameToChange isEqualToString:@"b-pyramid"] || [optNameToChange isEqualToString:@"no-fast-pskip"] || [optNameToChange isEqualToString:@"no-dct-decimate"] || [optNameToChange isEqualToString:@"8x8dct"] ) { /* This covers all the boolean options that need to be specified only when true. */ @@ -1257,6 +1369,20 @@ just a little more fun, values start at -6 instead of at zero. */ [fDisplayX264Options setStringValue:[NSString stringWithFormat:@"%@:%@=%@", [NSString stringWithFormat:[fDisplayX264Options stringValue]], [NSString stringWithFormat:optNameToChange], [NSString stringWithFormat:@"%d,%d", ([fX264optAlphaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optAlphaDeblockPopUp indexOfSelectedItem]-7 : 0, ([fX264optBetaDeblockPopUp indexOfSelectedItem] != 0) ? [fX264optBetaDeblockPopUp indexOfSelectedItem]-7 : 0]]]; } + else if ([optNameToChange isEqualToString:@"psy-rd"]) + { + /* Special case for psy-rd and psy-trel */ + if( [fX264optPsyRDSlider floatValue] == 1 && [fX264optPsyTrellisSlider floatValue] == 0 ) + { + /* Defaults, don't change string. */ + [fDisplayX264Options setStringValue:[NSString stringWithFormat:[fDisplayX264Options stringValue]]]; + } + else + { + [fDisplayX264Options setStringValue:[NSString stringWithFormat:@"%@:%@=%0.1f,%0.1f", [NSString stringWithFormat:[fDisplayX264Options stringValue]], [NSString stringWithFormat:optNameToChange], [fX264optPsyRDSlider floatValue], [fX264optPsyTrellisSlider floatValue]]]; + } + + } else if /*Boolean Switches*/ ([optNameToChange isEqualToString:@"mixed-refs"] || [optNameToChange isEqualToString:@"weightb"] || [optNameToChange isEqualToString:@"b-pyramid"] || [optNameToChange isEqualToString:@"no-fast-pskip"] || [optNameToChange isEqualToString:@"no-dct-decimate"] || [optNameToChange isEqualToString:@"8x8dct"] ) { /* Covers all the normal booleans, that only need to be included in the string when they're true. */ -- 2.40.0