Video Filters:

- Add HQ3x and HQ3xS pixel scalers.
- Delete unused hq4x.h file.
This commit is contained in:
rogerman 2015-06-05 20:08:55 +00:00
parent fec691bd26
commit 947adcd956
12 changed files with 3685 additions and 394 deletions

View File

@ -197,6 +197,10 @@
AB4676F314AB12D60002FF94 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
AB47B52E18A3F722009A42AF /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB47B52C18A3F722009A42AF /* xbrz.cpp */; };
AB47B52F18A45C35009A42AF /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB47B52C18A3F722009A42AF /* xbrz.cpp */; };
AB4C81E41B21676C00ACECD5 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4C81E31B21676C00ACECD5 /* hq3x.cpp */; };
AB4C81E51B21676C00ACECD5 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4C81E31B21676C00ACECD5 /* hq3x.cpp */; };
AB4C81E61B21676C00ACECD5 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4C81E31B21676C00ACECD5 /* hq3x.cpp */; };
AB4C81E71B21677700ACECD5 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4C81E31B21676C00ACECD5 /* hq3x.cpp */; };
AB4FCEBD1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
AB4FCEBE1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
AB4FCEBF1692AB82000F498F /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4FCEBC1692AB82000F498F /* Accelerate.framework */; };
@ -1166,6 +1170,7 @@
AB407F391A620D6E00313213 /* DeSmuME (Latest).profdata */ = {isa = PBXFileReference; lastKnownFileType = file; path = "DeSmuME (Latest).profdata"; sourceTree = "<group>"; };
AB47B52B18A3F722009A42AF /* xbrz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xbrz.h; sourceTree = "<group>"; };
AB47B52C18A3F722009A42AF /* xbrz.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xbrz.cpp; sourceTree = "<group>"; };
AB4C81E31B21676C00ACECD5 /* hq3x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq3x.cpp; sourceTree = "<group>"; };
AB4FCEBC1692AB82000F498F /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
AB5648FD186E6EA8002740F4 /* cocoa_slot2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_slot2.h; sourceTree = "<group>"; };
AB5648FE186E6EA8002740F4 /* cocoa_slot2.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_slot2.mm; sourceTree = "<group>"; };
@ -1484,7 +1489,6 @@
ABFE14FE14C92FF5005D6699 /* hq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq2x.cpp; sourceTree = "<group>"; };
ABFE14FF14C92FF5005D6699 /* hq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq2x.h; sourceTree = "<group>"; };
ABFE150014C92FF5005D6699 /* hq4x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq4x.cpp; sourceTree = "<group>"; };
ABFE150214C92FF5005D6699 /* hq4x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq4x.h; sourceTree = "<group>"; };
ABFE150314C92FF5005D6699 /* interp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interp.h; sourceTree = "<group>"; };
ABFE150414C92FF5005D6699 /* lq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lq2x.cpp; sourceTree = "<group>"; };
ABFE150514C92FF5005D6699 /* lq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lq2x.h; sourceTree = "<group>"; };
@ -2251,6 +2255,7 @@
ABFE14FB14C92FF5005D6699 /* bilinear.cpp */,
ABFE14FC14C92FF5005D6699 /* epx.cpp */,
ABFE14FE14C92FF5005D6699 /* hq2x.cpp */,
AB4C81E31B21676C00ACECD5 /* hq3x.cpp */,
ABFE150014C92FF5005D6699 /* hq4x.cpp */,
ABFE150414C92FF5005D6699 /* lq2x.cpp */,
ABFE150614C92FF5005D6699 /* scanline.cpp */,
@ -2258,7 +2263,6 @@
AB47B52C18A3F722009A42AF /* xbrz.cpp */,
ABFE14FD14C92FF5005D6699 /* filter.h */,
ABFE14FF14C92FF5005D6699 /* hq2x.h */,
ABFE150214C92FF5005D6699 /* hq4x.h */,
ABFE150314C92FF5005D6699 /* interp.h */,
ABFE150514C92FF5005D6699 /* lq2x.h */,
AB817A34143EE2DB00A7DFE9 /* videofilter.h */,
@ -2991,6 +2995,7 @@
ABD10AE81715FCDD00B5729D /* audiosamplegenerator.cpp in Sources */,
ABD10AEB1715FCDD00B5729D /* mic_ext.cpp in Sources */,
ABD42048172319D1006A9B46 /* FileMigrationDelegate.mm in Sources */,
AB4C81E51B21676C00ACECD5 /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3008,6 +3013,7 @@
AB796CF615CDCBA200C59155 /* cheatSystem.cpp in Sources */,
AB796CF715CDCBA200C59155 /* common.cpp in Sources */,
AB9038B517C5ED2200F410BD /* slot1comp_mc.cpp in Sources */,
AB4C81E41B21676C00ACECD5 /* hq3x.cpp in Sources */,
AB796CF815CDCBA200C59155 /* cp15.cpp in Sources */,
AB796CF915CDCBA200C59155 /* cpu_detect_x86_gcc.cpp in Sources */,
AB796CFA15CDCBA200C59155 /* crc.cpp in Sources */,
@ -3309,6 +3315,7 @@
AB8F3CF51A53AC2600A80BF6 /* buffer.cpp in Sources */,
AB8F3CF61A53AC2600A80BF6 /* compiler.cpp in Sources */,
AB8F3CF71A53AC2600A80BF6 /* compilercontext.cpp in Sources */,
AB4C81E61B21676C00ACECD5 /* hq3x.cpp in Sources */,
AB8F3CF81A53AC2600A80BF6 /* compilerfunc.cpp in Sources */,
AB8F3CF91A53AC2600A80BF6 /* compileritem.cpp in Sources */,
AB8F3CFA1A53AC2600A80BF6 /* context.cpp in Sources */,
@ -3400,6 +3407,7 @@
ABB3C6971501C04F00E0C22E /* Timestretcher.cpp in Sources */,
ABB3C6981501C04F00E0C22E /* crc.cpp in Sources */,
AB031B5518472F3100541888 /* cocoa_cheat.mm in Sources */,
AB4C81E71B21677700ACECD5 /* hq3x.cpp in Sources */,
ABB3C6991501C04F00E0C22E /* decrypt.cpp in Sources */,
ABB3C69A1501C04F00E0C22E /* header.cpp in Sources */,
AB1773FF182ECA8A009F29DD /* slot2_passme.cpp in Sources */,

View File

