MacGui: use the new deinterlate preset keys

This commit is contained in:
Damiano Galassi 2015-10-09 23:01:58 +02:00
parent b899bfa36a
commit edb37c75b9
8 changed files with 253 additions and 357 deletions

View File

@ -568,231 +568,6 @@ Using this filter on such sources can result in smaller file sizes.</string>
<binding destination="-2" name="value" keyPath="self.filters.denoiseCustomString" id="MUd-3J-rBA"/>
</connections>
</textField>
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="V5h-RE-c1g">
<rect key="frame" x="310" y="104" width="83" height="42"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<string key="toolTip">Choose decomb or deinterlace filter options.
The decomb filter selectively deinterlaces frames that appear to be interlaced.
This will preserve quality in frames that are not interlaced.
The classic deinterlace filter is applied to all frames.
Frames that are not interlaced will suffer some quality degradation.</string>
<animations/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="83" height="20"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="0e7-lW-GxD" customClass="HBHUDButtonCell">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<cells>
<column>
<buttonCell type="radio" title="Deinterlace" imagePosition="left" alignment="left" controlSize="small" state="on" tag="1" inset="2" id="OVg-jG-Uzq">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<buttonCell type="radio" title="Decomb" imagePosition="left" alignment="left" controlSize="small" inset="2" id="CCd-Kk-NlW">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
</column>
</cells>
<connections>
<binding destination="-2" name="enabled" keyPath="self.filters" id="KA3-LF-11B">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
<binding destination="-2" name="selectedIndex" keyPath="self.filters.useDecomb" id="dze-Gw-CZJ"/>
</connections>
</matrix>
<box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="Mmn-Ae-9Yn" userLabel="Decomb Box">
<rect key="frame" x="233" y="43" width="207" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView">
<rect key="frame" x="0.0" y="0.0" width="207" height="62"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" id="7iW-iI-CHT">
<rect key="frame" x="11" y="38" width="61" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Decomb:" id="bkd-Rb-wwr">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="LZV-5c-GTF"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" id="EoC-qG-nlq">
<rect key="frame" x="11" y="12" width="61" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="VaB-Av-TDu">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDecombSelected" id="kgj-zy-TW7">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="6zF-wn-AFg"/>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" id="kP2-Gv-DZV">
<rect key="frame" x="75" y="33" width="114" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="5f8-gV-wzv">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
<menu key="menu" title="OtherViews" id="hOC-Xe-RPE"/>
</popUpButtonCell>
<connections>
<accessibilityConnection property="title" destination="7iW-iI-CHT" id="PnI-bH-5TP"/>
<binding destination="-2" name="enabled" keyPath="self.filters" id="1ZK-xB-Tcj">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
<binding destination="-2" name="selectedValue" keyPath="self.filters.decomb" previousBinding="3Cu-Eh-e6g" id="ShC-Oj-9Cr">
<dictionary key="options">
<string key="NSValueTransformerName">HBDecombTransformer</string>
</dictionary>
</binding>
<binding destination="-2" name="contentValues" keyPath="self.filters.decombSettings" id="3Cu-Eh-e6g"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" id="dNc-Lj-0eP">
<rect key="frame" x="78" y="9" width="108" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<string key="toolTip">Custom decomb filter string format:
Mode:SpatialMetric:MotionThresh:SpatialThresh:BlockThresh:BlockWidth:BlockHeight:MagnitudeThres:VarianceThres:LaplacianThresh:DilationThresh:ErosionThresh:NoiseThresh:MaxSearchDistance:PostProcessing:Parity</string>
<animations/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="cDZ-Od-pI6">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<accessibility description="Custom decomb settings."/>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDecombSelected" id="Ftt-V0-qz8">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="UZ0-eg-oV8" name="value" keyPath="values.self.filters.decombCustomString" id="lJH-aM-3yE"/>
</connections>
</textField>
</subviews>
<animations/>
</view>
<animations/>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.useDecomb" id="Qt8-ik-TyT">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
</connections>
</box>
<box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="N21-it-wjY" userLabel="Deinterlace Box">
<rect key="frame" x="233" y="43" width="207" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView">
<rect key="frame" x="0.0" y="0.0" width="207" height="62"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" id="xKf-yr-nCk">
<rect key="frame" x="4" y="38" width="68" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deinterlace:" id="VsK-mC-9Pj">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="PYk-vE-y5t"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" id="C83-aJ-v3x">
<rect key="frame" x="23" y="12" width="49" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="n6U-tH-vo0">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="kHC-eH-FKE">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="OOp-ec-hRZ"/>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" id="xct-UB-bKm">
<rect key="frame" x="75" y="33" width="114" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="CsF-zp-vt2">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
<menu key="menu" title="OtherViews" id="PyP-FP-gGx"/>
</popUpButtonCell>
<connections>
<accessibilityConnection property="title" destination="xKf-yr-nCk" id="9ol-TG-r46"/>
<binding destination="-2" name="enabled" keyPath="self.filters" id="M9v-44-EJq">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
<binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlace" previousBinding="41E-Fv-hq1" id="RN0-ZY-YXU">
<dictionary key="options">
<string key="NSValueTransformerName">HBDeinterlaceTransformer</string>
</dictionary>
</binding>
<binding destination="-2" name="contentValues" keyPath="self.filters.deinterlaceSettings" id="41E-Fv-hq1"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" id="r64-vI-ymx">
<rect key="frame" x="78" y="9" width="108" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="OKz-qW-7ai">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<accessibility description="Custom deinterlace filter string format: YadifMode:YadifParity:McdintMode:McdeintQp"/>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="h6M-Dy-tBR">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="value" keyPath="self.filters.deinterlaceCustomString" id="ej3-7F-ZV8"/>
</connections>
</textField>
</subviews>
<animations/>
</view>
<animations/>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.useDecomb" id="ja4-Mj-2gB"/>
</connections>
</box>
<textField verticalHuggingPriority="750" id="A6i-ft-02b">
<rect key="frame" x="484" y="78" width="34" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
@ -924,7 +699,7 @@ Players will scale the image in order to achieve the specified aspect.</string>
<rect key="frame" x="151" y="281" width="15" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="59" id="NP7-P2-Qga">
<stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="NP7-P2-Qga">
<font key="font" metaFont="smallSystem"/>
</stepperCell>
<connections>
@ -1214,7 +989,7 @@ Players will scale the image in order to achieve the specified aspect.</string>
<rect key="frame" x="240" y="281" width="15" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="59" id="MwK-aS-Oaf">
<stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="MwK-aS-Oaf">
<font key="font" metaFont="smallSystem"/>
</stepperCell>
<connections>
@ -1258,6 +1033,128 @@ Players will scale the image in order to achieve the specified aspect.</string>
<binding destination="-2" name="maxValue" keyPath="self.picture.maxHorizontalCrop" id="HGA-OB-h94"/>
</connections>
</stepper>
<textField verticalHuggingPriority="750" id="xKf-yr-nCk">
<rect key="frame" x="240" y="130" width="68" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deinterlace:" id="VsK-mC-9Pj">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="PYk-vE-y5t"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" id="C83-aJ-v3x">
<rect key="frame" x="259" y="79" width="49" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="n6U-tH-vo0">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="kHC-eH-FKE">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="OOp-ec-hRZ"/>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" id="xct-UB-bKm">
<rect key="frame" x="311" y="125" width="114" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<string key="toolTip">Choose decomb or deinterlace filter options.
The decomb filter selectively deinterlaces frames that appear to be interlaced.
This will preserve quality in frames that are not interlaced.
The classic deinterlace filter is applied to all frames.
Frames that are not interlaced will suffer some quality degradation.</string>
<animations/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="CsF-zp-vt2">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
<menu key="menu" title="OtherViews" id="PyP-FP-gGx"/>
</popUpButtonCell>
<connections>
<accessibilityConnection property="title" destination="xKf-yr-nCk" id="9ol-TG-r46"/>
<binding destination="-2" name="enabled" keyPath="self.filters" id="M9v-44-EJq">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
<binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlace" previousBinding="1XG-JZ-nFn" id="jo4-ky-6QP">
<dictionary key="options">
<string key="NSValueTransformerName">HBDeinterlaceTransformer</string>
</dictionary>
</binding>
<binding destination="-2" name="contentValues" keyPath="self.filters.deinterlaceTypes" id="1XG-JZ-nFn"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" id="r64-vI-ymx">
<rect key="frame" x="314" y="76" width="108" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="OKz-qW-7ai">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<accessibility description="Custom deinterlace filter string format: YadifMode:YadifParity:McdintMode:McdeintQp"/>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="h6M-Dy-tBR">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="value" keyPath="self.filters.deinterlaceCustomString" id="ej3-7F-ZV8"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" id="9Uz-PL-igg">
<rect key="frame" x="248" y="104" width="61" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Preset:" id="zvZ-ZX-yKE">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.filters.deinterlaceEnabled" id="9z5-2i-puG">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="textColor" keyPath="self.labelColor" id="58H-r8-xBi"/>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" id="6nG-zk-FMo">
<rect key="frame" x="312" y="99" width="113" height="22"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<animations/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="at1-DR-WGs">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
<menu key="menu" title="OtherViews" id="qey-Yo-9sX"/>
</popUpButtonCell>
<connections>
<accessibilityConnection property="title" destination="9Uz-PL-igg" id="EXp-0c-TdS"/>
<binding destination="-2" name="hidden" keyPath="self.filters.deinterlaceEnabled" id="gBQ-b8-r6y">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlacePreset" previousBinding="ZVC-PA-ji4" id="4RE-n6-Oyz">
<dictionary key="options">
<string key="NSValueTransformerName">HBDeinterlacePresetTransformer</string>
</dictionary>
</binding>
<binding destination="-2" name="contentValues" keyPath="self.filters.deinterlacePresets" id="ZVC-PA-ji4"/>
<outlet property="nextKeyView" destination="1XQ-md-5cQ" id="LJa-RO-dzf"/>
</connections>
</popUpButton>
</subviews>
<animations/>
<point key="canvasLocation" x="403.5" y="86.5"/>

