Skip to content

Commit

Permalink
- Bumps x264 to r1195-5d75a9b. x264 has new default settings: subme 6…
Browse files Browse the repository at this point in the history
…->7, bframes 0->3, 8x8dct 0->1, psnr 1->0, ssim 1->0, ref 1->3, mixed-refs 0->1, trellis 0->1, weightb 0->1

- Explicitly enables SSIM and PSNR metrics for all x264 encodes
- MacGui: Updates Advanced tab for new x264 defaults
- MacGui and CLI: Updates built-in presets to produce the same output given the new default x264 settings

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2742 b64f7644-9d1e-0410-96f1-a4d463321fa5
  • Loading branch information
jbrjake committed Aug 1, 2009
1 parent c0642a7 commit d55b8f4
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 48 deletions.
2 changes: 1 addition & 1 deletion contrib/x264/module.defs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
$(eval $(call import.MODULE.defs,X264,x264,PTHREADW32))
$(eval $(call import.CONTRIB.defs,X264))

X264.FETCH.url = http://download.m0k.org/handbrake/contrib/x264-r1173-f6d3166.tar.gz
X264.FETCH.url = http://download.m0k.org/handbrake/contrib/x264-r1195-5d75a9b.tar.gz
X264.EXTRACT.tarbase = x264

X264.CONFIGURE.deps =
Expand Down
6 changes: 5 additions & 1 deletion libhb/encx264.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,11 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
hb_get_tempory_filename( job->h, pv->filename, "x264.log" );

x264_param_default( &param );


/* Enable metrics */
param.analyse.b_psnr = 1;
param.analyse.b_ssim = 1;

param.i_threads = ( hb_get_cpu_count() * 3 / 2 );
param.i_width = job->width;
param.i_height = job->height;
Expand Down
40 changes: 21 additions & 19 deletions macosx/HBAdvancedController.m
Original file line number Diff line number Diff line change
Expand Up @@ -109,19 +109,19 @@ - (IBAction) X264AdvancedOptionsSet: (id) sender
/*B-Frames fX264optBframesPopUp*/
int i;
[fX264optBframesPopUp removeAllItems];
[fX264optBframesPopUp addItemWithTitle:@"Default (0)"];
[fX264optBframesPopUp addItemWithTitle:@"Default (3)"];
for (i=0; i<17;i++)
{
[fX264optBframesPopUp addItemWithTitle:[NSString stringWithFormat:@"%d",i]];
}
toolTip =
@"Sane values are 1-6. B-Frames are smaller than other frames, so they let you pack in more quality at the same bitrate. Use more of them with animated material: 9-16.";
@"Sane values are 1-6. B-Frames are smaller than other frames, so they let you pack in more quality at the same bitrate. Use more of them with animated material.";
[fX264optBframesPopUp setToolTip: toolTip];
[fX264optBframesLabel setToolTip: toolTip];