@ -929,6 +929,11 @@
ABA93EB2178C7D4200CBF50B /* encrypt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABA93EAF178C7D4200CBF50B /* encrypt.cpp */; };
ABA93EB3178C7D4200CBF50B /* encrypt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABA93EAF178C7D4200CBF50B /* encrypt.cpp */; };
ABA93EB4178C7D4200CBF50B /* encrypt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABA93EAF178C7D4200CBF50B /* encrypt.cpp */; };
ABAAEFFF1B22361800E1269D /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAAEFFE1B22361800E1269D /* hq3x.cpp */; };
ABAAF0001B22361800E1269D /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAAEFFE1B22361800E1269D /* hq3x.cpp */; };
ABAAF0011B22361800E1269D /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAAEFFE1B22361800E1269D /* hq3x.cpp */; };
ABAAF0021B22361800E1269D /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAAEFFE1B22361800E1269D /* hq3x.cpp */; };
ABAAF0031B22361800E1269D /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAAEFFE1B22361800E1269D /* hq3x.cpp */; };
ABAAFBEA172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
ABAAFBEB172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
ABAAFBEC172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
@ -1441,6 +1446,7 @@
ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_cheat.mm; sourceTree = "<group>"; };
ABA93EAE178C7D4200CBF50B /* encrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encrypt.h; path = ../encrypt.h; sourceTree = SOURCE_ROOT; };
ABA93EAF178C7D4200CBF50B /* encrypt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encrypt.cpp; path = ../encrypt.cpp; sourceTree = SOURCE_ROOT; };
ABAAEFFE1B22361800E1269D /* hq3x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq3x.cpp; sourceTree = "<group>"; };
ABAAFBE8172122B6005DDDBE /* FileMigrationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileMigrationDelegate.h; sourceTree = "<group>"; };
ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileMigrationDelegate.mm; sourceTree = "<group>"; };
ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDarkGreen_256x256.png; path = images/Icon_MicrophoneDarkGreen_256x256.png; sourceTree = "<group>"; };
@ -1754,7 +1760,6 @@
ABFE14FE14C92FF5005D6699 /* hq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq2x.cpp; sourceTree = "<group>"; };
ABFE14FF14C92FF5005D6699 /* hq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq2x.h; sourceTree = "<group>"; };
ABFE150014C92FF5005D6699 /* hq4x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq4x.cpp; sourceTree = "<group>"; };
ABFE150214C92FF5005D6699 /* hq4x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq4x.h; sourceTree = "<group>"; };
ABFE150314C92FF5005D6699 /* interp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interp.h; sourceTree = "<group>"; };
ABFE150414C92FF5005D6699 /* lq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lq2x.cpp; sourceTree = "<group>"; };
ABFE150514C92FF5005D6699 /* lq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lq2x.h; sourceTree = "<group>"; };
@ -2513,6 +2518,7 @@
ABFE14FB14C92FF5005D6699 /* bilinear.cpp */,
ABFE14FC14C92FF5005D6699 /* epx.cpp */,
ABFE14FE14C92FF5005D6699 /* hq2x.cpp */,
ABAAEFFE1B22361800E1269D /* hq3x.cpp */,
ABFE150014C92FF5005D6699 /* hq4x.cpp */,
ABFE150414C92FF5005D6699 /* lq2x.cpp */,
ABFE150614C92FF5005D6699 /* scanline.cpp */,
@ -2520,7 +2526,6 @@
ABECB50818A460710052D52A /* xbrz.cpp */,
ABFE14FD14C92FF5005D6699 /* filter.h */,
ABFE14FF14C92FF5005D6699 /* hq2x.h */,
ABFE150214C92FF5005D6699 /* hq4x.h */,
ABFE150314C92FF5005D6699 /* interp.h */,
ABFE150514C92FF5005D6699 /* lq2x.h */,
AB817A34143EE2DB00A7DFE9 /* videofilter.h */,
@ -3462,6 +3467,7 @@
ABECB50D18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51818A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEC11A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
ABAAF0031B22361800E1269D /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3607,6 +3613,7 @@
ABECB50A18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51518A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBD1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
ABAAEFFF1B22361800E1269D /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3782,6 +3789,7 @@
ABECB50918A460710052D52A /* xbrz.cpp in Sources */,
ABECB51418A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBE1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
ABAAF0001B22361800E1269D /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3957,6 +3965,7 @@
ABECB50C18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51718A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEC01A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
ABAAF0021B22361800E1269D /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4102,6 +4111,7 @@
ABECB50B18A460710052D52A /* xbrz.cpp in Sources */,
ABECB51618A460910052D52A /* OGLDisplayOutput.cpp in Sources */,
ABC3DEBF1A96EA96009EC345 /* RomInfoPanel.mm in Sources */,
ABAAF0011B22361800E1269D /* hq3x.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">14C1510</string>
<string key="IBDocument.InterfaceBuilderVersion">7702</string>
<string key="IBDocument.AppKitVersion">1344.72</string>
<string key="IBDocument.HIToolboxVersion">757.30</string>
<string key="IBDocument.SystemVersion">14D136</string>
<string key="IBDocument.InterfaceBuilderVersion">7706</string>
<string key="IBDocument.AppKitVersion">1347.57</string>
<string key="IBDocument.HIToolboxVersion">758.70</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">7702</string>
<string key="NS.object.0">7706</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSArrayController</string>
@ -1506,6 +1506,24 @@
<reference key="NSMixedImage" ref="678976864"/>
<int key="NSTag">4</int>
</object>
<object class="NSMenuItem" id="446328379">
<reference key="NSMenu" ref="1003123887"/>
<string key="NSTitle">HQ3x</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="396634170"/>
<reference key="NSMixedImage" ref="678976864"/>
<int key="NSTag">23</int>
</object>
<object class="NSMenuItem" id="728839295">
<reference key="NSMenu" ref="1003123887"/>
<string key="NSTitle">HQ3xS</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="396634170"/>
<reference key="NSMixedImage" ref="678976864"/>
<int key="NSTag">24</int>
</object>
<object class="NSMenuItem" id="297190713">
<reference key="NSMenu" ref="1003123887"/>
<string key="NSTitle">HQ4x</string>
@ -1984,7 +2002,7 @@
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{505, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -2123,7 +2141,7 @@
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{490, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -2238,7 +2256,7 @@
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{490, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -2353,7 +2371,7 @@
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{490, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -6395,7 +6413,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{13, 10}, {528, 388}}</string>
<reference key="NSSuperview" ref="748902585"/>
<reference key="NSNextKeyView" ref="461624007"/>
<array class="NSMutableArray" key="NSTabViewItems">
<object class="NSTabViewItem" id="1008833987">
<string key="NSIdentifier">1</string>
@ -14583,7 +14600,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{463, 10000000}</string>
<nil key="NSDelegate"/>
<array key="NSAllowedInputLocales">
@ -19682,7 +19699,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<object class="NSWindowTemplate" id="1037714331">
<int key="NSWindowStyleMask">279</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{1004, 23}, {204, 713}}</string>
<string key="NSWindowRect">{{1004, 23}, {204, 754}}</string>
<int key="NSWTFlags">-461896704</int>
<string key="NSWindowTitle">Video Settings</string>
<string key="NSWindowClass">NSPanel</string>
@ -19695,7 +19712,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<object class="NSButton" id="670018968">
<reference key="NSNextResponder" ref="440584564"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{21, 18}, {162, 19}}</string>
<string key="NSFrame">{{25, 19}, {162, 19}}</string>
<reference key="NSSuperview" ref="440584564"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="205339011">
@ -19724,11 +19741,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<object class="NSMatrix" id="807791156">
<reference key="NSNextResponder" ref="36717965"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{18, 14}, {132, 358}}</string>
<string key="NSFrame">{{18, 14}, {132, 398}}</string>
<reference key="NSSuperview" ref="36717965"/>
<reference key="NSNextKeyView" ref="670018968"/>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSNumRows">18</int>
<int key="NSNumRows">20</int>
<int key="NSNumCols">1</int>
<array class="NSMutableArray" key="NSCells">
<object class="NSButtonCell" id="406038934">
@ -20014,6 +20032,34 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="338954373">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">HQ3x</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">23</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="62036590"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="188640664">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">HQ3xS</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">24</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="62036590"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="134108895">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">HQ4x</string>
@ -20027,7 +20073,7 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="188640664">
<object class="NSButtonCell" id="1009745071">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">HQ4xS</string>
@ -20041,7 +20087,7 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="134108895">
<object class="NSButtonCell" id="385829730">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">2xBRZ</string>
@ -20055,7 +20101,7 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="1009745071">
<object class="NSButtonCell" id="454811629">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">3xBRZ</string>
@ -20064,34 +20110,6 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSTag">20</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="62036590"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="385829730">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">4xBRZ</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">21</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="62036590"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="454811629">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">5xBRZ</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">22</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">12779520</int>
<array class="NSMutableArray" key="NSReps">
@ -20117,27 +20135,24 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</array>
<string key="NSCellSize">{132, 18}</string>
<string key="NSIntercellSpacing">{4, 2}</string>
<int key="NSMatrixFlags">1151868928</int>
<string key="NSCellClass">NSActionCell</string>
<object class="NSButtonCell" key="NSProtoCell" id="307101671">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Radio</string>
<reference key="NSSupport" ref="26"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">549453824</int>
<string key="NSSize">{18, 18}</string>
<array class="NSMutableArray" key="NSReps">
<array>
<integer value="0"/>
<object class="NSBitmapImageRep">
<object class="NSData" key="NSTIFFRepresentation">
<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
<object class="NSButtonCell" id="567901344">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">4xBRZ</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">21</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage" id="543711753">
<int key="NSImageFlags">549453824</int>
<string key="NSSize">{18, 18}</string>
<array class="NSMutableArray" key="NSReps">
<array>
<integer value="0"/>
<object class="NSBitmapImageRep">
<object class="NSData" key="NSTIFFRepresentation">
<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
@ -20215,12 +20230,43 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
2vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb
6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn
+3f8B/yY/Sn9uv5L/tz/bf//A</bytes>
</object>
</object>
</object>
</array>
</array>
</array>
<reference key="NSColor" ref="122595646"/>
<reference key="NSColor" ref="122595646"/>
</object>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
<object class="NSButtonCell" id="76853011">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">5xBRZ</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="807791156"/>
<int key="NSTag">22</int>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="543711753"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</array>
<string key="NSCellSize">{132, 18}</string>
<string key="NSIntercellSpacing">{4, 2}</string>
<int key="NSMatrixFlags">1151868928</int>
<string key="NSCellClass">NSActionCell</string>
<object class="NSButtonCell" key="NSProtoCell" id="307101671">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Radio</string>
<reference key="NSSupport" ref="26"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSNormalImage" ref="543711753"/>
<reference key="NSAlternateImage" ref="491083016"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
@ -20231,12 +20277,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<reference key="NSFont" ref="462791774"/>
</object>
</array>
<string key="NSFrame">{{1, 1}, {168, 382}}</string>
<string key="NSFrame">{{1, 1}, {168, 422}}</string>
<reference key="NSSuperview" ref="197231888"/>
<reference key="NSNextKeyView" ref="807791156"/>
</object>
</array>
<string key="NSFrame">{{17, 41}, {170, 398}}</string>
<string key="NSFrame">{{17, 42}, {170, 438}}</string>
<reference key="NSSuperview" ref="440584564"/>
<reference key="NSNextKeyView" ref="36717965"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
@ -20255,8 +20303,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<object class="NSButton" id="824878810">
<reference key="NSNextResponder" ref="440584564"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 685}, {113, 18}}</string>
<string key="NSFrame">{{17, 726}, {113, 18}}</string>
<reference key="NSSuperview" ref="440584564"/>
<reference key="NSNextKeyView" ref="740875365"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="523499188">
<int key="NSCellFlags">67108864</int>
@ -20278,8 +20327,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<object class="NSButton" id="740875365">
<reference key="NSNextResponder" ref="440584564"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 665}, {178, 18}}</string>
<string key="NSFrame">{{17, 706}, {178, 18}}</string>
<reference key="NSSuperview" ref="440584564"/>
<reference key="NSNextKeyView" ref="616989284"/>
<string key="NSReuseIdentifierKey">_NS:682</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="114282833">
@ -20313,6 +20363,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 12}, {87, 18}}</string>
<reference key="NSSuperview" ref="867699985"/>
<reference key="NSNextKeyView" ref="926053636"/>
<string key="NSReuseIdentifierKey">_NS:682</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="915791450">
@ -20336,11 +20387,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 1}, {168, 38}}</string>
<reference key="NSSuperview" ref="616989284"/>
<reference key="NSNextKeyView" ref="897872091"/>
<string key="NSReuseIdentifierKey">_NS:21</string>
</object>
</array>
<string key="NSFrame">{{17, 605}, {170, 54}}</string>
<string key="NSFrame">{{17, 646}, {170, 54}}</string>
<reference key="NSSuperview" ref="440584564"/>
<reference key="NSNextKeyView" ref="867699985"/>
<string key="NSReuseIdentifierKey">_NS:18</string>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -20370,6 +20423,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="NSvFlags">268</int>
<string key="NSFrame">{{18, 14}, {132, 118}}</string>
<reference key="NSSuperview" ref="239260615"/>
<reference key="NSNextKeyView" ref="197231888"/>
<string key="NSReuseIdentifierKey">_NS:736</string>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
@ -20663,11 +20717,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</array>
<string key="NSFrame">{{1, 1}, {168, 142}}</string>
<reference key="NSSuperview" ref="926053636"/>
<reference key="NSNextKeyView" ref="234283836"/>
<string key="NSReuseIdentifierKey">_NS:21</string>
</object>
</array>
<string key="NSFrame">{{17, 443}, {170, 158}}</string>
<string key="NSFrame">{{17, 484}, {170, 158}}</string>
<reference key="NSSuperview" ref="440584564"/>
<reference key="NSNextKeyView" ref="239260615"/>
<string key="NSReuseIdentifierKey">_NS:18</string>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -20685,7 +20741,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<bool key="NSTransparent">NO</bool>
</object>
</array>
<string key="NSFrameSize">{204, 713}</string>
<string key="NSFrameSize">{204, 754}</string>
<reference key="NSNextKeyView" ref="824878810"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1177}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
@ -26241,7 +26298,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{525, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -26721,7 +26778,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{531, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -26842,7 +26899,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">1</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{523, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -27368,7 +27425,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="NSTextFinder"/>
<int key="NSPreferredTextFinderStyle">0</int>
</object>
<int key="NSTVFlags">6</int>
<int key="NSTVFlags">70</int>
<string key="NSMaxSize">{597, 10000000}</string>
<nil key="NSDelegate"/>
</object>
@ -28453,6 +28510,22 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
</object>
<int key="connectionID">9349</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">changeVideoPixelScaler:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="446328379"/>
</object>
<int key="connectionID">10024</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">changeVideoPixelScaler:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="728839295"/>
</object>
<int key="connectionID">10025</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">launchWebsite:</string>
@ -39591,12 +39664,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<int key="objectID">797</int>
<reference key="object" ref="440584564"/>
<array class="NSMutableArray" key="children">
<reference ref="670018968"/>
<reference ref="197231888"/>
<reference ref="824878810"/>
<reference ref="740875365"/>
<reference ref="616989284"/>
<reference ref="926053636"/>
<reference ref="670018968"/>
</array>
<reference key="parent" ref="1037714331"/>
</object>
@ -41231,6 +41304,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<reference ref="385829730"/>
<reference ref="454811629"/>
<reference ref="307101671"/>
<reference ref="567901344"/>
<reference ref="76853011"/>
</array>
<reference key="parent" ref="197231888"/>
</object>
@ -48162,6 +48237,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<reference ref="951679807"/>
<reference ref="472615298"/>
<reference ref="518102648"/>
<reference ref="446328379"/>
<reference ref="728839295"/>
</array>
<reference key="parent" ref="920883390"/>
</object>
@ -52634,6 +52711,26 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<reference key="object" ref="67001337"/>
<reference key="parent" ref="606253351"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10020</int>
<reference key="object" ref="446328379"/>
<reference key="parent" ref="1003123887"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10021</int>
<reference key="object" ref="728839295"/>
<reference key="parent" ref="1003123887"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10026</int>
<reference key="object" ref="567901344"/>
<reference key="parent" ref="807791156"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10027</int>
<reference key="object" ref="76853011"/>
<reference key="parent" ref="807791156"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
@ -52651,6 +52748,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="10013.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10014.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10015.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10020.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10021.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10026.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="10027.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1034.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1035.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1036.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -53352,6 +53453,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="3781.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="3782.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="3783.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference key="3784.IBNSViewMetadataGestureRecognizers" ref="0"/>
<string key="3784.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference key="3786.IBNSViewMetadataGestureRecognizers" ref="0"/>
<string key="3786.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -54999,9 +55101,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<boolean value="NO" key="794.NSWindowTemplate.visibleAtLaunch"/>
<dictionary class="NSMutableDictionary" key="795.IBAttributePlaceholdersKey"/>
<string key="795.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="796.IBPersistedLastKnownCanvasPosition">{730, 913}</string>
<string key="796.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="796.IBWindowTemplateEditedContentRect">{{126, 189}, {204, 713}}</string>
<boolean value="NO" key="796.NSWindowTemplate.visibleAtLaunch"/>
<reference key="797.IBNSViewMetadataGestureRecognizers" ref="0"/>
<string key="797.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="7971.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="7972.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -55876,7 +55980,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">10019</int>
<int key="maxID">10027</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -56643,6 +56747,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="changeCoreEmuFlags:">id</string>
<string key="changeCoreSpeed:">id</string>
<string key="changeFirmwareSettings:">id</string>
<string key="changeGpuDimensions:">id</string>
<string key="changeHardwareMicGain:">id</string>
<string key="changeHardwareMicMute:">id</string>
<string key="changeRomSaveType:">id</string>
@ -56709,6 +56814,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="name">changeFirmwareSettings:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="changeGpuDimensions:">
<string key="name">changeGpuDimensions:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="changeHardwareMicGain:">
<string key="name">changeHardwareMicGain:</string>
<string key="candidateClassName">id</string>
@ -56994,6 +57103,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="changeCoreEmuFlags:">id</string>
<string key="changeCoreSpeed:">id</string>
<string key="changeFirmwareSettings:">id</string>
<string key="changeGpuDimensions:">id</string>
<string key="changeHardwareMicGain:">id</string>
<string key="changeHardwareMicMute:">id</string>
<string key="changeRomSaveType:">id</string>
@ -57064,6 +57174,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
<string key="name">changeFirmwareSettings:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="changeGpuDimensions:">
<string key="name">changeGpuDimensions:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="changeHardwareMicGain:">
<string key="name">changeHardwareMicGain:</string>
<string key="candidateClassName">id</string>

View File

@ -31,9 +31,11 @@ void RenderNearest2X (SSurface Src, SSurface Dst);
void RenderLQ2X (SSurface Src, SSurface Dst);
void RenderLQ2XS (SSurface Src, SSurface Dst);
void RenderHQ2X (SSurface Src, SSurface Dst);
void RenderHQ2XS (SSurface Src, SSurface Dst);
void RenderHQ3X (SSurface Src, SSurface Dst);
void RenderHQ3XS (SSurface Src, SSurface Dst);
void RenderHQ4X (SSurface Src, SSurface Dst);
void RenderHQ4XS (SSurface Src, SSurface Dst);
void RenderHQ2XS (SSurface Src, SSurface Dst);
void Render2xSaI (SSurface Src, SSurface Dst);
void RenderSuper2xSaI (SSurface Src, SSurface Dst);
void RenderSuperEagle (SSurface Src, SSurface Dst);

View File

@ -26,8 +26,8 @@
* this file, you may extend this exception to your version of the
* file, but you are not obligated to do so. If you do not wish to
* do so, delete this exception statement from your version.
*/
*/
#include "filter.h"
#include "interp.h"
@ -149,58 +149,60 @@
// }
//}
static void hq2x_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1, const u32* src2, unsigned count)
static void hq2x_32_def(u32 *__restrict dst0, u32 *__restrict dst1, const u32 *src0, const u32 *src1, const u32 *src2, unsigned count)
{
unsigned i;
for(i=0;i<count;++i) {
unsigned char mask;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i>0) {
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
} else {
c[0] = c[1];
c[3] = c[4];
c[6] = c[7];
}
if (i<count-1) {
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
} else {
c[2] = c[1];
c[5] = c[4];
c[8] = c[7];
}
mask = 0;
if (interp_32_diff(c[0], c[4]))
mask |= 1 << 0;
if (interp_32_diff(c[1], c[4]))
mask |= 1 << 1;
if (interp_32_diff(c[2], c[4]))
mask |= 1 << 2;
if (interp_32_diff(c[3], c[4]))
mask |= 1 << 3;
if (interp_32_diff(c[5], c[4]))
mask |= 1 << 4;
if (interp_32_diff(c[6], c[4]))
mask |= 1 << 5;
if (interp_32_diff(c[7], c[4]))
mask |= 1 << 6;
if (interp_32_diff(c[8], c[4]))
mask |= 1 << 7;
for (int i = 0; i < count; ++i)
{
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i > 0)
{
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
}
else
{
c[0] = c[1];
c[3] = c[4];
c[6] = c[7];
}
if (i < count - 1)
{
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
}
else
{
c[2] = c[1];
c[5] = c[4];
c[8] = c[7];
}
if (interp_32_diff(c[0], c[4]))
mask |= 1 << 0;
if (interp_32_diff(c[1], c[4]))
mask |= 1 << 1;
if (interp_32_diff(c[2], c[4]))
mask |= 1 << 2;
if (interp_32_diff(c[3], c[4]))
mask |= 1 << 3;
if (interp_32_diff(c[5], c[4]))
mask |= 1 << 4;
if (interp_32_diff(c[6], c[4]))
mask |= 1 << 5;
if (interp_32_diff(c[7], c[4]))
mask |= 1 << 6;
if (interp_32_diff(c[8], c[4]))
mask |= 1 << 7;
#define P0 dst0[0]
#define P1 dst0[1]
#define P2 dst1[0]
@ -223,11 +225,12 @@ static void hq2x_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
#define I97(p0,p1) interp_32_97(c[p0], c[p1])
#define I1411(p0,p1,p2) interp_32_1411(c[p0], c[p1], c[p2])
#define I151(p0,p1) interp_32_151(c[p0], c[p1])
switch (mask) {
switch (mask)
{
#include "hq2x.h"
}
}
#undef P0
#undef P1
#undef P2
@ -250,13 +253,13 @@ static void hq2x_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
#undef I97
#undef I1411
#undef I151
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 2;
dst1 += 2;
}
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 2;
dst1 += 2;
}
}
/***************************************************************************/
@ -404,77 +407,80 @@ static void hq2x_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
// }
//}
static void hq2xS_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1, const u32* src2, unsigned count)
static void hq2xS_32_def(u32 *__restrict dst0, u32 *__restrict dst1, const u32 *src0, const u32 *src1, const u32 *src2, unsigned count)
{
unsigned i;
for(i=0;i<count;++i) {
unsigned char mask;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i>0) {
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
} else {
c[0] = src0[0];
c[3] = src1[0];
c[6] = src2[0];
}
if (i<count-1) {
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
} else {
c[2] = src0[0];
c[5] = src1[0];
c[8] = src2[0];
}
mask = 0;
// hq2xS dynamic edge detection:
// simply comparing the center color against its surroundings will give bad results in many cases,
// so, instead, compare the center color relative to the max difference in brightness of this 3x3 block
int brightArray[9];
int maxBright = 0, minBright = 999999;
for(int j = 0 ; j < 9 ; j++)
for (int i = 0; i < count; ++i)
{
const int b = (int)((c[j] & 0xF8));
const int g = (int)((c[j] & 0xF800)) >> 8;
const int r = (int)((c[j] & 0xF80000)) >> 16;
const int bright = r+r+r + g+g+g + b+b;
if(bright > maxBright) maxBright = bright;
if(bright < minBright) minBright = bright;
brightArray[j] = bright;
}
int diffBright = ((maxBright - minBright) * 7) >> 4;
if(diffBright > 7)
{
const int centerBright = brightArray[4];
if(ABS(brightArray[0] - centerBright) > diffBright)
mask |= 1 << 0;
if(ABS(brightArray[1] - centerBright) > diffBright)
mask |= 1 << 1;
if(ABS(brightArray[2] - centerBright) > diffBright)
mask |= 1 << 2;
if(ABS(brightArray[3] - centerBright) > diffBright)
mask |= 1 << 3;
if(ABS(brightArray[5] - centerBright) > diffBright)
mask |= 1 << 4;
if(ABS(brightArray[6] - centerBright) > diffBright)
mask |= 1 << 5;
if(ABS(brightArray[7] - centerBright) > diffBright)
mask |= 1 << 6;
if(ABS(brightArray[8] - centerBright) > diffBright)
mask |= 1 << 7;
}
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i > 0)
{
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
}
else
{
c[0] = src0[0];
c[3] = src1[0];
c[6] = src2[0];
}
if (i < count - 1)
{
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
}
else
{
c[2] = src0[0];
c[5] = src1[0];
c[8] = src2[0];
}
// hq2xS dynamic edge detection:
// simply comparing the center color against its surroundings will give bad results in many cases,
// so, instead, compare the center color relative to the max difference in brightness of this 3x3 block
int brightArray[9];
int maxBright = 0, minBright = 999999;
for(int j = 0 ; j < 9 ; j++)
{
const int b = (int)((c[j] & 0xF8));
const int g = (int)((c[j] & 0xF800)) >> 8;
const int r = (int)((c[j] & 0xF80000)) >> 16;
const int bright = r+r+r + g+g+g + b+b;
if(bright > maxBright) maxBright = bright;
if(bright < minBright) minBright = bright;
brightArray[j] = bright;
}
int diffBright = ((maxBright - minBright) * 7) >> 4;
if(diffBright > 7)
{
const int centerBright = brightArray[4];
if(ABS(brightArray[0] - centerBright) > diffBright)
mask |= 1 << 0;
if(ABS(brightArray[1] - centerBright) > diffBright)
mask |= 1 << 1;
if(ABS(brightArray[2] - centerBright) > diffBright)
mask |= 1 << 2;
if(ABS(brightArray[3] - centerBright) > diffBright)
mask |= 1 << 3;
if(ABS(brightArray[5] - centerBright) > diffBright)
mask |= 1 << 4;
if(ABS(brightArray[6] - centerBright) > diffBright)
mask |= 1 << 5;
if(ABS(brightArray[7] - centerBright) > diffBright)
mask |= 1 << 6;
if(ABS(brightArray[8] - centerBright) > diffBright)
mask |= 1 << 7;
}
#define P0 dst0[0]
#define P1 dst0[1]
#define P2 dst1[0]
@ -497,11 +503,12 @@ static void hq2xS_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
#define I97(p0,p1) interp_32_97(c[p0], c[p1])
#define I1411(p0,p1,p2) interp_32_1411(c[p0], c[p1], c[p2])
#define I151(p0,p1) interp_32_151(c[p0], c[p1])
switch (mask) {
switch (mask)
{
#include "hq2x.h"
}
}
#undef P0
#undef P1
#undef P2
@ -524,13 +531,13 @@ static void hq2xS_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
#undef I97
#undef I1411
#undef I151
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 2;
dst1 += 2;
}
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 2;
dst1 += 2;
}
}
//
//void hq2x(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
@ -562,32 +569,32 @@ static void hq2xS_32_def(u32* dst0, u32* dst1, const u32* src0, const u32* src1,
// hq2x_16_def(dst0, dst1, src0, src1, src1, width);
//}
void hq2x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u8 *dstPtr, u32 dstPitch, int width, int height)
void hq2x32(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 2);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + (srcPitch >> 2);
u32 *src2 = src1 + (srcPitch >> 2);
hq2x_32_def(dst0, dst1, src0, src0, src1, width);
int count = height;
count -= 2;
while(count) {
dst0 += dstPitch >> 1;
dst1 += dstPitch >> 1;
hq2x_32_def(dst0, dst1, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch >> 2;
--count;
}
dst0 += dstPitch >> 1;
dst1 += dstPitch >> 1;
hq2x_32_def(dst0, dst1, src0, src1, src1, width);
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 1);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq2x_32_def(dst0, dst1, src0, src0, src1, width);
int count = height;
count -= 2;
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
hq2x_32_def(dst0, dst1, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
hq2x_32_def(dst0, dst1, src0, src1, src1, width);
}
//
//void hq2xS(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
@ -619,32 +626,32 @@ void hq2x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
// hq2xS_16_def(dst0, dst1, src0, src1, src1, width);
//}
void hq2xS32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u8 *dstPtr, u32 dstPitch, int width, int height)
void hq2xS32(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 2);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + (srcPitch >> 2);
u32 *src2 = src1 + (srcPitch >> 2);
hq2xS_32_def(dst0, dst1, src0, src0, src1, width);
int count = height;
count -= 2;
while(count) {
dst0 += dstPitch >> 1;
dst1 += dstPitch >> 1;
hq2xS_32_def(dst0, dst1, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch >> 2;
--count;
}
dst0 += dstPitch >> 1;
dst1 += dstPitch >> 1;
hq2xS_32_def(dst0, dst1, src0, src1, src1, width);
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 1);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq2xS_32_def(dst0, dst1, src0, src0, src1, width);
int count = height;
count -= 2;
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
hq2xS_32_def(dst0, dst1, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
hq2xS_32_def(dst0, dst1, src0, src1, src1, width);
}
//void hq2x_init(unsigned bits_per_pixel)
@ -652,28 +659,12 @@ void hq2xS32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
// interp_set(bits_per_pixel);
//}
void RenderHQ2X (SSurface Src, SSurface Dst)
void RenderHQ2X(SSurface Src, SSurface Dst)
{
unsigned char *lpSrc, *lpDst;
lpSrc = Src.Surface;
lpDst = Dst.Surface;
hq2x32 (lpSrc, Src.Pitch*2,
lpSrc,
lpDst, Dst.Pitch*2 , Src.Width, Src.Height);
hq2x32(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch, Src.Width, Src.Height);
}
void RenderHQ2XS (SSurface Src, SSurface Dst)
void RenderHQ2XS(SSurface Src, SSurface Dst)
{
unsigned char *lpSrc, *lpDst;
lpSrc = Src.Surface;
lpDst = Dst.Surface;
hq2xS32 (lpSrc, Src.Pitch*2,
lpSrc,
lpDst, Dst.Pitch*2 , Src.Width, Src.Height);
hq2xS32(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch, Src.Width, Src.Height);
}