View File

@ -13,6 +13,8 @@
* Getters to get the possible values for the filters.
*/
+ (NSDictionary *)detelecinePresetsDict;
+ (NSDictionary *)deinterlaceTypesDict;
+ (NSDictionary *)decombPresetsDict;
+ (NSDictionary *)deinterlacePresetsDict;
@ -21,7 +23,8 @@
+ (NSDictionary *)denoiseTypesDict;
- (BOOL)customDetelecineSelected;
- (BOOL)customDecombSelected;
- (BOOL)deinterlaceEnabled;
- (BOOL)customDeinterlaceSelected;
- (BOOL)denoiseEnabled;
@ -31,8 +34,9 @@
- (NSString *)deblockSummary;
@property (nonatomic, readonly) NSArray *detelecineSettings;
@property (nonatomic, readonly) NSArray *deinterlaceSettings;
@property (nonatomic, readonly) NSArray *decombSettings;
@property (nonatomic, readonly) NSArray *deinterlaceTypes;
@property (nonatomic, readonly) NSArray *deinterlacePresets;
@property (nonatomic, readonly) NSArray *denoiseTypes;
@property (nonatomic, readonly) NSArray *denoisePresets;
@ -57,10 +61,10 @@
@interface HBDetelecineTransformer : HBGenericDictionaryTransformer
@end
@interface HBDecombTransformer : HBGenericDictionaryTransformer
@interface HBDeinterlaceTransformer : HBGenericDictionaryTransformer
@end
@interface HBDeinterlaceTransformer : HBGenericDictionaryTransformer
@interface HBDeinterlacePresetTransformer : HBGenericDictionaryTransformer
@end
@interface HBDenoisePresetTransformer : HBGenericDictionaryTransformer