/*Reference Frames fX264optRefPopUp*/
[fX264optRefPopUp removeAllItems];
[fX264optRefPopUp addItemWithTitle:@"Default (1)"];
[fX264optRefPopUp addItemWithTitle:@"Default (3)"];
for (i=0; i<17;i++)
{
[fX264optRefPopUp addItemWithTitle:[NSString stringWithFormat:@"%d",i]];
Expand All @@ -147,19 +147,19 @@ - (IBAction) X264AdvancedOptionsSet: (id) sender

/*Sub Me fX264optSubmePopUp*/
[fX264optSubmePopUp removeAllItems];
[fX264optSubmePopUp addItemWithTitle:@"Default (6)"];
[fX264optSubmePopUp addItemWithTitle:@"Default (7)"];
for (i=0; i<10;i++)
{
[fX264optSubmePopUp addItemWithTitle:[NSString stringWithFormat:@"%d",i]];
}
toolTip =
@"This setting is finer-grained than the motion estimation settings above. Instead of dealing with whole pixels, it deals with 4 fractional pixels, or quarter pixels (qpel). Higher levels increase quality by further refining the motion prediction for these quarter pixels, but take longer to encode.\n\nThe default, 6, turns on a feature called rate distortion optimization, including psychovisual enhancements. 7 enables that rate distortion for B-frames. 8 refines those decisions for I and P frames, and 9 adds on refinement for B-frames as well.";
@"This setting is finer-grained than the motion estimation settings above. Instead of dealing with whole pixels, it deals with 4 fractional pixels, or quarter pixels (qpel). Higher levels increase quality by further refining the motion prediction for these quarter pixels, but take longer to encode.\n\nLevel 6, turns on a feature called rate distortion optimization, including psychovisual enhancements. 7, the default, enables that rate distortion for B-frames. 8 refines those decisions for I and P frames, and 9 adds on refinement for B-frames as well.";
[fX264optSubmePopUp setToolTip: toolTip];
[fX264optSubmeLabel setToolTip: toolTip];

/*Trellis fX264optTrellisPopUp*/
[fX264optTrellisPopUp removeAllItems];
[fX264optTrellisPopUp addItemWithTitle:@"Default (0)"];
[fX264optTrellisPopUp addItemWithTitle:@"Default (1)"];
for (i=0; i<3;i++)
{
[fX264optTrellisPopUp addItemWithTitle:[NSString stringWithFormat:@"%d",i]];
Expand All @@ -171,7 +171,7 @@ - (IBAction) X264AdvancedOptionsSet: (id) sender
[fX264optTrellisLabel setToolTip: toolTip];

/*Mixed-references fX264optMixedRefsSwitch BOOLEAN*/
[fX264optMixedRefsSwitch setState:0];
[fX264optMixedRefsSwitch setState:1];
[fX264optMixedRefsSwitch setWantsLayer:YES];
toolTip =
@"With this on, different references can be used for different parts of each 16x16 pixel macroblock, increasing quality.";
Expand Down Expand Up @@ -204,10 +204,10 @@ - (IBAction) X264AdvancedOptionsSet: (id) sender
[fX264optMERangeLabel setToolTip: toolTip];

/*Weighted B-Frame Prediction fX264optWeightBSwitch BOOLEAN*/
[fX264optWeightBSwitch setState:0];
[fX264optWeightBSwitch setState:1];
[fX264optWeightBSwitch setWantsLayer:YES];
toolTip =
@"Sometimes x264 will base a B-frame's motion compensation on frames both before and after. With weighted B-frames, the amount of influence each frame has is related to its distance from the frame being encoded, instead of both having equal influence.";
@"Sometimes x264 will base a B-frame's motion compensation on frames both before and after. With weighted B-frames, the amount of influence each frame has is related to its distance from the frame being encoded, instead of both having equal influence. The AppleTV can have issues with this.";
[fX264optWeightBSwitch setToolTip: toolTip];
[fX264optWeightBLabel setToolTip: toolTip];

Expand Down Expand Up @@ -277,7 +277,7 @@ - (IBAction) X264AdvancedOptionsSet: (id) sender
[fX264optAnalyseLabel setToolTip: toolTip];

/* 8x8 DCT fX264op8x8dctSwitch */
[fX264opt8x8dctSwitch setState:0];
[fX264opt8x8dctSwitch setState:1];
[fX264opt8x8dctSwitch setWantsLayer:YES];
toolTip =
@"Checking this box lets x264 break key frames down into 8x8 blocks of pixels for analysis. This is a high profile feature of H.264, which makes it less compatible. It should slightly decrease bitrate or improve quality. Turn it on whenever possible.";
Expand Down Expand Up @@ -483,7 +483,8 @@ - (IBAction) X264AdvancedOptionsAnimate: (id) sender

if( sender == fX264optBframesPopUp || sender == nil || sender == fDisplayX264Options )
{
if ( [fX264optBframesPopUp indexOfSelectedItem ] < 2)
if ( [fX264optBframesPopUp indexOfSelectedItem ] > 0 &&
[fX264optBframesPopUp indexOfSelectedItem ] < 2)
{
/* If the b-frame widget is at 0 or 1, the user has chosen
not to use b-frames at all. So disable the options
Expand Down Expand Up @@ -629,7 +630,8 @@ - (IBAction) X264AdvancedOptionsAnimate: (id) sender

if( sender == fX264optRefPopUp || sender == nil || sender == fDisplayX264Options )
{
if ( [fX264optRefPopUp indexOfSelectedItem] < 3)
if ( [fX264optRefPopUp indexOfSelectedItem] > 0 &&
[fX264optRefPopUp indexOfSelectedItem] < 3 )
{
if( [fX264optMixedRefsSwitch isHidden] == false )
{
Expand Down Expand Up @@ -714,7 +716,7 @@ - (IBAction) X264AdvancedOptionsAnimate: (id) sender
[[fX264optPsyRDLabel animator] setHidden:NO];
}

if( [fX264optTrellisPopUp indexOfSelectedItem] >= 2 && [fX264optCabacSwitch state] == true && [fX264optPsyTrellisSlider isHidden] == true )
if( ( [fX264optTrellisPopUp indexOfSelectedItem] == 0 || [fX264optTrellisPopUp indexOfSelectedItem] >= 2 ) && [fX264optCabacSwitch state] == true && [fX264optPsyTrellisSlider isHidden] == true )
{
[[fX264optPsyTrellisSlider animator] setHidden:NO];
[[fX264optPsyTrellisLabel animator] setHidden:NO];
Expand All @@ -724,7 +726,7 @@ - (IBAction) X264AdvancedOptionsAnimate: (id) sender

if( sender == fX264optTrellisPopUp || sender == nil || sender == fDisplayX264Options )
{
if( [fX264optTrellisPopUp indexOfSelectedItem] < 2 )
if( [fX264optTrellisPopUp indexOfSelectedItem] > 0 && [fX264optTrellisPopUp indexOfSelectedItem] < 2 )
{
if( [fX264optPsyTrellisSlider isHidden] == false )
{
Expand Down Expand Up @@ -1079,7 +1081,7 @@ - (NSString *) X264AdvancedOptionsWidgetToString: (NSString *) optName withID: (
}
}

else if /*Boolean Switches*/ ([optName isEqualToString:@"mixed-refs"] || [optName isEqualToString:@"weightb"] || [optName isEqualToString:@"b-pyramid"] || [optName isEqualToString:@"no-fast-pskip"] || [optName isEqualToString:@"no-dct-decimate"] || [optName isEqualToString:@"8x8dct"] )
else if /*Boolean Switches*/ ( [optName isEqualToString:@"b-pyramid"] || [optName isEqualToString:@"no-fast-pskip"] || [optName isEqualToString:@"no-dct-decimate"] )
{
/* Here is where we take care of the boolean options that work overtly:
no-dct-decimate being on means no-dct-decimate=1, etc. Some options
Expand All @@ -1097,18 +1099,18 @@ - (NSString *) X264AdvancedOptionsWidgetToString: (NSString *) optName withID: (
}
}

else if ([optName isEqualToString:@"cabac"])
else if ( [optName isEqualToString:@"8x8dct"] || [optName isEqualToString:@"weightb"] || [optName isEqualToString:@"mixed-refs"] || [optName isEqualToString:@"cabac"] )
{
/* CABAC is odd, in that it defaults to being on. That means
it only needs to be included in the string when turned off. */
/* These options default to being on. That means they
only need to be included in the string when turned off. */
if ([sender state] == 1)
{
/* It's true so don't include it. */
thisOpt = @"";
}
else
{
/* Otherwise, include cabac=0 in the string to enable CAVLC. */
/* Otherwise, include cabac=0, etc, in the string. */
thisOpt = [NSString stringWithFormat:@"%@=%d",optName,0];
}
}
Expand Down
18 changes: 9 additions & 9 deletions macosx/HBPresets.m
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ - (NSDictionary *)createAppleTVPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];

/* x264 Option String (We can use this to tweak the appleTV output)*/
[preset setObject:@"cabac=0:ref=2:mixed-refs=1:bframes=3:me=umh:subme=7:b-adapt=2:8x8dct=1" forKey:@"x264Option"];
[preset setObject:@"cabac=0:ref=2:me=umh:b-adapt=2:weightb=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -293,7 +293,7 @@ - (NSDictionary *)createAppleTVLegacyPreset
[preset setObject:@"H.264 (x264)" 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:cabac=0" forKey:@"x264Option"];
[preset setObject:@"ref=1:subme=5:me=umh:no-fast-pskip=1:cabac=0:weightb=0:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -405,7 +405,7 @@ - (NSDictionary *)createAppleUniversalPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];

/* x264 Option String (We can use this to tweak the appleTV output)*/
[preset setObject:@"cabac=0:ref=2:mixed-refs=1:me=umh" forKey:@"x264Option"];
[preset setObject:@"cabac=0:ref=2:me=umh:bframes=0:8x8dct=0:trellis=0:subme=6" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -607,7 +607,7 @@ - (NSDictionary *)createHighProfilePreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];

/* x264 Option String */
[preset setObject:@"ref=3:mixed-refs:bframes=3:weightb:b-pyramid:b-adapt=2:me=umh:subme=9:analyse=all:8x8dct" forKey:@"x264Option"];
[preset setObject:@"b-pyramid:b-adapt=2:me=umh:subme=9:analyse=all:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -716,7 +716,7 @@ - (NSDictionary *)createiPhonePreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* x264 Option String */
[preset setObject:@"cabac=0:ref=2:mixed-refs:me=umh" forKey:@"x264Option"];
[preset setObject:@"cabac=0:ref=2:me=umh:bframes=0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -810,7 +810,7 @@ - (NSDictionary *)createiPhoneLegacyPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
/* x264 Option String */
[preset setObject:@"level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:psy-rd=0,0" forKey:@"x264Option"];
[preset setObject:@"level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:psy-rd=0,0:bframes=0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -904,7 +904,7 @@ - (NSDictionary *)createIpodHighPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
/* x264 Option String */
[preset setObject:@"level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:psy-rd=0,0" forKey:@"x264Option"];
[preset setObject:@"level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:psy-rd=0,0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -998,7 +998,7 @@ - (NSDictionary *)createIpodLowPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
/* x264 Option String */
[preset setObject:@"level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1" forKey:@"x264Option"];
[preset setObject:@"level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
Expand Down Expand Up @@ -1092,7 +1092,7 @@ - (NSDictionary *)createNormalPreset
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];

/* x264 Option String */
[preset setObject:@"ref=2:bframes=2:me=umh" forKey:@"x264Option"];
[preset setObject:@"ref=2:bframes=2:me=umh:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0" forKey:@"x264Option"];

/* Video quality */
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
Expand Down
Loading

0 comments on commit d55b8f4

Please sign in to comment.