308
desmume/src/filter/hq3x.cpp Normal file
View File

@ -0,0 +1,308 @@
/*
* This file is part of the Advance project.
*
* Copyright (C) 2003 Andrea Mazzoleni
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* In addition, as a special exception, Andrea Mazzoleni
* gives permission to link the code of this program with
* the MAME library (or with modified versions of MAME that use the
* same license as MAME), and distribute linked combinations including
* the two. You must obey the GNU General Public License in all
* respects for all of the code used other than MAME. If you modify
* this file, you may extend this exception to your version of the
* file, but you are not obligated to do so. If you do not wish to
* do so, delete this exception statement from your version.
*/
#include "filter.h"
#include "interp.h"
/***************************************************************************/
/* HQ3x C implementation */
/*
* This effect is a rewritten implementation of the hq3x effect made by Maxim Stepin
*/
void hq3x_32_def(u32 *__restrict dst0, u32 *__restrict dst1, u32 *__restrict dst2, const u32 *src0, const u32 *src1, const u32 *src2, int count)
{
for (int i = 0; i < count; ++i)
{
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i > 0)
{
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
}
else
{
c[0] = c[1];
c[3] = c[4];
c[6] = c[7];
}
if (i < count - 1)
{
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
}
else
{
c[2] = c[1];
c[5] = c[4];
c[8] = c[7];
}
if (interp_32_diff(c[0], c[4]))
mask |= 1 << 0;
if (interp_32_diff(c[1], c[4]))
mask |= 1 << 1;
if (interp_32_diff(c[2], c[4]))
mask |= 1 << 2;
if (interp_32_diff(c[3], c[4]))
mask |= 1 << 3;
if (interp_32_diff(c[5], c[4]))
mask |= 1 << 4;
if (interp_32_diff(c[6], c[4]))
mask |= 1 << 5;
if (interp_32_diff(c[7], c[4]))
mask |= 1 << 6;
if (interp_32_diff(c[8], c[4]))
mask |= 1 << 7;
#define P(a, b) dst##b[a]
#define MUR interp_32_diff(c[1], c[5])
#define MDR interp_32_diff(c[5], c[7])
#define MDL interp_32_diff(c[7], c[3])
#define MUL interp_32_diff(c[3], c[1])
#define I1(p0) c[p0]
#define I2(i0, i1, p0, p1) interp_32_##i0##i1(c[p0], c[p1])
#define I3(i0, i1, i2, p0, p1, p2) interp_32_##i0##i1##i2(c[p0], c[p1], c[p2])
switch (mask)
{
#include "hq3x.dat"
}
#undef P
#undef MUR
#undef MDR
#undef MDL
#undef MUL
#undef I1
#undef I2
#undef I3
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 3;
dst1 += 3;
dst2 += 3;
}
}
void hq3xS_32_def(u32 *__restrict dst0, u32 *__restrict dst1, u32 *__restrict dst2, const u32 *src0, const u32 *src1, const u32 *src2, int count)
{
for (int i = 0; i < count; ++i)
{
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
c[4] = src1[0];
c[7] = src2[0];
if (i > 0)
{
c[0] = src0[-1];
c[3] = src1[-1];
c[6] = src2[-1];
}
else
{
c[0] = c[1];
c[3] = c[4];
c[6] = c[7];
}
if (i < count - 1)
{
c[2] = src0[1];
c[5] = src1[1];
c[8] = src2[1];
}
else
{
c[2] = c[1];
c[5] = c[4];
c[8] = c[7];
}
// hq3xS dynamic edge detection:
// simply comparing the center color against its surroundings will give bad results in many cases,
// so, instead, compare the center color relative to the max difference in brightness of this 3x3 block
int brightArray[9];
int maxBright = 0, minBright = 999999;
for(int j = 0 ; j < 9 ; j++)
{
const int b = (int)((c[j] & 0xF8));
const int g = (int)((c[j] & 0xF800)) >> 8;
const int r = (int)((c[j] & 0xF80000)) >> 16;
const int bright = r+r+r + g+g+g + b+b;
if(bright > maxBright) maxBright = bright;
if(bright < minBright) minBright = bright;
brightArray[j] = bright;
}
unsigned int diffBright = ((maxBright - minBright) * 7) >> 4;
if(diffBright > 7)
{
const int centerBright = brightArray[4];
if(ABS(brightArray[0] - centerBright) > diffBright)
mask |= 1 << 0;
if(ABS(brightArray[1] - centerBright) > diffBright)
mask |= 1 << 1;
if(ABS(brightArray[2] - centerBright) > diffBright)
mask |= 1 << 2;
if(ABS(brightArray[3] - centerBright) > diffBright)
mask |= 1 << 3;
if(ABS(brightArray[5] - centerBright) > diffBright)
mask |= 1 << 4;
if(ABS(brightArray[6] - centerBright) > diffBright)
mask |= 1 << 5;
if(ABS(brightArray[7] - centerBright) > diffBright)
mask |= 1 << 6;
if(ABS(brightArray[8] - centerBright) > diffBright)
mask |= 1 << 7;
}
#define P(a, b) dst##b[a]
#define MUR false//(ABS(brightArray[1] - brightArray[5]) > diffBright) // top-right
#define MDR false//(ABS(brightArray[5] - brightArray[7]) > diffBright) // bottom-right
#define MDL false//(ABS(brightArray[7] - brightArray[3]) > diffBright) // bottom-left
#define MUL false//(ABS(brightArray[3] - brightArray[1]) > diffBright) // top-left
#define I1(p0) c[p0]
#define I2(i0, i1, p0, p1) interp_32_##i0##i1(c[p0], c[p1])
#define I3(i0, i1, i2, p0, p1, p2) interp_32_##i0##i1##i2(c[p0], c[p1], c[p2])
switch (mask)
{
#include "hq3x.dat"
}
#undef P
#undef MUR
#undef MDR
#undef MDL
#undef MUL
#undef I1
#undef I2
#undef I3
src0 += 1;
src1 += 1;
src2 += 1;
dst0 += 3;
dst1 += 3;
dst2 += 3;
}
}
void hq3x32(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch / 3);
u32 *dst2 = dst1 + (dstPitch / 3);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq3x_32_def(dst0, dst1, dst2, src0, src0, src1, width);
int count = height;
count -= 2;
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
hq3x_32_def(dst0, dst1, dst2, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
hq3x_32_def(dst0, dst1, dst2, src0, src1, src1, width);
}
void hq3x32S(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch / 3);
u32 *dst2 = dst1 + (dstPitch / 3);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq3xS_32_def(dst0, dst1, dst2, src0, src0, src1, width);
int count = height;
count -= 2;
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
hq3xS_32_def(dst0, dst1, dst2, src0, src1, src2, width);
src0 = src1;
src1 = src2;
src2 += srcPitch;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
hq3xS_32_def(dst0, dst1, dst2, src0, src1, src1, width);
}
void RenderHQ3X(SSurface Src, SSurface Dst)
{
hq3x32(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch*3/2, Src.Width, Src.Height);
}
void RenderHQ3XS(SSurface Src, SSurface Dst)
{
hq3x32S(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch*3/2, Src.Width, Src.Height);
}