View File

@ -79,24 +79,28 @@ static NSDictionary * filterParamsToNamesDict(hb_filter_param_t * (f)(int), int
@end
@implementation HBDecombTransformer
@implementation HBDeinterlaceTransformer
- (instancetype)init
{
if (self = [super init])
self.dict = [HBFilters decombPresetsDict];
self.dict = [HBFilters deinterlaceTypesDict];
return self;
}
@end
@implementation HBDeinterlaceTransformer
@implementation HBDeinterlacePresetTransformer
- (instancetype)init
{
if (self = [super init])
self.dict = [HBFilters deinterlacePresetsDict];
{
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[HBFilters deinterlacePresetsDict]];
[dict addEntriesFromDictionary:[HBFilters decombPresetsDict]];
self.dict = [dict copy];
}
return self;
}
@ -162,6 +166,8 @@ static NSDictionary * filterParamsToNamesDict(hb_filter_param_t * (f)(int), int
@end
static NSDictionary *detelecinePresetsDict = nil;
static NSDictionary *deinterlaceTypesDict = nil;
static NSDictionary *decombPresetsDict = nil;
static NSDictionary *deinterlacePresetsDict = nil;
@ -182,6 +188,22 @@ static NSDictionary *denoiseTypesDict = nil;
return detelecinePresetsDict;
}
+ (NSDictionary *)deinterlaceTypesDict
{
if (!deinterlaceTypesDict)
{
deinterlaceTypesDict = @{NSLocalizedString(@"Off", nil): @"off",
NSLocalizedString(@"Deinterlace", nil): @"deinterlace",
NSLocalizedString(@"Decomb", nil): @"decomb"};;
}
return deinterlaceTypesDict;
}
- (NSArray *)deinterlaceTypes
{
return @[@"Off", @"Deinterlace", @"Decomb"];
}
+ (NSDictionary *)decombPresetsDict
{
if (!decombPresetsDict)
@ -234,14 +256,16 @@ static NSDictionary *denoiseTypesDict = nil;
return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DETELECINE);
}
- (NSArray *)decombSettings
- (NSArray *)deinterlacePresets
{
return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DECOMB);
}
- (NSArray *)deinterlaceSettings
{
return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DEINTERLACE);
if ([self.deinterlace isEqualToString:@"deinterlace"])
{
return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DEINTERLACE);
}
else
{
return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DECOMB);
}
}
- (NSArray *)denoiseTypes
@ -264,14 +288,9 @@ static NSDictionary *denoiseTypesDict = nil;
return [self.detelecine isEqualToString:@"custom"] ? YES : NO;
}
- (BOOL)customDecombSelected
{
return [self.decomb isEqualToString:@"custom"] ? YES : NO;
}
- (BOOL)customDeinterlaceSelected
{
return [self.deinterlace isEqualToString:@"custom"] ? YES : NO;
return [self.deinterlacePreset isEqualToString:@"custom"] && [self deinterlaceEnabled];
}
- (BOOL)denoiseEnabled
@ -279,6 +298,11 @@ static NSDictionary *denoiseTypesDict = nil;
return ![self.denoise isEqualToString:@"off"];
}
- (BOOL)deinterlaceEnabled
{
return ![self.deinterlace isEqualToString:@"off"];
}
- (BOOL)customDenoiseSelected
{
return [self.denoisePreset isEqualToString:@"custom"] && [self denoiseEnabled];
@ -317,29 +341,25 @@ static NSDictionary *denoiseTypesDict = nil;
[summary appendFormat:@" - Detelecine (%@)", [[[HBFilters detelecinePresetsDict] allKeysForObject:self.detelecine] firstObject]];
}
}
if (self.useDecomb && ![self.decomb isEqualToString:@"off"])
{
// Decomb
if ([self.decomb isEqualToString:@"custom"])
{
[summary appendFormat:@" - Decomb (%@)", self.decombCustomString];
}
else
{
[summary appendFormat:@" - Decomb (%@)", [[[HBFilters decombPresetsDict] allKeysForObject:self.decomb] firstObject]];
}
}
else if (![self.deinterlace isEqualToString:@"off"])
{
// Deinterlace
if ([self.deinterlace isEqualToString:@"custom"])
// Deinterlace or Decomb
NSString *type = [[[HBFilters deinterlaceTypesDict] allKeysForObject:self.deinterlace] firstObject];
if ([self.deinterlacePreset isEqualToString:@"custom"])
{
[summary appendFormat:@" - Deinterlace (%@)", self.deinterlaceCustomString];
[summary appendFormat:@" - %@ (%@)", type, self.deinterlaceCustomString];
}
else
{
[summary appendFormat:@" - Deinterlace (%@)", [[[HBFilters deinterlacePresetsDict] allKeysForObject:self.deinterlace] firstObject]];
if ([self.deinterlace isEqualToString:@"decomb"])
{
[summary appendFormat:@" - %@ (%@)", type, [[[HBFilters decombPresetsDict] allKeysForObject:self.deinterlacePreset] firstObject]];
}
else if ([self.deinterlace isEqualToString:@"deinterlace"])
{
[summary appendFormat:@" - %@ (%@)", type, [[[HBFilters deinterlacePresetsDict] allKeysForObject:self.deinterlacePreset] firstObject]];
}
}
}

View File

@ -19,14 +19,10 @@ extern NSString * const HBFiltersChangedNotification;
@property (nonatomic, readwrite, copy) NSString *detelecine;
@property (nonatomic, readwrite, copy) NSString *detelecineCustomString;
@property (nonatomic, readwrite) BOOL useDecomb;
@property (nonatomic, readwrite, copy) NSString *deinterlace;
@property (nonatomic, readwrite, copy) NSString *deinterlacePreset;
@property (nonatomic, readwrite, copy) NSString *deinterlaceCustomString;
@property (nonatomic, readwrite, copy) NSString *decomb;
@property (nonatomic, readwrite, copy) NSString *decombCustomString;
@property (nonatomic, readwrite, copy) NSString *denoise;
@property (nonatomic, readwrite, copy) NSString *denoisePreset;
@property (nonatomic, readwrite, copy) NSString *denoiseTune;

View File

@ -27,8 +27,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
_detelecineCustomString = @"";
_deinterlace = @"off";
_deinterlaceCustomString = @"";
_decomb = @"off";
_decombCustomString = @"";
_deinterlacePreset = @"fast";
_denoise = @"off";
_denoiseCustomString = @"";
_denoisePreset = @"medium";
@ -89,9 +88,40 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
{
_deinterlace = @"off";
}
[self validateDeinterlacePreset];
[self postChangedNotification];
}
- (void)setDeinterlacePreset:(NSString *)deinterlacePreset
{
if (deinterlacePreset)
{
_deinterlacePreset = [deinterlacePreset copy];
}
else
{
_deinterlacePreset = @"fast";
}
[self validateDeinterlacePreset];
[self postChangedNotification];
}
- (void)validateDeinterlacePreset
{
int filter_id = HB_FILTER_DECOMB;
if ([self.deinterlace isEqualToString:@"deinterlace"])
{
filter_id = HB_FILTER_DEINTERLACE;
}
if (hb_validate_filter_preset(filter_id, self.deinterlacePreset.UTF8String, NULL) ||
([self.deinterlacePreset isEqualToString:@"default"] && filter_id == HB_FILTER_DEINTERLACE))
{
_deinterlacePreset = @"fast";
}
}
- (void)setDeinterlaceCustomString:(NSString *)deinterlaceCustomString
{
if (deinterlaceCustomString)
@ -106,33 +136,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
[self postChangedNotification];
}
- (void)setDecomb:(NSString *)decomb
{
if (decomb)
{
_decomb = [decomb copy];
}
else
{
_decomb = @"off";
}
[self postChangedNotification];
}
- (void)setDecombCustomString:(NSString *)decombCustomString
{
if (decombCustomString)
{
_decombCustomString = [decombCustomString copy];
}
else
{
_decombCustomString = @"";
}
[self postChangedNotification];
}
- (void)setDenoise:(NSString *)denoise
{
if (denoise)
@ -141,7 +144,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
}
else
{
_denoise = @"";
_denoise = @"off";
}
[self postChangedNotification];
@ -201,25 +204,18 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
[self postChangedNotification];
}
- (void)setUseDecomb:(BOOL)useDecomb
{
_useDecomb = useDecomb;
[self postChangedNotification];
}
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *retval = nil;
if ([key isEqualToString:@"summary"])
{
retval = [NSSet setWithObjects:@"detelecine", @"detelecineCustomString", @"useDecomb", @"deinterlace", @"deinterlaceCustomString", @"decomb", @"decombCustomString", @"denoise", @"denoisePreset", @"denoiseTune", @"denoiseCustomString", @"deblock", @"grayscale", nil];
retval = [NSSet setWithObjects:@"detelecine", @"detelecineCustomString", @"deinterlace", @"deinterlacePreset", @"deinterlaceCustomString", @"denoise", @"denoisePreset", @"denoiseTune", @"denoiseCustomString", @"deblock", @"grayscale", nil];
}
if ([key isEqualToString:@"customDetelecineSelected"] ||
[key isEqualToString:@"customDecombSelected"] ||
[key isEqualToString:@"customDeinterlaceSelected"])
{
retval = [NSSet setWithObjects:@"detelecine", @"decomb", @"deinterlace", @"useDecomb", nil];
retval = [NSSet setWithObjects:@"detelecine", @"deinterlace", nil];
}
if ([key isEqualToString:@"denoiseTunesAvailable"] ||
[key isEqualToString:@"customDenoiseSelected"])
@ -230,6 +226,15 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
{
retval = [NSSet setWithObject:@"denoise"];
}
if ([key isEqualToString:@"deinterlaceEnabled"])
{
retval = [NSSet setWithObject:@"deinterlace"];
}
if ([key isEqualToString:@"customDeinterlaceSelected"] ||
[key isEqualToString:@"deinterlacePresets"])
{
retval = [NSSet setWithObjects:@"deinterlace", @"deinterlacePreset", nil];
}
if ([key isEqualToString:@"deblockSummary"])
{
retval = [NSSet setWithObject:@"deblock"];
@ -250,11 +255,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
copy->_detelecineCustomString = [_detelecineCustomString copy];
copy->_deinterlace = [_deinterlace copy];
copy->_deinterlacePreset = [_deinterlacePreset copy];
copy->_deinterlaceCustomString = [_deinterlaceCustomString copy];
copy->_decomb = [_decomb copy];
copy->_decombCustomString = [_decombCustomString copy];
copy->_denoise = [_denoise copy];
copy->_denoisePreset = [_denoisePreset copy];
copy->_denoiseTune = [_denoiseTune copy];
@ -262,8 +265,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
copy->_deblock = _deblock;
copy->_grayscale = _grayscale;
copy->_useDecomb = _useDecomb;
}
return copy;
@ -278,17 +279,15 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeInt:1 forKey:@"HBFiltersVersion"];
[coder encodeInt:2 forKey:@"HBFiltersVersion"];
encodeObject(_detelecine);
encodeObject(_detelecineCustomString);
encodeObject(_deinterlace);
encodeObject(_deinterlacePreset);
encodeObject(_deinterlaceCustomString);
encodeObject(_decomb);
encodeObject(_decombCustomString);
encodeObject(_denoise);
encodeObject(_denoisePreset);
encodeObject(_denoiseTune);
@ -296,8 +295,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
encodeInt(_deblock);
encodeBool(_grayscale);
encodeBool(_useDecomb);
}
- (instancetype)initWithCoder:(NSCoder *)decoder
@ -308,11 +305,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
decodeObject(_detelecineCustomString, NSString);
decodeObject(_deinterlace, NSString);
decodeObject(_deinterlacePreset, NSString)
decodeObject(_deinterlaceCustomString, NSString);
decodeObject(_decomb, NSString);
decodeObject(_decombCustomString, NSString);
decodeObject(_denoise, NSString);
decodeObject(_denoisePreset, NSString);
decodeObject(_denoiseTune, NSString);
@ -321,8 +316,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
decodeInt(_deblock);
decodeBool(_grayscale);
decodeBool(_useDecomb);
_notificationsEnabled = YES;
return self;
@ -332,14 +325,10 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
- (void)writeToPreset:(NSMutableDictionary *)preset
{
preset[@"PictureDecombDeinterlace"] = @(self.useDecomb);
preset[@"PictureDeinterlace"] = self.deinterlace;
preset[@"PictureDeinterlaceFilter"] = self.deinterlace;
preset[@"PictureDeinterlacePreset"] = self.deinterlacePreset;
preset[@"PictureDeinterlaceCustom"] = self.deinterlaceCustomString;
preset[@"PictureDecomb"] = self.decomb;
preset[@"PictureDecombCustom"] = self.decombCustomString;
preset[@"PictureDetelecine"] = self.detelecine;
preset[@"PictureDetelecineCustom"] = self.detelecineCustomString;
@ -359,16 +348,12 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
// If the preset has an objectForKey:@"UsesPictureFilters", and handle the filters here
if ([preset[@"UsesPictureFilters"] boolValue])
{
// We only allow *either* Decomb or Deinterlace. So check for the PictureDecombDeinterlace key.
self.useDecomb = [preset[@"PictureDecombDeinterlace"] boolValue];
self.decomb = preset[@"PictureDecomb"];
self.decombCustomString = preset[@"PictureDecombCustom"];
self.deinterlace = preset[@"PictureDeinterlace"];
// Deinterlace
self.deinterlace = preset[@"PictureDeinterlaceFilter"];
self.deinterlacePreset = preset[@"PictureDeinterlacePreset"];
self.deinterlaceCustomString = preset[@"PictureDeinterlaceCustom"];
//Detelecine
// Detelecine
self.detelecine = preset[@"PictureDetelecine"];
self.detelecineCustomString = preset[@"PictureDetelecineCustom"];

View File

@ -429,22 +429,17 @@
hb_add_filter(job, filter, filter_str);
}
if (self.filters.useDecomb && ![self.filters.decomb isEqualToString:@"off"])
// Deinterlace
if (![self.filters.deinterlace isEqualToString:@"off"])
{
// Decomb
int filter_id = HB_FILTER_DECOMB;
if ([self.filters.deinterlace isEqualToString:@"deinterlace"])
{
filter_id = HB_FILTER_DEINTERLACE;
}
const char *filter_str = hb_generate_filter_settings(filter_id,
self.filters.decomb.UTF8String,
self.filters.decombCustomString.UTF8String);
filter = hb_filter_init(filter_id);
hb_add_filter(job, filter, filter_str);
}
else if (!self.filters.useDecomb && ![self.filters.deinterlace isEqualToString:@"off"])
{
// Deinterlace
int filter_id = HB_FILTER_DEINTERLACE;
const char *filter_str = hb_generate_filter_settings(filter_id,
self.filters.deinterlace.UTF8String,
self.filters.deinterlacePreset.UTF8String,
self.filters.deinterlaceCustomString.UTF8String);
filter = hb_filter_init(filter_id);
hb_add_filter(job, filter, filter_str);

View File

@ -185,7 +185,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeInt:1 forKey:@"HBVideoVersion"];
[coder encodeInt:1 forKey:@"HBJobVersion"];
encodeInt(_state);
encodeObject(_name);
@ -215,7 +215,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification";
- (instancetype)initWithCoder:(NSCoder *)decoder
{
int version = [decoder decodeIntForKey:@"HBVideoVersion"];
int version = [decoder decodeIntForKey:@"HBJobVersion"];
if (version == 1 && (self = [super init]))
{

View File

@ -76,8 +76,7 @@
if (!theImage)
{
HBFilters *filters = self.job.filters;
BOOL deinterlace = (![filters.deinterlace isEqualToString:@"off"] && !filters.useDecomb) ||
(![filters.decomb isEqualToString:@"off"] && filters.useDecomb);
BOOL deinterlace = (![filters.deinterlace isEqualToString:@"off"]);
theImage = (CGImageRef)[self.scanCore copyImageAtIndex:index
forTitle:self.job.title