2913
desmume/src/filter/hq3x.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@ -39,15 +39,13 @@
*/
void hq4x_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
const u32* src0, const u32* src1, const u32* src2,
void hq4x_32_def(u32 *__restrict dst0, u32 *__restrict dst1, u32 *__restrict dst2, u32 *__restrict dst3,
const u32 *src0, const u32 *src1, const u32 *src2,
unsigned count, unsigned flag)
{
unsigned i;
for(i=0;i<count;++i) {
unsigned char mask;
for (int i = 0; i < count; ++i)
{
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
@ -79,9 +77,7 @@ void hq4x_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
c[5] = src1[0];
c[8] = src2[0];
}
mask = 0;
if (interp_32_diff(c[0], c[4]))
mask |= 1 << 0;
if (interp_32_diff(c[1], c[4]))
@ -108,8 +104,9 @@ void hq4x_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
#define I2(i0, i1, p0, p1) interp_32_##i0##i1(c[p0], c[p1])
#define I3(i0, i1, i2, p0, p1, p2) interp_32_##i0##i1##i2(c[p0], c[p1], c[p2])
switch (mask) {
#include "hq4x.dat"
switch (mask)
{
#include "hq4x.dat"
}
#undef P
@ -131,15 +128,13 @@ void hq4x_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
}
}
void hq4xS_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
const u32* src0, const u32* src1, const u32* src2,
void hq4xS_32_def(u32 *__restrict dst0, u32 *__restrict dst1, u32 *__restrict dst2, u32 *__restrict dst3,
const u32 *src0, const u32 *src1, const u32 *src2,
unsigned count, unsigned flag)
{
unsigned i;
for(i=0;i<count;++i) {
unsigned char mask;
for (int i = 0; i < count; ++i)
{
u8 mask = 0;
u32 c[9];
c[1] = src0[0];
@ -172,7 +167,6 @@ void hq4xS_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
c[8] = src2[0];
}
mask = 0;
// hq4xS dynamic edge detection:
// simply comparing the center color against its surroundings will give bad results in many cases,
// so, instead, compare the center color relative to the max difference in brightness of this 3x3 block
@ -220,7 +214,8 @@ void hq4xS_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
#define I2(i0, i1, p0, p1) interp_32_##i0##i1(c[p0], c[p1])
#define I3(i0, i1, i2, p0, p1, p2) interp_32_##i0##i1##i2(c[p0], c[p1], c[p2])
switch (mask) {
switch (mask)
{
#include "hq4x.dat"
}
@ -243,8 +238,7 @@ void hq4xS_32_def(u32* dst0, u32* dst1, u32* dst2, u32* dst3,
}
}
void hq4x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u8 *dstPtr, u32 dstPitch, int width, int height)
void hq4x32(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 2);
@ -252,14 +246,15 @@ void hq4x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u32 *dst3 = dst2 + (dstPitch >> 2);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + (srcPitch >> 2);
u32 *src2 = src1 + (srcPitch >> 2);
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq4x_32_def(dst0, dst1, dst2, dst3, src0, src0, src1, width, 0);
int count = height;
count -= 2;
while(count) {
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
@ -267,7 +262,7 @@ void hq4x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
hq4x_32_def(dst0, dst1, dst2, dst3, src0, src1, src2, width, 0);
src0 = src1;
src1 = src2;
src2 += srcPitch >> 2;
src2 += srcPitch;
--count;
}
@ -278,8 +273,7 @@ void hq4x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
hq4x_32_def(dst0, dst1, dst2, dst3, src0, src1, src1, width, 0);
}
void hq4x32S(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u8 *dstPtr, u32 dstPitch, int width, int height)
void hq4x32S(const u8 *srcPtr, const u32 srcPitch, const u8 *dstPtr, const u32 dstPitch, const int width, const int height)
{
u32 *dst0 = (u32 *)dstPtr;
u32 *dst1 = dst0 + (dstPitch >> 2);
@ -287,14 +281,15 @@ void hq4x32S(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
u32 *dst3 = dst2 + (dstPitch >> 2);
u32 *src0 = (u32 *)srcPtr;
u32 *src1 = src0 + (srcPitch >> 2);
u32 *src2 = src1 + (srcPitch >> 2);
u32 *src1 = src0 + srcPitch;
u32 *src2 = src1 + srcPitch;
hq4xS_32_def(dst0, dst1, dst2, dst3, src0, src0, src1, width, 0);
int count = height;
count -= 2;
while(count) {
while (count)
{
dst0 += dstPitch;
dst1 += dstPitch;
dst2 += dstPitch;
@ -302,7 +297,7 @@ void hq4x32S(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
hq4xS_32_def(dst0, dst1, dst2, dst3, src0, src1, src2, width, 0);
src0 = src1;
src1 = src2;
src2 += srcPitch >> 2;
src2 += srcPitch;
--count;
}
@ -313,26 +308,12 @@ void hq4x32S(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */,
hq4xS_32_def(dst0, dst1, dst2, dst3, src0, src1, src1, width, 0);
}
void RenderHQ4X (SSurface Src, SSurface Dst)
void RenderHQ4X(SSurface Src, SSurface Dst)
{
unsigned char *lpSrc, *lpDst;
lpSrc = Src.Surface;
lpDst = Dst.Surface;
hq4x32 (lpSrc, Src.Pitch*2,
lpSrc,
lpDst, Dst.Pitch*2 , Src.Width, Src.Height);
hq4x32(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch*2, Src.Width, Src.Height);
}
void RenderHQ4XS (SSurface Src, SSurface Dst)
void RenderHQ4XS(SSurface Src, SSurface Dst)
{
unsigned char *lpSrc, *lpDst;
lpSrc = Src.Surface;
lpDst = Dst.Surface;
hq4x32S (lpSrc, Src.Pitch*2,
lpSrc,
lpDst, Dst.Pitch*2 , Src.Width, Src.Height);
hq4x32S(Src.Surface, Src.Pitch >> 1, Dst.Surface, Dst.Pitch*2, Src.Width, Src.Height);
}

View File

@ -1,40 +0,0 @@
/*
* This file is part of the Advance project.
*
* Copyright (C) 2003, 2004, 2008 Andrea Mazzoleni
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* In addition, as a special exception, Andrea Mazzoleni
* gives permission to link the code of this program with
* the MAME library (or with modified versions of MAME that use the
* same license as MAME), and distribute linked combinations including
* the two. You must obey the GNU General Public License in all
* respects for all of the code used other than MAME. If you modify
* this file, you may extend this exception to your version of the
* file, but you are not obligated to do so. If you do not wish to
* do so, delete this exception statement from your version.
*/
#ifndef __HQ4X_H
#define __HQ4X_H
#include "segment.h"
void hq4x_16_def(interp_uint16* dst0, interp_uint16* dst1, interp_uint16* dst2, interp_uint16* dst3, const interp_uint16* src0, const interp_uint16* src1, const interp_uint16* src2, unsigned count, unsigned flag);
void hq4x_32_def(interp_uint32* dst0, interp_uint32* dst1, interp_uint32* dst2, interp_uint32* dst3, const interp_uint32* src0, const interp_uint32* src1, const interp_uint32* src2, unsigned count, unsigned flag);
#endif

View File

@ -48,7 +48,9 @@ const VideoFilterAttributes VideoFilterAttributesList[] = {
{VideoFilterTypeID_2xBRZ, "2xBRZ", &Render2xBRZ, 2, 1, 0},
{VideoFilterTypeID_3xBRZ, "3xBRZ", &Render3xBRZ, 3, 1, 0},
{VideoFilterTypeID_4xBRZ, "4xBRZ", &Render4xBRZ, 4, 1, 0},
{VideoFilterTypeID_5xBRZ, "5xBRZ", &Render5xBRZ, 5, 1, 0} };
{VideoFilterTypeID_5xBRZ, "5xBRZ", &Render5xBRZ, 5, 1, 0},
{VideoFilterTypeID_HQ3X, "HQ3x", &RenderHQ3X, 3, 1, 0},
{VideoFilterTypeID_HQ3XS, "HQ3xS", &RenderHQ3XS, 3, 1, 0} };
// Parameters for Scanline filter
int scanline_filter_a = 0;

View File

@ -70,6 +70,8 @@ enum VideoFilterTypeID
VideoFilterTypeID_3xBRZ,
VideoFilterTypeID_4xBRZ,
VideoFilterTypeID_5xBRZ,
VideoFilterTypeID_HQ3X,
VideoFilterTypeID_HQ3XS,
VideoFilterTypeIDCount // Make sure this one is always last
};