From ddac3be2ad981b551665f27303143ba0ecee01b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=A4=E6=A9=8B=20=E5=AE=8F?= Date: Wed, 15 May 2019 18:07:16 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B8=E3=82=A7=E3=82=AF?= =?UTF-8?q?=E3=83=88=20=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 + .gitignore | 278 +++ AlphaFix/AlphaFix.cpp | 446 ++++ AlphaFix/AlphaFix.h | 105 + AlphaFix/AlphaFixPiPL.r | 76 + AlphaFix/Fs_Target.h | 71 + AlphaFix/Win/AlphaFix.vcxproj | 334 +++ AlphaFix/Win/AlphaFix.vcxproj.filters | 154 ++ AlphaFix/Win/AlphaFixPiPL.rc | 84 + AlphaThreshold/Fs_Entry.h | 227 ++ AlphaThreshold/Fs_Target.h | 81 + AlphaThreshold/Win/alphaThreshold.sln | 26 + AlphaThreshold/Win/alphaThreshold.vcxproj | 591 +++++ .../Win/alphaThreshold.vcxproj.filters | 184 ++ AlphaThreshold/Win/alphaThresholdPiPL.rc | 84 + AlphaThreshold/alphaThreshold.cpp | 242 ++ AlphaThreshold/alphaThreshold.h | 76 + AlphaThreshold/alphaThresholdPiPL.r | 82 + AnimatedNoise/AnimatedNoise.cpp | 940 ++++++++ AnimatedNoise/AnimatedNoise.h | 104 + AnimatedNoise/AnimatedNoisePiPL.r | 80 + AnimatedNoise/Fs_Target.h | 85 + AnimatedNoise/Win/AnimatedNoise.vcxproj | 341 +++ .../Win/AnimatedNoise.vcxproj.filters | 156 ++ AnimatedNoise/Win/AnimatedNoisePiPL.rc | 84 + CCplus/CCplus.cpp | 630 +++++ CCplus/CCplus.h | 211 ++ CCplus/CCplusPiPL.r | 78 + CCplus/Fs_Entry.h | 200 ++ CCplus/Fs_Target.h | 78 + CCplus/Win/CCplus.vcxproj | 330 +++ CCplus/Win/CCplus.vcxproj.filters | 159 ++ CCplus/Win/CCplusPiPL.rc | 84 + ChannelBlur/ChannelBlur.cpp | 262 +++ ChannelBlur/ChannelBlur.h | 101 + ChannelBlur/ChannelBlurPiPL.r | 79 + ChannelBlur/Fs_Entry.h | 227 ++ ChannelBlur/Fs_Target.h | 81 + ChannelBlur/Win/ChannelBlur.sln | 31 + ChannelBlur/Win/ChannelBlur.vcxproj | 591 +++++ ChannelBlur/Win/ChannelBlur.vcxproj.filters | 184 ++ ChannelBlur/Win/ChannelBlurPiPL.rc | 84 + ChannelBlur/Win/PluginSkeletonPiPL.rc | 84 + ChannelNoise/ChannelNoise.cpp | 612 +++++ ChannelNoise/ChannelNoise.h | 90 + ChannelNoise/ChannelNoisePiPL.r | 77 + ChannelNoise/Fs_Target.h | 75 + ChannelNoise/Win/ChannelNoise.vcxproj | 584 +++++ ChannelNoise/Win/ChannelNoise.vcxproj.filters | 154 ++ ChannelNoise/Win/ChannelNoisePiPL.rc | 84 + ChannelShift/ChannelShift.cpp | 391 +++ ChannelShift/ChannelShift.h | 136 ++ ChannelShift/ChannelShiftPiPL.r | 78 + ChannelShift/Fs_Entry.h | 224 ++ ChannelShift/Fs_Target.h | 77 + .../ChannelShift.tlog/unsuccessfulbuild | 0 ChannelShift/Win/ChannelShift.vcxproj | 332 +++ ChannelShift/Win/ChannelShift.vcxproj.filters | 157 ++ ChannelShift/Win/ChannelShiftPiPL.rc | 84 + ColorChange/ColorChange.cpp | 492 ++++ ColorChange/ColorChange.h | 161 ++ ColorChange/ColorChangePiPL.r | 75 + ColorChange/Fs_Entry.h | 224 ++ ColorChange/Fs_Target.h | 66 + ColorChange/Win/ColorChange.vcxproj | 332 +++ ColorChange/Win/ColorChange.vcxproj.filters | 157 ++ ColorChange/Win/ColorChangePiPL.rc | 84 + ColorChangeSimple/ColorChangeSimple.cpp | 333 +++ ColorChangeSimple/ColorChangeSimple.h | 79 + ColorChangeSimple/ColorChangeSimplePiPL.r | 78 + ColorChangeSimple/Fs_Entry.h | 224 ++ ColorChangeSimple/Fs_Target.h | 78 + .../Win/ColorChangeSimple.vcxproj | 327 +++ .../Win/ColorChangeSimple.vcxproj.filters | 154 ++ .../Win/ColorChangeSimplePiPL.rc | 84 + ColorKey/ColorKey.cpp | 290 +++ ColorKey/ColorKey.h | 93 + ColorKey/ColorKeyPiPL.r | 82 + ColorKey/Fs_Entry.h | 227 ++ ColorKey/Fs_Target.h | 81 + ColorKey/Win/ColorKey.vcxproj | 585 +++++ ColorKey/Win/ColorKey.vcxproj.filters | 166 ++ ColorKey/Win/ColorKeyPiPL.rc | 84 + ColorMatKey/ColorMatKey.cpp | 644 +++++ ColorMatKey/ColorMatKey.h | 136 ++ ColorMatKey/ColorMatKeyPiPL.r | 79 + ColorMatKey/ColorMatKeySub8.cpp | 443 ++++ ColorMatKey/Fs_Entry.h | 227 ++ ColorMatKey/Fs_Target.h | 81 + ColorMatKey/Win/ColorMatKey.sln | 36 + ColorMatKey/Win/ColorMatKey.vcxproj | 592 +++++ ColorMatKey/Win/ColorMatKey.vcxproj.filters | 187 ++ ColorMatKey/Win/ColorMatKeyPiPL.rc | 84 + ColorMatKey/Win/ColorMatPiPL.rc | 84 + ColorMatKey/Win/PropertySheet.props | 15 + ColorMatKey/Win/PropertySheet1.props | 15 + ColorMatKey/Win/Star_ColorfulPiPL.rc | 84 + CreateAlpha/CreateAlpha.cpp | 380 +++ CreateAlpha/CreateAlpha.h | 64 + CreateAlpha/CreateAlphaPiPL.r | 78 + CreateAlpha/Fs_Target.h | 81 + CreateAlpha/Win/CreateAlpha.vcxproj | 328 +++ CreateAlpha/Win/CreateAlpha.vcxproj.filters | 145 ++ CreateAlpha/Win/CreateAlphaPiPL.rc | 84 + EdgeBlur/EdgeBlur.cpp | 434 ++++ EdgeBlur/EdgeBlur.h | 106 + EdgeBlur/EdgeBlurPiPL.r | 72 + EdgeBlur/EdgeBlurSub16.cpp | 247 ++ EdgeBlur/EdgeBlurSub32.cpp | 249 ++ EdgeBlur/EdgeBlurSub8.cpp | 247 ++ EdgeBlur/Fs_Target.h | 78 + EdgeBlur/Win/EdgeBlur.vcxproj | 329 +++ EdgeBlur/Win/EdgeBlur.vcxproj.filters | 148 ++ EdgeBlur/Win/EdgeBlurPiPL.rc | 84 + EdgeLine/EdgeLine.cpp | 370 +++ EdgeLine/EdgeLine.h | 112 + EdgeLine/EdgeLinePiPL.r | 82 + EdgeLine/Fs_Entry.h | 227 ++ EdgeLine/Fs_Target.h | 81 + EdgeLine/Win/EdgeLine.vcxproj | 591 +++++ EdgeLine/Win/EdgeLine.vcxproj.filters | 184 ++ EdgeLine/Win/EdgeLinePiPL.rc | 84 + Extract-Hi/Extract-Hi.cpp | 597 +++++ Extract-Hi/Extract-Hi.h | 97 + Extract-Hi/Extract-HiPiPL.r | 79 + Extract-Hi/Fs_Entry.h | 227 ++ Extract-Hi/Fs_Target.h | 81 + Extract-Hi/Win/Extract-Hi.sln | 28 + Extract-Hi/Win/Extract-Hi.vcxproj | 591 +++++ Extract-Hi/Win/Extract-Hi.vcxproj.filters | 184 ++ Extract-Hi/Win/Extract-HiPiPL.rc | 84 + Extract_Edge/Extract_Edge.cpp | 267 +++ Extract_Edge/Extract_Edge.h | 110 + Extract_Edge/Extract_EdgePiPL.r | 79 + Extract_Edge/Extract_EdgeSub8.cpp | 148 ++ Extract_Edge/Fs_Entry.h | 227 ++ Extract_Edge/Fs_Target.h | 81 + Extract_Edge/Win/Extract_Edge.sln | 31 + Extract_Edge/Win/Extract_Edge.vcxproj | 592 +++++ Extract_Edge/Win/Extract_Edge.vcxproj.filters | 185 ++ Extract_Edge/Win/Extract_EdgePiPL.rc | 84 + Extract_Edge/Win/PluginSkeletonPiPL.rc | 84 + F's PluginsProjects.sln | 1446 ++++++++++++ FillColor/FillColor.cpp | 500 ++++ FillColor/FillColor.h | 99 + FillColor/FillColorPiPL.r | 75 + FillColor/Fs_Target.h | 78 + FillColor/Win/FillColor.vcxproj | 331 +++ FillColor/Win/FillColor.vcxproj.filters | 154 ++ FillColor/Win/FillColorPiPL.rc | 84 + Frame/Frame.cpp | 324 +++ Frame/Frame.h | 117 + Frame/FramePiPL.r | 77 + Frame/Fs_Entry.h | 224 ++ Frame/Fs_Target.h | 82 + Frame/Win/Frame.vcxproj | 335 +++ Frame/Win/Frame.vcxproj.filters | 172 ++ Frame/Win/FramePiPL.rc | 84 + FsLibrary/AE_headers.h | 31 + FsLibrary/FsAE.h | 2056 ++++++++++++++++ FsLibrary/FsBlur.cpp | 604 +++++ FsLibrary/FsBuffer.h | 168 ++ FsLibrary/FsDebug.h | 57 + FsLibrary/FsGraphics.cpp | 80 + FsLibrary/FsGraphics.h | 928 ++++++++ FsLibrary/FsGraphicsBlend.cpp | 240 ++ FsLibrary/FsGraphicsBox.cpp | 245 ++ FsLibrary/FsGraphicsCircle.cpp | 296 +++ FsLibrary/FsGraphicsLine.cpp | 341 +++ FsLibrary/FsGraphicsPaint.cpp | 493 ++++ FsLibrary/FsHLS.h | 356 +++ FsLibrary/FsMat.cpp | 378 +++ FsLibrary/FsMiniMax16.cpp | 281 +++ FsLibrary/FsMiniMax32.cpp | 279 +++ FsLibrary/FsMiniMax8.cpp | 297 +++ FsLibrary/FsMosaic.cpp | 449 ++++ FsLibrary/FsRandom.h | 1050 +++++++++ FsLibrary/FsScreenShake.h | 689 ++++++ FsLibrary/FsSputtering.h | 1220 ++++++++++ FsLibrary/FsUtils.h | 759 ++++++ FsLibrary/FsVersion.h | 21 + FsSSFrame/FsSSFrame.cpp | 324 +++ FsSSFrame/FsSSFrame.h | 117 + FsSSFrame/FsSSFramePiPL.r | 77 + FsSSFrame/Fs_Entry.h | 224 ++ FsSSFrame/Fs_Target.h | 81 + FsSSFrame/Win/FramePiPL.rc | 84 + FsSSFrame/Win/FsSSFrame.vcxproj | 335 +++ FsSSFrame/Win/FsSSFrame.vcxproj.filters | 172 ++ FsSSFrame/Win/FsSSFramePiPL.rc | 84 + GuideFrame/Fs_Target.h | 81 + GuideFrame/GuideFrame.cpp | 668 ++++++ GuideFrame/GuideFrame.h | 349 +++ GuideFrame/GuideFramePiPL.r | 77 + GuideFrame/Win/GuideFrame.vcxproj | 334 +++ GuideFrame/Win/GuideFrame.vcxproj.filters | 169 ++ GuideFrame/Win/GuideFramePiPL.rc | 84 + HLS_Reverse/Fs_Target.h | 78 + HLS_Reverse/HLS_Reverse.cpp | 516 ++++ HLS_Reverse/HLS_Reverse.h | 84 + HLS_Reverse/HLS_ReversePiPL.r | 77 + HLS_Reverse/Win/HLS_Reverse.vcxproj | 329 +++ HLS_Reverse/Win/HLS_Reverse.vcxproj.filters | 154 ++ HLS_Reverse/Win/HLS_ReversePiPL.rc | 84 + IroTore/Fs_Entry.h | 227 ++ IroTore/Fs_Target.h | 82 + IroTore/IroTore.cpp | 679 ++++++ IroTore/IroTore.h | 229 ++ IroTore/IroTorePiPL.r | 79 + IroTore/IroToreSub16.cpp | 782 ++++++ IroTore/IroToreSub32.cpp | 766 ++++++ IroTore/IroToreSub8.cpp | 782 ++++++ IroTore/Win/IroTore.sln | 27 + IroTore/Win/IroTore.vcxproj | 594 +++++ IroTore/Win/IroTore.vcxproj.filters | 189 ++ IroTore/Win/IroTorePiPL.rc | 84 + IroToreAdjacent/Fs_Entry.h | 227 ++ IroToreAdjacent/Fs_Target.h | 82 + IroToreAdjacent/IroToreAdjacent.cpp | 539 +++++ IroToreAdjacent/IroToreAdjacent.h | 215 ++ IroToreAdjacent/IroToreAdjacentPiPL.r | 79 + IroToreAdjacent/IroToreAdjacentSub16.cpp | 636 +++++ IroToreAdjacent/IroToreAdjacentSub8.cpp | 649 +++++ IroToreAdjacent/Win/IroToreAdjacent.sln | 27 + IroToreAdjacent/Win/IroToreAdjacent.vcxproj | 594 +++++ .../Win/IroToreAdjacent.vcxproj.filters | 189 ++ IroToreAdjacent/Win/IroToreAdjacentPiPL.rc | 84 + LineDetection/Fs_Entry.h | 200 ++ LineDetection/Fs_Target.h | 84 + LineDetection/LineDetect16.cpp | 267 +++ LineDetection/LineDetect32.cpp | 265 +++ LineDetection/LineDetect8.cpp | 253 ++ LineDetection/LineDetection.cpp | 550 +++++ LineDetection/LineDetection.h | 265 +++ LineDetection/LineDetectionPiPL.r | 76 + LineDetection/Win/LineDetection.vcxproj | 598 +++++ .../Win/LineDetection.vcxproj.filters | 187 ++ LineDetection/Win/LineDetectionPiPL.rc | 84 + LineTrace/Fs_Entry.h | 226 ++ LineTrace/Fs_Target.h | 81 + LineTrace/LineTrace.cpp | 672 ++++++ LineTrace/LineTrace.h | 210 ++ LineTrace/LineTracePiPL.r | 73 + LineTrace/LineTrace_def.h | 137 ++ LineTrace/Win/LineTrace.vcxproj | 587 +++++ LineTrace/Win/LineTrace.vcxproj.filters | 163 ++ LineTrace/Win/LineTracePiPL.rc | 84 + MainLineRepaint/Fs_Entry.h | 227 ++ MainLineRepaint/Fs_Target.h | 81 + MainLineRepaint/MainLineRepaint.cpp | 521 ++++ MainLineRepaint/MainLineRepaint.h | 118 + MainLineRepaint/MainLineRepaintPiPL.r | 82 + MainLineRepaint/Win/MainLineRepaint.sln | 26 + MainLineRepaint/Win/MainLineRepaint.vcxproj | 591 +++++ .../Win/MainLineRepaint.vcxproj.filters | 184 ++ MainLineRepaint/Win/MainLineRepaintPiPL.rc | 84 + MainLineRepaint/a | 11 + MainLineRepaint_old/FsAE.h | 94 + MainLineRepaint_old/FsGraphics.cpp | 635 +++++ MainLineRepaint_old/FsGraphics.h | 349 +++ MainLineRepaint_old/FsGraphicsBlend.cpp | 161 ++ MainLineRepaint_old/FsGraphicsPaint.cpp | 330 +++ MainLineRepaint_old/MainLineRepaint_old.cpp | 220 ++ MainLineRepaint_old/MainLineRepaint_old.h | 580 +++++ MainLineRepaint_old/MainLineRepaint_oldPiPL.r | 77 + .../MainLineRepaint_old_Strings.cpp | 27 + .../MainLineRepaint_old_Strings.h | 16 + .../Win/MainLineRepaint_old.sln | 26 + .../Win/MainLineRepaint_old.vcxproj | 583 +++++ .../Win/MainLineRepaint_old.vcxproj.filters | 146 ++ .../Win/MainLineRepaint_oldPiPL.rc | 84 + MaskFromRGB/Fs_Entry.h | 227 ++ MaskFromRGB/Fs_Target.h | 81 + MaskFromRGB/MaskFromRGB.cpp | 395 ++++ MaskFromRGB/MaskFromRGB.h | 98 + MaskFromRGB/MaskFromRGBPiPL.r | 82 + MaskFromRGB/Win/MaskFromRGB.sln | 26 + MaskFromRGB/Win/MaskFromRGB.vcxproj | 591 +++++ MaskFromRGB/Win/MaskFromRGB.vcxproj.filters | 184 ++ MaskFromRGB/Win/MaskFromRGBAPiPL.rc | 84 + MaskFromRGB/Win/MaskFromRGBPiPL.rc | 84 + MaskFromRGB/sample.png | Bin 0 -> 55218 bytes MaskFromRGB_Multi/Fs_Entry.h | 227 ++ MaskFromRGB_Multi/Fs_Target.h | 81 + MaskFromRGB_Multi/MaskFromRGB_Multi.cpp | 539 +++++ MaskFromRGB_Multi/MaskFromRGB_Multi.h | 101 + MaskFromRGB_Multi/MaskFromRGB_MultiPiPL.r | 82 + MaskFromRGB_Multi/Win/MaskFromRGB_Multi.sln | 26 + .../Win/MaskFromRGB_Multi.vcxproj | 591 +++++ .../Win/MaskFromRGB_Multi.vcxproj.filters | 184 ++ .../Win/MaskFromRGB_MultiPiPL.rc | 84 + MaskFromRGB_Multi/sample.png | Bin 0 -> 55218 bytes Max/Fs_Entry.h | 224 ++ Max/Fs_Target.h | 83 + Max/Max.cpp | 242 ++ Max/Max.h | 82 + Max/MaxPiPL.r | 76 + Max/Win/Max.sln | 20 + Max/Win/Max.vcxproj | 335 +++ Max/Win/Max.vcxproj.filters | 169 ++ Max/Win/MaxPiPL.rc | 84 + Max_Kasumi/02_00001.png | Bin 0 -> 561647 bytes Max_Kasumi/02_00001.psd | Bin 0 -> 4840728 bytes Max_Kasumi/02_00002.png | Bin 0 -> 111307 bytes Max_Kasumi/02_00003.png | Bin 0 -> 122085 bytes Max_Kasumi/Fs_Entry.h | 227 ++ Max_Kasumi/Fs_Target.h | 81 + Max_Kasumi/Max_Kasumi.cpp | 217 ++ Max_Kasumi/Max_Kasumi.h | 133 ++ Max_Kasumi/Max_KasumiPiPL.r | 79 + Max_Kasumi/Max_KasumiSub16.cpp | 385 +++ Max_Kasumi/Max_KasumiSub32.cpp | 386 +++ Max_Kasumi/Max_KasumiSub8.cpp | 386 +++ Max_Kasumi/Win/Max_Kasumi.sln | 31 + Max_Kasumi/Win/Max_Kasumi.vcxproj | 595 +++++ Max_Kasumi/Win/Max_Kasumi.vcxproj.filters | 190 ++ Max_Kasumi/Win/Max_KasumiPiPL.rc | 84 + Max_Kasumi/Win/PluginSkeletonPiPL.rc | 84 + Max_Kasumi/a | 11 + Mosaic/Fs_Target.h | 79 + Mosaic/Mosaic.cpp | 394 ++++ Mosaic/Mosaic.h | 83 + Mosaic/MosaicPiPL.r | 73 + Mosaic/Win/Mosaic.vcxproj | 585 +++++ Mosaic/Win/Mosaic.vcxproj.filters | 157 ++ Mosaic/Win/MosaicPiPL.rc | 84 + NamiGarasu/DrawSq.cpp | 204 ++ NamiGarasu/DrawSqData.h | 1145 +++++++++ NamiGarasu/Fs_Entry.h | 227 ++ NamiGarasu/Fs_Target.h | 70 + NamiGarasu/NamiGarasu.cpp | 1165 +++++++++ NamiGarasu/NamiGarasu.h | 239 ++ NamiGarasu/NamiGarasuPiPL.r | 79 + NamiGarasu/Win/NamiGarasu.sln | 26 + NamiGarasu/Win/NamiGarasu.vcxproj | 594 +++++ NamiGarasu/Win/NamiGarasu.vcxproj.filters | 181 ++ NamiGarasu/Win/NamiGarasuPiPL.rc | 84 + NamiGarasu/alphaBlur16.cpp | 174 ++ NamiGarasu/alphaBlur32.cpp | 174 ++ NamiGarasu/alphaBlur8.cpp | 173 ++ NamiGarasu/imageMap.cpp | 235 ++ NamiGarasu/shiftRed.cpp | 237 ++ NoiseHiLo_Alpha/Fs_Entry.h | 227 ++ NoiseHiLo_Alpha/Fs_Target.h | 81 + NoiseHiLo_Alpha/NoiseHiLo_Alpha.cpp | 490 ++++ NoiseHiLo_Alpha/NoiseHiLo_Alpha.h | 117 + NoiseHiLo_Alpha/NoiseHiLo_AlphaPiPL.r | 82 + NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj | 591 +++++ .../Win/NoiseHiLo_Alpha.vcxproj.filters | 184 ++ NoiseHiLo_Alpha/Win/NoiseHiLo_AlphaPiPL.rc | 84 + NoiseHiLo_RGB/Fs_Entry.h | 227 ++ NoiseHiLo_RGB/Fs_Target.h | 81 + NoiseHiLo_RGB/NoiseHiLo_RGB.cpp | 511 ++++ NoiseHiLo_RGB/NoiseHiLo_RGB.h | 117 + NoiseHiLo_RGB/NoiseHiLo_RGBPiPL.r | 82 + NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj | 591 +++++ .../Win/NoiseHiLo_RGB.vcxproj.filters | 184 ++ NoiseHiLo_RGB/Win/NoiseHiLo_RGBPiPL.rc | 84 + OpticalDiffusion/DF16.cpp | 399 ++++ OpticalDiffusion/DF32.cpp | 400 ++++ OpticalDiffusion/DF8.cpp | 398 ++++ OpticalDiffusion/Fs_Entry.h | 227 ++ OpticalDiffusion/Fs_Target.h | 81 + OpticalDiffusion/OpticalDiffusion.cpp | 458 ++++ OpticalDiffusion/OpticalDiffusion.h | 172 ++ OpticalDiffusion/OpticalDiffusionPiPL.r | 82 + OpticalDiffusion/Win/OpticalDiffusion.vcxproj | 599 +++++ .../Win/OpticalDiffusion.vcxproj.filters | 202 ++ OpticalDiffusion/Win/OpticalDiffusionPiPL.rc | 84 + OpticalDiffusion/Win/PluginSkeletonPiPL.rc | 84 + OpticalDiffusion/odf_noise.cpp | 25 + OutLine/Fs_Entry.h | 227 ++ OutLine/Fs_Target.h | 81 + OutLine/OutLine.cpp | 631 +++++ OutLine/OutLine.h | 93 + OutLine/OutLinePiPL.r | 79 + OutLine/Win/OutLine.sln | 26 + OutLine/Win/OutLine.vcxproj | 585 +++++ OutLine/Win/OutLine.vcxproj.filters | 166 ++ OutLine/Win/OutLinePiPL.rc | 84 + Paint/Fs_Target.h | 80 + Paint/Paint.cpp | 386 +++ Paint/Paint.h | 84 + Paint/PaintPiPL.r | 78 + Paint/Win/Paint.vcxproj | 334 +++ Paint/Win/Paint.vcxproj.filters | 169 ++ Paint/Win/PaintPiPL.rc | 84 + PaintMultPoint/Fs_Target.h | 80 + PaintMultPoint/PaintMultPoint.cpp | 397 ++++ PaintMultPoint/PaintMultPoint.h | 102 + PaintMultPoint/PaintMultPointPiPL.r | 78 + PaintMultPoint/Win/PaintMultPoint.sln | 20 + PaintMultPoint/Win/PaintMultPoint.vcxproj | 334 +++ .../Win/PaintMultPoint.vcxproj.filters | 169 ++ PaintMultPoint/Win/PaintMultPointPiPL.rc | 84 + PaperPlaneGetWeight/Fs_Entry.h | 227 ++ PaperPlaneGetWeight/Fs_Target.h | 82 + PaperPlaneGetWeight/PaperPlaneGetWeight.cpp | 262 +++ PaperPlaneGetWeight/PaperPlaneGetWeight.h | 96 + PaperPlaneGetWeight/PaperPlaneGetWeightPiPL.r | 79 + .../Win/PaperPlaneGetWeight.vcxproj | 593 +++++ .../Win/PaperPlaneGetWeight.vcxproj.filters | 184 ++ .../Win/PaperPlaneGetWeight.zip | Bin 0 -> 3212 bytes .../Win/PaperPlaneGetWeightPiPL.rc | 84 + PaperPlaneGetWeightInfo/AEDebugAngel.cpp | 2092 +++++++++++++++++ PaperPlaneGetWeightInfo/AEDebugAngel.h | 38 + PaperPlaneGetWeightInfo/Fs_Entry.h | 227 ++ PaperPlaneGetWeightInfo/Fs_Target.h | 83 + .../PaperPlaneGetWeightInfo.cpp | 319 +++ .../PaperPlaneGetWeightInfo.h | 98 + .../PaperPlaneGetWeightInfoPiPL.r | 79 + .../Win/PaperPlaneGetWeightInfo.sln | 27 + .../Win/PaperPlaneGetWeightInfo.vcxproj | 594 +++++ .../PaperPlaneGetWeightInfo.vcxproj.filters | 191 ++ .../Win/PaperPlaneGetWeightInfoPiPL.rc | 84 + .../Win/PluginSkeletonPiPL.rc | 84 + PaperPlaneGetWeightInfo/kami.psd | Bin 0 -> 5404111 bytes PixelReplace/Fs_Target.h | 81 + PixelReplace/PixelReplace.cpp | 539 +++++ PixelReplace/PixelReplace.h | 106 + PixelReplace/PixelReplacePiPL.r | 71 + PixelReplace/PixelReplace_def.h | 137 ++ PixelReplace/Win/PixelReplace.vcxproj | 585 +++++ PixelReplace/Win/PixelReplace.vcxproj.filters | 157 ++ PixelReplace/Win/PixelReplacePiPL.rc | 84 + PixelSelector/Fs_Target.h | 80 + PixelSelector/PixelSelector.cpp | 633 +++++ PixelSelector/PixelSelector.h | 116 + PixelSelector/PixelSelectorPiPL.r | 71 + PixelSelector/PixelSelector_def.h | 137 ++ PixelSelector/Win/PixelSelector.vcxproj | 585 +++++ .../Win/PixelSelector.vcxproj.filters | 157 ++ PixelSelector/Win/PixelSelectorPiPL.rc | 84 + PluginSkeleton/Fs_Entry.h | 227 ++ PluginSkeleton/Fs_Target.h | 81 + PluginSkeleton/PluginSkeleton.cpp | 520 ++++ PluginSkeleton/PluginSkeleton.h | 134 ++ PluginSkeleton/PluginSkeletonPiPL.r | 79 + PluginSkeleton/Win/PluginSkeleton.sln | 31 + PluginSkeleton/Win/PluginSkeleton.vcxproj | 591 +++++ .../Win/PluginSkeleton.vcxproj.filters | 184 ++ PluginSkeleton/Win/PluginSkeletonPiPL.rc | 84 + PluginSkeleton/Win/PropertySheet.props | 15 + PluginSkeleton/Win/PropertySheet1.props | 15 + PluginSkeleton/a | 11 + Premultiply/Fs_Target.h | 78 + Premultiply/Premultiply.cpp | 351 +++ Premultiply/Premultiply.h | 78 + Premultiply/PremultiplyPiPL.r | 77 + Premultiply/Win/Premultiply.vcxproj | 585 +++++ Premultiply/Win/Premultiply.vcxproj.filters | 154 ++ Premultiply/Win/PremultiplyPiPL.rc | 84 + README.md | 71 + RGBAControl/Fs_Target.h | 80 + RGBAControl/RGBAControl.cpp | 517 ++++ RGBAControl/RGBAControl.h | 82 + RGBAControl/RGBAControlPiPL.r | 78 + RGBAControl/Win/RGBAControl.vcxproj | 585 +++++ RGBAControl/Win/RGBAControl.vcxproj.filters | 154 ++ RGBAControl/Win/RGBAControlPiPL.rc | 84 + RandomLineNoise/Fs_Target.h | 82 + RandomLineNoise/RandomLineNoise.cpp | 556 +++++ RandomLineNoise/RandomLineNoise.h | 110 + RandomLineNoise/RandomLineNoisePiPL.r | 76 + RandomLineNoise/Win/RandomLineNoise.vcxproj | 584 +++++ .../Win/RandomLineNoise.vcxproj.filters | 154 ++ RandomLineNoise/Win/RandomLineNoisePiPL.rc | 84 + RandomMosaic/Fs_Target.h | 82 + RandomMosaic/RandomMosaic.cpp | 512 ++++ RandomMosaic/RandomMosaic.h | 79 + RandomMosaic/RandomMosaicPiPL.r | 75 + RandomMosaic/Win/RandomMosaic.vcxproj | 586 +++++ RandomMosaic/Win/RandomMosaic.vcxproj.filters | 160 ++ RandomMosaic/Win/RandomMosaicPiPL.rc | 84 + RandomMosaic2nd/Fs_Target.h | 84 + RandomMosaic2nd/RandomMosaic2nd.cpp | 654 ++++++ RandomMosaic2nd/RandomMosaic2nd.h | 80 + RandomMosaic2nd/RandomMosaic2ndPiPL.r | 74 + RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj | 586 +++++ .../Win/RandomMosaic2nd.vcxproj.filters | 160 ++ RandomMosaic2nd/Win/RandomMosaic2ndPiPL.rc | 84 + RandomShift/Fs_Target.h | 81 + RandomShift/RandomShift.cpp | 527 +++++ RandomShift/RandomShift.h | 274 +++ RandomShift/RandomShiftPiPL.r | 77 + RandomShift/Win/RandomShift.vcxproj | 586 +++++ RandomShift/Win/RandomShift.vcxproj.filters | 160 ++ RandomShift/Win/RandomShiftPiPL.rc | 84 + RgbToAlpha/Fs_Target.h | 82 + RgbToAlpha/RgbToAlpha.cpp | 491 ++++ RgbToAlpha/RgbToAlpha.h | 89 + RgbToAlpha/RgbToAlphaPiPL.r | 76 + RgbToAlpha/Win/RgbToAlpha.vcxproj | 329 +++ RgbToAlpha/Win/RgbToAlpha.vcxproj.filters | 154 ++ RgbToAlpha/Win/RgbToAlphaPiPL.rc | 84 + ScreenShakeDir/Fs_Target.h | 77 + ScreenShakeDir/ScreenShakeDir.cpp | 545 +++++ ScreenShakeDir/ScreenShakeDir.h | 108 + ScreenShakeDir/ScreenShakeDirPiPL.r | 78 + ScreenShakeDir/Win/ScreenShakeDir.vcxproj | 586 +++++ .../Win/ScreenShakeDir.vcxproj.filters | 157 ++ ScreenShakeDir/Win/ScreenShakeDirPiPL.rc | 84 + ScreenShakeMM/Fs_Target.h | 77 + ScreenShakeMM/ScreenShakeMM.cpp | 561 +++++ ScreenShakeMM/ScreenShakeMM.h | 115 + ScreenShakeMM/ScreenShakeMMPiPL.r | 78 + ScreenShakeMM/Win/ScreenShakeDirPiPL.rc | 84 + ScreenShakeMM/Win/ScreenShakeMM.vcxproj | 586 +++++ .../Win/ScreenShakeMM.vcxproj.filters | 157 ++ ScreenShakeMM/Win/ScreenShakeMMPiPL.rc | 84 + SelectColor/Fs_Target.h | 77 + SelectColor/SelectColor.cpp | 712 ++++++ SelectColor/SelectColor.h | 101 + SelectColor/SelectColorPiPL.r | 74 + SelectColor/Win/SelectColor.vcxproj | 582 +++++ SelectColor/Win/SelectColor.vcxproj.filters | 154 ++ SelectColor/Win/SelectColorPiPL.rc | 84 + SelectedBlur/Fs_Entry.h | 224 ++ SelectedBlur/Fs_Target.h | 80 + SelectedBlur/SelectedBlur.cpp | 542 +++++ SelectedBlur/SelectedBlur.h | 143 ++ SelectedBlur/SelectedBlurPiPL.r | 72 + SelectedBlur/SelectedBlurSub16.cpp | 193 ++ SelectedBlur/SelectedBlurSub32.cpp | 198 ++ SelectedBlur/SelectedBlurSub8.cpp | 194 ++ SelectedBlur/Win/SelectedBlur.vcxproj | 332 +++ SelectedBlur/Win/SelectedBlur.vcxproj.filters | 160 ++ SelectedBlur/Win/SelectedBlurPiPL.rc | 84 + ShitsuKanBlur/Fs_Entry.h | 227 ++ ShitsuKanBlur/Fs_Target.h | 81 + ShitsuKanBlur/ShitsuKanBlur.cpp | 741 ++++++ ShitsuKanBlur/ShitsuKanBlur.h | 366 +++ ShitsuKanBlur/ShitsuKanBlur.psd | Bin 0 -> 97942 bytes ShitsuKanBlur/ShitsuKanBlurPiPL.r | 79 + ShitsuKanBlur/ShitsuKanBlurSub16.cpp | 929 ++++++++ ShitsuKanBlur/ShitsuKanBlurSub32.cpp | 933 ++++++++ ShitsuKanBlur/ShitsuKanBlurSub8.cpp | 903 +++++++ ShitsuKanBlur/Win/PluginSkeletonPiPL.rc | 84 + ShitsuKanBlur/Win/PropertySheet.props | 15 + ShitsuKanBlur/Win/PropertySheet1.props | 15 + ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj | 600 +++++ .../Win/ShitsuKanBlur.vcxproj.filters | 187 ++ ShitsuKanBlur/Win/ShitsuKanBlurPiPL.rc | 84 + ShitsuKanBlur/Win/ShitsuKanPiPL.rc | 84 + Star/Fs_Entry.h | 227 ++ Star/Fs_Target.h | 82 + Star/Star.cpp | 416 ++++ Star/Star.h | 239 ++ Star/StarBuf.cpp | 280 +++ Star/StarDraw.cpp | 798 +++++++ Star/StarMask.cpp | 303 +++ Star/StarPiPL.r | 76 + Star/StarTargetCopy.cpp | 321 +++ Star/Win/Star.vcxproj | 590 +++++ Star/Win/Star.vcxproj.filters | 161 ++ Star/Win/StarPiPL.rc | 84 + Star_Colorful/Fs_Entry.h | 227 ++ Star_Colorful/Fs_Target.h | 81 + Star_Colorful/Star_Colorful.cpp | 532 +++++ Star_Colorful/Star_Colorful.h | 302 +++ Star_Colorful/Star_ColorfulPiPL.r | 79 + Star_Colorful/Star_ColorfulSub16.cpp | 1243 ++++++++++ Star_Colorful/Star_ColorfulSub32.cpp | 1246 ++++++++++ Star_Colorful/Star_ColorfulSub8.cpp | 1243 ++++++++++ Star_Colorful/Win/Star_Colorful.sln | 36 + Star_Colorful/Win/Star_Colorful.vcxproj | 595 +++++ .../Win/Star_Colorful.vcxproj.filters | 190 ++ Star_Colorful/Win/Star_ColorfulPiPL.rc | 84 + Thin/Fs_Entry.h | 227 ++ Thin/Fs_Target.h | 81 + Thin/Thin.cpp | 396 ++++ Thin/Thin.h | 201 ++ Thin/ThinPiPL.r | 79 + Thin/ThinSub16.cpp | 1421 +++++++++++ Thin/ThinSub32.cpp | 1418 +++++++++++ Thin/ThinSub8.cpp | 1418 +++++++++++ Thin/Win/PluginSkeletonPiPL.rc | 84 + Thin/Win/Thin.sln | 28 + Thin/Win/Thin.vcxproj | 595 +++++ Thin/Win/Thin.vcxproj.filters | 190 ++ Thin/Win/ThinPiPL.rc | 84 + Thin/thinPat.exe | Bin 0 -> 8872448 bytes ToGray/Fs_Target.h | 79 + ToGray/ToGray.cpp | 897 +++++++ ToGray/ToGray.h | 77 + ToGray/ToGrayPiPL.r | 75 + ToGray/Win/ToGray.vcxproj | 585 +++++ ToGray/Win/ToGray.vcxproj.filters | 157 ++ ToGray/Win/ToGrayPiPL.rc | 84 + Tone/Fs_Target.h | 81 + Tone/Tone.cpp | 634 +++++ Tone/Tone.h | 121 + Tone/TonePiPL.r | 79 + Tone/Win/Tone.vcxproj | 581 +++++ Tone/Win/Tone.vcxproj.filters | 154 ++ Tone/Win/TonePiPL.rc | 84 + Tone/Win/TonerPiPL.rc | 84 + Toner/Fs_Target.h | 81 + Toner/Toner.cpp | 634 +++++ Toner/Toner.h | 121 + Toner/TonerPiPL.r | 79 + Toner/Win/Toner.vcxproj | 581 +++++ Toner/Win/Toner.vcxproj.filters | 154 ++ Toner/Win/TonerPiPL.rc | 84 + TouchDraw/FsTDFindTarget.cpp | 389 +++ TouchDraw/FsTDFindTargetDelta.cpp | 279 +++ TouchDraw/FsTDblockDraw.cpp | 119 + TouchDraw/FsTDcopyAlpha.cpp | 112 + TouchDraw/FsTDgreenBlur.cpp | 548 +++++ TouchDraw/FsTDpset.h | 293 +++ TouchDraw/Fs_Entry.h | 227 ++ TouchDraw/Fs_Target.h | 82 + TouchDraw/TouchDraw.cpp | 434 ++++ TouchDraw/TouchDraw.h | 196 ++ TouchDraw/TouchDrawPiPL.r | 77 + TouchDraw/ToutchDraw16.cpp | 157 ++ TouchDraw/ToutchDraw32.cpp | 157 ++ TouchDraw/ToutchDraw8.cpp | 158 ++ TouchDraw/Win/TouchDraw.vcxproj | 594 +++++ TouchDraw/Win/TouchDraw.vcxproj.filters | 165 ++ TouchDraw/Win/TouchDrawPiPL.rc | 84 + TouchDrawCenter/Fs_Entry.h | 200 ++ TouchDrawCenter/Fs_Target.h | 108 + TouchDrawCenter/TouchDrawCenter.cpp | 424 ++++ TouchDrawCenter/TouchDrawCenter.h | 177 ++ TouchDrawCenter/TouchDrawCenterPiPL.r | 76 + TouchDrawCenter/ToutchDraw16.cpp | 220 ++ TouchDrawCenter/ToutchDraw32.cpp | 221 ++ TouchDrawCenter/ToutchDraw8.cpp | 220 ++ TouchDrawCenter/Win/TouchDrawCenter.vcxproj | 619 +++++ .../Win/TouchDrawCenter.vcxproj.filters | 180 ++ TouchDrawCenter/Win/TouchDrawCenterPiPL.rc | 84 + TouchDrawCenter/alphaBlur16.cpp | 173 ++ TouchDrawCenter/alphaBlur32.cpp | 173 ++ TouchDrawCenter/alphaBlur8.cpp | 173 ++ TouchDrawCenter/copyImage.cpp | 197 ++ TouchDrawStraght/FsTDFindTarget.cpp | 390 +++ TouchDrawStraght/FsTDFindTargetDelta.cpp | 280 +++ TouchDrawStraght/FsTDblockDraw.cpp | 120 + TouchDrawStraght/FsTDcopyAlpha.cpp | 113 + TouchDrawStraght/FsTDgreenBlur.cpp | 549 +++++ TouchDrawStraght/FsTDpset.h | 293 +++ TouchDrawStraght/Fs_Entry.h | 227 ++ TouchDrawStraght/Fs_Target.h | 81 + TouchDrawStraght/TouchDrawStraght.cpp | 430 ++++ TouchDrawStraght/TouchDrawStraght.h | 186 ++ TouchDrawStraght/TouchDrawStraghtPiPL.r | 76 + TouchDrawStraght/ToutchDrawStraght16.cpp | 108 + TouchDrawStraght/ToutchDrawStraght32.cpp | 110 + TouchDrawStraght/ToutchDrawStraght8.cpp | 108 + TouchDrawStraght/Win/TouchDrawStraght.vcxproj | 593 +++++ .../Win/TouchDrawStraght.vcxproj.filters | 168 ++ TouchDrawStraght/Win/TouchDrawStraghtPiPL.rc | 84 + VideoGrid/Fs_Target.h | 79 + VideoGrid/GridSub16.cpp | 207 ++ VideoGrid/GridSub32.cpp | 207 ++ VideoGrid/GridSub8.cpp | 207 ++ VideoGrid/VideoGrid.cpp | 498 ++++ VideoGrid/VideoGrid.h | 174 ++ VideoGrid/VideoGridPiPL.r | 72 + VideoGrid/Win/VideoGrid.vcxproj | 588 +++++ VideoGrid/Win/VideoGrid.vcxproj.filters | 160 ++ VideoGrid/Win/VideoGridPiPL.rc | 84 + VideoLine/Fs_Target.h | 81 + VideoLine/VideoLine.cpp | 641 +++++ VideoLine/VideoLine.h | 88 + VideoLine/VideoLinePiPL.r | 73 + VideoLine/Win/VideoLine.vcxproj | 329 +++ VideoLine/Win/VideoLine.vcxproj.filters | 154 ++ VideoLine/Win/VideoLinePiPL.rc | 84 + VideoLine2nd/Fs_Target.h | 81 + VideoLine2nd/VideoLine2nd.cpp | 457 ++++ VideoLine2nd/VideoLine2nd.h | 80 + VideoLine2nd/VideoLine2ndPiPL.r | 73 + VideoLine2nd/Win/VideoLine2nd.vcxproj | 329 +++ VideoLine2nd/Win/VideoLine2nd.vcxproj.filters | 154 ++ VideoLine2nd/Win/VideoLine2ndPiPL.rc | 84 + VideoLine2nd/Win/VideoLinePiPL.rc | 84 + colorThreshold/Fs_Entry.h | 227 ++ colorThreshold/Fs_Target.h | 81 + colorThreshold/Win/8_16_32.txt | 22 + colorThreshold/Win/colorThreshold.sln | 26 + colorThreshold/Win/colorThreshold.vcxproj | 595 +++++ .../Win/colorThreshold.vcxproj.filters | 188 ++ colorThreshold/Win/colorThresholdPiPL.rc | 84 + colorThreshold/colorThreshold.cpp | 539 +++++ colorThreshold/colorThreshold.h | 198 ++ colorThreshold/colorThresholdMain16.cpp | 195 ++ colorThreshold/colorThresholdMain32.cpp | 196 ++ colorThreshold/colorThresholdMain8.cpp | 187 ++ colorThreshold/colorThresholdPiPL.r | 82 + colorThreshold/colorThresholdSub.cpp | 114 + "colorThreshold/\350\252\254\346\230\216.png" | Bin 0 -> 81477 bytes grayToColorize/Fs_Entry.h | 227 ++ grayToColorize/Fs_Target.h | 81 + grayToColorize/Win/grayToColorize.sln | 26 + grayToColorize/Win/grayToColorize.vcxproj | 591 +++++ .../Win/grayToColorize.vcxproj.filters | 184 ++ grayToColorize/Win/grayToColorizePiPL.rc | 84 + grayToColorize/grayToColorize.cpp | 441 ++++ grayToColorize/grayToColorize.h | 170 ++ grayToColorize/grayToColorizePiPL.r | 82 + grayToColorize/sample.png | Bin 0 -> 55218 bytes smokeThreshold/Fs_Entry.h | 227 ++ smokeThreshold/Fs_Target.h | 81 + smokeThreshold/Win/smokeThreshold.sln | 26 + smokeThreshold/Win/smokeThreshold.vcxproj | 594 +++++ .../Win/smokeThreshold.vcxproj.filters | 193 ++ smokeThreshold/Win/smokeThresholdPiPL.rc | 84 + smokeThreshold/smoke.png | Bin 0 -> 350389 bytes smokeThreshold/smokeThreshold.cpp | 730 ++++++ smokeThreshold/smokeThreshold.h | 216 ++ smokeThreshold/smokeThresholdPiPL.r | 79 + sputteringAlpha/Fs_Entry.h | 224 ++ sputteringAlpha/Fs_Target.h | 81 + sputteringAlpha/Win/sputteringAlpha.vcxproj | 591 +++++ .../Win/sputteringAlpha.vcxproj.filters | 166 ++ sputteringAlpha/Win/sputteringAlphaPiPL.rc | 84 + sputteringAlpha/sputteringAlpha.cpp | 326 +++ sputteringAlpha/sputteringAlpha.h | 150 ++ sputteringAlpha/sputteringAlpha16.cpp | 135 ++ sputteringAlpha/sputteringAlpha32.cpp | 135 ++ sputteringAlpha/sputteringAlpha8.cpp | 134 ++ sputteringAlpha/sputteringAlphaPiPL.r | 72 + sputteringCircle/Fs_Entry.h | 224 ++ sputteringCircle/Fs_Target.h | 82 + sputteringCircle/Win/sputteringCircle.vcxproj | 588 +++++ .../Win/sputteringCircle.vcxproj.filters | 161 ++ sputteringCircle/Win/sputteringCirclePiPL.rc | 84 + sputteringCircle/sputteringCircle.cpp | 381 +++ sputteringCircle/sputteringCircle.h | 164 ++ sputteringCircle/sputteringCircleMain.cpp | 213 ++ sputteringCircle/sputteringCirclePiPL.r | 72 + sputteringRect/Fs_Entry.h | 224 ++ sputteringRect/Fs_Target.h | 81 + sputteringRect/Tex_png_new/SPD_02_1.png | Bin 0 -> 2815 bytes sputteringRect/Tex_png_new/SPD_02_2.png | Bin 0 -> 2815 bytes sputteringRect/Tex_png_new/SPD_02_3.png | Bin 0 -> 2816 bytes sputteringRect/Tex_png_new/SPD_02_4.png | Bin 0 -> 2815 bytes sputteringRect/Tex_png_new/SPD_03_1.png | Bin 0 -> 2830 bytes sputteringRect/Tex_png_new/SPD_03_2.png | Bin 0 -> 2827 bytes sputteringRect/Tex_png_new/SPD_03_3.png | Bin 0 -> 2827 bytes sputteringRect/Tex_png_new/SPD_03_4.png | Bin 0 -> 2830 bytes sputteringRect/Tex_png_new/SPD_04_1.png | Bin 0 -> 2844 bytes sputteringRect/Tex_png_new/SPD_04_2.png | Bin 0 -> 2852 bytes sputteringRect/Tex_png_new/SPD_04_3.png | Bin 0 -> 2852 bytes sputteringRect/Tex_png_new/SPD_04_4.png | Bin 0 -> 2845 bytes sputteringRect/Tex_png_new/SPD_05_1.png | Bin 0 -> 2869 bytes sputteringRect/Tex_png_new/SPD_05_2.png | Bin 0 -> 2869 bytes sputteringRect/Tex_png_new/SPD_05_3.png | Bin 0 -> 2875 bytes sputteringRect/Tex_png_new/SPD_05_4.png | Bin 0 -> 2869 bytes sputteringRect/Tex_png_new/SPD_05_5.png | Bin 0 -> 2868 bytes sputteringRect/Tex_png_new/SPD_06_1.png | Bin 0 -> 2905 bytes sputteringRect/Tex_png_new/SPD_06_2.png | Bin 0 -> 2899 bytes sputteringRect/Tex_png_new/SPD_06_3.png | Bin 0 -> 2895 bytes sputteringRect/Tex_png_new/SPD_06_4.png | Bin 0 -> 2885 bytes sputteringRect/Tex_png_new/SPD_07_1.png | Bin 0 -> 2928 bytes sputteringRect/Tex_png_new/SPD_07_2.png | Bin 0 -> 2924 bytes sputteringRect/Tex_png_new/SPD_07_3.png | Bin 0 -> 2921 bytes sputteringRect/Tex_png_new/SPD_07_4.png | Bin 0 -> 2928 bytes sputteringRect/Tex_png_new/SPD_07_5.png | Bin 0 -> 2905 bytes sputteringRect/Tex_png_new/SPD_07_6.png | Bin 0 -> 2906 bytes sputteringRect/Tex_png_new/SPD_07_7.png | Bin 0 -> 2915 bytes sputteringRect/Tex_png_new/SPD_08_1.png | Bin 0 -> 2956 bytes sputteringRect/Tex_png_new/SPD_08_2.png | Bin 0 -> 2953 bytes sputteringRect/Tex_png_new/SPD_08_3.png | Bin 0 -> 2954 bytes sputteringRect/Tex_png_new/SPD_08_4.png | Bin 0 -> 2943 bytes sputteringRect/Tex_png_new/SPD_08_5.png | Bin 0 -> 2957 bytes sputteringRect/Tex_png_new/SPD_08_6.png | Bin 0 -> 2943 bytes sputteringRect/Tex_png_new/SPD_08_7.png | Bin 0 -> 2968 bytes sputteringRect/Tex_png_new/SPD_09_1.png | Bin 0 -> 2997 bytes sputteringRect/Tex_png_new/SPD_09_2.png | Bin 0 -> 2977 bytes sputteringRect/Tex_png_new/SPD_09_3.png | Bin 0 -> 2958 bytes sputteringRect/Tex_png_new/SPD_09_4.png | Bin 0 -> 2980 bytes sputteringRect/Tex_png_new/SPD_09_5.png | Bin 0 -> 2989 bytes sputteringRect/Tex_png_new/SPD_09_6.png | Bin 0 -> 2971 bytes sputteringRect/Tex_png_new/SPD_10_1.png | Bin 0 -> 2993 bytes sputteringRect/Tex_png_new/SPD_10_2.png | Bin 0 -> 3018 bytes sputteringRect/Tex_png_new/SPD_10_3.png | Bin 0 -> 3065 bytes sputteringRect/Tex_png_new/SPD_10_4.png | Bin 0 -> 3046 bytes sputteringRect/Tex_png_new/SPD_11_1.png | Bin 0 -> 3107 bytes sputteringRect/Tex_png_new/SPD_11_2.png | Bin 0 -> 3084 bytes sputteringRect/Tex_png_new/SPD_11_3.png | Bin 0 -> 3062 bytes sputteringRect/Tex_png_new/SPD_11_4.png | Bin 0 -> 3011 bytes sputteringRect/Tex_png_new/SPD_12_1.png | Bin 0 -> 3103 bytes sputteringRect/Tex_png_new/SPD_12_2.png | Bin 0 -> 3035 bytes sputteringRect/Tex_png_new/SPD_12_3.png | Bin 0 -> 3053 bytes sputteringRect/Tex_png_new/SPD_12_4.png | Bin 0 -> 3099 bytes sputteringRect/Tex_png_new/SPD_13_1.png | Bin 0 -> 3127 bytes sputteringRect/Tex_png_new/SPD_13_2.png | Bin 0 -> 3180 bytes sputteringRect/Tex_png_new/SPD_13_3.png | Bin 0 -> 3100 bytes sputteringRect/Tex_png_new/SPD_13_4.png | Bin 0 -> 3182 bytes sputteringRect/Tex_png_new/SPD_14_1.png | Bin 0 -> 3217 bytes sputteringRect/Tex_png_new/SPD_14_2.png | Bin 0 -> 3224 bytes sputteringRect/Tex_png_new/SPD_14_3.png | Bin 0 -> 3132 bytes sputteringRect/Win/sputteringRect.vcxproj | 588 +++++ .../Win/sputteringRect.vcxproj.filters | 161 ++ sputteringRect/Win/sputteringRectPiPL.rc | 84 + sputteringRect/pic2c.exe | Bin 0 -> 14848 bytes sputteringRect/sputteringRect.cpp | 324 +++ sputteringRect/sputteringRect.h | 137 ++ sputteringRect/sputteringRectMain.cpp | 183 ++ sputteringRect/sputteringRectPiPL.r | 72 + sputteringRect/tex_size.c | 61 + sputteringSplash/Fs_Entry.h | 224 ++ sputteringSplash/Fs_Target.h | 84 + sputteringSplash/Win/sputteringSplash.vcxproj | 587 +++++ .../Win/sputteringSplash.vcxproj.filters | 158 ++ sputteringSplash/Win/sputteringSplashPiPL.rc | 84 + sputteringSplash/sputteringSplash.cpp | 319 +++ sputteringSplash/sputteringSplash.h | 150 ++ sputteringSplash/sputteringSplashMain.cpp | 442 ++++ sputteringSplash/sputteringSplashPiPL.r | 72 + whiteInOut/Fs_Entry.h | 227 ++ whiteInOut/Fs_Target.h | 81 + whiteInOut/Win/ClassDiagram1.cd | 1 + whiteInOut/Win/PluginSkeletonPiPL.rc | 84 + whiteInOut/Win/whiteInOut.sln | 28 + whiteInOut/Win/whiteInOut.vcxproj | 591 +++++ whiteInOut/Win/whiteInOut.vcxproj.filters | 184 ++ whiteInOut/Win/whiteInOutPiPL.rc | 84 + whiteInOut/whiteInOut.cpp | 337 +++ whiteInOut/whiteInOut.h | 77 + whiteInOut/whiteInOutPiPL.r | 79 + 824 files changed, 180828 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 AlphaFix/AlphaFix.cpp create mode 100644 AlphaFix/AlphaFix.h create mode 100644 AlphaFix/AlphaFixPiPL.r create mode 100644 AlphaFix/Fs_Target.h create mode 100644 AlphaFix/Win/AlphaFix.vcxproj create mode 100644 AlphaFix/Win/AlphaFix.vcxproj.filters create mode 100644 AlphaFix/Win/AlphaFixPiPL.rc create mode 100644 AlphaThreshold/Fs_Entry.h create mode 100644 AlphaThreshold/Fs_Target.h create mode 100644 AlphaThreshold/Win/alphaThreshold.sln create mode 100644 AlphaThreshold/Win/alphaThreshold.vcxproj create mode 100644 AlphaThreshold/Win/alphaThreshold.vcxproj.filters create mode 100644 AlphaThreshold/Win/alphaThresholdPiPL.rc create mode 100644 AlphaThreshold/alphaThreshold.cpp create mode 100644 AlphaThreshold/alphaThreshold.h create mode 100644 AlphaThreshold/alphaThresholdPiPL.r create mode 100644 AnimatedNoise/AnimatedNoise.cpp create mode 100644 AnimatedNoise/AnimatedNoise.h create mode 100644 AnimatedNoise/AnimatedNoisePiPL.r create mode 100644 AnimatedNoise/Fs_Target.h create mode 100644 AnimatedNoise/Win/AnimatedNoise.vcxproj create mode 100644 AnimatedNoise/Win/AnimatedNoise.vcxproj.filters create mode 100644 AnimatedNoise/Win/AnimatedNoisePiPL.rc create mode 100644 CCplus/CCplus.cpp create mode 100644 CCplus/CCplus.h create mode 100644 CCplus/CCplusPiPL.r create mode 100644 CCplus/Fs_Entry.h create mode 100644 CCplus/Fs_Target.h create mode 100644 CCplus/Win/CCplus.vcxproj create mode 100644 CCplus/Win/CCplus.vcxproj.filters create mode 100644 CCplus/Win/CCplusPiPL.rc create mode 100644 ChannelBlur/ChannelBlur.cpp create mode 100644 ChannelBlur/ChannelBlur.h create mode 100644 ChannelBlur/ChannelBlurPiPL.r create mode 100644 ChannelBlur/Fs_Entry.h create mode 100644 ChannelBlur/Fs_Target.h create mode 100644 ChannelBlur/Win/ChannelBlur.sln create mode 100644 ChannelBlur/Win/ChannelBlur.vcxproj create mode 100644 ChannelBlur/Win/ChannelBlur.vcxproj.filters create mode 100644 ChannelBlur/Win/ChannelBlurPiPL.rc create mode 100644 ChannelBlur/Win/PluginSkeletonPiPL.rc create mode 100644 ChannelNoise/ChannelNoise.cpp create mode 100644 ChannelNoise/ChannelNoise.h create mode 100644 ChannelNoise/ChannelNoisePiPL.r create mode 100644 ChannelNoise/Fs_Target.h create mode 100644 ChannelNoise/Win/ChannelNoise.vcxproj create mode 100644 ChannelNoise/Win/ChannelNoise.vcxproj.filters create mode 100644 ChannelNoise/Win/ChannelNoisePiPL.rc create mode 100644 ChannelShift/ChannelShift.cpp create mode 100644 ChannelShift/ChannelShift.h create mode 100644 ChannelShift/ChannelShiftPiPL.r create mode 100644 ChannelShift/Fs_Entry.h create mode 100644 ChannelShift/Fs_Target.h create mode 100644 ChannelShift/Win/CC2018_MD/ChannelShift.tlog/unsuccessfulbuild create mode 100644 ChannelShift/Win/ChannelShift.vcxproj create mode 100644 ChannelShift/Win/ChannelShift.vcxproj.filters create mode 100644 ChannelShift/Win/ChannelShiftPiPL.rc create mode 100644 ColorChange/ColorChange.cpp create mode 100644 ColorChange/ColorChange.h create mode 100644 ColorChange/ColorChangePiPL.r create mode 100644 ColorChange/Fs_Entry.h create mode 100644 ColorChange/Fs_Target.h create mode 100644 ColorChange/Win/ColorChange.vcxproj create mode 100644 ColorChange/Win/ColorChange.vcxproj.filters create mode 100644 ColorChange/Win/ColorChangePiPL.rc create mode 100644 ColorChangeSimple/ColorChangeSimple.cpp create mode 100644 ColorChangeSimple/ColorChangeSimple.h create mode 100644 ColorChangeSimple/ColorChangeSimplePiPL.r create mode 100644 ColorChangeSimple/Fs_Entry.h create mode 100644 ColorChangeSimple/Fs_Target.h create mode 100644 ColorChangeSimple/Win/ColorChangeSimple.vcxproj create mode 100644 ColorChangeSimple/Win/ColorChangeSimple.vcxproj.filters create mode 100644 ColorChangeSimple/Win/ColorChangeSimplePiPL.rc create mode 100644 ColorKey/ColorKey.cpp create mode 100644 ColorKey/ColorKey.h create mode 100644 ColorKey/ColorKeyPiPL.r create mode 100644 ColorKey/Fs_Entry.h create mode 100644 ColorKey/Fs_Target.h create mode 100644 ColorKey/Win/ColorKey.vcxproj create mode 100644 ColorKey/Win/ColorKey.vcxproj.filters create mode 100644 ColorKey/Win/ColorKeyPiPL.rc create mode 100644 ColorMatKey/ColorMatKey.cpp create mode 100644 ColorMatKey/ColorMatKey.h create mode 100644 ColorMatKey/ColorMatKeyPiPL.r create mode 100644 ColorMatKey/ColorMatKeySub8.cpp create mode 100644 ColorMatKey/Fs_Entry.h create mode 100644 ColorMatKey/Fs_Target.h create mode 100644 ColorMatKey/Win/ColorMatKey.sln create mode 100644 ColorMatKey/Win/ColorMatKey.vcxproj create mode 100644 ColorMatKey/Win/ColorMatKey.vcxproj.filters create mode 100644 ColorMatKey/Win/ColorMatKeyPiPL.rc create mode 100644 ColorMatKey/Win/ColorMatPiPL.rc create mode 100644 ColorMatKey/Win/PropertySheet.props create mode 100644 ColorMatKey/Win/PropertySheet1.props create mode 100644 ColorMatKey/Win/Star_ColorfulPiPL.rc create mode 100644 CreateAlpha/CreateAlpha.cpp create mode 100644 CreateAlpha/CreateAlpha.h create mode 100644 CreateAlpha/CreateAlphaPiPL.r create mode 100644 CreateAlpha/Fs_Target.h create mode 100644 CreateAlpha/Win/CreateAlpha.vcxproj create mode 100644 CreateAlpha/Win/CreateAlpha.vcxproj.filters create mode 100644 CreateAlpha/Win/CreateAlphaPiPL.rc create mode 100644 EdgeBlur/EdgeBlur.cpp create mode 100644 EdgeBlur/EdgeBlur.h create mode 100644 EdgeBlur/EdgeBlurPiPL.r create mode 100644 EdgeBlur/EdgeBlurSub16.cpp create mode 100644 EdgeBlur/EdgeBlurSub32.cpp create mode 100644 EdgeBlur/EdgeBlurSub8.cpp create mode 100644 EdgeBlur/Fs_Target.h create mode 100644 EdgeBlur/Win/EdgeBlur.vcxproj create mode 100644 EdgeBlur/Win/EdgeBlur.vcxproj.filters create mode 100644 EdgeBlur/Win/EdgeBlurPiPL.rc create mode 100644 EdgeLine/EdgeLine.cpp create mode 100644 EdgeLine/EdgeLine.h create mode 100644 EdgeLine/EdgeLinePiPL.r create mode 100644 EdgeLine/Fs_Entry.h create mode 100644 EdgeLine/Fs_Target.h create mode 100644 EdgeLine/Win/EdgeLine.vcxproj create mode 100644 EdgeLine/Win/EdgeLine.vcxproj.filters create mode 100644 EdgeLine/Win/EdgeLinePiPL.rc create mode 100644 Extract-Hi/Extract-Hi.cpp create mode 100644 Extract-Hi/Extract-Hi.h create mode 100644 Extract-Hi/Extract-HiPiPL.r create mode 100644 Extract-Hi/Fs_Entry.h create mode 100644 Extract-Hi/Fs_Target.h create mode 100644 Extract-Hi/Win/Extract-Hi.sln create mode 100644 Extract-Hi/Win/Extract-Hi.vcxproj create mode 100644 Extract-Hi/Win/Extract-Hi.vcxproj.filters create mode 100644 Extract-Hi/Win/Extract-HiPiPL.rc create mode 100644 Extract_Edge/Extract_Edge.cpp create mode 100644 Extract_Edge/Extract_Edge.h create mode 100644 Extract_Edge/Extract_EdgePiPL.r create mode 100644 Extract_Edge/Extract_EdgeSub8.cpp create mode 100644 Extract_Edge/Fs_Entry.h create mode 100644 Extract_Edge/Fs_Target.h create mode 100644 Extract_Edge/Win/Extract_Edge.sln create mode 100644 Extract_Edge/Win/Extract_Edge.vcxproj create mode 100644 Extract_Edge/Win/Extract_Edge.vcxproj.filters create mode 100644 Extract_Edge/Win/Extract_EdgePiPL.rc create mode 100644 Extract_Edge/Win/PluginSkeletonPiPL.rc create mode 100644 F's PluginsProjects.sln create mode 100644 FillColor/FillColor.cpp create mode 100644 FillColor/FillColor.h create mode 100644 FillColor/FillColorPiPL.r create mode 100644 FillColor/Fs_Target.h create mode 100644 FillColor/Win/FillColor.vcxproj create mode 100644 FillColor/Win/FillColor.vcxproj.filters create mode 100644 FillColor/Win/FillColorPiPL.rc create mode 100644 Frame/Frame.cpp create mode 100644 Frame/Frame.h create mode 100644 Frame/FramePiPL.r create mode 100644 Frame/Fs_Entry.h create mode 100644 Frame/Fs_Target.h create mode 100644 Frame/Win/Frame.vcxproj create mode 100644 Frame/Win/Frame.vcxproj.filters create mode 100644 Frame/Win/FramePiPL.rc create mode 100644 FsLibrary/AE_headers.h create mode 100644 FsLibrary/FsAE.h create mode 100644 FsLibrary/FsBlur.cpp create mode 100644 FsLibrary/FsBuffer.h create mode 100644 FsLibrary/FsDebug.h create mode 100644 FsLibrary/FsGraphics.cpp create mode 100644 FsLibrary/FsGraphics.h create mode 100644 FsLibrary/FsGraphicsBlend.cpp create mode 100644 FsLibrary/FsGraphicsBox.cpp create mode 100644 FsLibrary/FsGraphicsCircle.cpp create mode 100644 FsLibrary/FsGraphicsLine.cpp create mode 100644 FsLibrary/FsGraphicsPaint.cpp create mode 100644 FsLibrary/FsHLS.h create mode 100644 FsLibrary/FsMat.cpp create mode 100644 FsLibrary/FsMiniMax16.cpp create mode 100644 FsLibrary/FsMiniMax32.cpp create mode 100644 FsLibrary/FsMiniMax8.cpp create mode 100644 FsLibrary/FsMosaic.cpp create mode 100644 FsLibrary/FsRandom.h create mode 100644 FsLibrary/FsScreenShake.h create mode 100644 FsLibrary/FsSputtering.h create mode 100644 FsLibrary/FsUtils.h create mode 100644 FsLibrary/FsVersion.h create mode 100644 FsSSFrame/FsSSFrame.cpp create mode 100644 FsSSFrame/FsSSFrame.h create mode 100644 FsSSFrame/FsSSFramePiPL.r create mode 100644 FsSSFrame/Fs_Entry.h create mode 100644 FsSSFrame/Fs_Target.h create mode 100644 FsSSFrame/Win/FramePiPL.rc create mode 100644 FsSSFrame/Win/FsSSFrame.vcxproj create mode 100644 FsSSFrame/Win/FsSSFrame.vcxproj.filters create mode 100644 FsSSFrame/Win/FsSSFramePiPL.rc create mode 100644 GuideFrame/Fs_Target.h create mode 100644 GuideFrame/GuideFrame.cpp create mode 100644 GuideFrame/GuideFrame.h create mode 100644 GuideFrame/GuideFramePiPL.r create mode 100644 GuideFrame/Win/GuideFrame.vcxproj create mode 100644 GuideFrame/Win/GuideFrame.vcxproj.filters create mode 100644 GuideFrame/Win/GuideFramePiPL.rc create mode 100644 HLS_Reverse/Fs_Target.h create mode 100644 HLS_Reverse/HLS_Reverse.cpp create mode 100644 HLS_Reverse/HLS_Reverse.h create mode 100644 HLS_Reverse/HLS_ReversePiPL.r create mode 100644 HLS_Reverse/Win/HLS_Reverse.vcxproj create mode 100644 HLS_Reverse/Win/HLS_Reverse.vcxproj.filters create mode 100644 HLS_Reverse/Win/HLS_ReversePiPL.rc create mode 100644 IroTore/Fs_Entry.h create mode 100644 IroTore/Fs_Target.h create mode 100644 IroTore/IroTore.cpp create mode 100644 IroTore/IroTore.h create mode 100644 IroTore/IroTorePiPL.r create mode 100644 IroTore/IroToreSub16.cpp create mode 100644 IroTore/IroToreSub32.cpp create mode 100644 IroTore/IroToreSub8.cpp create mode 100644 IroTore/Win/IroTore.sln create mode 100644 IroTore/Win/IroTore.vcxproj create mode 100644 IroTore/Win/IroTore.vcxproj.filters create mode 100644 IroTore/Win/IroTorePiPL.rc create mode 100644 IroToreAdjacent/Fs_Entry.h create mode 100644 IroToreAdjacent/Fs_Target.h create mode 100644 IroToreAdjacent/IroToreAdjacent.cpp create mode 100644 IroToreAdjacent/IroToreAdjacent.h create mode 100644 IroToreAdjacent/IroToreAdjacentPiPL.r create mode 100644 IroToreAdjacent/IroToreAdjacentSub16.cpp create mode 100644 IroToreAdjacent/IroToreAdjacentSub8.cpp create mode 100644 IroToreAdjacent/Win/IroToreAdjacent.sln create mode 100644 IroToreAdjacent/Win/IroToreAdjacent.vcxproj create mode 100644 IroToreAdjacent/Win/IroToreAdjacent.vcxproj.filters create mode 100644 IroToreAdjacent/Win/IroToreAdjacentPiPL.rc create mode 100644 LineDetection/Fs_Entry.h create mode 100644 LineDetection/Fs_Target.h create mode 100644 LineDetection/LineDetect16.cpp create mode 100644 LineDetection/LineDetect32.cpp create mode 100644 LineDetection/LineDetect8.cpp create mode 100644 LineDetection/LineDetection.cpp create mode 100644 LineDetection/LineDetection.h create mode 100644 LineDetection/LineDetectionPiPL.r create mode 100644 LineDetection/Win/LineDetection.vcxproj create mode 100644 LineDetection/Win/LineDetection.vcxproj.filters create mode 100644 LineDetection/Win/LineDetectionPiPL.rc create mode 100644 LineTrace/Fs_Entry.h create mode 100644 LineTrace/Fs_Target.h create mode 100644 LineTrace/LineTrace.cpp create mode 100644 LineTrace/LineTrace.h create mode 100644 LineTrace/LineTracePiPL.r create mode 100644 LineTrace/LineTrace_def.h create mode 100644 LineTrace/Win/LineTrace.vcxproj create mode 100644 LineTrace/Win/LineTrace.vcxproj.filters create mode 100644 LineTrace/Win/LineTracePiPL.rc create mode 100644 MainLineRepaint/Fs_Entry.h create mode 100644 MainLineRepaint/Fs_Target.h create mode 100644 MainLineRepaint/MainLineRepaint.cpp create mode 100644 MainLineRepaint/MainLineRepaint.h create mode 100644 MainLineRepaint/MainLineRepaintPiPL.r create mode 100644 MainLineRepaint/Win/MainLineRepaint.sln create mode 100644 MainLineRepaint/Win/MainLineRepaint.vcxproj create mode 100644 MainLineRepaint/Win/MainLineRepaint.vcxproj.filters create mode 100644 MainLineRepaint/Win/MainLineRepaintPiPL.rc create mode 100644 MainLineRepaint/a create mode 100644 MainLineRepaint_old/FsAE.h create mode 100644 MainLineRepaint_old/FsGraphics.cpp create mode 100644 MainLineRepaint_old/FsGraphics.h create mode 100644 MainLineRepaint_old/FsGraphicsBlend.cpp create mode 100644 MainLineRepaint_old/FsGraphicsPaint.cpp create mode 100644 MainLineRepaint_old/MainLineRepaint_old.cpp create mode 100644 MainLineRepaint_old/MainLineRepaint_old.h create mode 100644 MainLineRepaint_old/MainLineRepaint_oldPiPL.r create mode 100644 MainLineRepaint_old/MainLineRepaint_old_Strings.cpp create mode 100644 MainLineRepaint_old/MainLineRepaint_old_Strings.h create mode 100644 MainLineRepaint_old/Win/MainLineRepaint_old.sln create mode 100644 MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj create mode 100644 MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj.filters create mode 100644 MainLineRepaint_old/Win/MainLineRepaint_oldPiPL.rc create mode 100644 MaskFromRGB/Fs_Entry.h create mode 100644 MaskFromRGB/Fs_Target.h create mode 100644 MaskFromRGB/MaskFromRGB.cpp create mode 100644 MaskFromRGB/MaskFromRGB.h create mode 100644 MaskFromRGB/MaskFromRGBPiPL.r create mode 100644 MaskFromRGB/Win/MaskFromRGB.sln create mode 100644 MaskFromRGB/Win/MaskFromRGB.vcxproj create mode 100644 MaskFromRGB/Win/MaskFromRGB.vcxproj.filters create mode 100644 MaskFromRGB/Win/MaskFromRGBAPiPL.rc create mode 100644 MaskFromRGB/Win/MaskFromRGBPiPL.rc create mode 100644 MaskFromRGB/sample.png create mode 100644 MaskFromRGB_Multi/Fs_Entry.h create mode 100644 MaskFromRGB_Multi/Fs_Target.h create mode 100644 MaskFromRGB_Multi/MaskFromRGB_Multi.cpp create mode 100644 MaskFromRGB_Multi/MaskFromRGB_Multi.h create mode 100644 MaskFromRGB_Multi/MaskFromRGB_MultiPiPL.r create mode 100644 MaskFromRGB_Multi/Win/MaskFromRGB_Multi.sln create mode 100644 MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj create mode 100644 MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj.filters create mode 100644 MaskFromRGB_Multi/Win/MaskFromRGB_MultiPiPL.rc create mode 100644 MaskFromRGB_Multi/sample.png create mode 100644 Max/Fs_Entry.h create mode 100644 Max/Fs_Target.h create mode 100644 Max/Max.cpp create mode 100644 Max/Max.h create mode 100644 Max/MaxPiPL.r create mode 100644 Max/Win/Max.sln create mode 100644 Max/Win/Max.vcxproj create mode 100644 Max/Win/Max.vcxproj.filters create mode 100644 Max/Win/MaxPiPL.rc create mode 100644 Max_Kasumi/02_00001.png create mode 100644 Max_Kasumi/02_00001.psd create mode 100644 Max_Kasumi/02_00002.png create mode 100644 Max_Kasumi/02_00003.png create mode 100644 Max_Kasumi/Fs_Entry.h create mode 100644 Max_Kasumi/Fs_Target.h create mode 100644 Max_Kasumi/Max_Kasumi.cpp create mode 100644 Max_Kasumi/Max_Kasumi.h create mode 100644 Max_Kasumi/Max_KasumiPiPL.r create mode 100644 Max_Kasumi/Max_KasumiSub16.cpp create mode 100644 Max_Kasumi/Max_KasumiSub32.cpp create mode 100644 Max_Kasumi/Max_KasumiSub8.cpp create mode 100644 Max_Kasumi/Win/Max_Kasumi.sln create mode 100644 Max_Kasumi/Win/Max_Kasumi.vcxproj create mode 100644 Max_Kasumi/Win/Max_Kasumi.vcxproj.filters create mode 100644 Max_Kasumi/Win/Max_KasumiPiPL.rc create mode 100644 Max_Kasumi/Win/PluginSkeletonPiPL.rc create mode 100644 Max_Kasumi/a create mode 100644 Mosaic/Fs_Target.h create mode 100644 Mosaic/Mosaic.cpp create mode 100644 Mosaic/Mosaic.h create mode 100644 Mosaic/MosaicPiPL.r create mode 100644 Mosaic/Win/Mosaic.vcxproj create mode 100644 Mosaic/Win/Mosaic.vcxproj.filters create mode 100644 Mosaic/Win/MosaicPiPL.rc create mode 100644 NamiGarasu/DrawSq.cpp create mode 100644 NamiGarasu/DrawSqData.h create mode 100644 NamiGarasu/Fs_Entry.h create mode 100644 NamiGarasu/Fs_Target.h create mode 100644 NamiGarasu/NamiGarasu.cpp create mode 100644 NamiGarasu/NamiGarasu.h create mode 100644 NamiGarasu/NamiGarasuPiPL.r create mode 100644 NamiGarasu/Win/NamiGarasu.sln create mode 100644 NamiGarasu/Win/NamiGarasu.vcxproj create mode 100644 NamiGarasu/Win/NamiGarasu.vcxproj.filters create mode 100644 NamiGarasu/Win/NamiGarasuPiPL.rc create mode 100644 NamiGarasu/alphaBlur16.cpp create mode 100644 NamiGarasu/alphaBlur32.cpp create mode 100644 NamiGarasu/alphaBlur8.cpp create mode 100644 NamiGarasu/imageMap.cpp create mode 100644 NamiGarasu/shiftRed.cpp create mode 100644 NoiseHiLo_Alpha/Fs_Entry.h create mode 100644 NoiseHiLo_Alpha/Fs_Target.h create mode 100644 NoiseHiLo_Alpha/NoiseHiLo_Alpha.cpp create mode 100644 NoiseHiLo_Alpha/NoiseHiLo_Alpha.h create mode 100644 NoiseHiLo_Alpha/NoiseHiLo_AlphaPiPL.r create mode 100644 NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj create mode 100644 NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj.filters create mode 100644 NoiseHiLo_Alpha/Win/NoiseHiLo_AlphaPiPL.rc create mode 100644 NoiseHiLo_RGB/Fs_Entry.h create mode 100644 NoiseHiLo_RGB/Fs_Target.h create mode 100644 NoiseHiLo_RGB/NoiseHiLo_RGB.cpp create mode 100644 NoiseHiLo_RGB/NoiseHiLo_RGB.h create mode 100644 NoiseHiLo_RGB/NoiseHiLo_RGBPiPL.r create mode 100644 NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj create mode 100644 NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj.filters create mode 100644 NoiseHiLo_RGB/Win/NoiseHiLo_RGBPiPL.rc create mode 100644 OpticalDiffusion/DF16.cpp create mode 100644 OpticalDiffusion/DF32.cpp create mode 100644 OpticalDiffusion/DF8.cpp create mode 100644 OpticalDiffusion/Fs_Entry.h create mode 100644 OpticalDiffusion/Fs_Target.h create mode 100644 OpticalDiffusion/OpticalDiffusion.cpp create mode 100644 OpticalDiffusion/OpticalDiffusion.h create mode 100644 OpticalDiffusion/OpticalDiffusionPiPL.r create mode 100644 OpticalDiffusion/Win/OpticalDiffusion.vcxproj create mode 100644 OpticalDiffusion/Win/OpticalDiffusion.vcxproj.filters create mode 100644 OpticalDiffusion/Win/OpticalDiffusionPiPL.rc create mode 100644 OpticalDiffusion/Win/PluginSkeletonPiPL.rc create mode 100644 OpticalDiffusion/odf_noise.cpp create mode 100644 OutLine/Fs_Entry.h create mode 100644 OutLine/Fs_Target.h create mode 100644 OutLine/OutLine.cpp create mode 100644 OutLine/OutLine.h create mode 100644 OutLine/OutLinePiPL.r create mode 100644 OutLine/Win/OutLine.sln create mode 100644 OutLine/Win/OutLine.vcxproj create mode 100644 OutLine/Win/OutLine.vcxproj.filters create mode 100644 OutLine/Win/OutLinePiPL.rc create mode 100644 Paint/Fs_Target.h create mode 100644 Paint/Paint.cpp create mode 100644 Paint/Paint.h create mode 100644 Paint/PaintPiPL.r create mode 100644 Paint/Win/Paint.vcxproj create mode 100644 Paint/Win/Paint.vcxproj.filters create mode 100644 Paint/Win/PaintPiPL.rc create mode 100644 PaintMultPoint/Fs_Target.h create mode 100644 PaintMultPoint/PaintMultPoint.cpp create mode 100644 PaintMultPoint/PaintMultPoint.h create mode 100644 PaintMultPoint/PaintMultPointPiPL.r create mode 100644 PaintMultPoint/Win/PaintMultPoint.sln create mode 100644 PaintMultPoint/Win/PaintMultPoint.vcxproj create mode 100644 PaintMultPoint/Win/PaintMultPoint.vcxproj.filters create mode 100644 PaintMultPoint/Win/PaintMultPointPiPL.rc create mode 100644 PaperPlaneGetWeight/Fs_Entry.h create mode 100644 PaperPlaneGetWeight/Fs_Target.h create mode 100644 PaperPlaneGetWeight/PaperPlaneGetWeight.cpp create mode 100644 PaperPlaneGetWeight/PaperPlaneGetWeight.h create mode 100644 PaperPlaneGetWeight/PaperPlaneGetWeightPiPL.r create mode 100644 PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj create mode 100644 PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj.filters create mode 100644 PaperPlaneGetWeight/Win/PaperPlaneGetWeight.zip create mode 100644 PaperPlaneGetWeight/Win/PaperPlaneGetWeightPiPL.rc create mode 100644 PaperPlaneGetWeightInfo/AEDebugAngel.cpp create mode 100644 PaperPlaneGetWeightInfo/AEDebugAngel.h create mode 100644 PaperPlaneGetWeightInfo/Fs_Entry.h create mode 100644 PaperPlaneGetWeightInfo/Fs_Target.h create mode 100644 PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.cpp create mode 100644 PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.h create mode 100644 PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfoPiPL.r create mode 100644 PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.sln create mode 100644 PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj create mode 100644 PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj.filters create mode 100644 PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfoPiPL.rc create mode 100644 PaperPlaneGetWeightInfo/Win/PluginSkeletonPiPL.rc create mode 100644 PaperPlaneGetWeightInfo/kami.psd create mode 100644 PixelReplace/Fs_Target.h create mode 100644 PixelReplace/PixelReplace.cpp create mode 100644 PixelReplace/PixelReplace.h create mode 100644 PixelReplace/PixelReplacePiPL.r create mode 100644 PixelReplace/PixelReplace_def.h create mode 100644 PixelReplace/Win/PixelReplace.vcxproj create mode 100644 PixelReplace/Win/PixelReplace.vcxproj.filters create mode 100644 PixelReplace/Win/PixelReplacePiPL.rc create mode 100644 PixelSelector/Fs_Target.h create mode 100644 PixelSelector/PixelSelector.cpp create mode 100644 PixelSelector/PixelSelector.h create mode 100644 PixelSelector/PixelSelectorPiPL.r create mode 100644 PixelSelector/PixelSelector_def.h create mode 100644 PixelSelector/Win/PixelSelector.vcxproj create mode 100644 PixelSelector/Win/PixelSelector.vcxproj.filters create mode 100644 PixelSelector/Win/PixelSelectorPiPL.rc create mode 100644 PluginSkeleton/Fs_Entry.h create mode 100644 PluginSkeleton/Fs_Target.h create mode 100644 PluginSkeleton/PluginSkeleton.cpp create mode 100644 PluginSkeleton/PluginSkeleton.h create mode 100644 PluginSkeleton/PluginSkeletonPiPL.r create mode 100644 PluginSkeleton/Win/PluginSkeleton.sln create mode 100644 PluginSkeleton/Win/PluginSkeleton.vcxproj create mode 100644 PluginSkeleton/Win/PluginSkeleton.vcxproj.filters create mode 100644 PluginSkeleton/Win/PluginSkeletonPiPL.rc create mode 100644 PluginSkeleton/Win/PropertySheet.props create mode 100644 PluginSkeleton/Win/PropertySheet1.props create mode 100644 PluginSkeleton/a create mode 100644 Premultiply/Fs_Target.h create mode 100644 Premultiply/Premultiply.cpp create mode 100644 Premultiply/Premultiply.h create mode 100644 Premultiply/PremultiplyPiPL.r create mode 100644 Premultiply/Win/Premultiply.vcxproj create mode 100644 Premultiply/Win/Premultiply.vcxproj.filters create mode 100644 Premultiply/Win/PremultiplyPiPL.rc create mode 100644 README.md create mode 100644 RGBAControl/Fs_Target.h create mode 100644 RGBAControl/RGBAControl.cpp create mode 100644 RGBAControl/RGBAControl.h create mode 100644 RGBAControl/RGBAControlPiPL.r create mode 100644 RGBAControl/Win/RGBAControl.vcxproj create mode 100644 RGBAControl/Win/RGBAControl.vcxproj.filters create mode 100644 RGBAControl/Win/RGBAControlPiPL.rc create mode 100644 RandomLineNoise/Fs_Target.h create mode 100644 RandomLineNoise/RandomLineNoise.cpp create mode 100644 RandomLineNoise/RandomLineNoise.h create mode 100644 RandomLineNoise/RandomLineNoisePiPL.r create mode 100644 RandomLineNoise/Win/RandomLineNoise.vcxproj create mode 100644 RandomLineNoise/Win/RandomLineNoise.vcxproj.filters create mode 100644 RandomLineNoise/Win/RandomLineNoisePiPL.rc create mode 100644 RandomMosaic/Fs_Target.h create mode 100644 RandomMosaic/RandomMosaic.cpp create mode 100644 RandomMosaic/RandomMosaic.h create mode 100644 RandomMosaic/RandomMosaicPiPL.r create mode 100644 RandomMosaic/Win/RandomMosaic.vcxproj create mode 100644 RandomMosaic/Win/RandomMosaic.vcxproj.filters create mode 100644 RandomMosaic/Win/RandomMosaicPiPL.rc create mode 100644 RandomMosaic2nd/Fs_Target.h create mode 100644 RandomMosaic2nd/RandomMosaic2nd.cpp create mode 100644 RandomMosaic2nd/RandomMosaic2nd.h create mode 100644 RandomMosaic2nd/RandomMosaic2ndPiPL.r create mode 100644 RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj create mode 100644 RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj.filters create mode 100644 RandomMosaic2nd/Win/RandomMosaic2ndPiPL.rc create mode 100644 RandomShift/Fs_Target.h create mode 100644 RandomShift/RandomShift.cpp create mode 100644 RandomShift/RandomShift.h create mode 100644 RandomShift/RandomShiftPiPL.r create mode 100644 RandomShift/Win/RandomShift.vcxproj create mode 100644 RandomShift/Win/RandomShift.vcxproj.filters create mode 100644 RandomShift/Win/RandomShiftPiPL.rc create mode 100644 RgbToAlpha/Fs_Target.h create mode 100644 RgbToAlpha/RgbToAlpha.cpp create mode 100644 RgbToAlpha/RgbToAlpha.h create mode 100644 RgbToAlpha/RgbToAlphaPiPL.r create mode 100644 RgbToAlpha/Win/RgbToAlpha.vcxproj create mode 100644 RgbToAlpha/Win/RgbToAlpha.vcxproj.filters create mode 100644 RgbToAlpha/Win/RgbToAlphaPiPL.rc create mode 100644 ScreenShakeDir/Fs_Target.h create mode 100644 ScreenShakeDir/ScreenShakeDir.cpp create mode 100644 ScreenShakeDir/ScreenShakeDir.h create mode 100644 ScreenShakeDir/ScreenShakeDirPiPL.r create mode 100644 ScreenShakeDir/Win/ScreenShakeDir.vcxproj create mode 100644 ScreenShakeDir/Win/ScreenShakeDir.vcxproj.filters create mode 100644 ScreenShakeDir/Win/ScreenShakeDirPiPL.rc create mode 100644 ScreenShakeMM/Fs_Target.h create mode 100644 ScreenShakeMM/ScreenShakeMM.cpp create mode 100644 ScreenShakeMM/ScreenShakeMM.h create mode 100644 ScreenShakeMM/ScreenShakeMMPiPL.r create mode 100644 ScreenShakeMM/Win/ScreenShakeDirPiPL.rc create mode 100644 ScreenShakeMM/Win/ScreenShakeMM.vcxproj create mode 100644 ScreenShakeMM/Win/ScreenShakeMM.vcxproj.filters create mode 100644 ScreenShakeMM/Win/ScreenShakeMMPiPL.rc create mode 100644 SelectColor/Fs_Target.h create mode 100644 SelectColor/SelectColor.cpp create mode 100644 SelectColor/SelectColor.h create mode 100644 SelectColor/SelectColorPiPL.r create mode 100644 SelectColor/Win/SelectColor.vcxproj create mode 100644 SelectColor/Win/SelectColor.vcxproj.filters create mode 100644 SelectColor/Win/SelectColorPiPL.rc create mode 100644 SelectedBlur/Fs_Entry.h create mode 100644 SelectedBlur/Fs_Target.h create mode 100644 SelectedBlur/SelectedBlur.cpp create mode 100644 SelectedBlur/SelectedBlur.h create mode 100644 SelectedBlur/SelectedBlurPiPL.r create mode 100644 SelectedBlur/SelectedBlurSub16.cpp create mode 100644 SelectedBlur/SelectedBlurSub32.cpp create mode 100644 SelectedBlur/SelectedBlurSub8.cpp create mode 100644 SelectedBlur/Win/SelectedBlur.vcxproj create mode 100644 SelectedBlur/Win/SelectedBlur.vcxproj.filters create mode 100644 SelectedBlur/Win/SelectedBlurPiPL.rc create mode 100644 ShitsuKanBlur/Fs_Entry.h create mode 100644 ShitsuKanBlur/Fs_Target.h create mode 100644 ShitsuKanBlur/ShitsuKanBlur.cpp create mode 100644 ShitsuKanBlur/ShitsuKanBlur.h create mode 100644 ShitsuKanBlur/ShitsuKanBlur.psd create mode 100644 ShitsuKanBlur/ShitsuKanBlurPiPL.r create mode 100644 ShitsuKanBlur/ShitsuKanBlurSub16.cpp create mode 100644 ShitsuKanBlur/ShitsuKanBlurSub32.cpp create mode 100644 ShitsuKanBlur/ShitsuKanBlurSub8.cpp create mode 100644 ShitsuKanBlur/Win/PluginSkeletonPiPL.rc create mode 100644 ShitsuKanBlur/Win/PropertySheet.props create mode 100644 ShitsuKanBlur/Win/PropertySheet1.props create mode 100644 ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj create mode 100644 ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj.filters create mode 100644 ShitsuKanBlur/Win/ShitsuKanBlurPiPL.rc create mode 100644 ShitsuKanBlur/Win/ShitsuKanPiPL.rc create mode 100644 Star/Fs_Entry.h create mode 100644 Star/Fs_Target.h create mode 100644 Star/Star.cpp create mode 100644 Star/Star.h create mode 100644 Star/StarBuf.cpp create mode 100644 Star/StarDraw.cpp create mode 100644 Star/StarMask.cpp create mode 100644 Star/StarPiPL.r create mode 100644 Star/StarTargetCopy.cpp create mode 100644 Star/Win/Star.vcxproj create mode 100644 Star/Win/Star.vcxproj.filters create mode 100644 Star/Win/StarPiPL.rc create mode 100644 Star_Colorful/Fs_Entry.h create mode 100644 Star_Colorful/Fs_Target.h create mode 100644 Star_Colorful/Star_Colorful.cpp create mode 100644 Star_Colorful/Star_Colorful.h create mode 100644 Star_Colorful/Star_ColorfulPiPL.r create mode 100644 Star_Colorful/Star_ColorfulSub16.cpp create mode 100644 Star_Colorful/Star_ColorfulSub32.cpp create mode 100644 Star_Colorful/Star_ColorfulSub8.cpp create mode 100644 Star_Colorful/Win/Star_Colorful.sln create mode 100644 Star_Colorful/Win/Star_Colorful.vcxproj create mode 100644 Star_Colorful/Win/Star_Colorful.vcxproj.filters create mode 100644 Star_Colorful/Win/Star_ColorfulPiPL.rc create mode 100644 Thin/Fs_Entry.h create mode 100644 Thin/Fs_Target.h create mode 100644 Thin/Thin.cpp create mode 100644 Thin/Thin.h create mode 100644 Thin/ThinPiPL.r create mode 100644 Thin/ThinSub16.cpp create mode 100644 Thin/ThinSub32.cpp create mode 100644 Thin/ThinSub8.cpp create mode 100644 Thin/Win/PluginSkeletonPiPL.rc create mode 100644 Thin/Win/Thin.sln create mode 100644 Thin/Win/Thin.vcxproj create mode 100644 Thin/Win/Thin.vcxproj.filters create mode 100644 Thin/Win/ThinPiPL.rc create mode 100644 Thin/thinPat.exe create mode 100644 ToGray/Fs_Target.h create mode 100644 ToGray/ToGray.cpp create mode 100644 ToGray/ToGray.h create mode 100644 ToGray/ToGrayPiPL.r create mode 100644 ToGray/Win/ToGray.vcxproj create mode 100644 ToGray/Win/ToGray.vcxproj.filters create mode 100644 ToGray/Win/ToGrayPiPL.rc create mode 100644 Tone/Fs_Target.h create mode 100644 Tone/Tone.cpp create mode 100644 Tone/Tone.h create mode 100644 Tone/TonePiPL.r create mode 100644 Tone/Win/Tone.vcxproj create mode 100644 Tone/Win/Tone.vcxproj.filters create mode 100644 Tone/Win/TonePiPL.rc create mode 100644 Tone/Win/TonerPiPL.rc create mode 100644 Toner/Fs_Target.h create mode 100644 Toner/Toner.cpp create mode 100644 Toner/Toner.h create mode 100644 Toner/TonerPiPL.r create mode 100644 Toner/Win/Toner.vcxproj create mode 100644 Toner/Win/Toner.vcxproj.filters create mode 100644 Toner/Win/TonerPiPL.rc create mode 100644 TouchDraw/FsTDFindTarget.cpp create mode 100644 TouchDraw/FsTDFindTargetDelta.cpp create mode 100644 TouchDraw/FsTDblockDraw.cpp create mode 100644 TouchDraw/FsTDcopyAlpha.cpp create mode 100644 TouchDraw/FsTDgreenBlur.cpp create mode 100644 TouchDraw/FsTDpset.h create mode 100644 TouchDraw/Fs_Entry.h create mode 100644 TouchDraw/Fs_Target.h create mode 100644 TouchDraw/TouchDraw.cpp create mode 100644 TouchDraw/TouchDraw.h create mode 100644 TouchDraw/TouchDrawPiPL.r create mode 100644 TouchDraw/ToutchDraw16.cpp create mode 100644 TouchDraw/ToutchDraw32.cpp create mode 100644 TouchDraw/ToutchDraw8.cpp create mode 100644 TouchDraw/Win/TouchDraw.vcxproj create mode 100644 TouchDraw/Win/TouchDraw.vcxproj.filters create mode 100644 TouchDraw/Win/TouchDrawPiPL.rc create mode 100644 TouchDrawCenter/Fs_Entry.h create mode 100644 TouchDrawCenter/Fs_Target.h create mode 100644 TouchDrawCenter/TouchDrawCenter.cpp create mode 100644 TouchDrawCenter/TouchDrawCenter.h create mode 100644 TouchDrawCenter/TouchDrawCenterPiPL.r create mode 100644 TouchDrawCenter/ToutchDraw16.cpp create mode 100644 TouchDrawCenter/ToutchDraw32.cpp create mode 100644 TouchDrawCenter/ToutchDraw8.cpp create mode 100644 TouchDrawCenter/Win/TouchDrawCenter.vcxproj create mode 100644 TouchDrawCenter/Win/TouchDrawCenter.vcxproj.filters create mode 100644 TouchDrawCenter/Win/TouchDrawCenterPiPL.rc create mode 100644 TouchDrawCenter/alphaBlur16.cpp create mode 100644 TouchDrawCenter/alphaBlur32.cpp create mode 100644 TouchDrawCenter/alphaBlur8.cpp create mode 100644 TouchDrawCenter/copyImage.cpp create mode 100644 TouchDrawStraght/FsTDFindTarget.cpp create mode 100644 TouchDrawStraght/FsTDFindTargetDelta.cpp create mode 100644 TouchDrawStraght/FsTDblockDraw.cpp create mode 100644 TouchDrawStraght/FsTDcopyAlpha.cpp create mode 100644 TouchDrawStraght/FsTDgreenBlur.cpp create mode 100644 TouchDrawStraght/FsTDpset.h create mode 100644 TouchDrawStraght/Fs_Entry.h create mode 100644 TouchDrawStraght/Fs_Target.h create mode 100644 TouchDrawStraght/TouchDrawStraght.cpp create mode 100644 TouchDrawStraght/TouchDrawStraght.h create mode 100644 TouchDrawStraght/TouchDrawStraghtPiPL.r create mode 100644 TouchDrawStraght/ToutchDrawStraght16.cpp create mode 100644 TouchDrawStraght/ToutchDrawStraght32.cpp create mode 100644 TouchDrawStraght/ToutchDrawStraght8.cpp create mode 100644 TouchDrawStraght/Win/TouchDrawStraght.vcxproj create mode 100644 TouchDrawStraght/Win/TouchDrawStraght.vcxproj.filters create mode 100644 TouchDrawStraght/Win/TouchDrawStraghtPiPL.rc create mode 100644 VideoGrid/Fs_Target.h create mode 100644 VideoGrid/GridSub16.cpp create mode 100644 VideoGrid/GridSub32.cpp create mode 100644 VideoGrid/GridSub8.cpp create mode 100644 VideoGrid/VideoGrid.cpp create mode 100644 VideoGrid/VideoGrid.h create mode 100644 VideoGrid/VideoGridPiPL.r create mode 100644 VideoGrid/Win/VideoGrid.vcxproj create mode 100644 VideoGrid/Win/VideoGrid.vcxproj.filters create mode 100644 VideoGrid/Win/VideoGridPiPL.rc create mode 100644 VideoLine/Fs_Target.h create mode 100644 VideoLine/VideoLine.cpp create mode 100644 VideoLine/VideoLine.h create mode 100644 VideoLine/VideoLinePiPL.r create mode 100644 VideoLine/Win/VideoLine.vcxproj create mode 100644 VideoLine/Win/VideoLine.vcxproj.filters create mode 100644 VideoLine/Win/VideoLinePiPL.rc create mode 100644 VideoLine2nd/Fs_Target.h create mode 100644 VideoLine2nd/VideoLine2nd.cpp create mode 100644 VideoLine2nd/VideoLine2nd.h create mode 100644 VideoLine2nd/VideoLine2ndPiPL.r create mode 100644 VideoLine2nd/Win/VideoLine2nd.vcxproj create mode 100644 VideoLine2nd/Win/VideoLine2nd.vcxproj.filters create mode 100644 VideoLine2nd/Win/VideoLine2ndPiPL.rc create mode 100644 VideoLine2nd/Win/VideoLinePiPL.rc create mode 100644 colorThreshold/Fs_Entry.h create mode 100644 colorThreshold/Fs_Target.h create mode 100644 colorThreshold/Win/8_16_32.txt create mode 100644 colorThreshold/Win/colorThreshold.sln create mode 100644 colorThreshold/Win/colorThreshold.vcxproj create mode 100644 colorThreshold/Win/colorThreshold.vcxproj.filters create mode 100644 colorThreshold/Win/colorThresholdPiPL.rc create mode 100644 colorThreshold/colorThreshold.cpp create mode 100644 colorThreshold/colorThreshold.h create mode 100644 colorThreshold/colorThresholdMain16.cpp create mode 100644 colorThreshold/colorThresholdMain32.cpp create mode 100644 colorThreshold/colorThresholdMain8.cpp create mode 100644 colorThreshold/colorThresholdPiPL.r create mode 100644 colorThreshold/colorThresholdSub.cpp create mode 100644 "colorThreshold/\350\252\254\346\230\216.png" create mode 100644 grayToColorize/Fs_Entry.h create mode 100644 grayToColorize/Fs_Target.h create mode 100644 grayToColorize/Win/grayToColorize.sln create mode 100644 grayToColorize/Win/grayToColorize.vcxproj create mode 100644 grayToColorize/Win/grayToColorize.vcxproj.filters create mode 100644 grayToColorize/Win/grayToColorizePiPL.rc create mode 100644 grayToColorize/grayToColorize.cpp create mode 100644 grayToColorize/grayToColorize.h create mode 100644 grayToColorize/grayToColorizePiPL.r create mode 100644 grayToColorize/sample.png create mode 100644 smokeThreshold/Fs_Entry.h create mode 100644 smokeThreshold/Fs_Target.h create mode 100644 smokeThreshold/Win/smokeThreshold.sln create mode 100644 smokeThreshold/Win/smokeThreshold.vcxproj create mode 100644 smokeThreshold/Win/smokeThreshold.vcxproj.filters create mode 100644 smokeThreshold/Win/smokeThresholdPiPL.rc create mode 100644 smokeThreshold/smoke.png create mode 100644 smokeThreshold/smokeThreshold.cpp create mode 100644 smokeThreshold/smokeThreshold.h create mode 100644 smokeThreshold/smokeThresholdPiPL.r create mode 100644 sputteringAlpha/Fs_Entry.h create mode 100644 sputteringAlpha/Fs_Target.h create mode 100644 sputteringAlpha/Win/sputteringAlpha.vcxproj create mode 100644 sputteringAlpha/Win/sputteringAlpha.vcxproj.filters create mode 100644 sputteringAlpha/Win/sputteringAlphaPiPL.rc create mode 100644 sputteringAlpha/sputteringAlpha.cpp create mode 100644 sputteringAlpha/sputteringAlpha.h create mode 100644 sputteringAlpha/sputteringAlpha16.cpp create mode 100644 sputteringAlpha/sputteringAlpha32.cpp create mode 100644 sputteringAlpha/sputteringAlpha8.cpp create mode 100644 sputteringAlpha/sputteringAlphaPiPL.r create mode 100644 sputteringCircle/Fs_Entry.h create mode 100644 sputteringCircle/Fs_Target.h create mode 100644 sputteringCircle/Win/sputteringCircle.vcxproj create mode 100644 sputteringCircle/Win/sputteringCircle.vcxproj.filters create mode 100644 sputteringCircle/Win/sputteringCirclePiPL.rc create mode 100644 sputteringCircle/sputteringCircle.cpp create mode 100644 sputteringCircle/sputteringCircle.h create mode 100644 sputteringCircle/sputteringCircleMain.cpp create mode 100644 sputteringCircle/sputteringCirclePiPL.r create mode 100644 sputteringRect/Fs_Entry.h create mode 100644 sputteringRect/Fs_Target.h create mode 100644 sputteringRect/Tex_png_new/SPD_02_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_02_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_02_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_02_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_03_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_03_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_03_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_03_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_04_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_04_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_04_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_04_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_05_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_05_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_05_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_05_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_05_5.png create mode 100644 sputteringRect/Tex_png_new/SPD_06_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_06_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_06_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_06_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_5.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_6.png create mode 100644 sputteringRect/Tex_png_new/SPD_07_7.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_5.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_6.png create mode 100644 sputteringRect/Tex_png_new/SPD_08_7.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_5.png create mode 100644 sputteringRect/Tex_png_new/SPD_09_6.png create mode 100644 sputteringRect/Tex_png_new/SPD_10_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_10_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_10_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_10_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_11_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_11_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_11_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_11_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_12_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_12_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_12_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_12_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_13_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_13_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_13_3.png create mode 100644 sputteringRect/Tex_png_new/SPD_13_4.png create mode 100644 sputteringRect/Tex_png_new/SPD_14_1.png create mode 100644 sputteringRect/Tex_png_new/SPD_14_2.png create mode 100644 sputteringRect/Tex_png_new/SPD_14_3.png create mode 100644 sputteringRect/Win/sputteringRect.vcxproj create mode 100644 sputteringRect/Win/sputteringRect.vcxproj.filters create mode 100644 sputteringRect/Win/sputteringRectPiPL.rc create mode 100644 sputteringRect/pic2c.exe create mode 100644 sputteringRect/sputteringRect.cpp create mode 100644 sputteringRect/sputteringRect.h create mode 100644 sputteringRect/sputteringRectMain.cpp create mode 100644 sputteringRect/sputteringRectPiPL.r create mode 100644 sputteringRect/tex_size.c create mode 100644 sputteringSplash/Fs_Entry.h create mode 100644 sputteringSplash/Fs_Target.h create mode 100644 sputteringSplash/Win/sputteringSplash.vcxproj create mode 100644 sputteringSplash/Win/sputteringSplash.vcxproj.filters create mode 100644 sputteringSplash/Win/sputteringSplashPiPL.rc create mode 100644 sputteringSplash/sputteringSplash.cpp create mode 100644 sputteringSplash/sputteringSplash.h create mode 100644 sputteringSplash/sputteringSplashMain.cpp create mode 100644 sputteringSplash/sputteringSplashPiPL.r create mode 100644 whiteInOut/Fs_Entry.h create mode 100644 whiteInOut/Fs_Target.h create mode 100644 whiteInOut/Win/ClassDiagram1.cd create mode 100644 whiteInOut/Win/PluginSkeletonPiPL.rc create mode 100644 whiteInOut/Win/whiteInOut.sln create mode 100644 whiteInOut/Win/whiteInOut.vcxproj create mode 100644 whiteInOut/Win/whiteInOut.vcxproj.filters create mode 100644 whiteInOut/Win/whiteInOutPiPL.rc create mode 100644 whiteInOut/whiteInOut.cpp create mode 100644 whiteInOut/whiteInOut.h create mode 100644 whiteInOut/whiteInOutPiPL.r diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23df2e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,278 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +*.jpg +*.tga +*.aep +*.aex +*.mp4 +*.f4v +*.gif +sample/ +outAEX64/ +outAEX64_MD/ +Mac/ +MacCS4_xcode5/ +_bak/ + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + + diff --git a/AlphaFix/AlphaFix.cpp b/AlphaFix/AlphaFix.cpp new file mode 100644 index 0000000..7f30361 --- /dev/null +++ b/AlphaFix/AlphaFix.cpp @@ -0,0 +1,446 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010 and VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "AlphaFix.h" + + +//------------------------------------------------------------------------------------------------- +// Aboutダイアログ +static PF_Err About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +static PF_Err SequenceSetdown ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +static PF_Err SequenceResetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_BASE_COLOR, + 0x00, + 0x00, + 0x00, + ID_BASE_COLOR + ); + + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + AEGP_SuiteHandler suites(in_data->pica_basicP); + if ((PF_Boolean)params[ID_ANIMATED_CB]->u.bd.value == TRUE){ + params[ID_ANIMATED_ADD]->ui_flags |= PF_PUI_DISABLED; + }else{ + params[ID_ANIMATED_ADD]->ui_flags &= ~PF_PUI_DISABLED; + } + ERR(suites.ParamUtilsSuite1()->PF_UpdateParamUI(in_data->effect_ref, + ID_ANIMATED_ADD, + params[ID_ANIMATED_ADD])); + + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_FRAME_RAND_ON,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo8 * niP = reinterpret_cast(refcon); + + if (niP){ + + if ( inP->alpha<=0){ + outP->alpha = niP->base_color.alpha; + outP->red = niP->base_color.red; + outP->green = niP->base_color.green; + outP->blue = niP->base_color.blue; + }else{ + outP->alpha = PF_MAX_CHAN8; + outP->red = (niP->base_color.red * (PF_MAX_CHAN8 - inP->alpha) + inP->red * inP->alpha ) /PF_MAX_CHAN8; + outP->green = (niP->base_color.green * (PF_MAX_CHAN8 - inP->alpha) + inP->green * inP->alpha ) /PF_MAX_CHAN8; + outP->blue = (niP->base_color.blue * (PF_MAX_CHAN8 - inP->alpha) + inP->blue * inP->alpha ) /PF_MAX_CHAN8; + } + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (niP){ + + if ( inP->alpha<=0){ + outP->alpha = niP->base_color.alpha; + outP->red = niP->base_color.red; + outP->green = niP->base_color.green; + outP->blue = niP->base_color.blue; + }else{ + + outP->alpha = PF_MAX_CHAN16; + outP->red = (niP->base_color.red * (PF_MAX_CHAN16 - inP->alpha) + inP->red * inP->alpha ) /PF_MAX_CHAN16; + outP->green = (niP->base_color.green * (PF_MAX_CHAN16 - inP->alpha) + inP->green * inP->alpha ) /PF_MAX_CHAN16; + outP->blue = (niP->base_color.blue * (PF_MAX_CHAN16 - inP->alpha) + inP->blue * inP->alpha ) /PF_MAX_CHAN16; + } + } + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo32 * niP = reinterpret_cast(refcon); + + if (niP){ + + if ( inP->alpha<=0){ + outP->alpha = niP->base_color.alpha; + outP->red = niP->base_color.red; + outP->green = niP->base_color.green; + outP->blue = niP->base_color.blue; + }else{ + outP->alpha = 1.0; + outP->red = (PF_FpShort)(niP->base_color.red * (1.0 - inP->alpha) + inP->red * inP->alpha ); + outP->green = (PF_FpShort)(niP->base_color.green * (1.0 - inP->alpha) + inP->green * inP->alpha ); + outP->blue = (PF_FpShort)(niP->base_color.blue * (1.0 - inP->alpha) + inP->blue * inP->alpha ); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCOLOR(ID_BASE_COLOR,&infoP->base_color)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ParamInfo32 info32; + info32.base_color = CONV8TO32(infoP->base_color); + ERR( ae->iterate32((refconType)&info32,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + info16.base_color = CONV8TO16(infoP->base_color); + ERR( ae->iterate16((refconType)&info16,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR( ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + + + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_dataP, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_dataP,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo8 info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_dataP,out_dataP,extraP,sizeof(ParamInfo8),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} +//------------------------------------------------------------------------------------------------- diff --git a/AlphaFix/AlphaFix.h b/AlphaFix/AlphaFix.h new file mode 100644 index 0000000..31e6666 --- /dev/null +++ b/AlphaFix/AlphaFix.h @@ -0,0 +1,105 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010 and VS2012 + +*/ +//----------------------------------------------------------------------------------- +#pragma once + + +#ifndef AlphaFix_H +#define AlphaFix_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* + #define CONVERT16TO8(A) ( (((long)(A) * PF_MAX_CHAN8) + PF_HALF_CHAN16) / PF_MAX_CHAN16) + #define FLOAT_2_FIX(F) ((PF_Fixed)((F) * 65536 + (((F) < 0) ? -0.5 : 0.5))) +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + + +#ifdef AE_OS_WIN + #include +#endif + +#define STR_BASE_COLOR "背景色" + +#include "../FsLibrary/FsAE.h" + +//プラグイン独自のパラメータを集めた構造体 +typedef struct ParamInfo8{ + PF_Pixel8 base_color; +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + +typedef struct ParamInfo16{ + PF_Pixel16 base_color; +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; + +typedef struct ParamInfo32{ + PF_PixelFloat base_color; +} ParamInfo32, *ParamInfo32P, **ParamInfo32H; + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_BASE_COLOR, // + ID_NUM_PARAMS + }; + +//----------------------------------------------------------------------------------- +inline PF_Pixel16 toPixel16(PF_Pixel s) +{ + PF_Pixel16 r; + r.alpha = (A_u_short)CONVERT8TO16(s.alpha); + r.red = (A_u_short)CONVERT8TO16(s.red); + r.green = (A_u_short)CONVERT8TO16(s.green); + r.blue = (A_u_short)CONVERT8TO16(s.blue); + return r; +} +//----------------------------------------------------------------------------------- +inline PF_PixelFloat toPixelFloat(PF_Pixel s) +{ + PF_PixelFloat r; + r.alpha = ((PF_FpShort)s.alpha / PF_MAX_CHAN8); + r.red = ((PF_FpShort)s.red / PF_MAX_CHAN8); + r.green = ((PF_FpShort)s.green / PF_MAX_CHAN8); + r.blue = ((PF_FpShort)s.blue / PF_MAX_CHAN8); + return r; +} +//------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + +//------------------------------------------------------------------- + +#endif // AlphaFix_H diff --git a/AlphaFix/AlphaFixPiPL.r b/AlphaFix/AlphaFixPiPL.r new file mode 100644 index 0000000..33398d9 --- /dev/null +++ b/AlphaFix/AlphaFixPiPL.r @@ -0,0 +1,76 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/AlphaFix/Fs_Target.h b/AlphaFix/Fs_Target.h new file mode 100644 index 0000000..f52ab2f --- /dev/null +++ b/AlphaFix/Fs_Target.h @@ -0,0 +1,71 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010 and VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +#define FS_NAME "F's AlphaFix" +#define FS_DESCRIPTION "不透明部分を塗りつぶします。" + +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#ifndef SUPPORT_SMARTFX //2重登録を防ぐ +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +#endif +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + + +//----------------------------------------------------------------------------------- +//バージョンを買えたAlphaFixPiPL.rのAE_Effect_Versionも変えること +#define MAJOR_VERSION 1 +#define MINOR_VERSION 0 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 525824 +//----------------------------------------------------------------------------------- +//out_flags +/* + out_data->out_flags = + PF_OutFlag_PIX_INDEPENDENT + //| PF_OutFlag_NON_PARAM_VARY + | PF_OutFlag_DEEP_COLOR_AWARE + | PF_OutFlag_USE_OUTPUT_EXTENT + | PF_OutFlag_I_EXPAND_BUFFER; + //33556032 + //33556036 +PF_OutFlag_NON_PARAM_VARY +*/ +#define FS_OUT_FLAGS 33556032 +//#define Fs_OUTFLAGS 33556036 + +//----------------------------------------------------------------------------------- +//out_flags2 +/* + out_data->out_flags2 = PF_OutFlag2_FLOAT_COLOR_AWARE + | PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + | PF_OutFlag2_SUPPORTS_SMART_RENDER + | PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + | PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; + //5193 +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + +#endif diff --git a/AlphaFix/Win/AlphaFix.vcxproj b/AlphaFix/Win/AlphaFix.vcxproj new file mode 100644 index 0000000..12754dc --- /dev/null +++ b/AlphaFix/Win/AlphaFix.vcxproj @@ -0,0 +1,334 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {82675920-EFDC-4880-84E3-4D234C1A86BC} + AlphaFix + AlphaFix + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + false + false + .aex + .aex + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AlphaFix.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AlphaFix.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AlphaFix.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/AlphaFix/Win/AlphaFix.vcxproj.filters b/AlphaFix/Win/AlphaFix.vcxproj.filters new file mode 100644 index 0000000..683d566 --- /dev/null +++ b/AlphaFix/Win/AlphaFix.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {425e0d07-4068-4b32-bca2-0132a7ea63df} + h;hpp;hxx;hm;inl;fi;fd + + + {8ce0fd4d-e8f8-4575-afa4-2a37ce770eb7} + + + {e22ef5fb-f4c9-45e4-a2c6-3be5d8fb112b} + + + {87d13537-3bd1-4aa0-9445-b2ff52b67440} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {34564c40-2fc0-4a4f-9407-23299dd988c5} + + + {e5131a16-6949-42bf-a9e1-70916c766c16} + + + {0aebf967-6ad8-4c9d-8c0c-0505db0fb772} + + + {9a306c72-5eb0-45ca-8222-10d571f04825} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/AlphaFix/Win/AlphaFixPiPL.rc b/AlphaFix/Win/AlphaFixPiPL.rc new file mode 100644 index 0000000..717bd29 --- /dev/null +++ b/AlphaFix/Win/AlphaFixPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0CF's AlphaFix\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 525824L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0CF's AlphaFix\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/AlphaThreshold/Fs_Entry.h b/AlphaThreshold/Fs_Entry.h new file mode 100644 index 0000000..4b91d21 --- /dev/null +++ b/AlphaThreshold/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + alphaThreshold for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/AlphaThreshold/Fs_Target.h b/AlphaThreshold/Fs_Target.h new file mode 100644 index 0000000..b1665e9 --- /dev/null +++ b/AlphaThreshold/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's alphaThreshold" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "アルファーチャンネルを2値化します" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/AlphaThreshold/Win/alphaThreshold.sln b/AlphaThreshold/Win/alphaThreshold.sln new file mode 100644 index 0000000..f4e191f --- /dev/null +++ b/AlphaThreshold/Win/alphaThreshold.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alphaThreshold", "alphaThreshold.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/AlphaThreshold/Win/alphaThreshold.vcxproj b/AlphaThreshold/Win/alphaThreshold.vcxproj new file mode 100644 index 0000000..4ce5426 --- /dev/null +++ b/AlphaThreshold/Win/alphaThreshold.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {7C83E956-B2B9-430B-959E-BA86D9E4E624} + alphaThreshold + alphaThreshold + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/alphaThreshold.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/alphaThreshold.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/alphaThreshold.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/alphaThreshold.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/alphaThreshold.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/alphaThreshold.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/AlphaThreshold/Win/alphaThreshold.vcxproj.filters b/AlphaThreshold/Win/alphaThreshold.vcxproj.filters new file mode 100644 index 0000000..f1d5ba3 --- /dev/null +++ b/AlphaThreshold/Win/alphaThreshold.vcxproj.filters @@ -0,0 +1,184 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/AlphaThreshold/Win/alphaThresholdPiPL.rc b/AlphaThreshold/Win/alphaThresholdPiPL.rc new file mode 100644 index 0000000..926d29e --- /dev/null +++ b/AlphaThreshold/Win/alphaThresholdPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x12F's alphaThreshold\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x12F's alphaThreshold\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/AlphaThreshold/alphaThreshold.cpp b/AlphaThreshold/alphaThreshold.cpp new file mode 100644 index 0000000..39807e9 --- /dev/null +++ b/AlphaThreshold/alphaThreshold.cpp @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "alphaThreshold.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_A, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_A + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + A_u_char v = RoundByteFpLong((double)PF_MAX_CHAN8 * niP->a); + if (outP->alpha >= v){ + outP->alpha = PF_MAX_CHAN8; + }else{ + outP->alpha = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + A_u_short v = RoundShortFpLong((double)PF_MAX_CHAN16 * niP->a); + if (outP->alpha >= v){ + outP->alpha = PF_MAX_CHAN16; + }else{ + outP->alpha = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (outP->alpha >= 1.0){ + }else if (outP->alpha >= niP->a){ + outP->alpha = 1.0; + }else{ + outP->alpha = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetFLOAT(ID_A,&infoP->a)); + infoP->a /= 100; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/AlphaThreshold/alphaThreshold.h b/AlphaThreshold/alphaThreshold.h new file mode 100644 index 0000000..d39eba5 --- /dev/null +++ b/AlphaThreshold/alphaThreshold.h @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------------------- +/* + alphaThreshold for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef alphaThreshold_H +#define alphaThreshold_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_A, + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_A "AlphaThreshold" + + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong a; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // alphaThreshold_H diff --git a/AlphaThreshold/alphaThresholdPiPL.r b/AlphaThreshold/alphaThresholdPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/AlphaThreshold/alphaThresholdPiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/AnimatedNoise/AnimatedNoise.cpp b/AnimatedNoise/AnimatedNoise.cpp new file mode 100644 index 0000000..f58ad47 --- /dev/null +++ b/AnimatedNoise/AnimatedNoise.cpp @@ -0,0 +1,940 @@ +/* + AnimatedNoise +*/ + +#include "AnimatedNoise.h" + +void (*mosicSub)(PrmTbl *prm); +void (*noiseSub)(PrmTbl *prm); + +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +// Aboutダイアログ +static PF_Err About ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup (PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //1個目のパラメータ + //チェックボックス + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_INTERP; + + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_CHECKBOX("毎フレームでノイズ変化", + "ON", + TRUE, + 0, + ID_ANIMATED_CB + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_DISABLED; + PF_ADD_SLIDER( "ノイズの動き", //パラメータの名前 + 0 , //数値入力する場合の最小値 + F_RAND_MAX, //数値入力する場合の最大値 + 0, //スライダーの最小値 + F_RAND_MAX/10, //スライダーの最大値 + 0, //デフォルトの値 + ID_ANIMATED_ADD + ); + //---------------------------------------------------------------- + //2個目のパラメータ + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( "ノイズの量", //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + ID_VALUE_ADD + ); + //---------------------------------------------------------------- + //3個目のパラメータ + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( "ノイズの強さ", //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + 2,//数値表示に関するフラグ + 0, + 0, + ID_LENGTH_FIXED + ); + //---------------------------------------------------------------- + //4個目のパラメータ + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("カラーノイズ", + "ON", + (PF_ParamValue)FALSE, + 0, + ID_COLOR_CB + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( "ブロックの量", //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 5, //スライダーの最大値 + 1, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_BLOCK_VALUE_FIXED + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( "ブロックの強さ", //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 5, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLOCK_LENGTH_FIXED + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( "ブロックの横幅(px)", //パラメータの名前 + 3, //数値入力する場合の最小値 + 512, //数値入力する場合の最大値 + 3, //スライダーの最小値 + 100, //スライダーの最大値 + 16, //デフォルトの値 + ID_BLOCK_WIDTH_ADD + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( "ブロックの縦幅(px)", //パラメータの名前 + 3, //数値入力する場合の最小値 + 512, //数値入力する場合の最大値 + 3, //スライダーの最小値 + 100, //スライダーの最大値 + 16, //デフォルトの値 + ID_BLOCK_HEIGHT_ADD + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("カラーブロック", + "ON", + FALSE, + 0, + ID_BLOCK_COLOR_CB + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_ANIMATED_CB,&b)); + ERR(ae.UI_DISABLE(ID_ANIMATED_ADD, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_ANIMATED_CB,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + return err; +} + +//------------------------------------------------------------------------------------------------- +static void NoiseMain8(PrmTbl *prm) +{ + PF_Pixel8 *data; + data =(PF_Pixel8 *)prm->data; + A_long t; + A_long ar,ag,ab; + A_long ar2,ag2,ab2; + A_long ar3,ag3,ab3; + + A_long v = (A_long )( F_RAND()*(100 +1.0)/(1.0+ F_RAND_MAX)); + if (v>=prm->value) return; + + ar = -1 * PF_MAX_CHAN8 + (A_long )(F_RAND() * (PF_MAX_CHAN8*2+1.0)/(1.0+F_RAND_MAX) ); ar=ar*prm->length >> 16; + if (prm->colorFlag==TRUE) { + ag = -1 * PF_MAX_CHAN8 + (A_long )(F_RAND() * (PF_MAX_CHAN8*2+1.0)/(1.0+F_RAND_MAX) );ag=ag*prm->length >> 16; + ab = -1 * PF_MAX_CHAN8 + (A_long )(F_RAND() * (PF_MAX_CHAN8*2+1.0)/(1.0+F_RAND_MAX) );ab=ab*prm->length >> 16; + }else{ + ag=ab=ar; + F_RAND(); + F_RAND(); + } + + data[prm->target].red = RoundByteLong(data[prm->target].red + ar); + data[prm->target].green = RoundByteLong(data[prm->target].green + ag); + data[prm->target].blue = RoundByteLong(data[prm->target].blue + ab); + + ar2=ar/2; + ag2=ag/2; + ab2=ab/2; + ar3=ar/4; + ag3=ag/4; + ab3=ab/4; + + t=prm->target - 1; + data[t].red = RoundByteLong(data[t].red + ar2); + data[t].green = RoundByteLong(data[t].green + ag2); + data[t].blue = RoundByteLong(data[t].blue + ab2); + + t=prm->target +1; + data[t].red = RoundByteLong(data[t].red + ar2); + data[t].green = RoundByteLong(data[t].green + ag2); + data[t].blue = RoundByteLong(data[t].blue + ab2); + + t=prm->target - prm->width; + data[t].red = RoundByteLong(data[t].red + ar2); + data[t].green = RoundByteLong(data[t].green + ag2); + data[t].blue = RoundByteLong(data[t].blue + ab2); + + t=prm->target +prm->width; + data[t].red = RoundByteLong(data[t].red + ar2); + data[t].green = RoundByteLong(data[t].green + ag2); + data[t].blue = RoundByteLong(data[t].blue + ab2); + + t=prm->target - prm->width-1; + data[t].red = RoundByteLong(data[t].red + ar3); + data[t].green = RoundByteLong(data[t].green + ag3); + data[t].blue = RoundByteLong(data[t].blue + ab3); + + t=prm->target - prm->width+1; + data[t].red = RoundByteLong(data[t].red + ar3); + data[t].green = RoundByteLong(data[t].green + ag3); + data[t].blue = RoundByteLong(data[t].blue + ab3); + + t=prm->target + prm->width-1; + data[t].red = RoundByteLong(data[t].red + ar3); + data[t].green = RoundByteLong(data[t].green + ag3); + data[t].blue = RoundByteLong(data[t].blue + ab3); + + t=prm->target + prm->width+1; + data[t].red = RoundByteLong(data[t].red + ar3); + data[t].green = RoundByteLong(data[t].green + ag3); + data[t].blue = RoundByteLong(data[t].blue + ab3); + + +} +//------------------------------------------------------------------------------------------------- +static void NoiseMain16(PrmTbl *prm) +{ + PF_Pixel16 *data16; + data16 =(PF_Pixel16 *)prm->data; + A_long t; + A_long ar,ag,ab; + A_long ar2,ag2,ab2; + A_long ar3,ag3,ab3; + + A_long v = (A_long )( F_RAND()*(100 +1.0)/(1.0+ F_RAND_MAX)); + if (v>=prm->value) return; + + ar = -1 * PF_MAX_CHAN16 + (A_long )(F_RAND() * (PF_MAX_CHAN16*2+1.0)/(1.0+F_RAND_MAX) ); ar=ar*prm->length >> 16; + if (prm->colorFlag==TRUE) { + ag = -1 * PF_MAX_CHAN16 + (A_long )(F_RAND() * (PF_MAX_CHAN16*2+1.0)/(1.0+F_RAND_MAX) );ag=ag*prm->length >> 16; + ab = -1 * PF_MAX_CHAN16 + (A_long )(F_RAND() * (PF_MAX_CHAN16*2+1.0)/(1.0+F_RAND_MAX) );ab=ab*prm->length >> 16; + }else{ + ag=ab=ar; + F_RAND(); + F_RAND(); + } + + data16[prm->target].red = RoundShort(data16[prm->target].red + ar); + data16[prm->target].green = RoundShort(data16[prm->target].green + ag); + data16[prm->target].blue = RoundShort(data16[prm->target].blue + ab); + + ar2=ar/2; + ag2=ag/2; + ab2=ab/2; + ar3=ar/4; + ag3=ag/4; + ab3=ab/4; + + t=prm->target - 1; + data16[t].red = RoundShort(data16[t].red + ar2); + data16[t].green = RoundShort(data16[t].green + ag2); + data16[t].blue = RoundShort(data16[t].blue + ab2); + + t=prm->target +1; + data16[t].red = RoundShort(data16[t].red + ar2); + data16[t].green = RoundShort(data16[t].green + ag2); + data16[t].blue = RoundShort(data16[t].blue + ab2); + + t=prm->target - prm->width; + data16[t].red = RoundShort(data16[t].red + ar2); + data16[t].green = RoundShort(data16[t].green + ag2); + data16[t].blue = RoundShort(data16[t].blue + ab2); + + t=prm->target +prm->width; + data16[t].red = RoundShort(data16[t].red + ar2); + data16[t].green = RoundShort(data16[t].green + ag2); + data16[t].blue = RoundShort(data16[t].blue + ab2); + + t=prm->target - prm->width-1; + data16[t].red = RoundShort(data16[t].red + ar3); + data16[t].green = RoundShort(data16[t].green + ag3); + data16[t].blue = RoundShort(data16[t].blue + ab3); + + t=prm->target - prm->width+1; + data16[t].red = RoundShort(data16[t].red + ar3); + data16[t].green = RoundShort(data16[t].green + ag3); + data16[t].blue = RoundShort(data16[t].blue + ab3); + + t=prm->target + prm->width-1; + data16[t].red = RoundShort(data16[t].red + ar3); + data16[t].green = RoundShort(data16[t].green + ag3); + data16[t].blue = RoundShort(data16[t].blue + ab3); + + t=prm->target + prm->width+1; + data16[t].red = RoundShort(data16[t].red + ar3); + data16[t].green = RoundShort(data16[t].green + ag3); + data16[t].blue = RoundShort(data16[t].blue + ab3); + +} +static void NoiseMain32(PrmTbl *prm) +{ + PF_PixelFloat *data; + data =(PF_PixelFloat *)prm->data; + A_long t; + PF_FpShort ar,ag,ab; + PF_FpShort ar2,ag2,ab2; + PF_FpShort ar3,ag3,ab3; + + A_long v = (A_long )( F_RAND()*(100 +1.0)/(1.0+ F_RAND_MAX)); + if (v>=prm->value) return; + + ar = (PF_FpShort)(-1 + ((F_RAND() * 2.0+1.0)/(1.0+F_RAND_MAX))); ar = (PF_FpShort)(ar*prm->length / 65536); + if (prm->colorFlag==TRUE) { + ag = (PF_FpShort)(-1 + ((F_RAND() * 2.0+1.0)/(1.0+F_RAND_MAX))); ag = (PF_FpShort)(ag*prm->length / 65536); + ab = (PF_FpShort)(-1 + ((F_RAND() * 2.0+1.0)/(1.0+F_RAND_MAX))); ab = (PF_FpShort)(ab*prm->length / 65536); + }else{ + ag = ab = ar; + F_RAND(); + F_RAND(); + } + + data[prm->target].red = RoundFpShortDouble(data[prm->target].red + ar); + data[prm->target].green = RoundFpShortDouble(data[prm->target].green + ag); + data[prm->target].blue = RoundFpShortDouble(data[prm->target].blue + ab); + + ar2=ar/2; + ag2=ag/2; + ab2=ab/2; + + ar3=ar/4; + ag3=ag/4; + ab3=ab/4; + + t=prm->target - 1; + data[t].red = RoundFpShortDouble(data[t].red + ar2); + data[t].green = RoundFpShortDouble(data[t].green + ag2); + data[t].blue = RoundFpShortDouble(data[t].blue + ab2); + + t=prm->target +1; + data[t].red = RoundFpShortDouble(data[t].red + ar2); + data[t].green = RoundFpShortDouble(data[t].green + ag2); + data[t].blue = RoundFpShortDouble(data[t].blue + ab2); + + t=prm->target - prm->width; + data[t].red = RoundFpShortDouble(data[t].red + ar2); + data[t].green = RoundFpShortDouble(data[t].green + ag2); + data[t].blue = RoundFpShortDouble(data[t].blue + ab2); + + t=prm->target +prm->width; + data[t].red = RoundFpShortDouble(data[t].red + ar2); + data[t].green = RoundFpShortDouble(data[t].green + ag2); + data[t].blue = RoundFpShortDouble(data[t].blue + ab2); + + t=prm->target - prm->width-1; + data[t].red = RoundFpShortDouble(data[t].red + ar3); + data[t].green = RoundFpShortDouble(data[t].green + ag3); + data[t].blue = RoundFpShortDouble(data[t].blue + ab3); + + t=prm->target - prm->width+1; + data[t].red = RoundFpShortDouble(data[t].red + ar3); + data[t].green = RoundFpShortDouble(data[t].green + ag3); + data[t].blue = RoundFpShortDouble(data[t].blue + ab3); + + t=prm->target + prm->width-1; + data[t].red = RoundFpShortDouble(data[t].red + ar3); + data[t].green = RoundFpShortDouble(data[t].green + ag3); + data[t].blue = RoundFpShortDouble(data[t].blue + ab3); + + t=prm->target + prm->width+1; + data[t].red = RoundFpShortDouble(data[t].red + ar3); + data[t].green = RoundFpShortDouble(data[t].green + ag3); + data[t].blue = RoundFpShortDouble(data[t].blue + ab3); +} +//------------------------------------------------------------------------------------------------- +static void NoiseBlock8(PrmTbl *prm) +{ + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + + A_long temp,w2,h2,x0,y0,x1,y1; + A_long target,i,j,offset; + A_long r,g,b; + A_long ar,ag,ab; + PF_Pixel col; + + if (prm->w<0) { x0=0;}else{x0=prm->w;} + if (prm->h<0) { y0=0;}else{y0=prm->h;} + if ((x0>=prm->width)||(y0>=prm->height)) return; + + temp=prm->block_width/2 +1; + w2=temp+temp*F_RAND()/F_RAND_MAX; + temp=prm->block_height/2 +1; + h2=temp+temp*F_RAND()/F_RAND_MAX; + + x1=prm->w+w2; + if (x1>prm->width) x1=prm->width; + y1=prm->h+h2; + if (y1>prm->height) y1=prm->height; + if ((x1<=0)||(y1<=0)) return; + w2=x1-x0; h2=y1-y0; + if ((w2<=0)||(h2<=0)) return; + + + target=x0+y0*prm->width; + offset=prm->width-w2; + r=g=b=0; + for (j=y0;jblock_length >> 16; + if (prm->block_colorFlag==TRUE) { + ag=PF_MAX_CHAN8 - F_RAND()*PF_MAX_CHAN8*2/F_RAND_MAX; ag=ag*prm->block_length >> 16; + ab=PF_MAX_CHAN8 - F_RAND()*PF_MAX_CHAN8*2/F_RAND_MAX; ab=ab*prm->block_length >> 16; + }else{ + ag=ab=ar; + F_RAND(); + F_RAND(); + } + target=x0+y0*prm->width; + col.red = RoundByteLong(r+ar); + col.green = RoundByteLong(g+ag); + col.blue = RoundByteLong(b+ab); + for (j=y0;jdata; + A_long temp,w2,h2,x0,y0,x1,y1; + A_long target,i,j,offset; + A_long r,g,b; + A_long ar,ag,ab; + PF_Pixel16 col; + + if (prm->w<0) { x0=0;}else{x0=prm->w;} + if (prm->h<0) { y0=0;}else{y0=prm->h;} + if ((x0>=prm->width)||(y0>=prm->height)) return; + + temp=prm->block_width/2 +1; + w2=temp+temp*F_RAND()/F_RAND_MAX; + temp=prm->block_height/2 +1; + h2=temp+temp*F_RAND()/F_RAND_MAX; + + x1=prm->w+w2; + if (x1>prm->width) x1=prm->width; + y1=prm->h+h2; + if (y1>prm->height) y1=prm->height; + if ((x1<=0)||(y1<=0)) return; + w2=x1-x0; h2=y1-y0; + if ((w2<=0)||(h2<=0)) return; + + + target=x0+y0*prm->width; + offset=prm->width-w2; + r=g=b=0; + for (j=y0;jblock_length >> 16; + if (prm->block_colorFlag==TRUE) { + ag=PF_MAX_CHAN16 - F_RAND()*PF_MAX_CHAN16*2/F_RAND_MAX; ag=ag*prm->block_length >> 16; + ab=PF_MAX_CHAN16 - F_RAND()*PF_MAX_CHAN16*2/F_RAND_MAX; ab=ab*prm->block_length >> 16; + }else{ + ag=ab=ar; + F_RAND(); + F_RAND(); + } + target=x0+y0*prm->width; + col.red = RoundShort(r+ar); + col.green = RoundShort(g+ag); + col.blue = RoundShort(b+ab); + for (j=y0;jdata; + A_long temp,w2,h2,x0,y0,x1,y1; + A_long target,i,j,offset; + PF_FpShort r,g,b; + PF_FpShort ar,ag,ab; + PF_PixelFloat col; + + if (prm->w<0) { x0=0;}else{x0=prm->w;} + if (prm->h<0) { y0=0;}else{y0=prm->h;} + if ((x0>=prm->width)||(y0>=prm->height)) return; + + temp = prm->block_width/2 +1; + w2 = temp + temp * F_RAND()/F_RAND_MAX; + temp = prm->block_height/2 +1; + h2 = temp+temp*F_RAND()/F_RAND_MAX; + + x1=prm->w+w2; + if (x1>prm->width) x1=prm->width; + y1=prm->h+h2; + if (y1>prm->height) y1=prm->height; + if ((x1<=0)||(y1<=0)) return; + w2=x1-x0; h2=y1-y0; + if ((w2<=0)||(h2<=0)) return; + + + target=x0+y0*prm->width; + offset=prm->width-w2; + r=g=b=0; + for (j=y0;jblock_length /65536); + if (prm->block_colorFlag==TRUE) { + ag = (PF_FpShort)(1 - (PF_FpShort)F_RAND()*2/F_RAND_MAX); ag = (PF_FpShort)(ag * prm->block_length /65536); + ab = (PF_FpShort)(1 - (PF_FpShort)F_RAND()*2/F_RAND_MAX); ab = (PF_FpShort)(ab * prm->block_length /65536); + }else{ + ag = ab = ar; + F_RAND(); + F_RAND(); + } + target=x0+y0*prm->width; + col.red = RoundFpShortDouble(r+ar); + col.green = RoundFpShortDouble(g+ag); + col.blue = RoundFpShortDouble(b+ab); + for (j=y0;jGetCHECKBOX(ID_ANIMATED_CB,&infoP->animFlag)); + ERR(ae->GetADD(ID_ANIMATED_ADD,&infoP->anim)); + ERR(ae->GetADD(ID_VALUE_ADD,&infoP->value)); + ERR(ae->GetFIXED(ID_LENGTH_FIXED,&infoP->length)); + if (!err) infoP->length /= 100; + ERR(ae->GetCHECKBOX(ID_COLOR_CB,&infoP->colorFlag)); + ERR(ae->GetFIXED(ID_BLOCK_VALUE_FIXED,&infoP->block_value)); + ERR(ae->GetFIXED(ID_BLOCK_LENGTH_FIXED,&infoP->block_length)); + if (!err) infoP->block_length /= 100; + ERR(ae->GetADD(ID_BLOCK_WIDTH_ADD,&infoP->block_width)); + ERR(ae->GetADD(ID_BLOCK_HEIGHT_ADD,&infoP->block_height)); + ERR(ae->GetCHECKBOX(ID_BLOCK_COLOR_CB,&infoP->block_colorFlag)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , PrmTbl *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + infoP->data = ae->output->data; + infoP->width = ae->out->widthTrue(); + infoP->height = ae->output->height; + infoP->frame = ae->frame(); + + if (infoP->animFlag == TRUE) { + infoP->seed =infoP->frame * 2; + }else{ + infoP->seed = infoP->anim; + } + A_long v = ( infoP->value * infoP->block_value) >>16; + + switch(ae->pixelFormat()){ + case PF_PixelFormat_ARGB128: + mosicSub = NoiseBlock32; + noiseSub = NoiseMain32; + break; + case PF_PixelFormat_ARGB64: + mosicSub = NoiseBlock16; + noiseSub = NoiseMain16; + break; + case PF_PixelFormat_ARGB32: + mosicSub = NoiseBlock8; + noiseSub = NoiseMain8; + break; + } + if (v>0){ + F_SRAND(infoP->seed); + for (int i=0;iw = F_RAND2(-infoP->block_width,ae->out->width()); + infoP->h = F_RAND2(-infoP->block_height,ae->out->height()); + mosicSub(infoP); + } + } + if (infoP->value>0){ + F_SRAND(infoP->seed); + infoP->target = 1 + infoP->width; + for (infoP->h=1; infoP->h<(infoP->height-1); infoP->h++) { + for (infoP->w=1; infoP->w<(infoP->width-1); infoP->w++) { + noiseSub(infoP); + infoP->target++; + } + infoP->target+=2; + } + } + + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + PrmTbl info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_dataP,out_dataP,extraP,sizeof(PrmTbl),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + PrmTbl *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + PrmTbl *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/AnimatedNoise/AnimatedNoise.h b/AnimatedNoise/AnimatedNoise.h new file mode 100644 index 0000000..e452ce5 --- /dev/null +++ b/AnimatedNoise/AnimatedNoise.h @@ -0,0 +1,104 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef AnimatedNoise_H +#define AnimatedNoise_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_ANIMATED_CB, //動き + ID_ANIMATED_ADD, //動き + ID_VALUE_ADD, //ノイズの量 + ID_LENGTH_FIXED, //ノイズの強さ + ID_COLOR_CB, //カラーかモノクロか + ID_BLOCK_VALUE_FIXED, //ブロックノイズの量 + ID_BLOCK_LENGTH_FIXED, //ブロックノイズの強さ + ID_BLOCK_WIDTH_ADD, //ブロックノイズ横幅 + ID_BLOCK_HEIGHT_ADD, //ブロックノイズ縦幅 + ID_BLOCK_COLOR_CB, //カラーかモノクロか + + ID_NUM_PARAMS + }; +typedef struct PrmTbl{ + PF_PixelPtr data; //画像 + A_long width; //画像の横幅 + A_long height; //画像の高さ + A_long w; //ターゲット + A_long h; + A_long target; + + PF_Boolean animFlag; // + A_long anim; + + A_long frame; + A_long seed; + + A_long value; + PF_Fixed length; + PF_Boolean colorFlag; + + PF_Fixed block_value; + PF_Fixed block_length; + A_long block_width; + A_long block_height; + PF_Boolean block_colorFlag; + +} PrmTbl; +static void NoiseMain8(PrmTbl *prm); +static void NoiseMain16(PrmTbl *prm); +static void NoiseMain32(PrmTbl *prm); +static void NoiseBlock8(PrmTbl *prm); +static void NoiseBlock16(PrmTbl *prm); +static void NoiseBlock32(PrmTbl *prm); + +//------------------------------------------------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} +//------------------------------------------------------- +#endif // AnimatedNoise_H diff --git a/AnimatedNoise/AnimatedNoisePiPL.r b/AnimatedNoise/AnimatedNoisePiPL.r new file mode 100644 index 0000000..475d9b4 --- /dev/null +++ b/AnimatedNoise/AnimatedNoisePiPL.r @@ -0,0 +1,80 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/AnimatedNoise/Fs_Target.h b/AnimatedNoise/Fs_Target.h new file mode 100644 index 0000000..4532c8c --- /dev/null +++ b/AnimatedNoise/Fs_Target.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's AnimatedNoise" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "アニメチックなノイズ" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#ifndef SUPPORT_SMARTFX //2重登録を防ぐ +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +#endif +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 2 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + + + +#define FS_VERSION 591360 +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + + + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + + + +#endif diff --git a/AnimatedNoise/Win/AnimatedNoise.vcxproj b/AnimatedNoise/Win/AnimatedNoise.vcxproj new file mode 100644 index 0000000..0046942 --- /dev/null +++ b/AnimatedNoise/Win/AnimatedNoise.vcxproj @@ -0,0 +1,341 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1} + AnimatedNoise + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + .aex + .aex + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AnimatedNoise.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AnimatedNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/AnimatedNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/AnimatedNoise/Win/AnimatedNoise.vcxproj.filters b/AnimatedNoise/Win/AnimatedNoise.vcxproj.filters new file mode 100644 index 0000000..427c943 --- /dev/null +++ b/AnimatedNoise/Win/AnimatedNoise.vcxproj.filters @@ -0,0 +1,156 @@ + + + + + {015e3509-fe8b-421f-9736-a7af6519d194} + h;hpp;hxx;hm;inl;fi;fd + + + {d64685b6-268e-40c9-9255-4f4ea6251a2f} + + + {a26904de-8f27-4c9e-8061-fe305e320b75} + + + {17c67d60-dd48-4835-b677-64096f0fbd0d} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {8f85bceb-54f0-4df0-8ce4-0db20a4ceb61} + + + {d6351a28-d9f6-4dd6-9908-dc3b510fe962} + + + {af99f15d-a4b8-4ceb-a647-8b4bdf94c818} + + + {2d9788f9-67e1-4823-b80c-a1de5508a7a4} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + Supporting code\AE + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + + + Header Files\AE + + + \ No newline at end of file diff --git a/AnimatedNoise/Win/AnimatedNoisePiPL.rc b/AnimatedNoise/Win/AnimatedNoisePiPL.rc new file mode 100644 index 0000000..525ec62 --- /dev/null +++ b/AnimatedNoise/Win/AnimatedNoisePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x11F's AnimatedNoise\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 591360L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x11F's AnimatedNoise\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/CCplus/CCplus.cpp b/CCplus/CCplus.cpp new file mode 100644 index 0000000..4a63229 --- /dev/null +++ b/CCplus/CCplus.cpp @@ -0,0 +1,630 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "CCplus.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(StrORG_REV1, + StrORG_REV2, + TRUE, + 0, + ID_ORG_REV + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( StrCOLOR_START, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR_START + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( StrCOLOR_CENTER, + 0x80, + 0x80, + 0xFF, + ID_COLOR_CENTER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( StrCOLOR_END, + 0x0, + 0x0, + 0xFF, + ID_COLOR_END + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( StrCOLOR_CENTER_POS, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_CENTER_POS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( StrALPHA_START, //パラメータの名前 + -200, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_ALPHA_START + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( StrALPHA_END, //パラメータの名前 + -200, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_ALPHA_END + ); + +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( StrNOISE_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 64, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 8, //スライダーの最大値 + 2, //デフォルトの値 + ID_NOISE_VALUE + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} +//--------------------------------------------------------------------------------------------- +PF_Pixel colorValue8(CCPInfo *infoP, A_u_char value) +{ + PF_Pixel r; + + if ( value == infoP->color_border){ + r = infoP->color_center; + }else if ( value ==0){ + r = infoP->color_start; + }else if (value >= PF_MAX_CHAN8){ + r = infoP->color_end; + }else if ( value <= infoP->color_border){ + A_long max = infoP->color_border; + A_long v1 = max - value; + A_long v2 = value; + r.blue = RoundByteLong(infoP->color_start.blue * v1/max + infoP->color_center.blue * v2/max); + r.green = RoundByteLong(infoP->color_start.green * v1/max + infoP->color_center.green * v2/max); + r.red = RoundByteLong(infoP->color_start.red * v1/max + infoP->color_center.red * v2/max); + }else{ + A_long max = PF_MAX_CHAN8 - infoP->color_border; + A_long v1 = max - (value - infoP->color_border); + A_long v2 = value - infoP->color_border; + r.blue = RoundByteLong(infoP->color_center.blue * v1/max + infoP->color_end.blue * v2/max); + r.green = RoundByteLong(infoP->color_center.green * v1/max + infoP->color_end.green * v2/max); + r.red = RoundByteLong(infoP->color_center.red * v1/max + infoP->color_end.red * v2/max); + } + r.alpha = RoundByteLong(infoP->alpha_start + (infoP->alpha_end -infoP->alpha_start) * value / PF_MAX_CHAN8); + return r; +} +//--------------------------------------------------------------------------------------------- +PF_Pixel16 colorValue16(CCPInfo16 *infoP, A_u_short value) +{ + PF_Pixel16 r; + + if ( value == infoP->color_border){ + r = infoP->color_center; + }else if ( value ==0){ + r = infoP->color_start; + }else if (value >= PF_MAX_CHAN16){ + r = infoP->color_end; + }else if ( value <= infoP->color_border){ + A_long max = infoP->color_border; + A_long v1 = max - value; + A_long v2 = value; + r.blue = RoundShort(infoP->color_start.blue * v1/max + infoP->color_center.blue * v2/max); + r.green = RoundShort(infoP->color_start.green * v1/max + infoP->color_center.green * v2/max); + r.red = RoundShort(infoP->color_start.red * v1/max + infoP->color_center.red * v2/max); + }else{ + A_long max = PF_MAX_CHAN16 - infoP->color_border; + A_long v1 = max - (value - infoP->color_border); + A_long v2 = value - infoP->color_border; + r.blue = RoundShortFpLong(infoP->color_center.blue * v1/max + infoP->color_end.blue * v2/max); + r.green = RoundShortFpLong(infoP->color_center.green * v1/max + infoP->color_end.green * v2/max); + r.red = RoundShortFpLong(infoP->color_center.red * v1/max + infoP->color_end.red * v2/max); + } + r.alpha = RoundShortFpLong(infoP->alpha_start + (infoP->alpha_end -infoP->alpha_start) * value / PF_MAX_CHAN16); + return r; +} +//--------------------------------------------------------------------------------------------- +PF_PixelFloat colorValue32(CCPInfo32 *infoP, PF_FpShort value) +{ + PF_PixelFloat r; + + if ( value == infoP->color_border){ + r = infoP->color_center; + }else if ( value ==0){ + r = infoP->color_start; + }else if (value >= 1.0){ + r = infoP->color_end; + }else if ( value <= infoP->color_border){ + PF_FpShort max = infoP->color_border; + PF_FpShort v1 = max - value; + PF_FpShort v2 = value; + r.blue = RoundFpShortDouble((infoP->color_start.blue * v1 + infoP->color_center.blue * v2)/max); + r.green = RoundFpShortDouble((infoP->color_start.green * v1 + infoP->color_center.green * v2)/max); + r.red = RoundFpShortDouble((infoP->color_start.red * v1 + infoP->color_center.red * v2)/max); + }else{ + PF_FpShort max = (PF_FpShort)(1.0 - infoP->color_border); + PF_FpShort v1 = max - (value - infoP->color_border); + PF_FpShort v2 = value - infoP->color_border; + r.blue = RoundFpShortDouble((infoP->color_center.blue * v1 + infoP->color_end.blue * v2)/max); + r.green = RoundFpShortDouble((infoP->color_center.green * v1 + infoP->color_end.green * v2)/max); + r.red = RoundFpShortDouble((infoP->color_center.red * v1 + infoP->color_end.red * v2)/max); + } + r.alpha = RoundFpShortDouble(infoP->alpha_start + (infoP->alpha_end -infoP->alpha_start) * value); + return r; +} +//--------------------------------------------------------------------------------------------- +//カラーテーブルの作成 +void makeColorTbl8(CCPInfo *infoP) +{ + for ( A_long i=0; icolorTbl[i] = colorValue8(infoP,(A_u_char)i); +} +//--------------------------------------------------------------------------------------------- +//カラーテーブルの作成 +void makeColorTbl16(CCPInfo16 *infoP) +{ + for ( A_long i=0; icolorTbl[i] = colorValue16(infoP,(A_u_short)i); +} + +//----------------------------------------------------------------------------------------------- +static PF_Err +AddColor8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo* info = reinterpret_cast(refcon); + if (info){ + A_long v; + if (inP->alpha==0){ + v =0; + }else{ + v = Pixel8Level(*inP) * inP->alpha / PF_MAX_CHAN8; + if (v<0) v=0; + if (v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + } + if (info->org_rev) v = PF_MAX_CHAN8 -v ; + PF_Pixel p = colorValue8(info,(A_u_char)v); + /* + PF_Pixel p =info->colorTbl[v]; + */ + + outP->alpha = p.alpha; + outP->red = p.red; + outP->green = p.green; + outP->blue = p.blue; + } + + return err; +} +//----------------------------------------------------------------------------------------------- +static PF_Err +AddColor16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo16* info = reinterpret_cast(refcon); + if (info){ + A_long v; + if (inP->alpha==0){ + v =0; + }else{ + v = Pixel16Level(*inP) * inP->alpha / PF_MAX_CHAN16; + if (v<0) v=0; + if (v>PF_MAX_CHAN16) v = PF_MAX_CHAN16; + } + if (info->org_rev) v = PF_MAX_CHAN16 -v ; + *outP = colorValue16(info,(A_u_short)v); + /* + PF_Pixel16 p = info->colorTbl[v]; + outP->alpha = p.alpha; + outP->red = p.red; + outP->green = p.green; + outP->blue = p.blue; + */ + } + + return err; +} +//----------------------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +AddColor32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo32* infoP = reinterpret_cast(refcon); + if (infoP){ + PF_FpShort v; + if (inP->alpha==0){ + v =0; + }else{ + v = Pixel32Level(*inP) * inP->alpha; + if (v<0) v=0; + else if (v>1) v=1; + } + if (infoP->org_rev) v = (PF_FpShort)1.0 -v ; + + *outP = colorValue32(infoP,v); + + } + + return err; +} +#endif +//----------------------------------------------------------------------------------------------- +static PF_Err +AddNoise8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo* info = reinterpret_cast(refcon); + if (info){ + A_long v; + if (outP->alpha>0){ + v = F_RAND2(-info->noise_value,info->noise_value); + outP->red = RoundByteLong(outP->red + v); + outP->green = RoundByteLong(outP->green + v); + outP->blue = RoundByteLong(outP->blue + v); + } + } + + return err; +} +//----------------------------------------------------------------------------------------------- +static PF_Err +AddNoise16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo16* info = reinterpret_cast(refcon); + if (info){ + A_long v; + if (outP->alpha>0){ + v = F_RAND2(-info->noise_value,info->noise_value); + outP->red = RoundShort(outP->red + v); + outP->green = RoundShort(outP->green + v); + outP->blue = RoundShort(outP->blue + v); + } + } + + return err; +} +//----------------------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +AddNoise32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + CCPInfo32* info = reinterpret_cast(refcon); + if (info){ + PF_FpShort v; + if (outP->alpha>0){ + v = (PF_FpShort)F_RAND2(-info->noise_value,info->noise_value) /PF_MAX_CHAN16; + outP->red = RoundFpShort(outP->red + v); + outP->green = RoundFpShort(outP->green + v); + outP->blue = RoundFpShort(outP->blue + v); + } + } + + return err; +} +#endif +//------------------------------------------------------------------------------------------------- +static CCPInfo16 to16(CCPInfo *prm) +{ + CCPInfo16 prm16; + + prm16.org_rev = prm->org_rev; + prm16.color_start = CONV8TO16(prm->color_start); + prm16.color_center = CONV8TO16(prm->color_center); + prm16.color_end = CONV8TO16(prm->color_end); + prm16.color_border = FS_CONVERT8TO16( prm->color_border); + prm16.alpha_start = FS_CONVERT8TO16(prm->alpha_start); + prm16.alpha_end = FS_CONVERT8TO16(prm->alpha_end); + + + prm16.noise_value = FS_CONVERT8TO16(prm->noise_value); + + return prm16; +} +#if defined(SUPPORT_SMARTFX) +static CCPInfo32 to32(CCPInfo *prm) +{ + CCPInfo32 prm32; + + prm32.org_rev = prm->org_rev; + prm32.color_start = CONV8TO32(prm->color_start); + prm32.color_center = CONV8TO32(prm->color_center); + prm32.color_end = CONV8TO32(prm->color_end); + prm32.color_border = (PF_FpShort)prm->color_border /PF_MAX_CHAN8; + prm32.alpha_start = (PF_FpShort)prm->alpha_start/PF_MAX_CHAN8; + prm32.alpha_end = (PF_FpShort)prm->alpha_end/PF_MAX_CHAN8; + + prm32.noise_value = FS_CONVERT8TO16(prm->noise_value); + + return prm32; +} +#endif +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, CCPInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_ORG_REV,&infoP->org_rev)); + infoP->org_rev = !infoP->org_rev; + + ERR(ae->GetCOLOR(ID_COLOR_START,&infoP->color_start)); + ERR(ae->GetCOLOR(ID_COLOR_CENTER,&infoP->color_center)); + ERR(ae->GetCOLOR(ID_COLOR_END,&infoP->color_end)); + + PF_FpShort f; + ERR(ae->GetFIXED2FpShort(ID_COLOR_CENTER_POS,&f)); + if (!err) { + infoP->color_border = RoundByteFpLong(PF_MAX_CHAN8 * f /100); + }else{ + infoP->color_border = PF_MAX_CHAN8/2; + } + + ERR(ae->GetFIXED2FpShort(ID_ALPHA_START,&f)); + if (!err){ + f = PF_MAX_CHAN8 * f/100; + if ( f<-510) f = -510; + else if ( f>510) f = 510; + infoP->alpha_start = (A_long)f; + }else{ + infoP->alpha_start = PF_MAX_CHAN8; + } + ERR(ae->GetFIXED2FpShort(ID_ALPHA_END,&f)); + if (!err) { + f = PF_MAX_CHAN8 * f/100; + if ( f<-510) f = -510; + else if ( f>510) f = 510; + infoP->alpha_end = (A_long)f; + }else{ + infoP->alpha_end = 0; + } + ERR(ae->GetADD(ID_NOISE_VALUE,&infoP->noise_value)); + infoP->colorTbl = NULL; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , CCPInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ae->out->clear(); + if ( infoP->noise_value>0) F_SRAND(ae->frame()); + CFsBuffer buf(ae->in_data); + switch(ae->pixelFormat()) + { +#if defined(SUPPORT_SMARTFX) + case PF_PixelFormat_ARGB128: + CCPInfo32 info32; + info32 = to32(infoP); + ERR(ae->iterate32((refconType)&info32,AddColor32)); + if(!err){ + if (info32.noise_value>0){ + ERR(ae->iterate32((refconType)&info32,AddNoise32)); + } + } + break; +#endif + case PF_PixelFormat_ARGB64: + CCPInfo16 info16; + info16 = to16(infoP); + if (buf.Create(COLOR_TABLE_SIZE16) == PF_Err_NONE){ + info16.colorTbl = buf.bufPixel16(); + makeColorTbl16(&info16); + ERR(ae->iterate16((refconType)&info16,AddColor16)); + buf.Dispose(); + + if(!err){ + if (info16.noise_value>0){ + ERR(ae->iterate16((refconType)&info16,AddNoise16)); + } + } + }else{ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + break; + case PF_PixelFormat_ARGB32: + if (buf.Create(COLOR_TABLE_SIZE8) ==PF_Err_NONE){ + infoP->colorTbl = buf.bufPixel(); + makeColorTbl8(infoP); + ERR(ae->iterate8((refconType)infoP,AddColor8)); + buf.Dispose(); + if(!err){ + if (infoP->noise_value>0){ + ERR(ae->iterate8((refconType)infoP,AddNoise8)); + } + } + }else{ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + CCPInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; + + return err; +} +//------------------------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(CCPInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + CCPInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + CCPInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + + return err; +} +#endif + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/CCplus/CCplus.h b/CCplus/CCplus.h new file mode 100644 index 0000000..aa2f15e --- /dev/null +++ b/CCplus/CCplus.h @@ -0,0 +1,211 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef CCplus_H +#define CCplus_H + +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + + +#define COLOR_TABLE_LENGTH8 (PF_MAX_CHAN8+1) +#define COLOR_TABLE_LENGTH16 (PF_MAX_CHAN16+1) + +#define COLOR_TABLE_SIZE8 ((COLOR_TABLE_LENGTH8) * sizeof(PF_Pixel)) +#define COLOR_TABLE_SIZE16 ((COLOR_TABLE_LENGTH16) * sizeof(PF_Pixel16)) + + +#define StrName "CCplus" +#define StrDescription "CCplus bry-ful AfterEffects EffectPlugin" +#define StrMADEBY "bry-ful" + +#define StrORG_REV1 "original_reverce" //PF_Pixel +#define StrORG_REV2 "on" //PF_Pixel + +#define StrCOLOR_START "start_color" +#define StrCOLOR_CENTER "center_color"//PF_Pixel +#define StrCOLOR_END "end_color"//PF_Pixel +#define StrCOLOR_CENTER_POS "center_color_pos(%)" + +#define StrALPHA_START "start_alpha(%)" //透明にする +#define StrALPHA_END "end_alpha(%)"//透明にする + +#define StrNOISE_VALUE "noise_value"//ノイズを強さ + +#define StrERR_getFsAEParams "画像バッファーサイズエラーです。御免なさい。" +#define StrERR_getParams "パラメータエラーです。御免なさい。" + + + + +//AfterEffectsの情報をまとめた構造体 +typedef struct{ + PF_InData *in_data; + PF_OutData *out_data; + + PF_EffectWorld *input; + PF_EffectWorld *output; + PF_PixelPtr inData; //入力画像のアドレス + PF_PixelPtr outData; //出力画像のアドレス + A_long width; //対象画像の横幅(pixel) + A_long height; //対象画像の縦 幅(pixel) + + A_long inWidth; //入力画像の横幅の実サイズpixel) + A_long outWidth; //出力画像の横幅の実サイズpixel) + A_long offsetInWidth; // inWidth - width 補正サイズ + A_long offsetOutWidth; // outWidth - width + A_long Frame; //描画中のフレーム(0スタート) + PF_Boolean is16Bit; //モードが16BitならTRUE + A_u_char reserve1; + A_u_short reserve2; + A_long reserve3; + A_long reserve4; + /* 無理やり64byteにする*/ +} FsAEParams; + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_ORG_REV, //元絵を白黒反転 + + ID_COLOR_START, //PF_Pixel + ID_COLOR_CENTER, //PF_Pixel + ID_COLOR_END, //PF_Pixel + ID_COLOR_CENTER_POS, + + ID_ALPHA_START, //透明にする + ID_ALPHA_END, //透明にする + + ID_NOISE_VALUE, //ノイズの量 + ID_NUM_PARAMS + + }; +/* +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + PF_Boolean org_rev; + + PF_Pixel color_start; + PF_Pixel color_center; + PF_Pixel color_end; + PF_Fixed color_center_pos; + + PF_Fixed alpha_start; + PF_Fixed alpha_end; + + A_long noise_value; + + PF_PixelPtr colorTbl; + PF_Handle colorTblH; + +} ID_Params; +*/ +typedef struct CCPInfo{ + PF_Boolean org_rev; + PF_Pixel color_start; + PF_Pixel color_center; + PF_Pixel color_end; + + A_u_char color_border; + A_long alpha_start; + A_long alpha_end; + A_long noise_value; + PF_Pixel *colorTbl; +} CCPInfo, *CCPInfoP, **CCPInfoH; + +typedef struct CCPInfo16{ + PF_Boolean org_rev; + PF_Pixel16 color_start; + PF_Pixel16 color_center; + PF_Pixel16 color_end; + + A_u_short color_border; + A_long alpha_start; + A_long alpha_end; + A_long noise_value; + PF_Pixel16 *colorTbl; +} CCPInfo16, *CCPInfo16P, **CCPInfo16H; + + +typedef struct CCPInfo32{ + PF_Boolean org_rev; + PF_PixelFloat color_start; + PF_PixelFloat color_center; + PF_PixelFloat color_end; + + PF_FpShort color_border; + + PF_FpShort alpha_start; + PF_FpShort alpha_end; + A_long noise_value; + PF_PixelFloat colorTbl; +} CCPInfo32, *CCPInfo32P, **CCPInfo32H; + +typedef struct { + PF_Fixed value; + PF_ProgPtr ref; + PF_SampPB samp_pb; + PF_InData *in_data; +} CCplusInfo; + + + +//------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} +//------------------------------------------------------- +// FsAEParams構造体を作成する +PF_Err getFsAEParams ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + FsAEParams *aeprm + ); + +#endif // CCplus_H diff --git a/CCplus/CCplusPiPL.r b/CCplus/CCplusPiPL.r new file mode 100644 index 0000000..f416a66 --- /dev/null +++ b/CCplus/CCplusPiPL.r @@ -0,0 +1,78 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/CCplus/Fs_Entry.h b/CCplus/Fs_Entry.h new file mode 100644 index 0000000..1db299a --- /dev/null +++ b/CCplus/Fs_Entry.h @@ -0,0 +1,200 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- +/* +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif +*/ +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/CCplus/Fs_Target.h b/CCplus/Fs_Target.h new file mode 100644 index 0000000..22d9e55 --- /dev/null +++ b/CCplus/Fs_Target.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's CCplus" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "明るさにあわせて色を付けます" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ + +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +#endif diff --git a/CCplus/Win/CCplus.vcxproj b/CCplus/Win/CCplus.vcxproj new file mode 100644 index 0000000..b632994 --- /dev/null +++ b/CCplus/Win/CCplus.vcxproj @@ -0,0 +1,330 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4} + CCplus + CCplus + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CCplus.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CCplus.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CCplus.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/CCplus/Win/CCplus.vcxproj.filters b/CCplus/Win/CCplus.vcxproj.filters new file mode 100644 index 0000000..ce2385d --- /dev/null +++ b/CCplus/Win/CCplus.vcxproj.filters @@ -0,0 +1,159 @@ + + + + + {64d532ea-b409-45e0-ac66-694d415a2667} + h;hpp;hxx;hm;inl;fi;fd + + + {5a55e17c-065b-4f4d-8311-8b1c5613f86c} + + + {749aa06f-45df-40db-a693-629e05a05b9c} + + + {ea062508-c43e-45fc-bfff-a4614bdc02ab} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0ab25a0f-2286-47f7-84ce-2ca83a6f4d16} + + + {9a5b4950-b303-4d36-9bd4-b8a7d1cf7da9} + + + {ff4ba286-a747-4edd-ab3f-7e28b3d2b7ca} + + + {ff89e4ed-c905-4041-8332-0d7b3af3604d} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + + + Header Files\AE + + + \ No newline at end of file diff --git a/CCplus/Win/CCplusPiPL.rc b/CCplus/Win/CCplusPiPL.rc new file mode 100644 index 0000000..5c4913c --- /dev/null +++ b/CCplus/Win/CCplusPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 12, 0x0, + "\x0AF's CCplus\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x12F's Plugins-Script\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 12, 0x0, + "\x0AF's CCplus\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ChannelBlur/ChannelBlur.cpp b/ChannelBlur/ChannelBlur.cpp new file mode 100644 index 0000000..e964550 --- /dev/null +++ b/ChannelBlur/ChannelBlur.cpp @@ -0,0 +1,262 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "ChannelBlur.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_MODE, + STR_MODE_COUNT, //メニューの数 + STR_MODE_DFLT, //デフォルト + STR_MODE_ITEMS, + ID_MODE + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_0CH_R, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + ID_0CH_R + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_1CH_G, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + ID_1CH_G + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_2CH_B, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + ID_2CH_B + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_3CH_A, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + ID_3CH_A + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetPOPUP(ID_MODE, &infoP->mode)); + ERR(ae->GetADD(ID_0CH_R, &infoP->r_blur)); + ERR(ae->GetADD(ID_1CH_G, &infoP->g_blur)); + ERR(ae->GetADD(ID_2CH_B, &infoP->b_blur)); + ERR(ae->GetADD(ID_3CH_A, &infoP->a_blur)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + //ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + //ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + //ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/ChannelBlur/ChannelBlur.h b/ChannelBlur/ChannelBlur.h new file mode 100644 index 0000000..2f0e667 --- /dev/null +++ b/ChannelBlur/ChannelBlur.h @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------------- +/* + ChannelBlur for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ChannelBlur_H +#define ChannelBlur_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_MODE, + + ID_0CH_R, + ID_1CH_G, + ID_2CH_B, + ID_3CH_A, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_MODE "Mode" +#define STR_MODE_ITEMS "RGB|HLS|Yuv" +#define STR_MODE_COUNT 3 +#define STR_MODE_DFLT 1 + +#define STR_0CH_R "R_H_Y_blur" +#define STR_1CH_G "G_L_u_blur" +#define STR_2CH_B "B_S_v_blur" +#define STR_3CH_A "Alpha_blur" + + + + +//UIのパラメータ +typedef struct ParamInfo { + A_long mode; + A_long r_blur; + A_long g_blur; + A_long b_blur; + A_long a_blur; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +typedef struct ParamInfo8 { + ParamInfo info; + + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // ChannelBlur_H diff --git a/ChannelBlur/ChannelBlurPiPL.r b/ChannelBlur/ChannelBlurPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/ChannelBlur/ChannelBlurPiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ChannelBlur/Fs_Entry.h b/ChannelBlur/Fs_Entry.h new file mode 100644 index 0000000..ebeb5e1 --- /dev/null +++ b/ChannelBlur/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + ChannelBlur for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ChannelBlur/Fs_Target.h b/ChannelBlur/Fs_Target.h new file mode 100644 index 0000000..7ea2d59 --- /dev/null +++ b/ChannelBlur/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ChannelBlur" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "チャンネル毎にぼかします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/ChannelBlur/Win/ChannelBlur.sln b/ChannelBlur/Win/ChannelBlur.sln new file mode 100644 index 0000000..c141a2a --- /dev/null +++ b/ChannelBlur/Win/ChannelBlur.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChannelBlur", "ChannelBlur.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A12039FD-9CA1-4AD3-94F7-9B86B2A3651B} + EndGlobalSection +EndGlobal diff --git a/ChannelBlur/Win/ChannelBlur.vcxproj b/ChannelBlur/Win/ChannelBlur.vcxproj new file mode 100644 index 0000000..40f22fc --- /dev/null +++ b/ChannelBlur/Win/ChannelBlur.vcxproj @@ -0,0 +1,591 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {44650EE4-5B04-43C2-9D1C-B96240D4AE80} + ChannelBlur + ChannelBlur + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelBlur.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelBlur.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ChannelBlur/Win/ChannelBlur.vcxproj.filters b/ChannelBlur/Win/ChannelBlur.vcxproj.filters new file mode 100644 index 0000000..64c0171 --- /dev/null +++ b/ChannelBlur/Win/ChannelBlur.vcxproj.filters @@ -0,0 +1,184 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/ChannelBlur/Win/ChannelBlurPiPL.rc b/ChannelBlur/Win/ChannelBlurPiPL.rc new file mode 100644 index 0000000..710f579 --- /dev/null +++ b/ChannelBlur/Win/ChannelBlurPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's ChannelBlur", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's ChannelBlur", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ChannelBlur/Win/PluginSkeletonPiPL.rc b/ChannelBlur/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/ChannelBlur/Win/PluginSkeletonPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x12F's PluginSkeleton\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 2, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x12F's PluginSkeleton\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ChannelNoise/ChannelNoise.cpp b/ChannelNoise/ChannelNoise.cpp new file mode 100644 index 0000000..d3d9a15 --- /dev/null +++ b/ChannelNoise/ChannelNoise.cpp @@ -0,0 +1,612 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ChannelNoise.h" + + +//------------------------------------------------------------------------------------------------- +// Aboutダイアログ +static PF_Err About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_RED_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_RED_NOISE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_RED_OPT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_RED_OPT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_GREEN_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_GREEN_NOISE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_GREEN_OPT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_GREEN_OPT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_BLUE_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLUE_NOISE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_BLUE_OPT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLUE_OPT + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_NOISE_FRAME,&b)); + ERR(ae.UI_DISABLE(ID_NOISE_OFFSET, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + /* + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_NOISE_FRAME,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} + +//------------------------------------------------------------------------------------------------- +inline A_long randValue(A_long v) +{ + return F_RAND2(-v,v); +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + + if (infoP){ + A_long aV=0; + + if ( outP->alpha>0){ + //red + if ((infoP->red_value>0)&&(infoP->red_opt>0)){ + aV = randValue(infoP->red_add); + aV = (A_long)((PF_FpShort)aV * infoP->red_opt); + if ( aV!=0) outP->red = RoundByteLong((A_long)outP->red + aV); + }else{ + F_RAND(); + } + //green + if ((infoP->green_value>0)&&(infoP->green_opt>0)){ + aV = randValue(infoP->green_add); + aV = (A_long)((PF_FpShort)aV * infoP->green_opt); + if ( aV!=0) outP->green = RoundByteLong((A_long)outP->green + aV); + }else{ + F_RAND(); + } + //blue + if ((infoP->blue_value>0)&&(infoP->blue_opt>0)){ + aV = randValue(infoP->blue_add); + aV = (A_long)((PF_FpShort)aV * infoP->green_opt); + if ( aV!=0) outP->blue = RoundByteLong((A_long)outP->blue + aV); + }else{ + F_RAND(); + } + }else{ + F_RAND();//乱数の数合わせ + F_RAND(); + F_RAND();//乱数の数合わせ + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + + if (infoP){ + A_long aV=0; + + if ( outP->alpha>0){ + //red + if ((infoP->red_value>0)&&(infoP->red_opt>0)){ + aV = randValue(infoP->red_add); + aV = (A_long)((PF_FpShort)aV * infoP->red_opt); + if ( aV!=0) outP->red = RoundShort((A_long)outP->red + aV); + }else{ + F_RAND(); + } + //green + if ((infoP->green_value>0)&&(infoP->green_opt>0)){ + aV = randValue(infoP->green_add); + aV = (A_long)((PF_FpShort)aV * infoP->green_opt); + if ( aV!=0) outP->green = RoundShort((A_long)outP->green + aV); + }else{ + F_RAND(); + } + //blue + if ((infoP->blue_value>0)&&(infoP->blue_opt>0)){ + aV = randValue(infoP->blue_add); + aV = (A_long)((PF_FpShort)aV * infoP->green_opt); + if ( aV!=0) outP->blue = RoundShort((A_long)outP->blue + aV); + }else{ + F_RAND(); + } + }else{ + F_RAND();//乱数の数合わせ + F_RAND(); + F_RAND();//乱数の数合わせ + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + + if (infoP){ + PF_FpLong aV=0; + + if ( outP->alpha>0){ + //red + if ((infoP->red_value>0)&&(infoP->red_opt>0)){ + aV = (PF_FpShort)(randValue(infoP->red_add)) /65536; + aV = aV * infoP->red_opt; + if ( aV!=0) outP->red = RoundFpShortDouble(outP->red + aV); + }else{ + F_RAND(); + } + //green + if ((infoP->green_value>0)&&(infoP->green_opt>0)){ + aV = (PF_FpShort)(randValue(infoP->green_add)) /65536; + aV = aV * infoP->green_opt; + if ( aV!=0) outP->green = RoundFpShortDouble(outP->green + aV); + }else{ + F_RAND(); + } + //blue + if ((infoP->blue_value>0)&&(infoP->blue_opt>0)){ + aV = (PF_FpShort)(randValue(infoP->blue_add)) /65536; + aV = aV * infoP->blue_opt; + if ( aV!=0) outP->blue = RoundFpShortDouble(outP->blue + aV); + }else{ + F_RAND(); + } + }else{ + F_RAND();//乱数の数合わせ + F_RAND(); + F_RAND();//乱数の数合わせ + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- + +PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed f; + + ERR(ae->GetFIXED(ID_RED_NOISE,&f)); + if ( !err) infoP->red_value = (PF_FpShort)f /(100L<<16); + ERR(ae->GetFIXED(ID_RED_OPT,&f)); + if ( !err) infoP->red_opt = (PF_FpShort)f / (100L<<16); + + ERR(ae->GetFIXED(ID_GREEN_NOISE,&f)); + if ( !err) infoP->green_value = (PF_FpShort)f /(100L<<16); + ERR(ae->GetFIXED(ID_GREEN_OPT,&f)); + if ( !err) infoP->green_opt = (PF_FpShort)f / (100L<<16); + + ERR(ae->GetFIXED(ID_BLUE_NOISE,&f)); + if ( !err) infoP->blue_value = (PF_FpShort)f /(100L<<16); + ERR(ae->GetFIXED(ID_BLUE_OPT,&f)); + if ( !err) infoP->blue_opt = (PF_FpShort)f / (100L<<16); + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->CopyInToOut()); + if ( ( (infoP->green_value<=0)||(infoP->green_opt<=0)) + &&( (infoP->blue_value <=0)||(infoP->blue_opt <=0)) + &&( (infoP->red_value <=0)||(infoP->red_opt <=0))) + { + return err; + } + F_SRAND(ae->frame()); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + infoP->blue_add = (A_long)(PF_MAX_CHAN16 * infoP->blue_value); + infoP->red_add = (A_long)(PF_MAX_CHAN16 * infoP->red_value); + infoP->green_add = (A_long)(PF_MAX_CHAN16 * infoP->green_value); + ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + infoP->blue_add = (A_long)(PF_MAX_CHAN16 * infoP->blue_value); + infoP->red_add = (A_long)(PF_MAX_CHAN16 * infoP->red_value); + infoP->green_add = (A_long)(PF_MAX_CHAN16 * infoP->green_value); + ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + infoP->blue_add = (A_long)(PF_MAX_CHAN8 * infoP->blue_value); + infoP->red_add = (A_long)(PF_MAX_CHAN8 * infoP->red_value); + infoP->green_add = (A_long)(PF_MAX_CHAN8 * infoP->green_value); + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; + +} + +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/ChannelNoise/ChannelNoise.h b/ChannelNoise/ChannelNoise.h new file mode 100644 index 0000000..ac6ba54 --- /dev/null +++ b/ChannelNoise/ChannelNoise.h @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#pragma once +#ifndef ChannelNoise_H +#define ChannelNoise_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + + +#define Str_RED_VALUE "Red Noise(%)" +#define Str_RED_OPT "Red Opacity(%)" +#define Str_GREEN_VALUE "Green Noise(%)" +#define Str_GREEN_OPT "Green Opacity(%)" +#define Str_BLUE_VALUE "Blue Noise(%)" +#define Str_BLUE_OPT "Blue Opacity(%)" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_RED_NOISE, // + ID_RED_OPT, // + ID_GREEN_NOISE, // + ID_GREEN_OPT, // + ID_BLUE_NOISE, // + ID_BLUE_OPT, // + + ID_NUM_PARAMS + }; + +typedef struct ParamInfo{ + A_long red_add; + A_long green_add; + A_long blue_add; + PF_FpShort red_value; + PF_FpShort green_value; + PF_FpShort blue_value; + PF_FpShort red_opt; + PF_FpShort green_opt; + PF_FpShort blue_opt; +} ParamInfo,*ParamInfoP,**ParamInfoH; + +//------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} + +#endif // ChannelNoise_H diff --git a/ChannelNoise/ChannelNoisePiPL.r b/ChannelNoise/ChannelNoisePiPL.r new file mode 100644 index 0000000..76b8a80 --- /dev/null +++ b/ChannelNoise/ChannelNoisePiPL.r @@ -0,0 +1,77 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + /*"F's Plugins"*/ + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ChannelNoise/Fs_Target.h b/ChannelNoise/Fs_Target.h new file mode 100644 index 0000000..5355941 --- /dev/null +++ b/ChannelNoise/Fs_Target.h @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ChannelNoise" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "チャンネルごとにノイズをかけます" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + + +//----------------------------------------------------------- +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 +//----------------------------------------------------------- +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------- +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif +//----------------------------------------------------------- + + +#endif diff --git a/ChannelNoise/Win/ChannelNoise.vcxproj b/ChannelNoise/Win/ChannelNoise.vcxproj new file mode 100644 index 0000000..60cfd57 --- /dev/null +++ b/ChannelNoise/Win/ChannelNoise.vcxproj @@ -0,0 +1,584 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {721DF89F-3009-4A4C-8F72-963A237CA8B1} + ChannelNoise + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + .aex + + + F's $(ProjectName)_CC2018_MD + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelNoise.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX\F%27s $(ProjectName)_CS4_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelNoise.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ChannelNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelNoise.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + MSWindows;WIN32;_DEBUG;_WINDOWS + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ChannelNoise/Win/ChannelNoise.vcxproj.filters b/ChannelNoise/Win/ChannelNoise.vcxproj.filters new file mode 100644 index 0000000..d1ad6e3 --- /dev/null +++ b/ChannelNoise/Win/ChannelNoise.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {2896fa52-8d8c-45c7-ad94-ede57d79e005} + h;hpp;hxx;hm;inl;fi;fd + + + {2e696d6b-6f37-44a7-a64d-c06b3e3a9bbf} + + + {caac5a09-4743-41ed-ab3e-bdc57ba9077e} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {b6cb509a-028c-457e-a696-2f6e95825958} + + + {0606ae46-e869-42c8-adaf-917591033696} + + + {7e96e45e-4821-47b4-85dc-6179c58e7c08} + + + {ac3fca13-6ef9-4d2f-8570-0f9a71b5aa58} + + + {bad514e8-3f72-4f3c-9dc9-04cf55363ac0} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/ChannelNoise/Win/ChannelNoisePiPL.rc b/ChannelNoise/Win/ChannelNoisePiPL.rc new file mode 100644 index 0000000..1c43992 --- /dev/null +++ b/ChannelNoise/Win/ChannelNoisePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x10F's ChannelNoise\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x10F's ChannelNoise\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ChannelShift/ChannelShift.cpp b/ChannelShift/ChannelShift.cpp new file mode 100644 index 0000000..e9ea6ea --- /dev/null +++ b/ChannelShift/ChannelShift.cpp @@ -0,0 +1,391 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ChannelShift.h" + + +/* +PF_Pixel (*getPixel8_sub)(getPixelPrm *prm,A_long x,A_long y); +PF_Pixel16 (*getPixel16_sub)(getPixelPrm *prm,A_long x,A_long y); +#if defined(SUPPORT_SMARTFX) +PF_PixelFloat (*getPixel32_sub)(getPixelPrm *prm,A_long x,A_long y); +#endif +*/ + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup (PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_RED_TOPIC, ID_RED_TOPIC); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE( STR_RED_ROT, + 0, + ID_RED_ROT + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_RED_LENGTH, //パラメータの名前 + -30000, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_RED_LENGTH + ); + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_RED_TOPIC_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_GREEN_TOPIC, ID_GREEN_TOPIC); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE( STR_GREEN_ROT, + 90.0, + ID_GREEN_ROT + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_GREEN_LENGTH, //パラメータの名前 + -30000, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_GREEN_LENGTH + ); + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_GREEN_TOPIC_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_BLUE_TOPIC, ID_BLUE_TOPIC); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE( STR_BLUE_ROT, + 180.0, + ID_BLUE_ROT + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_BLUE_LENGTH, //パラメータの名前 + -30000, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_BLUE_LENGTH + ); + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_BLUE_TOPIC_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_ALPHA_TOPIC, ID_ALPHA_TOPIC); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE( STR_ALPHA_ROT, + 270.0, + ID_ALPHA_ROT + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_ALPHA_LENGTH, //パラメータの名前 + -30000, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_ALPHA_LENGTH + ); + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_ALPHA_TOPIC_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_EDGE_POP1, + 4, //メニューの数 + 1, //デフォルト + STR_EDGE_POP2, + ID_EDGE_POP + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + channelShiftPrm newPos; + if (infoP){ + newPos = addChannelShiftPrm(xL<<16,yL<<16,&infoP->cs); + *outP = getPixel8_CS(&infoP->gp,&newPos); + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + channelShiftPrm newPos; + if (infoP){ + newPos = addChannelShiftPrm(xL<<16,yL<<16,&infoP->cs); + *outP = getPixel16_CS(&infoP->gp,&newPos); + } + + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * infoP = reinterpret_cast(refcon); + channelShiftPrm newPos; + if (infoP){ + newPos = addChannelShiftPrm(xL<<16,yL<<16,&infoP->cs); + *outP = getPixel32_CS(&infoP->gp,&newPos); + } + + return err; +} +#endif +//------------------------------------------------------------------------------------------------- +static void PramSet(CFsAE *ae, ParamInfo *infoP) +{ + + //--------------------------------------------------------------- + //移動距離をXYに分ける + CRotCalc rt(ae->in_data); + rt.SetRotLength(infoP->a_angle, infoP->a_length); + infoP->cs.a= rt.pos(); + rt.SetRotLength(infoP->r_angle, infoP->r_length); + infoP->cs.r= rt.pos(); + rt.SetRotLength(infoP->g_angle, infoP->g_length); + infoP->cs.g= rt.pos(); + rt.SetRotLength(infoP->b_angle, infoP->b_length); + infoP->cs.b= rt.pos(); + //--------------------------------------------------------------- + infoP->gp.data = ae->input->data; + infoP->gp.width = ae->input->width; + infoP->gp.height = ae->input->height; + infoP->gp.widthTrue = ae->in->widthTrue(); + + switch (infoP->edge_status){ + case edge_fill: + getPixel8_sub = getPixel8_fill; + getPixel16_sub = getPixel16_fill; + #if defined(SUPPORT_SMARTFX) + getPixel32_sub = getPixel32_fill; + #endif + break; + case edge_rep: + getPixel8_sub = getPixel8_rep; + getPixel16_sub = getPixel16_rep; + #if defined(SUPPORT_SMARTFX) + getPixel32_sub = getPixel32_rep; + #endif + break; + case edge_mirror: + getPixel8_sub = getPixel8_mirror; + getPixel16_sub = getPixel16_mirror; + #if defined(SUPPORT_SMARTFX) + getPixel32_sub = getPixel32_mirror; + #endif + break; + case edge_none: + default: + getPixel8_sub = getPixel8_none; + getPixel16_sub = getPixel16_none; + #if defined(SUPPORT_SMARTFX) + getPixel32_sub = getPixel32_none; + #endif + break; + } +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetParams ( CFsAE *ae, ParamInfo * infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetANGLE(ID_RED_ROT,&infoP->r_angle)); + ERR(ae->GetFIXED(ID_RED_LENGTH,&infoP->r_length)); + if(!err) infoP->r_length = ae->downScaleNoClip(infoP->r_length); + + ERR(ae->GetANGLE(ID_GREEN_ROT,&infoP->g_angle)); + ERR(ae->GetFIXED(ID_GREEN_LENGTH,&infoP->g_length)); + if(!err) infoP->g_length = ae->downScaleNoClip(infoP->g_length); + + ERR(ae->GetANGLE(ID_BLUE_ROT,&infoP->b_angle)); + ERR(ae->GetFIXED(ID_BLUE_LENGTH,&infoP->b_length)); + if(!err) infoP->b_length = ae->downScaleNoClip(infoP->b_length); + + ERR(ae->GetANGLE(ID_ALPHA_ROT,&infoP->a_angle)); + ERR(ae->GetFIXED(ID_ALPHA_LENGTH,&infoP->a_length)); + if(!err) infoP->a_length = ae->downScaleNoClip(infoP->a_length); + + + + ERR(ae->GetPOPUP(ID_EDGE_POP,&infoP->edge_status)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PramSet(ae,infoP); + + if ( (infoP->r_length==0)&&(infoP->g_length==0)&&(infoP->b_length==0)&&(infoP->a_length==0)){ + ERR(ae->CopyInToOut()); + }else{ + ERR(ae->out->clear()); + switch(ae->pixelFormat()) + { + #if defined(SUPPORT_SMARTFX) + case PF_PixelFormat_ARGB128: + ae->iterate32_ORG((refconType)infoP,FilterImage32); + break; + #endif + case PF_PixelFormat_ARGB64: + ae->iterate16((refconType)infoP,FilterImage16); + break; + case PF_PixelFormat_ARGB32: + ae->iterate8((refconType)infoP,FilterImage8); + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae, &info)); + ERR(Exec(&ae,&info)); + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/ChannelShift/ChannelShift.h b/ChannelShift/ChannelShift.h new file mode 100644 index 0000000..048a4a3 --- /dev/null +++ b/ChannelShift/ChannelShift.h @@ -0,0 +1,136 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ChannelShift_H +#define ChannelShift_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +#include "../FsLibrary/FsScreenShake.h" + +#define STR_RED_TOPIC "Red" +#define STR_RED_ROT "Red_Rot" +#define STR_RED_LENGTH "Red_Length" + +#define STR_GREEN_TOPIC "Green" +#define STR_GREEN_ROT "Green_Rot" +#define STR_GREEN_LENGTH "Green_Length" + +#define STR_BLUE_TOPIC "Blue" +#define STR_BLUE_ROT "Blue_Rot" +#define STR_BLUE_LENGTH "Blue_Length" + +#define STR_ALPHA_TOPIC "Alpha" +#define STR_ALPHA_ROT "Alpha_Rot" +#define STR_ALPHA_LENGTH "Alpha_Length" + +#define STR_EDGE_POP1 "Edge" +#define STR_EDGE_POP2 "none|extend|tile|mirror" + +#ifdef TEST_MODE + #define STR_TEST_TIME_CB1 "Time Disp" + #define STR_TEST_TIME_CB2 "ON" +#endif + +enum { + ID_INPUT = 0, // default input layer + + ID_RED_TOPIC, + ID_RED_ROT, + ID_RED_LENGTH, + ID_RED_TOPIC_END, + + ID_GREEN_TOPIC, + ID_GREEN_ROT, + ID_GREEN_LENGTH, + ID_GREEN_TOPIC_END, + + ID_BLUE_TOPIC, + ID_BLUE_ROT, + ID_BLUE_LENGTH, + ID_BLUE_TOPIC_END, + + ID_ALPHA_TOPIC, + ID_ALPHA_ROT, + ID_ALPHA_LENGTH, + ID_ALPHA_TOPIC_END, + + ID_EDGE_POP, + + ID_NUM_PARAMS + }; + + +enum { + edge_none =1, + edge_fill, + edge_rep, + edge_mirror +}; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + PF_Fixed r_angle; + PF_Fixed r_length; + PF_Fixed g_angle; + PF_Fixed g_length; + PF_Fixed b_angle; + PF_Fixed b_length; + PF_Fixed a_angle; + PF_Fixed a_length; + A_long edge_status; + channelShiftPrm cs; + getPixelPrm gp; +} ParamInfo; + + + +//------------------------------------------------------- + +extern "C" { + +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); + +} +//----------------------------------------------------------------------------------- + +#endif // ChannelShift_H diff --git a/ChannelShift/ChannelShiftPiPL.r b/ChannelShift/ChannelShiftPiPL.r new file mode 100644 index 0000000..1b4bea0 --- /dev/null +++ b/ChannelShift/ChannelShiftPiPL.r @@ -0,0 +1,78 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + FS_NAME + }, + /* [3] */ + Category { + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + /*33556032*/ + /*33556036*/ + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + /*5193*/ + }, + + /* [11] */ + AE_Effect_Match_Name { + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ChannelShift/Fs_Entry.h b/ChannelShift/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/ChannelShift/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ChannelShift/Fs_Target.h b/ChannelShift/Fs_Target.h new file mode 100644 index 0000000..338029f --- /dev/null +++ b/ChannelShift/Fs_Target.h @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ChannelShift" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "チャンネル別に画像をシフトします。" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +//#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 6 +#define BUG_VERSION 0 +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 722432 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + + +//----------------------------------------------------------------------------------- +#endif diff --git a/ChannelShift/Win/CC2018_MD/ChannelShift.tlog/unsuccessfulbuild b/ChannelShift/Win/CC2018_MD/ChannelShift.tlog/unsuccessfulbuild new file mode 100644 index 0000000..e69de29 diff --git a/ChannelShift/Win/ChannelShift.vcxproj b/ChannelShift/Win/ChannelShift.vcxproj new file mode 100644 index 0000000..169dd3e --- /dev/null +++ b/ChannelShift/Win/ChannelShift.vcxproj @@ -0,0 +1,332 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48} + ChannelShift + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelShift.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelShift.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ChannelShift.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ChannelShift/Win/ChannelShift.vcxproj.filters b/ChannelShift/Win/ChannelShift.vcxproj.filters new file mode 100644 index 0000000..bdc2550 --- /dev/null +++ b/ChannelShift/Win/ChannelShift.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {8234c31b-34ba-4721-837b-d7ab980639aa} + h;hpp;hxx;hm;inl;fi;fd + + + {15cebffc-cae3-4a20-ab2e-e501c353a09f} + + + {fa497793-4962-4a49-a320-f0e2417590ff} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {f92d6699-0a66-493a-aa66-afda635387a9} + + + {316f8a30-5a96-4c0d-a541-ed66181b6e20} + + + {7b52e58d-4678-4786-ba2b-abb7bd0a6d02} + + + {f442004a-e0e8-42e4-87fb-43454df32409} + + + {b0fafc02-dbd7-411f-a48b-53f23c7eaf6e} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/ChannelShift/Win/ChannelShiftPiPL.rc b/ChannelShift/Win/ChannelShiftPiPL.rc new file mode 100644 index 0000000..469bf16 --- /dev/null +++ b/ChannelShift/Win/ChannelShiftPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x10F's ChannelShift\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 722432L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x10F's ChannelShift\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ColorChange/ColorChange.cpp b/ColorChange/ColorChange.cpp new file mode 100644 index 0000000..af91045 --- /dev/null +++ b/ColorChange/ColorChange.cpp @@ -0,0 +1,492 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ColorChange.h" + + + +PF_Err (*subFunc8)(refconType refcon, A_long xL, A_long yL,PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err (*subFunc16)(refconType refcon, A_long xL, A_long yL,PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err (*subFunc32)(refconType refcon, A_long xL, A_long yL,PF_PixelFloat *inP, PF_PixelFloat *outP); + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //1個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LV,//パラメータの名前 + 0, //数値入力する場合の最小値 + PF_MAX_CHAN8, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 15, //スライダーの最大値 + 0, //デフォルトの値 + ID_LEVEL + ); + + AEFX_CLR_STRUCT(def); + + PF_ADD_CHECKBOX(STR_MODE1,STR_EXEC, TRUE,0, ID_ENABLE); + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET0,STR_EXEC, FALSE,0, ID_TARGET0); + + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL0, + 255, + 255, + 255, + ID_SRCCOL0 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL0, + 128, + 128, + 128, + ID_DSTCOL0 + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET1,STR_EXEC, FALSE,0, ID_TARGET1); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL1, + 255, + 0, + 0, + ID_SRCCOL1 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL1, + 128, + 0, + 0, + ID_DSTCOL1 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET2,STR_EXEC, FALSE,0, ID_TARGET2); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL2, + 0, + 255, + 0, + ID_SRCCOL2 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL2, + 0, + 128, + 0, + ID_DSTCOL2 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET3,STR_EXEC, FALSE,0, ID_TARGET3); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL3, + 0, + 0, + 255, + ID_SRCCOL3 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL3, + 0, + 0, + 128, + ID_DSTCOL3 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET4,STR_EXEC, FALSE,0, ID_TARGET4); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL4, + 255, + 255, + 0, + ID_SRCCOL4 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL4, + 128, + 128, + 0, + ID_DSTCOL4 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET5,STR_EXEC, FALSE,0, ID_TARGET5); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL5, + 0, + 255, + 255, + ID_SRCCOL5 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL5, + 0, + 128, + 128, + ID_DSTCOL5 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET6,STR_EXEC, FALSE,0, ID_TARGET6); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL6, + 255, + 0, + 255, + ID_SRCCOL6 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL6, + 128, + 0, + 128, + ID_DSTCOL0 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET7,STR_EXEC, FALSE,0, ID_TARGET7); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRCCOL7, + 0, + 0, + 0, + ID_SRCCOL7 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DSTCOL7, + 255, + 255, + 255, + ID_DSTCOL7 + ); + + + + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + for (int i=0; icount;i++){ + if ( (inP->red == niP->Src[i].red)&&(inP->green == niP->Src[i].green)&&(inP->blue == niP->Src[i].blue)) { + outP->alpha = inP->alpha; + outP->red = niP->Dst[i].red; + outP->green = niP->Dst[i].green; + outP->blue = niP->Dst[i].blue; + } + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + for (int i=0; icount;i++){ + if ( (ABS(inP->red - niP->Src[i].red)<=niP->Lv)&&(ABS(inP->green - niP->Src[i].green)<=niP->Lv)&&(ABS(inP->blue - niP->Src[i].blue)<=niP->Lv) ) { + outP->alpha = inP->alpha; + outP->red = niP->Dst[i].red; + outP->green = niP->Dst[i].green; + outP->blue = niP->Dst[i].blue; + } + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV16TO8(*inP); + for (int i=0; icount;i++){ + if ( (p.red == niP->Src[i].red)&&(p.green == niP->Src[i].green)&&(p.blue == niP->Src[i].blue) ) { + outP->alpha = inP->alpha; + outP->red = niP->Dst16[i].red; + outP->green = niP->Dst16[i].green; + outP->blue = niP->Dst16[i].blue; + } + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV16TO8(*inP); + for (int i=0; icount;i++){ + if ( (ABS(p.red - niP->Src[i].red)<=niP->Lv)&&(ABS(p.green - niP->Src[i].green)<=niP->Lv)&&(ABS(p.blue - niP->Src[i].blue)<=niP->Lv) ) { + outP->alpha = inP->alpha; + outP->red = niP->Dst16[i].red; + outP->green = niP->Dst16[i].green; + outP->blue = niP->Dst16[i].blue; + } + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV32TO8(*inP); + for (int i=0; icount;i++){ + if ( (p.red == niP->Src[i].red)&&(p.green == niP->Src[i].green)&&(p.blue == niP->Src[i].blue) ) { + outP->alpha = inP->alpha; + outP->red =niP->Dst32[i].red; + outP->green =niP->Dst32[i].green; + outP->blue =niP->Dst32[i].blue; + } + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV32TO8(*inP); + for (int i=0; icount;i++){ + if ( (ABS(p.red - niP->Src[i].red)<=niP->Lv)&&(ABS(p.green - niP->Src[i].green)<=niP->Lv)&&(ABS(p.blue - niP->Src[i].blue)<=niP->Lv) ) { + outP->alpha = inP->alpha; + outP->red =niP->Dst32[i].red; + outP->green =niP->Dst32[i].green; + outP->blue =niP->Dst32[i].blue; + } + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_ENABLE,&infoP->enabled)); + if (!err) + { + if ( infoP->enabled == FALSE){ + infoP->count =0; + }else{ + A_long idx; + ERR(ae->GetADD(ID_LEVEL,&idx)); + if ( !err){ + infoP->Lv = RoundByteLong(idx); + PF_Boolean b; + PF_Pixel p; + A_long cnt = 0; + for ( A_long i=0; iGetCHECKBOX(idx,&b)); + if (err) break; + if (b==TRUE){ + ERR(ae->GetCOLOR(idx+1,&p)); + if (!err) infoP->Src[cnt] = p; + ERR(ae->GetCOLOR(idx+2,&p)); + if (!err) { + infoP->Dst[cnt] = p; + infoP->Dst16[cnt] = CONV8TO16(p); + infoP->Dst32[cnt] = CONV8TO32(p); + } + cnt++; + } + } + infoP->count = cnt; + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if ((infoP->enabled ==TRUE )&&(infoP->count>0)) { + if ( infoP->Lv ==0){ + subFunc8 = FilterImage8Zero; + subFunc16 = FilterImage16Zero; + subFunc32 = FilterImage32Zero; + }else{ + subFunc8 = FilterImage8; + subFunc16 = FilterImage16; + subFunc32 = FilterImage32; + } + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + } + return err; +} + + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} + +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extra) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extra,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extra,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/ColorChange/ColorChange.h b/ColorChange/ColorChange.h new file mode 100644 index 0000000..d004a49 --- /dev/null +++ b/ColorChange/ColorChange.h @@ -0,0 +1,161 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ColorChange_H +#define ColorChange_H + +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "entry.h" + + +/* + CS5でコンパイルする時は、TARGETCS5を有効にして + Supporting codeのCS4onlyをビルドから除外、CS5onlyをビルド有効にする + + そして、プラットフォームをx64へプロパティを変更する事 +*/ + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* + #define CONVERT16TO8(A) ( (((long)(A) * PF_MAX_CHAN8) + PF_HALF_CHAN16) / PF_MAX_CHAN16) + #define FLOAT_2_FIX(F) ((PF_Fixed)((F) * 65536 + (((F) < 0) ? -0.5 : 0.5))) +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + +#define ColorChangeCount 8 + +enum { + ID_INPUT = 0, // default input layer + ID_LEVEL, + + ID_ENABLE, + + ID_TARGET0, + ID_SRCCOL0, + ID_DSTCOL0, + + ID_TARGET1, + ID_SRCCOL1, + ID_DSTCOL1, + + ID_TARGET2, + ID_SRCCOL2, + ID_DSTCOL2, + + ID_TARGET3, + ID_SRCCOL3, + ID_DSTCOL3, + + ID_TARGET4, + ID_SRCCOL4, + ID_DSTCOL4, + + ID_TARGET5, + ID_SRCCOL5, + ID_DSTCOL5, + + ID_TARGET6, + ID_SRCCOL6, + ID_DSTCOL6, + + ID_TARGET7, + ID_SRCCOL7, + ID_DSTCOL7, + + ID_NUM_PARAMS +}; + + +#define STR_LV "許容値" +#define STR_MODE1 "モード" +#define STR_EXEC "実行する" + +#define STR_TARGET0 "Target0" +#define STR_SRCCOL0 "元の色0" +#define STR_DSTCOL0 "新しい色0" + +#define STR_TARGET1 "Target1" +#define STR_SRCCOL1 "元の色1" +#define STR_DSTCOL1 "新しい色1" + +#define STR_TARGET2 "Target2" +#define STR_SRCCOL2 "元の色2" +#define STR_DSTCOL2 "新しい色2" + +#define STR_TARGET3 "Target3" +#define STR_SRCCOL3 "元の色3" +#define STR_DSTCOL3 "新しい色3" + +#define STR_TARGET4 "Target4" +#define STR_SRCCOL4 "元の色4" +#define STR_DSTCOL4 "新しい色4" + +#define STR_TARGET5 "Target5" +#define STR_SRCCOL5 "元の色5" +#define STR_DSTCOL5 "新しい色5" + +#define STR_TARGET6 "Target6" +#define STR_SRCCOL6 "元の色6" +#define STR_DSTCOL6 "新しい色6" + +#define STR_TARGET7 "Target7" +#define STR_SRCCOL7 "元の色7" +#define STR_DSTCOL7 "新しい色7" + + +typedef struct ParamInfo{ + PF_Boolean enabled; + A_u_char Lv; + A_long count; + PF_Pixel Src[ColorChangeCount]; + PF_Pixel Dst[ColorChangeCount]; + PF_Pixel16 Dst16[ColorChangeCount]; + PF_PixelFloat Dst32[ColorChangeCount]; +} ParamInfo,*ParamInfoP,**ParamInfoH; + + + +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + + + +#endif // ColorChange_H \ No newline at end of file diff --git a/ColorChange/ColorChangePiPL.r b/ColorChange/ColorChangePiPL.r new file mode 100644 index 0000000..2fe16a8 --- /dev/null +++ b/ColorChange/ColorChangePiPL.r @@ -0,0 +1,75 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + FS_NAME + }, + /* [3] */ + Category { + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; + diff --git a/ColorChange/Fs_Entry.h b/ColorChange/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/ColorChange/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ColorChange/Fs_Target.h b/ColorChange/Fs_Target.h new file mode 100644 index 0000000..54efc33 --- /dev/null +++ b/ColorChange/Fs_Target.h @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ColorChange" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "単色の色変えをします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +#endif diff --git a/ColorChange/Win/ColorChange.vcxproj b/ColorChange/Win/ColorChange.vcxproj new file mode 100644 index 0000000..52706dd --- /dev/null +++ b/ColorChange/Win/ColorChange.vcxproj @@ -0,0 +1,332 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {A057BED7-A75C-4769-BA94-BF3A709420AF} + ColorChange + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + .aex + .aex + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChange.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChange.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChange.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ColorChange/Win/ColorChange.vcxproj.filters b/ColorChange/Win/ColorChange.vcxproj.filters new file mode 100644 index 0000000..4ba1ef5 --- /dev/null +++ b/ColorChange/Win/ColorChange.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {7d0995a2-c036-4ec3-916d-e1842d69d69d} + h;hpp;hxx;hm;inl;fi;fd + + + {60468c1f-0f3c-4a74-b238-00b23a75f616} + + + {d0aa2422-14bf-41b9-998f-86c8e384df6c} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {7a008f0d-ea3f-46b1-92c5-5b28ee4d8065} + + + {dc287b86-c54f-4e4d-9e54-f668f9a4366b} + + + {822a416c-2fdd-4d18-8257-556404abaa00} + + + {f7a5802a-0a56-4b9d-8f27-75e47fc84044} + + + {004def1c-107b-4902-aa81-3e1045ac654f} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/ColorChange/Win/ColorChangePiPL.rc b/ColorChange/Win/ColorChangePiPL.rc new file mode 100644 index 0000000..85b0759 --- /dev/null +++ b/ColorChange/Win/ColorChangePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's ColorChange", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's ColorChange", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/ColorChangeSimple/ColorChangeSimple.cpp b/ColorChangeSimple/ColorChangeSimple.cpp new file mode 100644 index 0000000..1fe4840 --- /dev/null +++ b/ColorChangeSimple/ColorChangeSimple.cpp @@ -0,0 +1,333 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "ColorChangeSimple.h" + + +PF_Err (*subFunc8)(refconType refcon, A_long xL, A_long yL,PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err (*subFunc16)(refconType refcon, A_long xL, A_long yL,PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err (*subFunc32)(refconType refcon, A_long xL, A_long yL,PF_PixelFloat *inP, PF_PixelFloat *outP); + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LEVEL_FIXED + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SRC, + 0xFF, + 0xFF, + 0xFF, + ID_SRC_COLOR + ); + + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DST, + 0x00, + 0x00, + 0x00, + ID_DST_COLOR + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + if ( (ABS(outP->red - niP->src.red)<=niP->level)&&(ABS(outP->green - niP->src.green)<=niP->level)&&(ABS(outP->blue - niP->src.blue)<=niP->level) ) { + outP->red = niP->dst.red; + outP->green = niP->dst.green; + outP->blue = niP->dst.blue; + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + if ( (outP->red == niP->src.red)&&(outP->green == niP->src.green)&&(outP->blue == niP->src.blue) ) + { + outP->red = niP->dst.red; + outP->green = niP->dst.green; + outP->blue = niP->dst.blue; + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV16TO8(*outP); + if ( (ABS(p.red - niP->src.red)<=niP->level)&&(ABS(p.green - niP->src.green)<=niP->level)&&(ABS(p.blue - niP->src.blue)<=niP->level) ) { + outP->red = niP->dst16.red; + outP->green = niP->dst16.green; + outP->blue = niP->dst16.blue; + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV16TO8(*outP); + if ( (p.red == niP->src.red)&&(p.green == niP->src.green)&&(p.blue == niP->src.blue) ) + { + outP->red = niP->dst16.red; + outP->green = niP->dst16.green; + outP->blue = niP->dst16.blue; + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV32TO8(*outP); + if ( (ABS(p.red - niP->src.red)<=niP->level)&&(ABS(p.green - niP->src.green)<=niP->level)&&(ABS(p.blue - niP->src.blue)<=niP->level) ) { + outP->red = niP->dst32.red; + outP->green = niP->dst32.green; + outP->blue = niP->dst32.blue; + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32Zero ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p = CONV32TO8(*outP); + if ( (p.red == niP->src.red)&&(p.green == niP->src.green)&&(p.blue == niP->src.blue) ) + { + outP->red = niP->dst32.red; + outP->green = niP->dst32.green; + outP->blue = niP->dst32.blue; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Fixed f; + ERR(ae->GetFIXED(ID_LEVEL_FIXED,&f)); + if (!err) infoP->level = RoundByteLong((PF_MAX_CHAN8 * f / 100)/65536); + ERR(ae->GetCOLOR(ID_SRC_COLOR,&infoP->src)); + ERR(ae->GetCOLOR(ID_DST_COLOR,&infoP->dst)); + if (!err){ + infoP->dst16 = CONV8TO16(infoP->dst); + infoP->dst32 = CONV8TO32(infoP->dst); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if ( infoP->level ==0){ + subFunc8 = FilterImage8Zero; + subFunc16 = FilterImage16Zero; + subFunc32 = FilterImage32Zero; + }else{ + subFunc8 = FilterImage8; + subFunc16 = FilterImage16; + subFunc32 = FilterImage32; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,subFunc32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,subFunc16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,subFunc8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} + +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/ColorChangeSimple/ColorChangeSimple.h b/ColorChangeSimple/ColorChangeSimple.h new file mode 100644 index 0000000..6c147b1 --- /dev/null +++ b/ColorChangeSimple/ColorChangeSimple.h @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ColorChangeSimple_H +#define ColorChangeSimple_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_LEVEL_FIXED, //long + ID_SRC_COLOR, //PF_Pixel + ID_DST_COLOR, //PF_Pixel + ID_NUM_PARAMS + }; + +#define STR_LEVEL "許容値" +#define STR_SRC "元の色" +#define STR_DST "新しい色" + +typedef struct ParamInfo{ + A_u_char level; + PF_Pixel src; + PF_Pixel dst; + PF_Pixel16 dst16; + PF_PixelFloat dst32; +} ParamInfo,*ParamInfoP,**ParamInfoH; + + +//------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + + +#endif // ColorChangeSimple_H diff --git a/ColorChangeSimple/ColorChangeSimplePiPL.r b/ColorChangeSimple/ColorChangeSimplePiPL.r new file mode 100644 index 0000000..0f22fc3 --- /dev/null +++ b/ColorChangeSimple/ColorChangeSimplePiPL.r @@ -0,0 +1,78 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ColorChangeSimple/Fs_Entry.h b/ColorChangeSimple/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/ColorChangeSimple/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ColorChangeSimple/Fs_Target.h b/ColorChangeSimple/Fs_Target.h new file mode 100644 index 0000000..73311a5 --- /dev/null +++ b/ColorChangeSimple/Fs_Target.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ColorChangeSimple" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "単色の色変えをします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/ColorChangeSimple/Win/ColorChangeSimple.vcxproj b/ColorChangeSimple/Win/ColorChangeSimple.vcxproj new file mode 100644 index 0000000..10feebf --- /dev/null +++ b/ColorChangeSimple/Win/ColorChangeSimple.vcxproj @@ -0,0 +1,327 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {6EB2A53D-63DB-462B-990A-14D37F42E338} + ColorChangeSimple + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChangeSimple.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChangeSimple.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorChangeSimple.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + true + true + + + + + + \ No newline at end of file diff --git a/ColorChangeSimple/Win/ColorChangeSimple.vcxproj.filters b/ColorChangeSimple/Win/ColorChangeSimple.vcxproj.filters new file mode 100644 index 0000000..2be39f5 --- /dev/null +++ b/ColorChangeSimple/Win/ColorChangeSimple.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {27bc0b45-c5d1-42b5-ba0d-0fa4e78997cb} + h;hpp;hxx;hm;inl;fi;fd + + + {450cf529-4968-4f45-939f-24121870c005} + + + {f7b78b2c-17b0-4b61-b751-66a50546b93e} + + + {fc6a4c5c-7fee-4fbe-9afc-fdbc65f41113} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {a3cbedd3-0d54-4718-9dcb-b0c5a814ea24} + + + {0085c2f5-f87f-40ff-8d16-0813bc7e3456} + + + {f7f3ee51-b09a-48cc-ad5b-20fa4ef34a11} + + + {70a48cb9-3d95-44f2-8aa5-2033ce559fb1} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files + + + Header Files\AE + + + Header Files\AE + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/ColorChangeSimple/Win/ColorChangeSimplePiPL.rc b/ColorChangeSimple/Win/ColorChangeSimplePiPL.rc new file mode 100644 index 0000000..857a28d --- /dev/null +++ b/ColorChangeSimple/Win/ColorChangeSimplePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 24, 0x0, + "\x15F's ColorChangeSimple\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 24, 0x0, + "\x15F's ColorChangeSimple\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ColorKey/ColorKey.cpp b/ColorKey/ColorKey.cpp new file mode 100644 index 0000000..e808ca7 --- /dev/null +++ b/ColorKey/ColorKey.cpp @@ -0,0 +1,290 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "ColorKey.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_RANGE, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_RANGE + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_UNDER, + 0x0, + 0x0, + 0x0, + ID_UNDERCOLOR + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + if ( infoP){ + if ( inP->alpha ==0){ + *outP = infoP->under; + outP->alpha = 0; + }else if ( (inP->alpha ==PF_MAX_CHAN8)&&( compPix8Lv(*inP,infoP->color,infoP->range)==TRUE)){ + *outP = infoP->under; + outP->alpha = 0; + }else{ + *outP = *inP; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * infoP = reinterpret_cast(refcon); + + if ( infoP){ + if ( inP->alpha ==0){ + *outP = infoP->under; + outP->alpha = 0; + }else if ( (inP->alpha ==PF_MAX_CHAN16)&&( compPix16_8Lv(*inP,infoP->color,infoP->range)==TRUE)){ + *outP = infoP->under; + outP->alpha = 0; + }else{ + *outP = *inP; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * infoP = reinterpret_cast(refcon); + + if ( infoP){ + if ( inP->alpha ==0){ + *outP = infoP->under; + outP->alpha = 0; + }else if ( (inP->alpha ==1)&&( compPix32_8Lv(*inP,infoP->color,infoP->range)==TRUE)){ + *outP = infoP->under; + outP->alpha = 0; + }else{ + *outP = *inP; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + PF_FpLong d; + ERR(ae->GetFLOAT(ID_RANGE,&d)); + d /= 100; + infoP->range = (A_u_char)(PF_MAX_CHAN8 * d); + ERR(ae->GetCOLOR(ID_UNDERCOLOR,&infoP->under)); + infoP->under.alpha = 0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ParamInfo32 info32; + info32.color = infoP->color; + info32.range = infoP->range; + info32.under = CONV8TO32(infoP->under); + ERR(ae->iterate32((refconType)&info32,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + info16.color = infoP->color; + info16.range = infoP->range; + info16.under = CONV8TO16(infoP->under); + ERR(ae->iterate16((refconType)&info16,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/ColorKey/ColorKey.h b/ColorKey/ColorKey.h new file mode 100644 index 0000000..4ec6182 --- /dev/null +++ b/ColorKey/ColorKey.h @@ -0,0 +1,93 @@ +//----------------------------------------------------------------------------------- +/* + ColorKey for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ColorKey_H +#define ColorKey_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_COLOR, + ID_RANGE, + ID_UNDERCOLOR, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_COLOR "color" +#define STR_RANGE "range" +#define STR_UNDER "Undercolor" + + +//UIのパラメータ +typedef struct{ + PF_Pixel color; + PF_Pixel under; + A_u_char range; +} ParamInfo; + +typedef struct{ + PF_Pixel color; + PF_Pixel16 under; + A_u_char range; +} ParamInfo16; +typedef struct{ + PF_Pixel color; + PF_PixelFloat under; + A_u_char range; +} ParamInfo32; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // ColorKey_H diff --git a/ColorKey/ColorKeyPiPL.r b/ColorKey/ColorKeyPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/ColorKey/ColorKeyPiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ColorKey/Fs_Entry.h b/ColorKey/Fs_Entry.h new file mode 100644 index 0000000..0a6f11b --- /dev/null +++ b/ColorKey/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + ColorKey for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ColorKey/Fs_Target.h b/ColorKey/Fs_Target.h new file mode 100644 index 0000000..b40c1f9 --- /dev/null +++ b/ColorKey/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ColorKey" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "カラーキー" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/ColorKey/Win/ColorKey.vcxproj b/ColorKey/Win/ColorKey.vcxproj new file mode 100644 index 0000000..ac73605 --- /dev/null +++ b/ColorKey/Win/ColorKey.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {E18653F0-FFEF-48A1-90AE-CC6562614526} + ColorKey + ColorKey + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorKey.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorKey.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ColorKey/Win/ColorKey.vcxproj.filters b/ColorKey/Win/ColorKey.vcxproj.filters new file mode 100644 index 0000000..aa6a59e --- /dev/null +++ b/ColorKey/Win/ColorKey.vcxproj.filters @@ -0,0 +1,166 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/ColorKey/Win/ColorKeyPiPL.rc b/ColorKey/Win/ColorKeyPiPL.rc new file mode 100644 index 0000000..786dfa6 --- /dev/null +++ b/ColorKey/Win/ColorKeyPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0CF's ColorKey\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0CF's ColorKey\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ColorMatKey/ColorMatKey.cpp b/ColorMatKey/ColorMatKey.cpp new file mode 100644 index 0000000..7027286 --- /dev/null +++ b/ColorMatKey/ColorMatKey.cpp @@ -0,0 +1,644 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "ColorMatKey.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ALPHA_REV, + STR_ON, + FALSE, + 0, + ID_REV + ); + //---------------------------------------------------------------- + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLED0, + STR_ON, + FALSE, + 0, + ID_TARGET_ENABLE0 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_TARGET_COLOR0, + 0xFF, + 0x00, + 0x00, + ID_TARGET_COLOR0 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_BORDER0, //Name + 50, //VALID_MIN + 100, //VALID_MAX + 50, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_BORDER0 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_SOFT0, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 15, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_SOFT0 + ); + + //---------------------------------------------------------------- + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLED1, + STR_ON, + FALSE, + 0, + ID_TARGET_ENABLE1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_TARGET_COLOR1, + 0x00, + 0xFF, + 0x00, + ID_TARGET_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_BORDER1, //Name + 50, //VALID_MIN + 100, //VALID_MAX + 50, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_BORDER1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_SOFT1, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 15, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_SOFT1 + ); + //---------------------------------------------------------------- + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLED2, + STR_ON, + FALSE, + 0, + ID_TARGET_ENABLE2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_TARGET_COLOR2, + 0x00, + 0x00, + 0xFF, + ID_TARGET_COLOR2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_BORDER2, //Name + 50, //VALID_MIN + 100, //VALID_MAX + 50, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_BORDER2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_SOFT2, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 15, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_SOFT2 + ); + //---------------------------------------------------------------- +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLED3, + STR_ON, + FALSE, + 0, + ID_TARGET_ENABLE3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_TARGET_COLOR3, + 0xFF, + 0x00, + 0xFF, + ID_TARGET_COLOR3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_BORDER3, //Name + 50, //VALID_MIN + 100, //VALID_MAX + 50, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_BORDER3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_SOFT3, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 15, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_SOFT3 + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +ColorMatKey8( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + PF_InData *in_data; + in_data = infoP->in_data; + + PF_FpShort r, g, b, a; + a = (PF_FpShort)inP->alpha; + r = (PF_FpShort)inP->red * (PF_FpShort)inP->alpha / PF_MAX_CHAN8; + g = (PF_FpShort)inP->green * (PF_FpShort)inP->alpha / PF_MAX_CHAN8; + b = (PF_FpShort)inP->blue * (PF_FpShort)inP->alpha / PF_MAX_CHAN8; + + PF_PixelFloat pf; + pf.red = r / PF_MAX_CHAN8; + pf.green = g / PF_MAX_CHAN8; + pf.blue = b / PF_MAX_CHAN8; + pf.alpha = a / PF_MAX_CHAN8; + + LABA lab = RgbToLab(pf); + //色の距離測定 + double v = 0; + double v2 = 0; + + for (A_long idx = 0; idx < 4; idx++) { + if (infoP->ci[idx].target_enabled == TRUE) { + v = 1.0 - (PF_SQRT( + PF_POW(lab.L - infoP->ci[idx].target_lab.L, 2) + + PF_POW(lab.A - infoP->ci[idx].target_lab.A, 2) + + PF_POW(lab.B - infoP->ci[idx].target_lab.B, 2)) + / PF_SQRT(3) + ); + if (infoP->ci[idx].target_softness == 0) { + if (v >= infoP->ci[idx].target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->ci[idx].target_start) { + v = 0; + } + else if (v >= infoP ->ci[idx].target_border) { + v = 1.0; + } + else { + v = (v - infoP->ci[idx].target_start) / (infoP->ci[idx].target_softness); + } + + } + v2 += v; + if (v2 > 1.0) v2 = 1.0; + } + } + + + + //------------ + + + + + *outP = *inP; + a = PF_MAX_CHAN8 - a; + outP->alpha = RoundByteLong((A_long)(v2*PF_MAX_CHAN8 + 0.5 - a)); + if (infoP->rev == TRUE) { + outP->alpha = PF_MAX_CHAN8 - outP->alpha; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ColorMatKey16( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + PF_InData *in_data; + in_data = infoP->in_data; + + PF_FpShort r, g, b, a; + r = (PF_FpShort)inP->red * (PF_FpShort)inP->alpha / PF_MAX_CHAN16; + g = (PF_FpShort)inP->green * (PF_FpShort)inP->alpha / PF_MAX_CHAN16; + b = (PF_FpShort)inP->blue * (PF_FpShort)inP->alpha / PF_MAX_CHAN16; + a = (PF_FpShort)inP->alpha; + + PF_PixelFloat pf; + pf.red = r / PF_MAX_CHAN16; + pf.green = g / PF_MAX_CHAN16; + pf.blue = b / PF_MAX_CHAN16; + pf.alpha = a / PF_MAX_CHAN16; + + LABA lab = RgbToLab(pf); + //色の距離測定 + double v = 0; + double v2 = 0; + + for (A_long idx = 0; idx < 4; idx++) { + if (infoP->ci[idx].target_enabled == TRUE) { + v = 1.0 - (PF_SQRT( + PF_POW(lab.L - infoP->ci[idx].target_lab.L, 2) + + PF_POW(lab.A - infoP->ci[idx].target_lab.A, 2) + + PF_POW(lab.B - infoP->ci[idx].target_lab.B, 2)) + / PF_SQRT(3) + ); + if (infoP->ci[idx].target_softness == 0) { + if (v >= infoP->ci[idx].target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->ci[idx].target_start) { + v = 0; + } + else if (v >= infoP->ci[idx].target_border) { + v = 1.0; + } + else { + v = (v - infoP->ci[idx].target_start) / (infoP->ci[idx].target_softness); + } + + } + v2 += v; + if (v2 > 1.0) v2 = 1.0; + } + } + + + + //------------ + + + + + *outP = *inP; + a = PF_MAX_CHAN16 - a; + outP->alpha = RoundShort((A_long)(v2*PF_MAX_CHAN16 + 0.5 - a)); + if (infoP->rev == TRUE) { + outP->alpha = PF_MAX_CHAN16 - outP->alpha; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ColorMatKey32( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * infoP = reinterpret_cast(refcon); + + PF_InData *in_data; + in_data = infoP->in_data; + + PF_FpShort r, g, b, a; + a = (PF_FpShort)inP->alpha; + if (a < 0) a = 0; else if (a > 1) a = 1; + r = (PF_FpShort)inP->red * a; + g = (PF_FpShort)inP->green * a; + b = (PF_FpShort)inP->blue * a; + + PF_PixelFloat pf; + pf.red = r; + pf.green = g; + pf.blue = b; + pf.alpha = a; + + LABA lab = RgbToLab(pf); + //色の距離測定 + double v = 0; + double v2 = 0; + + for (A_long idx = 0; idx < 4; idx++) { + if (infoP->ci[idx].target_enabled == TRUE) { + v = 1.0 - (PF_SQRT( + PF_POW(lab.L - infoP->ci[idx].target_lab.L, 2) + + PF_POW(lab.A - infoP->ci[idx].target_lab.A, 2) + + PF_POW(lab.B - infoP->ci[idx].target_lab.B, 2)) + / PF_SQRT(3) + ); + if (infoP->ci[idx].target_softness == 0) { + if (v >= infoP->ci[idx].target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->ci[idx].target_start) { + v = 0; + } + else if (v >= infoP->ci[idx].target_border) { + v = 1.0; + } + else { + v = (v - infoP->ci[idx].target_start) / (infoP->ci[idx].target_softness); + } + + } + v2 += v; + if (v2 > 1.0) v2 = 1.0; + } + } + + + + //------------ + + + + + *outP = *inP; + outP->alpha = RoundFpShortDouble(v2 - (1 - a)); + if (infoP->rev == TRUE) { + outP->alpha = (PF_FpShort)(1.0 - outP->alpha); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_REV, &infoP->rev)); + + + A_long id = ID_TARGET_ENABLE0; + double d; + PF_Pixel c; + PF_PixelFloat cf; + for (A_long idx = 0; idx < 4; idx++) { + + ERR(ae->GetCHECKBOX(id, &infoP->ci[idx].target_enabled)); + id++; + + ERR(ae->GetCOLOR(id, &c)); + cf = CONV8TO32(c); + infoP->ci[idx].target_lab = RgbToLab(cf); + id++; + + ERR(ae->GetFLOAT(id, &d)); + d /= 100; + if (d < 0) d = 0; + else if (d > 1) d = 1; + infoP->ci[idx].target_border = d; + id++; + + ERR(ae->GetFLOAT(id, &d)); + d /= 100; + if (d < 0) d = 0; + else if (d > 1) d = 1; + infoP->ci[idx].target_softness = d; + id++; + + infoP->ci[idx].target_start = infoP->ci[idx].target_border - infoP->ci[idx].target_softness; + if (infoP->ci[idx].target_start < 0) infoP->ci[idx].target_start = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + infoP->in_data = ae->in_data; + + if ((infoP->ci[0].target_enabled == FALSE) + && (infoP->ci[1].target_enabled == FALSE) + && (infoP->ci[2].target_enabled == FALSE) + && (infoP->ci[3].target_enabled == FALSE) + ) { + return err; + } + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP, ColorMatKey32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP, ColorMatKey16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,ColorMatKey8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/ColorMatKey/ColorMatKey.h b/ColorMatKey/ColorMatKey.h new file mode 100644 index 0000000..1ed8c66 --- /dev/null +++ b/ColorMatKey/ColorMatKey.h @@ -0,0 +1,136 @@ +//----------------------------------------------------------------------------------- +/* + ColorMatKey for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ColorMatKey_H +#define ColorMatKey_H + + +#include + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsHLS.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_REV, + + + ID_TARGET_ENABLE0, + ID_TARGET_COLOR0, + ID_TAGET_BORDER0, + ID_TAGET_SOFT0, + + ID_TARGET_ENABLE1, + ID_TARGET_COLOR1, + ID_TAGET_BORDER1, + ID_TAGET_SOFT1, + + ID_TARGET_ENABLE2, + ID_TARGET_COLOR2, + ID_TAGET_BORDER2, + ID_TAGET_SOFT2, + + ID_TARGET_ENABLE3, + ID_TARGET_COLOR3, + ID_TAGET_BORDER3, + ID_TAGET_SOFT3, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_ALPHA_REV "InvertAlpha" + +#define STR_ON "on" +#define STR_TARGET_ENABLED0 "Enabled0" +#define STR_TARGET_COLOR0 "Color0" +#define STR_TAGET_BORDER0 "Border0" +#define STR_TAGET_SOFT0 "Softness0" + +#define STR_TARGET_ENABLED1 "Enabled1" +#define STR_TARGET_COLOR1 "Color1" +#define STR_TAGET_BORDER1 "Border1" +#define STR_TAGET_SOFT1 "Softness1" + +#define STR_TARGET_ENABLED2 "Enabled2" +#define STR_TARGET_COLOR2 "Color2" +#define STR_TAGET_BORDER2 "Border2" +#define STR_TAGET_SOFT2 "Softness2" + +#define STR_TARGET_ENABLED3 "Enabled3" +#define STR_TARGET_COLOR3 "Color3" +#define STR_TAGET_BORDER3 "Border3" +#define STR_TAGET_SOFT3 "Softness3" + + +//UIのパラメータ +typedef struct CInfo { + PF_Boolean target_enabled; + PF_FpLong target_border; + PF_FpLong target_softness; + PF_FpLong target_start; + LABA target_lab; + + +} CInfo, *CInfoP, **CInfoH; + + +typedef struct ParamInfo { + CInfo ci[4]; + PF_Boolean rev; + PF_InData *in_data; + + +} ParamInfo, *ParamInfoP, **ParamInfoH; + + +//------------------------------------------------------- + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // ColorMatKey_H diff --git a/ColorMatKey/ColorMatKeyPiPL.r b/ColorMatKey/ColorMatKeyPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/ColorMatKey/ColorMatKeyPiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/ColorMatKey/ColorMatKeySub8.cpp b/ColorMatKey/ColorMatKeySub8.cpp new file mode 100644 index 0000000..055ea69 --- /dev/null +++ b/ColorMatKey/ColorMatKeySub8.cpp @@ -0,0 +1,443 @@ +#include "ColorMatKey.h" + + + +//------------------------------------------------------------------------------------------------- +// 加算合成 +inline void AddPxL(GInfo *gi, PF_Pixel p) +{ + PF_Pixel *data = (PF_Pixel *)gi->data; + + A_long pos = gi->xL + gi->yL*gi->widthTrue; + data[pos].red = RoundByteLong((A_long)data[pos].red + (A_long)p.red); + data[pos].green = RoundByteLong((A_long)data[pos].green + (A_long)p.green); + data[pos].blue = RoundByteLong((A_long)data[pos].blue + (A_long)p.blue); + data[pos].alpha = RoundByteLong((A_long)data[pos].alpha + (A_long)p.alpha); + +} +//------------------------------------------------------------------------------------------------- +// ピクセルの濃度調整 +inline PF_Pixel PxPer(PF_Pixel p, PF_FpLong per) +{ + PF_Pixel r; + r.red = RoundByteFpLong( p.red * per); + r.green = RoundByteFpLong(p.green * per); + r.blue = RoundByteFpLong(p.blue * per); + r.alpha = RoundByteFpLong(p.alpha * per); + return r; +} +//------------------------------------------------------------------------------------------------- +//小数点対応の加算合成 +inline void AddPxD(GInfo *gi, PF_Pixel p) +{ + + A_long x0, x1, y0, y1; + x0 = (A_long)gi->xD; x1 = x0 + 1; + y0 = (A_long)gi->yD; y1 = y0 + 1; + + PF_FpLong ax1 = gi->xD - (PF_FpLong)x0; + PF_FpLong ay1 = gi->yD - (PF_FpLong)y0; + PF_FpLong ax0 = 1.0 - ax1; + PF_FpLong ay0 = 1.0 - ay1; + + gi->xL = x0; + gi->yL = y0; + AddPxL(gi, PxPer(p, ax0 * ay0)); + gi->xL = x0; + gi->yL = y1; + AddPxL(gi, PxPer(p, ax0* ay1)); + gi->xL = x1; + gi->yL = y0; + AddPxL(gi, PxPer(p, ax1* ay0)); + gi->xL = x1; + gi->yL = y1; + AddPxL(gi, PxPer(p, ax1* ay1)); + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MakePixelTable(PF_Pixel *tbl, A_long len, PF_Pixel col,PF_FpLong per, PF_FpLong br) +{ + + PF_FpLong p = per; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i/ (PF_FpLong)len) ; + tbl[i] = PxPer(col, p); + A_long a = (A_long)((PF_FpLong)tbl[i].alpha*br); + tbl[i].red = RoundByteLong(tbl[i].red + a); + tbl[i].green = RoundByteLong(tbl[i].green + a); + tbl[i].blue = RoundByteLong(tbl[i].blue + a); + + } +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +TargetPixel8( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + + + PF_Pixel8 c = { PF_MAX_CHAN8,PF_MAX_CHAN8, PF_MAX_CHAN8, PF_MAX_CHAN8 }; + A_long v = 0, r, g, b; + r = (A_long)inP->red * (A_long)inP->alpha / PF_MAX_CHAN8; + g = (A_long)inP->green * (A_long)inP->alpha / PF_MAX_CHAN8; + b = (A_long)inP->blue * (A_long)inP->alpha / PF_MAX_CHAN8; + + + PF_InData *in_data = infoP->in_data; + PF_PixelFloat pf; + double v2; + + switch (infoP->info.target_kind) + { + case 2: + v = (r + g + b) / 3; + break; + case 3: + pf.red = (PF_FpShort)r / PF_MAX_CHAN8; + pf.green = (PF_FpShort)g / PF_MAX_CHAN8; + pf.blue = (PF_FpShort)b / PF_MAX_CHAN8; + pf.alpha = 1.0; + + LABA lab = RgbToLab(pf); + //色の距離測定 + v2 = 1.0 - (PF_SQRT( + PF_POW(lab.L - infoP->taget_lab.L, 2) + + PF_POW(lab.A - infoP->taget_lab.A, 2) + + PF_POW(lab.B - infoP->taget_lab.B, 2)) + / PF_SQRT(3) + ); + v = (A_long)(v2 * PF_MAX_CHAN8 + 0.5); + + //HLSA hls = RGBtoHLS(pf); + //色の距離測定 + /* + v2 = 1.0 - (PF_SQRT( + PF_POW(hls.H - infoP->target_hls.H, 2) + + PF_POW(hls.L - infoP->target_hls.L, 2) + + PF_POW(hls.S - infoP->target_hls.S, 2)) + / PF_SQRT(3) + ); + v = (A_long)(v2 * PF_MAX_CHAN8 + 0.5); + */ + break; + case 1: + default: + v = MAX(MAX(r, g), b); + break; + } + //------------ + if (infoP->target_softness == 0) { + if (v >= infoP->target_border) { + v = PF_MAX_CHAN8; + } + else { + v = 0; + } + } + else { + if (v <= infoP->target_start) { + v = 0; + } + else if (v >= infoP->target_border) { + v = PF_MAX_CHAN8; + } + else { + v = (v - infoP->target_start)*PF_MAX_CHAN8 / (infoP->target_softness); + } + + } + + + c.alpha = RoundByteLong(v); + + c.red = RoundByteLong(inP->red * v / PF_MAX_CHAN8); + c.green = RoundByteLong(inP->green * v / PF_MAX_CHAN8); + c.blue = RoundByteLong(inP->blue * v / PF_MAX_CHAN8); + + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaON( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + + + outP->alpha = PF_MAX_CHAN8; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +RevCopyAtoG( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + + PF_Pixel c = { 0,0,0,0 }; + c.green = PF_MAX_CHAN8 - outP->alpha; + c.alpha = outP->alpha; + + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHor8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org; + A_long hor; + for (A_long y = 0; y < pi->height; y++) + { + hor = y * pi->widthTrue; + for (A_long x = 0; x < pi->width; x++) { + pi->scanline[x] = data[x + hor].green; + } + for (A_long x = 0; x < pi->width; x++) { + org = pi->scanline[x]; + mx1 = mx2 = 0; + if (x > 0) { + mx1 = pi->scanline[x-1]; + } + if (x < pi->width-1) { + mx2 = pi->scanline[x + 1]; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1/2; + if (org > mx1) org = mx1; + data[x + hor].green = RoundByteLong(org); + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVer8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org; + A_long hor; + for (A_long x = 0; x < pi->width; x++) + { + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + pi->scanline[y] = data[x + hor].green; + hor += pi->widthTrue; + } + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + org = pi->scanline[y]; + mx1 = mx2 = 0; + if (y > 0) { + mx1 = pi->scanline[y - 1]; + } + if (y < pi->height - 1) { + mx2 = pi->scanline[y + 1]; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1 / 2; + if (org > mx1) org = mx1; + data[x + hor].green = RoundByteLong(org); + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +RevSubGtoA( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + + PF_Pixel c = { PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8 }; + + A_long g = outP->green; + A_long a = outP->alpha; + + c.alpha = RoundByteLong(a - (PF_MAX_CHAN8 - g)); + + + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam8(CFsAE *ae, ParamInfo *infoP, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + + pi->width = ae->out->width(); + pi->widthTrue = ae->out->widthTrue(); + pi->height = ae->out->height(); + pi->data = (PF_Pixel8 *)ae->out->data(); + pi->in_data = ae->in_data; + + pi->bufSize = pi->width; + if (pi->bufSize < pi->height) pi->bufSize = pi->height; + + pi->info = *infoP; + pi->info.target_color = infoP->target_color; + + PF_PixelFloat pf = CONV8TO32(pi->info.target_color); + pi->taget_lab = RgbToLab(pf); + + pi->target_border = (A_long)(infoP->target_border*PF_MAX_CHAN8); + pi->target_softness = (A_long)(infoP->target_softness*PF_MAX_CHAN8); + pi->target_start = pi->target_border - pi->target_softness; + if (pi->target_start < 0) { + pi->target_start = 0; + pi->target_softness = pi->target_border - pi->target_start; + } + + pi->si.lenHor = (A_long)((double)pi->info.horLength * pi->info.length + 0.5); + pi->si.lenVer = (A_long)((double)pi->info.verLength * pi->info.length + 0.5); + pi->si.lenDia = (A_long)((double)pi->info.diaLength * pi->info.length + 0.5); + pi->si.horOpa = pi->info.horOpacity * pi->info.opacity; + pi->si.verOpa = pi->info.verOpacity * pi->info.opacity; + pi->si.diaOpa = pi->info.diaOpacity * pi->info.opacity; + + pi->si.lenMax = pi->si.lenHor; + if (pi->si.lenMax > pi->si.lenVer) pi->si.lenMax = pi->si.lenVer; + if (pi->si.lenMax > pi->si.lenDia) pi->si.lenMax = pi->si.lenDia; + + pi->si.rot = pi->info.rot; + if (pi->info.autoRolling == TRUE) + { + double time = ((double)ae->in_data->current_time / (double)ae->in_data->time_scale); + pi->si.rot = (PF_Fixed)(pi->info.rollingSpeed*time * 65536.0); + + + } + pi->si.rot %= (360 * 65536); + if (pi->si.rot < 0) { + pi->si.rot += (360 * 65536); + } + + + CRotCalc rot(ae->in_data); + rot.SetRotLength(pi->si.rot, pi->si.lenHor << 16); + pi->si.horAddX = rot.xFLT() / pi->si.lenHor; + pi->si.horAddY = rot.yFLT() / pi->si.lenHor; + + rot.SetRotLength(pi->si.rot- 90*65536, pi->si.lenVer << 16); + pi->si.verAddX = rot.xFLT() / pi->si.lenVer; + pi->si.verAddY = rot.yFLT() / pi->si.lenVer; + + rot.SetRotLength(pi->si.rot - 45 * 65536, pi->si.lenDia << 16); + pi->si.diaAddX = rot.xFLT() / pi->si.lenDia; + pi->si.diaAddY = rot.yFLT() / pi->si.lenDia; + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarExec8(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ParamInfo8 pi; + + ToParam8(ae, infoP, &pi); + /* + pi.bufH = ae->NewHandle(pi.bufSize * sizeof(A_u_char) + (pi.si.lenHor+ pi.si.lenVer + pi.si.lenDia)* sizeof(PF_Pixel)+ 1024); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.scanline = *(A_u_char**)pi.bufH; + pi.horTable = *(PF_Pixel**)(pi.scanline + pi.bufSize); + pi.verTable = (pi.horTable + pi.si.lenHor); + pi.diaTable = (pi.verTable + pi.si.lenVer); + */ + //ターゲットエリア + ERR(ae->iterate8((refconType)&pi, TargetPixel8)); + if (pi.info.target_maskDraw) { + ae->out->fromBlackMat8(); + return err; + } + + /** + //Gへ反転してコピー + ERR(ae->iterate8((refconType)&pi, RevCopyAtoG)); + //拡張 + ERR(MaxHor8(ae, &pi)); + ERR(MaxVer8(ae, &pi)); + ERR(MaxHor8(ae, &pi)); + ERR(MaxVer8(ae, &pi)); + ERR(MaxHor8(ae, &pi)); + ERR(MaxVer8(ae, &pi)); + ERR(MaxHor8(ae, &pi)); + ERR(MaxVer8(ae, &pi)); + ERR(ae->iterate8((refconType)&pi, RevSubGtoA)); + */ + + + //デバッグ用 + //ERR(ae->iterate8((refconType)&pi, AlphaON)); + + /*if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + }*/ + + return err; + +} \ No newline at end of file diff --git a/ColorMatKey/Fs_Entry.h b/ColorMatKey/Fs_Entry.h new file mode 100644 index 0000000..93d2e26 --- /dev/null +++ b/ColorMatKey/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + ColorMatKeyKey for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/ColorMatKey/Fs_Target.h b/ColorMatKey/Fs_Target.h new file mode 100644 index 0000000..b6b45df --- /dev/null +++ b/ColorMatKey/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ColorMatKey" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "カラーマットキー" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/ColorMatKey/Win/ColorMatKey.sln b/ColorMatKey/Win/ColorMatKey.sln new file mode 100644 index 0000000..ae328ce --- /dev/null +++ b/ColorMatKey/Win/ColorMatKey.sln @@ -0,0 +1,36 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorMatKey", "ColorMatKey.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Release-MD|x64 = Release-MD|x64 + Release-MD|x86 = Release-MD|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x64.Build.0 = Release-MD|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x86.ActiveCfg = Release-MD|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x86.Build.0 = Release-MD|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1E189C36-BAE5-43EF-B0ED-7F5C2E341BE8} + EndGlobalSection +EndGlobal diff --git a/ColorMatKey/Win/ColorMatKey.vcxproj b/ColorMatKey/Win/ColorMatKey.vcxproj new file mode 100644 index 0000000..6bc7123 --- /dev/null +++ b/ColorMatKey/Win/ColorMatKey.vcxproj @@ -0,0 +1,592 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE} + ColorMatKey + ColorMatKey + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorMatKey.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorMatKey.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorMatKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ColorMatKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorMatKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ColorMatKey.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/ColorMatKey/Win/ColorMatKey.vcxproj.filters b/ColorMatKey/Win/ColorMatKey.vcxproj.filters new file mode 100644 index 0000000..9b5a034 --- /dev/null +++ b/ColorMatKey/Win/ColorMatKey.vcxproj.filters @@ -0,0 +1,187 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/ColorMatKey/Win/ColorMatKeyPiPL.rc b/ColorMatKey/Win/ColorMatKeyPiPL.rc new file mode 100644 index 0000000..f41c86b --- /dev/null +++ b/ColorMatKey/Win/ColorMatKeyPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's ColorMatKey", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's ColorMatKey", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ColorMatKey/Win/ColorMatPiPL.rc b/ColorMatKey/Win/ColorMatPiPL.rc new file mode 100644 index 0000000..1a106e0 --- /dev/null +++ b/ColorMatKey/Win/ColorMatPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0CF's ColorMat\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0CF's ColorMat\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ColorMatKey/Win/PropertySheet.props b/ColorMatKey/Win/PropertySheet.props new file mode 100644 index 0000000..7429103 --- /dev/null +++ b/ColorMatKey/Win/PropertySheet.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESDK) + true + + + \ No newline at end of file diff --git a/ColorMatKey/Win/PropertySheet1.props b/ColorMatKey/Win/PropertySheet1.props new file mode 100644 index 0000000..550f87d --- /dev/null +++ b/ColorMatKey/Win/PropertySheet1.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESED) + true + + + \ No newline at end of file diff --git a/ColorMatKey/Win/Star_ColorfulPiPL.rc b/ColorMatKey/Win/Star_ColorfulPiPL.rc new file mode 100644 index 0000000..6cda26d --- /dev/null +++ b/ColorMatKey/Win/Star_ColorfulPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x11F's Star_Colorful\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x11F's Star_Colorful\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/CreateAlpha/CreateAlpha.cpp b/CreateAlpha/CreateAlpha.cpp new file mode 100644 index 0000000..355cb5c --- /dev/null +++ b/CreateAlpha/CreateAlpha.cpp @@ -0,0 +1,380 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "CreateAlpha.h" + +//------------------------------------------------------------------------------------------------- +//About表示 +static PF_Err About ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + //PF_ParamDef def; + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_NOISE_FRAME,&b)); + ERR(ae.UI_DISABLE(ID_NOISE_OFFSET, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + /* + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_NOISE_FRAME,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + if ( outP->alphared = RoundByteLong( outP->red * outP->alpha / PF_MAX_CHAN8); + outP->green = RoundByteLong( outP->green * outP->alpha / PF_MAX_CHAN8); + outP->blue = RoundByteLong( outP->blue * outP->alpha / PF_MAX_CHAN8); + } + outP->alpha = MAX(outP->red,MAX(outP->green,outP->blue)); + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + if ( outP->alphared = RoundShort( outP->red * outP->alpha / PF_MAX_CHAN16); + outP->green = RoundShort( outP->green * outP->alpha / PF_MAX_CHAN16); + outP->blue = RoundShort( outP->blue * outP->alpha / PF_MAX_CHAN16); + } + outP->alpha = MAX(outP->red,MAX(outP->green,outP->blue)); + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + if ( outP->alpha<1.0){ + outP->red = RoundFpShort( outP->red * outP->alpha); + outP->green = RoundFpShort( outP->green * outP->alpha); + outP->blue = RoundFpShort( outP->blue * outP->alpha); + } + outP->alpha = MAX(outP->red,MAX(outP->green,outP->blue)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32(NULL,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16(NULL,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8(NULL,FilterImage8)); + break; + } + ae->premultiply(0); + return err; +} + + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(Exec(&ae)); + } + return err; + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_dataP,out_dataP,extraP,0,ID_NUM_PARAMS); + err = ae.resultErr(); + ERR(ae.UnSetPreRenderData()); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ERR(Exec(&ae)); + ERR2(ae.UnsetSmartRender()); + } + return err; + +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/CreateAlpha/CreateAlpha.h b/CreateAlpha/CreateAlpha.h new file mode 100644 index 0000000..078deb1 --- /dev/null +++ b/CreateAlpha/CreateAlpha.h @@ -0,0 +1,64 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 + +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef CreateAlpha_H +#define CreateAlpha_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_NUM_PARAMS + }; + +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + +#endif // CreateAlpha_H diff --git a/CreateAlpha/CreateAlphaPiPL.r b/CreateAlpha/CreateAlphaPiPL.r new file mode 100644 index 0000000..17e03e2 --- /dev/null +++ b/CreateAlpha/CreateAlphaPiPL.r @@ -0,0 +1,78 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/CreateAlpha/Fs_Target.h b/CreateAlpha/Fs_Target.h new file mode 100644 index 0000000..ea62cad --- /dev/null +++ b/CreateAlpha/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 + +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's CreateAlpha" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "Unmultと同じ" + + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 2 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + + +//上の値を計算した結果 +#define FS_VERSION 591360 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/CreateAlpha/Win/CreateAlpha.vcxproj b/CreateAlpha/Win/CreateAlpha.vcxproj new file mode 100644 index 0000000..755ea7c --- /dev/null +++ b/CreateAlpha/Win/CreateAlpha.vcxproj @@ -0,0 +1,328 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8} + CreateAlpha + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CreateAlpha.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CreateAlpha.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/CreateAlpha.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/CreateAlpha/Win/CreateAlpha.vcxproj.filters b/CreateAlpha/Win/CreateAlpha.vcxproj.filters new file mode 100644 index 0000000..953f556 --- /dev/null +++ b/CreateAlpha/Win/CreateAlpha.vcxproj.filters @@ -0,0 +1,145 @@ + + + + + {15ecbf35-e4c5-4a2b-87b8-cd0e93e47e18} + h;hpp;hxx;hm;inl;fi;fd + + + {0318c110-00d3-4a8d-b97b-c3fde5aff6a9} + + + {36a4108b-c3d5-4568-b818-b61d3bc1a79d} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {c8121edc-d69e-40ff-bdf3-3d15e6b68b4d} + + + {9923c519-ee52-40e3-9550-739af43016ed} + + + {8662361a-aa8e-48dd-bd8c-9a995d4e0744} + + + {d651e594-ead0-410a-b614-e6086b40c388} + + + {8ac9f5ff-7e3a-41ca-9e4a-c0d0675b794e} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/CreateAlpha/Win/CreateAlphaPiPL.rc b/CreateAlpha/Win/CreateAlphaPiPL.rc new file mode 100644 index 0000000..e39bd3e --- /dev/null +++ b/CreateAlpha/Win/CreateAlphaPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's CreateAlpha", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 591360L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's CreateAlpha", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/EdgeBlur/EdgeBlur.cpp b/EdgeBlur/EdgeBlur.cpp new file mode 100644 index 0000000..5ad9eff --- /dev/null +++ b/EdgeBlur/EdgeBlur.cpp @@ -0,0 +1,434 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "EdgeBlur.h" + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_BLUR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 0, //デフォルトの値 + ID_BLUR + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_OFFSET, //パラメータの名前 + -50, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + -36, //スライダーの最小値 + 36, //スライダーの最大値 + 0, //デフォルトの値 + ID_OFFSET + ); + + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_NOISE_FRAME,&b)); + ERR(ae.UI_DISABLE(ID_NOISE_OFFSET, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + /* + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_NOISE_FRAME,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_BLUR,&infoP->blur)); + ERR(ae->GetADD(ID_OFFSET,&infoP->offset)); + + infoP->offset = infoP->blur + infoP->offset; + if (infoP->offset<0) infoP->offset = 0; + + infoP->blur = ae->downScaleNoClip(infoP->blur); + infoP->offset = ae->downScaleNoClip(infoP->offset); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetEdgeBlurParams(CFsAE *ae, ParamInfo *infoP,edgeBlurPrm *ep) +{ + PF_Err err = PF_Err_NONE; + ep->blur = infoP->blur; + ep->offset = infoP->offset; + ep->data = ae->output->data; + ep->width = ae->output->width; + ep->height = ae->output->height; + ep->in_data = ae->in_data; + if ( ep->width>=ep->height){ + ep->scanlineWidth = ep->width; + }else{ + ep->scanlineWidth = ep->height; + } + ep->scanlineH = NULL; + ep->data = ae->output->data; + ep->in_data = ae->in_data; + ep->widthTrue = ae->out->widthTrue(); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , edgeBlurPrm *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + //--------------- + //描画実行 + if (infoP->blur>0){ + switch(ae->pixelFormat()){ + case PF_PixelFormat_ARGB128: + infoP->scanlineH = ae->NewHandle(infoP->scanlineWidth *sizeof(PF_FpShort)*3/2); + if (infoP->scanlineH) { + EdgeBlurSub32(infoP); + }else{ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + break; + case PF_PixelFormat_ARGB64: + infoP->scanlineH = ae->NewHandle(infoP->scanlineWidth *sizeof(A_u_short)*3/2); + if (infoP->scanlineH) { + EdgeBlurSub16(infoP); + }else{ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + break; + case PF_PixelFormat_ARGB32: + infoP->scanlineH = ae->NewHandle(infoP->scanlineWidth *sizeof(A_u_char)*3/2); + if (infoP->scanlineH) { + EdgeBlurSub8(infoP); + }else{ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + if (!err){ + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + } + } + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo info; + ERR(GetParams(&ae,&info)); + edgeBlurPrm ep; + ERR(GetEdgeBlurParams(&ae,&info,&ep)); + ERR(Exec(&ae,&ep)); + } + return err; +} + +//----------------------------------------------------------------------------------- +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + edgeBlurPrm ep; + ERR(GetEdgeBlurParams(&ae,infoP,&ep)); + ERR(Exec(&ae,&ep)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/EdgeBlur/EdgeBlur.h b/EdgeBlur/EdgeBlur.h new file mode 100644 index 0000000..8a24546 --- /dev/null +++ b/EdgeBlur/EdgeBlur.h @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef EdgeBlur_H +#define EdgeBlur_H + + + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + + + +//----------------------------------------------------------------------------------- + +//----------------------------------------------------------------------------------- + +#define STR_BLUR "blur" +#define STR_OFFSET "offset" + +//----------------------------------------------------------------------------------- +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_BLUR, // + ID_OFFSET, // + ID_NUM_PARAMS + }; + +//----------------------------------------------------------------------------------- + +typedef struct ParamInfo{ + A_long blur; + A_long offset; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//----------------------------------------------------------------------------------- +typedef struct edgeBlurPrm +{ + PF_InData *in_data; + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; + A_long scanlineWidth; + PF_Handle scanlineH; + A_long gf[301]; + A_long blur; + A_long offset; +}edgeBlurPrm; + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + +//------------------------------------------------------------------------------------------------- +PF_Err EdgeBlurSub8(edgeBlurPrm *prm); +PF_Err EdgeBlurSub16(edgeBlurPrm *prm); +PF_Err EdgeBlurSub32(edgeBlurPrm *prm); + +//------------------------------------------------------------------------------------------------- + +#endif // EdgeBlur_H diff --git a/EdgeBlur/EdgeBlurPiPL.r b/EdgeBlur/EdgeBlurPiPL.r new file mode 100644 index 0000000..775146a --- /dev/null +++ b/EdgeBlur/EdgeBlurPiPL.r @@ -0,0 +1,72 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + FS_CATEGORY + }, +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/EdgeBlur/EdgeBlurSub16.cpp b/EdgeBlur/EdgeBlurSub16.cpp new file mode 100644 index 0000000..23ee7c9 --- /dev/null +++ b/EdgeBlur/EdgeBlurSub16.cpp @@ -0,0 +1,247 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + +#include "EdgeBlur.h" + +typedef struct edgeBlurPrmSub16 +{ + A_long blur; + A_long offset; + A_long tbl[451]; + PF_Pixel16 *data; + A_u_short *scanline; + A_long width; + A_long height; + A_long widthTrue; + PF_InData *in_data; +}edgeBlurPrmSub16; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl(edgeBlurPrm *prm, edgeBlurPrmSub16 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur; + if ( range<=0) return FALSE; + double zone = (double)range/3; + for (A_long i = 0; i <= range; i++) { + sub->tbl[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +void horMin(edgeBlurPrmSub16 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + + A_long minIndex = -1; + A_u_short minValue = PF_MAX_CHAN16; + for ( x=0; xwidth; x++){ + A_long start = x - sub->offset; + A_long end = x + sub->offset; + if ( (start<0)||(end>=sub->width)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = PF_MAX_CHAN16; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor + x].alpha = minValue; + } + } + +} +//---------------------------------------------------------------------------- +void verMin(edgeBlurPrmSub16 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + + A_long minIndex = -1; + A_u_short minValue = PF_MAX_CHAN16; + hor =x; + for ( y=0; yheight; y++){ + A_long start = y - sub->offset; + A_long end = y + sub->offset; + if ( (start<0)||(end>=sub->height)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = PF_MAX_CHAN16; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor].alpha = minValue; + hor += sub->widthTrue; + } + } + +} +//---------------------------------------------------------------------------- + +void horBlur(edgeBlurPrmSub16 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss,sa; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + for ( x=0; xwidth; x++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[x] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = x-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = x + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor + x].alpha = RoundShort(sa/count); + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur(edgeBlurPrmSub16 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss,sa; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[y] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = y-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = y + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor].alpha = RoundShort(sa/count); + } + hor += sub->widthTrue; + } + } + +} + +//---------------------------------------------------------------------------- + +PF_Err EdgeBlurSub16(edgeBlurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + edgeBlurPrmSub16 sub; + sub.data = (PF_Pixel16 *)prm->data; + sub.scanline =*(A_u_short **)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + sub.in_data = prm->in_data; + + sub.blur = prm->blur; + sub.offset = prm->offset; + + if ( sub.offset>0){ + horMin(&sub); + verMin(&sub); + } + if ( makeTbl(prm, &sub) == FALSE) return err; + + horBlur(&sub); + verBlur(&sub); + + + return err; +} +//---------------------------------------------------------------------------- diff --git a/EdgeBlur/EdgeBlurSub32.cpp b/EdgeBlur/EdgeBlurSub32.cpp new file mode 100644 index 0000000..76ac1f5 --- /dev/null +++ b/EdgeBlur/EdgeBlurSub32.cpp @@ -0,0 +1,249 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + +#include "EdgeBlur.h" + +typedef struct edgeBlurPrmSub32 +{ + A_long blur; + A_long offset; + A_long tbl[451]; + PF_PixelFloat *data; + PF_FpShort *scanline; + A_long width; + A_long height; + A_long widthTrue; + PF_InData *in_data; +}edgeBlurPrmSub32; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl(edgeBlurPrm *prm, edgeBlurPrmSub32 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur; + if ( range<=0) return FALSE; + double zone = (double)range/3; + for (A_long i = 0; i <= range; i++) { + sub->tbl[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +void horMin(edgeBlurPrmSub32 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + + A_long minIndex = -1; + PF_FpShort minValue = 1; + for ( x=0; xwidth; x++){ + A_long start = x - sub->offset; + A_long end = x + sub->offset; + if ( (start<0)||(end>=sub->width)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = 1; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor + x].alpha = minValue; + } + } + +} +//---------------------------------------------------------------------------- +void verMin(edgeBlurPrmSub32 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + + A_long minIndex = -1; + PF_FpShort minValue = 1; + hor =x; + for ( y=0; yheight; y++){ + A_long start = y - sub->offset; + A_long end = y + sub->offset; + if ( (start<0)||(end>=sub->height)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = 1; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor].alpha = minValue; + hor += sub->widthTrue; + } + } + +} +//---------------------------------------------------------------------------- + +void horBlur(edgeBlurPrmSub32 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss; + double sa; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + for ( x=0; xwidth; x++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[x] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = x-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = x + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor + x].alpha = RoundFpShortDouble(sa/count); + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur(edgeBlurPrmSub32 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss; + double sa; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[y] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = y-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = y + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor].alpha = RoundFpShortDouble(sa/count); + } + hor += sub->widthTrue; + } + } + +} + +//---------------------------------------------------------------------------- + +PF_Err EdgeBlurSub32(edgeBlurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + edgeBlurPrmSub32 sub; + sub.data = (PF_PixelFloat *)prm->data; + sub.scanline =*(PF_FpShort **)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + sub.in_data = prm->in_data; + + sub.blur = prm->blur; + sub.offset = prm->offset; + + if ( sub.offset>0){ + horMin(&sub); + verMin(&sub); + } + if ( makeTbl(prm, &sub) == FALSE) return err; + + horBlur(&sub); + verBlur(&sub); + + + return err; +} +//---------------------------------------------------------------------------- diff --git a/EdgeBlur/EdgeBlurSub8.cpp b/EdgeBlur/EdgeBlurSub8.cpp new file mode 100644 index 0000000..39d967b --- /dev/null +++ b/EdgeBlur/EdgeBlurSub8.cpp @@ -0,0 +1,247 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + +#include "EdgeBlur.h" + +typedef struct edgeBlurPrmSub8 +{ + A_long blur; + A_long offset; + A_long tbl[451]; + PF_Pixel8 *data; + A_u_char *scanline; + A_long width; + A_long height; + A_long widthTrue; + PF_InData *in_data; +}edgeBlurPrmSub8; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl(edgeBlurPrm *prm, edgeBlurPrmSub8 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur; + if ( range<=0) return FALSE; + double zone = (double)range/3; + for (A_long i = 0; i <= range; i++) { + sub->tbl[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +void horMin(edgeBlurPrmSub8 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + + A_long minIndex = -1; + A_u_char minValue = 0xFF; + for ( x=0; xwidth; x++){ + A_long start = x - sub->offset; + A_long end = x + sub->offset; + if ( (start<0)||(end>=sub->width)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = 0xFF; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor + x].alpha = minValue; + } + } + +} +//---------------------------------------------------------------------------- +void verMin(edgeBlurPrmSub8 *sub) +{ + A_long hor =0; + A_long i; + A_long x=0, y=0; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + + A_long minIndex = -1; + A_u_char minValue = 0xFF; + hor =x; + for ( y=0; yheight; y++){ + A_long start = y - sub->offset; + A_long end = y + sub->offset; + if ( (start<0)||(end>=sub->height)){ + minValue = 0; + minIndex = -1; + }else if((minIndex>=start)&&(minIndex<=end)){ + if ( sub->scanline[end]<=sub->scanline[minIndex]){ + minValue = sub->scanline[end]; + minIndex = end; + }else{ + minValue = sub->scanline[minIndex]; + } + }else{ + minValue = 0xFF; + for ( i= start; i<=end; i++){ + if ( sub->scanline[i] == 0){ + minValue = 0; + minIndex = i; + break; + } + if ( minValue > sub->scanline[i])minValue = sub->scanline[i]; + } + } + sub->data[hor].alpha = minValue; + hor += sub->widthTrue; + } + } + +} +//---------------------------------------------------------------------------- + +void horBlur(edgeBlurPrmSub8 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss,sa; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x].alpha; + for ( x=0; xwidth; x++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[x] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = x-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = x + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor + x].alpha = RoundByteLong(sa/count); + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur(edgeBlurPrmSub8 *sub) +{ + A_long hor =0; + A_long ir,il,i; + A_long x=0, y=0; + A_long count, gauss,sa; + hor =0; + for ( x=0; xwidth; x++) + { + hor = x; + //スキャンラインへ転送 + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor].alpha; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + count = gauss = 0; + sa = 0; + //真ん中 + gauss = sub->tbl[0]; + sa += sub->scanline[y] * gauss; + count += gauss; + for (i=1; i<=sub->blur;i++) + { + il = y-i; + gauss = sub->tbl[i]; + if ( il>=0) { + sa += sub->scanline[il] * gauss; + } + count += gauss; + ir = y + i; + if ( irwidth) { + sa += sub->scanline[ir] * gauss; + } + count += gauss; + } + if (count>0){ + sub->data[hor].alpha = RoundByteLong(sa/count); + } + hor += sub->widthTrue; + } + } + +} + +//---------------------------------------------------------------------------- + +PF_Err EdgeBlurSub8(edgeBlurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + edgeBlurPrmSub8 sub; + sub.data = (PF_Pixel8 *)prm->data; + sub.scanline =*(A_u_char **)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + sub.in_data = prm->in_data; + + sub.blur = prm->blur; + sub.offset = prm->offset; + + if ( sub.offset>0){ + horMin(&sub); + verMin(&sub); + } + if ( makeTbl(prm, &sub) == FALSE) return err; + + horBlur(&sub); + verBlur(&sub); + + + return err; +} +//---------------------------------------------------------------------------- diff --git a/EdgeBlur/Fs_Target.h b/EdgeBlur/Fs_Target.h new file mode 100644 index 0000000..a9b552e --- /dev/null +++ b/EdgeBlur/Fs_Target.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's EdgeBlur" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "画像の縁をぼかします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 +///----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/EdgeBlur/Win/EdgeBlur.vcxproj b/EdgeBlur/Win/EdgeBlur.vcxproj new file mode 100644 index 0000000..1f003fc --- /dev/null +++ b/EdgeBlur/Win/EdgeBlur.vcxproj @@ -0,0 +1,329 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {AB06F139-C65E-4DA0-8226-59DA70145BC7} + EdgeBlur + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeBlur.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeBlur.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + true + true + + + + + + + + + \ No newline at end of file diff --git a/EdgeBlur/Win/EdgeBlur.vcxproj.filters b/EdgeBlur/Win/EdgeBlur.vcxproj.filters new file mode 100644 index 0000000..426e688 --- /dev/null +++ b/EdgeBlur/Win/EdgeBlur.vcxproj.filters @@ -0,0 +1,148 @@ + + + + + {70788970-d287-4131-818e-b466849f2f68} + h;hpp;hxx;hm;inl;fi;fd + + + {d3136445-88de-427a-b573-5e3dfe9e9007} + + + {2c38d4d2-5c1a-4376-b4cf-65cb24dbe1f4} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {bc4ae318-87e8-4876-a2a8-29580f0b098e} + + + {cd63aca4-a9d3-4d5a-afb0-bbe9026cdb9e} + + + {3cd45b70-28cf-461a-9eb7-ef5f4e0f1502} + + + {4612cebf-75bb-498b-88cf-cd64df3e7bbb} + + + {65e07f3a-66a8-410c-b8ba-630ac581184a} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/EdgeBlur/Win/EdgeBlurPiPL.rc b/EdgeBlur/Win/EdgeBlurPiPL.rc new file mode 100644 index 0000000..9cfcf20 --- /dev/null +++ b/EdgeBlur/Win/EdgeBlurPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0CF's EdgeBlur\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0CF's EdgeBlur\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/EdgeLine/EdgeLine.cpp b/EdgeLine/EdgeLine.cpp new file mode 100644 index 0000000..25295d5 --- /dev/null +++ b/EdgeLine/EdgeLine.cpp @@ -0,0 +1,370 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "EdgeLine.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET, + 0xFF, + 0x00, + 0x00, + ID_TARGET_COL + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SAMPLE, + 0x00, + 0xFF, + 0x00, + ID_SAMPLE_COL + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 10, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LEVEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 20, //スライダーの最大値 + 10, //デフォルトの値 + ID_LENGTH + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_DRAW, + 0x00, + 0x00, + 0xFF, + ID_DRAW_COL + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + return PF_Err_NONE; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCOLOR(ID_TARGET_COL,&infoP->targetCol)); + ERR(ae->GetCOLOR(ID_SAMPLE_COL,&infoP->sampleCol)); + PF_FpLong v; + ERR(ae->GetFLOAT(ID_LEVEL,&v)); + if(!err){ + infoP->level = (A_u_char)(PF_MAX_CHAN8 * v); + } + ERR(ae->GetADD(ID_LENGTH,&infoP->length)); + if (infoP->length>0){ + infoP->length = ae->downScale(infoP->length); + } + ERR(ae->GetCOLOR(ID_DRAW_COL,&infoP->drawCol)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo16 convTo16(ParamInfo8 *info) +{ + ParamInfo16 ret; + ret.targetCol = info->targetCol; + ret.sampleCol = info->sampleCol; + ret.level = info->level; + ret.length = info->length; + ret.drawCol = CONV8TO16(info->drawCol); + ret.w = info->w; + ret.ae = info->ae; + return ret; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo32 convTo32(ParamInfo8 *info) +{ + ParamInfo32 ret; + ret.targetCol = info->targetCol; + ret.sampleCol = info->sampleCol; + ret.level = info->level; + ret.length = info->length; + ret.drawCol = CONV8TO32(info->drawCol); + ret.w = info->w; + ret.ae = info->ae; + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * niP = reinterpret_cast(refcon); + if (compPix8Lv(*inP,niP->targetCol,niP->level)==FALSE) return err; + + int x0 = xL - niP->length; + if (x0<0) x0=0; + int x1 = xL + niP->length; + if (x1>=niP->w) x1 = niP->w -1; + int y0 = yL - niP->length; + if (y0<0) x0=0; + int y1 = yL + niP->length; + if (y1>=niP->h) y1 = niP->h -1; + + for ( int y = y0; y<=y1; y++){ + for ( int x = x0; x<=x1; x++){ + if (compPix8Lv(niP->ae->in->getPixel8(x,y),niP->sampleCol,niP->level)==TRUE) { + *outP = niP->drawCol; + break; + } + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * niP = reinterpret_cast(refcon); + if (compPix16_8Lv(*inP,niP->targetCol,niP->level)==FALSE) return err; + + int x0 = xL - niP->length; + if (x0<0) x0=0; + int x1 = xL + niP->length; + if (x1>=niP->w) x1 = niP->w -1; + int y0 = yL - niP->length; + if (y0<0) x0=0; + int y1 = yL + niP->length; + if (y1>=niP->h) y1 = niP->h -1; + + for ( int y = y0; y<=y1; y++){ + for ( int x = x0; x<=x1; x++){ + if (compPix16_8Lv(niP->ae->in->getPixel16(x,y),niP->sampleCol,niP->level)==TRUE) { + *outP = niP->drawCol; + break; + } + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * niP = reinterpret_cast(refcon); + if (compPix32_8Lv(*inP,niP->targetCol,niP->level)==FALSE) return err; + + int x0 = xL - niP->length; + if (x0<0) x0=0; + int x1 = xL + niP->length; + if (x1>=niP->w) x1 = niP->w -1; + int y0 = yL - niP->length; + if (y0<0) x0=0; + int y1 = yL + niP->length; + if (y1>=niP->h) y1 = niP->h -1; + + for ( int y = y0; y<=y1; y++){ + for ( int x = x0; x<=x1; x++){ + if (compPix32_8Lv(niP->ae->in->getPixel32(x,y),niP->sampleCol,niP->level)==TRUE) { + *outP = niP->drawCol; + break; + } + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if ( infoP->length<=0) + { + return err; + } + infoP->ae = ae; + infoP->w = ae->in->width(); + infoP->h = ae->in->height(); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ParamInfo32 info32; + info32 = convTo32(infoP); + ERR(ae->iterate32((refconType)&info32,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + info16 = convTo16(infoP); + ERR(ae->iterate16((refconType)&info16,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + + + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo8 info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo8),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/EdgeLine/EdgeLine.h b/EdgeLine/EdgeLine.h new file mode 100644 index 0000000..5c9fa69 --- /dev/null +++ b/EdgeLine/EdgeLine.h @@ -0,0 +1,112 @@ +//----------------------------------------------------------------------------------- +/* + EdgeLine for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef EdgeLine_H +#define EdgeLine_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_TARGET_COL, + ID_SAMPLE_COL, + ID_LEVEL, + ID_LENGTH, + ID_DRAW_COL, + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_TARGET "TargetColor" +#define STR_SAMPLE "SampleColor" +#define STR_LEVEL "level(%)" +#define STR_LENGTH "length(px)" +#define STR_DRAW "DrawColor" + + +//UIのパラメータ +typedef struct ParamInfo8 { + PF_Pixel targetCol; + PF_Pixel sampleCol; + A_u_char level; + A_long length; + PF_Pixel drawCol; + A_long w; + A_long h; + CFsAE *ae; + +} ParamInfo8; + +typedef struct ParamInfo16 { + PF_Pixel targetCol; + PF_Pixel sampleCol; + A_u_char level; + A_long length; + PF_Pixel16 drawCol; + A_long w; + A_long h; + CFsAE *ae; +} ParamInfo16; + +typedef struct ParamInfo32 { + PF_Pixel targetCol; + PF_Pixel sampleCol; + A_u_char level; + A_long length; + PF_PixelFloat drawCol; + A_long w; + A_long h; + CFsAE *ae; +} ParamInfo32; +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // EdgeLine_H diff --git a/EdgeLine/EdgeLinePiPL.r b/EdgeLine/EdgeLinePiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/EdgeLine/EdgeLinePiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/EdgeLine/Fs_Entry.h b/EdgeLine/Fs_Entry.h new file mode 100644 index 0000000..ddf1c4f --- /dev/null +++ b/EdgeLine/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + EdgeLine for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/EdgeLine/Fs_Target.h b/EdgeLine/Fs_Target.h new file mode 100644 index 0000000..ed91f66 --- /dev/null +++ b/EdgeLine/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's EdgeLine" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "境界線を描く" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/EdgeLine/Win/EdgeLine.vcxproj b/EdgeLine/Win/EdgeLine.vcxproj new file mode 100644 index 0000000..0490645 --- /dev/null +++ b/EdgeLine/Win/EdgeLine.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349} + EdgeLine + EdgeLine + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/EdgeLine.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeLine.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/EdgeLine.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/EdgeLine.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeLine.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/EdgeLine.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/EdgeLine/Win/EdgeLine.vcxproj.filters b/EdgeLine/Win/EdgeLine.vcxproj.filters new file mode 100644 index 0000000..14239cb --- /dev/null +++ b/EdgeLine/Win/EdgeLine.vcxproj.filters @@ -0,0 +1,184 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/EdgeLine/Win/EdgeLinePiPL.rc b/EdgeLine/Win/EdgeLinePiPL.rc new file mode 100644 index 0000000..41ce401 --- /dev/null +++ b/EdgeLine/Win/EdgeLinePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0CF's EdgeLine\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0CF's EdgeLine\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Extract-Hi/Extract-Hi.cpp b/Extract-Hi/Extract-Hi.cpp new file mode 100644 index 0000000..b9314f0 --- /dev/null +++ b/Extract-Hi/Extract-Hi.cpp @@ -0,0 +1,597 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "Extract-Hi.h" + +static PF_FpLong(*levelFunc8)(PF_Pixel8 *col, ParamInfo *infoP); +static PF_FpLong(*levelFunc16)(PF_Pixel16 *col, ParamInfo *infoP); +static PF_FpLong(*levelFunc32)(PF_Pixel32 *col, ParamInfo *infoP); + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_BORDER, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 90, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_BORDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_SOFTNESS, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_SOFTNESS + ); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_TARGET, + STR_TARGET_COUNT, //メニューの数 + STR_TARGET_DFLT, //デフォルト + STR_TARGET_ITEM, + ID_TARGET + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR(STR_CUSTUM_COLOR, + 0xFF, + 0x00, + 0x00, + ID_CUSTUM_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_SUPERVISE | + //PF_ParamFlag_CANNOT_TIME_VARY | + //PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_INVERT, + STR_INVERT_ON, + FALSE, + 0, + ID_INVERT + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelLuminunce8(PF_Pixel8 *col, ParamInfo *infoP) +{ + return ((0.29891 * (PF_FpLong)col->red) + (0.58661 * (PF_FpLong)col->green) + (0.11448 * (PF_FpLong)col->blue ))/PF_MAX_CHAN8; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelLuminunce16(PF_Pixel16 *col, ParamInfo *infoP) +{ + return ((0.29891 * (PF_FpLong)col->red) + (0.58661 * (PF_FpLong)col->green) + (0.11448 * (PF_FpLong)col->blue)) / PF_MAX_CHAN16; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelLuminunce32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_FpLong r = (0.29891 * (PF_FpLong)col->red) + (0.58661 * (PF_FpLong)col->green) + (0.11448 * (PF_FpLong)col->blue); + + if (r < 0) r = 0; else if (r > 1.0) r = 1.0; + + return r; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRed8(PF_Pixel8 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->red - ((PF_FpLong)col->green + (PF_FpLong)col->blue)/2)/PF_MAX_CHAN8; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRed16(PF_Pixel16 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->red - ((PF_FpLong)col->green + (PF_FpLong)col->blue) / 2) / PF_MAX_CHAN16; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRed32(PF_Pixel32 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->red - ((PF_FpLong)col->green + (PF_FpLong)col->blue)/2); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelGreen8(PF_Pixel8 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->green - ((PF_FpLong)col->red + (PF_FpLong)col->blue) / 2) / PF_MAX_CHAN8; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelGreen16(PF_Pixel16 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->green - ((PF_FpLong)col->red + (PF_FpLong)col->blue) / 2) / PF_MAX_CHAN16; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelGreen32(PF_Pixel32 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->green - ((PF_FpLong)col->red + (PF_FpLong)col->blue) / 2); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelBlue8(PF_Pixel8 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->blue - ((PF_FpLong)col->red + (PF_FpLong)col->green) / 2) / PF_MAX_CHAN8; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelBlue16(PF_Pixel16 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->blue - ((PF_FpLong)col->red + (PF_FpLong)col->green) / 2) / PF_MAX_CHAN16; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelBlue32(PF_Pixel32 *col, ParamInfo *infoP) +{ + return ((PF_FpLong)col->blue - ((PF_FpLong)col->red + (PF_FpLong)col->green) / 2); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelCyan8(PF_Pixel8 *col, ParamInfo *infoP) +{ + PF_Pixel8 col2; + col2.red = PF_MAX_CHAN8 - col->red; + col2.green = PF_MAX_CHAN8 - col->green; + col2.blue = PF_MAX_CHAN8 - col->blue; + return levelRed8(&col2,infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelCyan16(PF_Pixel16 *col, ParamInfo *infoP) +{ + PF_Pixel16 col2; + col2.red = PF_MAX_CHAN16 - col->red; + col2.green = PF_MAX_CHAN16 - col->green; + col2.blue = PF_MAX_CHAN16 - col->blue; + return levelRed16(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelCyan32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_Pixel32 col2; + col2.red = (PF_FpShort)(1.0 - col->red); + col2.green = (PF_FpShort)(1.0 - col->green); + col2.blue = (PF_FpShort)(1.0 - col->blue); + if (col2.red < 0) col2.red = 0; + if (col2.green < 0) col2.green = 0; + if (col2.blue < 0) col2.blue = 0; + + return levelRed32(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelMagenta8(PF_Pixel8 *col, ParamInfo *infoP) +{ + PF_Pixel8 col2; + col2.red = PF_MAX_CHAN8 - col->red; + col2.green = PF_MAX_CHAN8 - col->green; + col2.blue = PF_MAX_CHAN8 - col->blue; + return levelGreen8(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelMagenta16(PF_Pixel16 *col, ParamInfo *infoP) +{ + PF_Pixel16 col2; + col2.red = PF_MAX_CHAN16 - col->red; + col2.green = PF_MAX_CHAN16 - col->green; + col2.blue = PF_MAX_CHAN16 - col->blue; + return levelGreen16(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelMagenta32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_Pixel32 col2; + col2.red = (PF_FpShort)(1.0 - col->red); + col2.green = (PF_FpShort)(1.0 - col->green); + col2.blue = (PF_FpShort)(1.0 - col->blue); + if (col2.red < 0) col2.red = 0; + if (col2.green < 0) col2.green = 0; + if (col2.blue < 0) col2.blue = 0; + return levelGreen32(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelYellow8(PF_Pixel8 *col, ParamInfo *infoP) +{ + PF_Pixel8 col2; + col2.red = PF_MAX_CHAN8 - col->red; + col2.green = PF_MAX_CHAN8 - col->green; + col2.blue = PF_MAX_CHAN8 - col->blue; + return levelBlue8(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelYellow16(PF_Pixel16 *col, ParamInfo *infoP) +{ + PF_Pixel16 col2; + col2.red = PF_MAX_CHAN16 - col->red; + col2.green = PF_MAX_CHAN16 - col->green; + col2.blue = PF_MAX_CHAN16 - col->blue; + return levelBlue16(&col2, infoP); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelYellow32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_Pixel32 col2; + col2.red = PF_MAX_CHAN16 - col->red; + col2.green = PF_MAX_CHAN16 - col->green; + col2.blue = PF_MAX_CHAN16 - col->blue; + if (col2.red < 0) col2.red = 0; + if (col2.green < 0) col2.green = 0; + if (col2.blue < 0) col2.blue = 0; + return levelBlue32(&col2, infoP); +} + +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRGBMax8(PF_Pixel8 *col, ParamInfo *infoP) +{ + PF_FpLong v = (PF_FpLong)(MAX(MAX(col->red, col->green), col->blue))/PF_MAX_CHAN8; + + return v; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRGBMax16(PF_Pixel16 *col, ParamInfo *infoP) +{ + PF_FpLong v = (PF_FpLong)(MAX(MAX(col->red, col->green), col->blue)) / PF_MAX_CHAN16; + + return v; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelRGBMax32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_FpLong v = (PF_FpLong)(MAX(MAX(col->red, col->green), col->blue)); + + return v; +} + +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelColor8(PF_Pixel8 *col,ParamInfo *infoP) +{ + PF_FpLong r = (PF_FpLong)col->red / PF_MAX_CHAN8; + PF_FpLong g = (PF_FpLong)col->green / PF_MAX_CHAN8; + PF_FpLong b = (PF_FpLong)col->blue / PF_MAX_CHAN8; + + + PF_FpLong v = sqrt(pow((r - infoP->r), 2) + pow((g - infoP->g), 2) + pow((b - infoP->b), 2)); + v /= sqrt(3); + if (v > 1) v = 1; + v = 1.0 - v; + + return v; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelColor16(PF_Pixel16 *col, ParamInfo *infoP) +{ + PF_FpLong r = (PF_FpLong)col->red / PF_MAX_CHAN16; + PF_FpLong g = (PF_FpLong)col->green / PF_MAX_CHAN16; + PF_FpLong b = (PF_FpLong)col->blue / PF_MAX_CHAN16; + + + PF_FpLong v = sqrt(pow((r - infoP->r), 2) + pow((g - infoP->g), 2) + pow((b - infoP->b), 2)); + v /= sqrt(3); + if (v > 1) v = 1; + v = 1.0 - v; + + return v; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelColor32(PF_Pixel32 *col, ParamInfo *infoP) +{ + PF_FpLong r = (PF_FpLong)col->red; + PF_FpLong g = (PF_FpLong)col->green; + PF_FpLong b = (PF_FpLong)col->blue; + if (r > 1.0) r = 0; + if (g > 1.0) g = 0; + if (b > 1.0) b = 0; + PF_FpLong v = sqrt(pow((r - infoP->r), 2) + pow((g - infoP->g), 2) + pow((b - infoP->b), 2)); + v /= sqrt(3); + if (v > 1) v = 1; + v = 1.0 - v; + + return v; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong levelComp(PF_FpLong v, ParamInfo * infoP) +{ + if (v < 0) v = 0; else if (v > 1.0) v = 1.0; + + + if (v < infoP->low) { + v = 0; + } + else if (v >= infoP->hi) { + v = 1.0; + } + else { + v = (v - infoP->low) / (infoP->hi - infoP->low); + } + if (v < 0) v = 0; else if (v > 1.0) v = 1.0; + + if (infoP->invert == TRUE) { + v = 1.0 - v; + } + return v; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_FpLong v = levelFunc8(outP, niP); + + v = ((PF_FpLong)outP->alpha / PF_MAX_CHAN8) * levelComp(v,niP); + + outP->alpha = RoundByteLong((A_long)(v* PF_MAX_CHAN8 + 0.5)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_FpLong v = levelFunc16(outP, niP); + + v = ((PF_FpLong)outP->alpha / PF_MAX_CHAN16) * levelComp(v, niP); + + outP->alpha = RoundShortFpLong((A_long)(v* PF_MAX_CHAN16 + 0.5)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_FpLong v = levelFunc32(outP, niP); + + v = (PF_FpLong)outP->alpha * levelComp(v, niP); + + outP->alpha = RoundFpShortDouble(v); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpLong b = 90; + PF_FpLong s = 20; + ERR(ae->GetFLOAT(ID_BORDER,&b)); + ERR(ae->GetFLOAT(ID_SOFTNESS,&s)); + + + infoP->hi = b / 100; + infoP->low = (b - s) / 100; + + ERR(ae->GetPOPUP(ID_TARGET, &infoP->taget)); + ERR(ae->GetCOLOR(ID_CUSTUM_COLOR, &infoP->custumColor)); + + infoP->r = (PF_FpLong)infoP->custumColor.red / PF_MAX_CHAN8; + infoP->g = (PF_FpLong)infoP->custumColor.green / PF_MAX_CHAN8; + infoP->b = (PF_FpLong)infoP->custumColor.blue / PF_MAX_CHAN8; + + + ERR(ae->GetCHECKBOX(ID_INVERT,&infoP->invert)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch (infoP->taget) { + case 2: + levelFunc8 = levelRed8; + levelFunc16 = levelRed16; + levelFunc32 = levelRed32; + break; + case 3: + levelFunc8 = levelGreen8; + levelFunc16 = levelGreen16; + levelFunc32 = levelGreen32; + break; + case 4: + levelFunc8 = levelBlue8; + levelFunc16 = levelBlue16; + levelFunc32 = levelBlue32; + break; + case 5: + levelFunc8 = levelCyan8; + levelFunc16 = levelCyan16; + levelFunc32 = levelCyan32; + break; + case 6: + levelFunc8 = levelMagenta8; + levelFunc16 = levelCyan16; + levelFunc32 = levelCyan32; + break; + case 7: + levelFunc8 = levelYellow8; + levelFunc16 = levelLuminunce16; + levelFunc32 = levelLuminunce32; + break; + case 8: + levelFunc8 = levelRGBMax8; + levelFunc16 = levelRGBMax16; + levelFunc32 = levelRGBMax32; + break; + case 9: + levelFunc8 = levelColor8; + levelFunc16 = levelColor16; + levelFunc32 = levelColor32; + break; + case 1: + default: + levelFunc8 = levelLuminunce8; + levelFunc16 = levelLuminunce16; + levelFunc32 = levelLuminunce32; + break; + } + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/Extract-Hi/Extract-Hi.h b/Extract-Hi/Extract-Hi.h new file mode 100644 index 0000000..7bb2510 --- /dev/null +++ b/Extract-Hi/Extract-Hi.h @@ -0,0 +1,97 @@ +//----------------------------------------------------------------------------------- +/* + Extract-Hi for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ExtractHi_H +#define ExtractHi_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include + +#include "../FsLibrary/FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_BORDER, + ID_SOFTNESS, + ID_TARGET, + ID_CUSTUM_COLOR, + + ID_INVERT, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_BORDER "Border" +#define STR_SOFTNESS "Softness" +#define STR_TARGET "Target" +#define STR_TARGET_ITEM "Luminance|Red|Green|Blue|Cyan|Magenta|Yellow|RGB_Max|Custum" +#define STR_TARGET_COUNT 9 +#define STR_TARGET_DFLT 1 +#define STR_CUSTUM_COLOR "CustumColor" +#define STR_INVERT "Invert" +#define STR_INVERT_ON "on" + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong hi; + PF_FpLong low; + A_long taget; + PF_Pixel custumColor; + PF_FpLong r; + PF_FpLong g; + PF_FpLong b; + PF_Boolean invert; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // Extract-Hi_H diff --git a/Extract-Hi/Extract-HiPiPL.r b/Extract-Hi/Extract-HiPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/Extract-Hi/Extract-HiPiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/Extract-Hi/Fs_Entry.h b/Extract-Hi/Fs_Entry.h new file mode 100644 index 0000000..3f641e0 --- /dev/null +++ b/Extract-Hi/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + Extract-Hi for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Extract-Hi/Fs_Target.h b/Extract-Hi/Fs_Target.h new file mode 100644 index 0000000..c911148 --- /dev/null +++ b/Extract-Hi/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Extract-Hi" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "明るいところを抽出するフィルタ(標準のものアルゴリズムが違う)" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/Extract-Hi/Win/Extract-Hi.sln b/Extract-Hi/Win/Extract-Hi.sln new file mode 100644 index 0000000..8477ea2 --- /dev/null +++ b/Extract-Hi/Win/Extract-Hi.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 14 for Windows Desktop +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Extract-Hi", "Extract-Hi.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Extract-Hi/Win/Extract-Hi.vcxproj b/Extract-Hi/Win/Extract-Hi.vcxproj new file mode 100644 index 0000000..fcaf25c --- /dev/null +++ b/Extract-Hi/Win/Extract-Hi.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8} + Extract-Hi + Extract-Hi + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract-Hi.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract-Hi.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract-Hi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract-Hi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract-Hi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract-Hi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/Extract-Hi/Win/Extract-Hi.vcxproj.filters b/Extract-Hi/Win/Extract-Hi.vcxproj.filters new file mode 100644 index 0000000..8b0ac2c --- /dev/null +++ b/Extract-Hi/Win/Extract-Hi.vcxproj.filters @@ -0,0 +1,184 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/Extract-Hi/Win/Extract-HiPiPL.rc b/Extract-Hi/Win/Extract-HiPiPL.rc new file mode 100644 index 0000000..3723708 --- /dev/null +++ b/Extract-Hi/Win/Extract-HiPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0EF's Extract-Hi\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0EF's Extract-Hi\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Extract_Edge/Extract_Edge.cpp b/Extract_Edge/Extract_Edge.cpp new file mode 100644 index 0000000..f01d3aa --- /dev/null +++ b/Extract_Edge/Extract_Edge.cpp @@ -0,0 +1,267 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "Extract_Edge.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CB_EDGE, + STR_ON, + TRUE, + 0, + ID_CB_EDGE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER( + STR_LO_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 50, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 25, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LO_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER( + STR_HI_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CB_ALPHA, + STR_ON, + TRUE, + 0, + ID_CB_ALPHA + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER( + STR_ALPHA_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_ALPHA_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CB_COLOR, + STR_ON, + TRUE, + 0, + ID_CB_COLOR + ); //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COLOR, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_CB_EDGE, &infoP->Edge)); + ERR(ae->GetFLOAT(ID_LO_LV, &infoP->LoLevel)); + infoP->LoLevel /= 100; + ERR(ae->GetFLOAT(ID_HI_LV, &infoP->HiLevel)); + infoP->HiLevel /= 100; + if (infoP->LoLevel > infoP->HiLevel) + { + PF_FpLong tmp = infoP->LoLevel; + infoP->LoLevel = infoP->HiLevel; + infoP->HiLevel = tmp; + } + infoP->HiLo = infoP->HiLevel - infoP->LoLevel; + + + + ERR(ae->GetCHECKBOX(ID_CB_ALPHA, &infoP->EdgeAlpha)); + ERR(ae->GetFLOAT(ID_ALPHA_LV, &infoP->AlphaLevel)); + infoP->AlphaLevel /= 100; + + ERR(ae->GetCHECKBOX(ID_CB_COLOR, &infoP->UseColor)); + + ERR(ae->GetCOLOR(ID_COLOR,&infoP->Color)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->CopyInToOut()); + //ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->CopyInToOut()); + //ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + //ERR(ae->iterate8((refconType)infoP,FilterImage8)); + ERR(Exec8(ae, infoP)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/Extract_Edge/Extract_Edge.h b/Extract_Edge/Extract_Edge.h new file mode 100644 index 0000000..a8e69e0 --- /dev/null +++ b/Extract_Edge/Extract_Edge.h @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------------- +/* + Extract_Edge for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Extract_Edge_H +#define Extract_Edge_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsHLS.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_CB_EDGE, + ID_LO_LV, + ID_HI_LV, + + ID_CB_ALPHA, + ID_ALPHA_LV, + + ID_CB_COLOR, + ID_COLOR, + + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_ON "on" +#define STR_CB_EDGE "Edge" +#define STR_LO_LV "LoLevel" +#define STR_HI_LV "HiLevel" +#define STR_CB_ALPHA "AlphaEdge" +#define STR_ALPHA_LV "AlphaLevel" +#define STR_CB_COLOR "UseColor" +#define STR_COLOR "Color" + + + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean Edge; + PF_FpLong LoLevel; + PF_FpLong HiLevel; + PF_FpLong HiLo; + + PF_Boolean EdgeAlpha; + PF_FpLong AlphaLevel; + + PF_Boolean UseColor; + PF_Pixel Color; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +typedef struct ParamInfo8 { + ParamInfo info; + GInfo gin; + GInfo gout; + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + + +//------------------------------------------------------- +PF_Err Exec8(CFsAE *ae, ParamInfo *infoP); + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // Extract_Edge_H diff --git a/Extract_Edge/Extract_EdgePiPL.r b/Extract_Edge/Extract_EdgePiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/Extract_Edge/Extract_EdgePiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/Extract_Edge/Extract_EdgeSub8.cpp b/Extract_Edge/Extract_EdgeSub8.cpp new file mode 100644 index 0000000..4a1da85 --- /dev/null +++ b/Extract_Edge/Extract_EdgeSub8.cpp @@ -0,0 +1,148 @@ +#include "Extract_Edge.h" + +//------------------------------------------------------------------------------------------------- +//画像の色を獲得 +inline PF_Pixel GetPX(GInfo *gi, A_long x, A_long y) +{ + PF_Pixel *data = (PF_Pixel *)gi->data; + + A_long xx = x; + if (xx < 0) xx = 0; else if (xx >= gi->width) xx = gi->width - 1; + A_long yy = y; + if (yy < 0) yy = 0; else if (yy >= gi->height) xx = gi->height - 1; + return data[xx + yy * gi->widthTrue]; + +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGray( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + + PF_FpLong r, g, b, a; + a = (PF_FpLong)inP->alpha / PF_MAX_CHAN8; + r = (PF_FpLong)inP->red * a / PF_MAX_CHAN8; + g = (PF_FpLong)inP->green * a / PF_MAX_CHAN8; + b = (PF_FpLong)inP->blue * a / PF_MAX_CHAN8; + + PF_PixelFloat c; + c.alpha = RoundFpShortDouble(a); + c.red = RoundFpShortDouble(r); + c.green = RoundFpShortDouble(g); + c.blue = RoundFpShortDouble(b); + + LABA lab = RgbToLab(c); + + outP->red = RoundByteLong((A_long)(lab.L * PF_MAX_CHAN8 + 0.5)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err EdgeR2G(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = infoP->gin; + GInfo go = infoP->gout; + + PF_Pixel8 *data = (PF_Pixel8 *)go.data; + A_long pos = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong v1 = (PF_FpLong)data[pos].red / PF_MAX_CHAN8; + PF_FpLong v2 = (PF_FpLong)GetPX(&go, x+1, y).red / PF_MAX_CHAN8; + PF_FpLong v3 = (PF_FpLong)GetPX(&go, x, y+1).red / PF_MAX_CHAN8; + PF_FpLong d = ABS(v1 - v2) + ABS(v2 - v3); + + if (infoP->info.HiLo==0) + { + if (d >= infoP->info.HiLevel) { + d = 1.0; + } + else { + d = 0; + } + }else if (d <= infoP->info.LoLevel) { + d = 0; + } + else if (d >= infoP->info.HiLevel) + { + d = 1.0; + } + else { + d = (d - infoP->info.LoLevel) / infoP->info.HiLo; + } + + + data[pos].green = RoundByteLong((A_long)(d*PF_MAX_CHAN8 + 0.5)); + pos++; + } + pos += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err AlphaToRed(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = infoP->gin; + GInfo go = infoP->gout; + + PF_Pixel8 *dataI = (PF_Pixel8 *)gi.data; + PF_Pixel8 *dataO = (PF_Pixel8 *)go.data; + A_long posI = 0; + A_long posO = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + dataO[posO].red = dataI[posI].alpha; + posI++; + posO++; + } + posI += gi.offsetWidth; + posO += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam(CFsAE *ae, ParamInfo *infoP, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + pi->info = *infoP; + + ae->in->ToGInfo(&pi->gin); + ae->out->ToGInfo(&pi->gout); + + + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err Exec8(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo8 pi; + ToParam(ae, infoP, &pi); + + ae->CopyInToOut(); + ERR(ae->iterate8((refconType)&pi, ToGray)); + EdgeR2G(&pi); + //VerSub(&pi); + return err; + +} \ No newline at end of file diff --git a/Extract_Edge/Fs_Entry.h b/Extract_Edge/Fs_Entry.h new file mode 100644 index 0000000..cac0903 --- /dev/null +++ b/Extract_Edge/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + Extract_Edge for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Extract_Edge/Fs_Target.h b/Extract_Edge/Fs_Target.h new file mode 100644 index 0000000..32a6033 --- /dev/null +++ b/Extract_Edge/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Extract_Edge" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "プラグインのスケルトン" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/Extract_Edge/Win/Extract_Edge.sln b/Extract_Edge/Win/Extract_Edge.sln new file mode 100644 index 0000000..63a48a5 --- /dev/null +++ b/Extract_Edge/Win/Extract_Edge.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Extract_Edge", "Extract_Edge.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x86.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A12039FD-9CA1-4AD3-94F7-9B86B2A3651B} + EndGlobalSection +EndGlobal diff --git a/Extract_Edge/Win/Extract_Edge.vcxproj b/Extract_Edge/Win/Extract_Edge.vcxproj new file mode 100644 index 0000000..e3f6c80 --- /dev/null +++ b/Extract_Edge/Win/Extract_Edge.vcxproj @@ -0,0 +1,592 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {CCD604BB-D316-43D6-86D6-831248F4D1B4} + Extract_Edge + Extract_Edge + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract_Edge.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract_Edge.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract_Edge.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Extract_Edge.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract_Edge.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Extract_Edge.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/Extract_Edge/Win/Extract_Edge.vcxproj.filters b/Extract_Edge/Win/Extract_Edge.vcxproj.filters new file mode 100644 index 0000000..449b798 --- /dev/null +++ b/Extract_Edge/Win/Extract_Edge.vcxproj.filters @@ -0,0 +1,185 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + + Resource Files + + + \ No newline at end of file diff --git a/Extract_Edge/Win/Extract_EdgePiPL.rc b/Extract_Edge/Win/Extract_EdgePiPL.rc new file mode 100644 index 0000000..7da0776 --- /dev/null +++ b/Extract_Edge/Win/Extract_EdgePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x10F's Extract_Edge\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x10F's Extract_Edge\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Extract_Edge/Win/PluginSkeletonPiPL.rc b/Extract_Edge/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/Extract_Edge/Win/PluginSkeletonPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x12F's PluginSkeleton\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 2, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x12F's PluginSkeleton\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/F's PluginsProjects.sln b/F's PluginsProjects.sln new file mode 100644 index 0000000..4a19eec --- /dev/null +++ b/F's PluginsProjects.sln @@ -0,0 +1,1446 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AlphaFix", "AlphaFix\Win\AlphaFix.vcxproj", "{82675920-EFDC-4880-84E3-4D234C1A86BC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnimatedNoise", "AnimatedNoise\Win\AnimatedNoise.vcxproj", "{AA3A8CBE-4ACE-4728-9579-7904CCA685A1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CCplus", "CCplus\Win\CCplus.vcxproj", "{18BD60EF-07A0-4FC2-AFFC-A29482C663F4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChannelNoise", "ChannelNoise\Win\ChannelNoise.vcxproj", "{721DF89F-3009-4A4C-8F72-963A237CA8B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorChange", "ColorChange\Win\ColorChange.vcxproj", "{A057BED7-A75C-4769-BA94-BF3A709420AF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorChangeSimple", "ColorChangeSimple\Win\ColorChangeSimple.vcxproj", "{6EB2A53D-63DB-462B-990A-14D37F42E338}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EdgeBlur", "EdgeBlur\Win\EdgeBlur.vcxproj", "{AB06F139-C65E-4DA0-8226-59DA70145BC7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FillColor", "FillColor\Win\FillColor.vcxproj", "{0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Frame", "Frame\Win\Frame.vcxproj", "{4C755A4A-5DC9-403F-B35B-D2800DBE64D7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GuideFrame", "GuideFrame\Win\GuideFrame.vcxproj", "{266832DE-B72D-4186-9D9F-C92B4A970742}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HLS_Reverse", "HLS_Reverse\Win\HLS_Reverse.vcxproj", "{BD391ECE-3835-4336-A4C8-94205D097C40}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Max", "Max\Win\Max.vcxproj", "{BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mosaic", "Mosaic\Win\Mosaic.vcxproj", "{F69A4DE5-0611-445F-AC50-32CE40DD5545}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Paint", "Paint\Win\Paint.vcxproj", "{E08EF309-965E-48B8-B74C-9D494A685FC7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PixelReplace", "PixelReplace\Win\PixelReplace.vcxproj", "{D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PixelSelector", "PixelSelector\Win\PixelSelector.vcxproj", "{D3252997-B98A-4685-A06A-E30C4B472F48}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PluginSkeleton", "PluginSkeleton\Win\PluginSkeleton.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Premultiply", "Premultiply\Win\Premultiply.vcxproj", "{82BCECD2-399F-4286-87BA-0E6A222A98F9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandomLineNoise", "RandomLineNoise\Win\RandomLineNoise.vcxproj", "{A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandomMosaic", "RandomMosaic\Win\RandomMosaic.vcxproj", "{DDCCEE64-7056-42C9-B77E-78E7043B74F4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandomMosaic2nd", "RandomMosaic2nd\Win\RandomMosaic2nd.vcxproj", "{083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RandomShift", "RandomShift\Win\RandomShift.vcxproj", "{A43E360B-7EF0-45BC-BD56-9F6E6853472E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RGBAControl", "RGBAControl\Win\RGBAControl.vcxproj", "{1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RgbToAlpha", "RgbToAlpha\Win\RgbToAlpha.vcxproj", "{9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SelectColor", "SelectColor\Win\SelectColor.vcxproj", "{6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SelectedBlur", "SelectedBlur\Win\SelectedBlur.vcxproj", "{F1BCCF81-1FDE-4504-998D-25DC228C8DA8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sputteringAlpha", "sputteringAlpha\Win\sputteringAlpha.vcxproj", "{68A7D7A6-8D9A-471F-A03C-D136B84D87A9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sputteringCircle", "sputteringCircle\Win\sputteringCircle.vcxproj", "{E892EF45-987E-4500-873A-DCEDF2AD78A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sputteringRect", "sputteringRect\Win\sputteringRect.vcxproj", "{0E98D15B-AF28-4F91-A6B0-8A544907D376}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sputteringSplash", "sputteringSplash\Win\sputteringSplash.vcxproj", "{5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ToGray", "ToGray\Win\ToGray.vcxproj", "{4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Toner", "Toner\Win\Toner.vcxproj", "{DF53575A-3898-40BE-BA28-D8BE0403127C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TouchDraw", "TouchDraw\Win\TouchDraw.vcxproj", "{EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TouchDrawStraght", "TouchDrawStraght\Win\TouchDrawStraght.vcxproj", "{5EB482B1-B231-41DB-9532-DF324D2674F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoGrid", "VideoGrid\Win\VideoGrid.vcxproj", "{24CD6769-03B6-42F0-A48D-C3DF38DD3275}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoLine", "VideoLine\Win\VideoLine.vcxproj", "{2FCA0603-734A-4C23-B96D-794991FBD82C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Star", "Star\Win\Star.vcxproj", "{7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TouchDrawCenter", "TouchDrawCenter\Win\TouchDrawCenter.vcxproj", "{B44E5587-2ABB-4857-A0E6-A52499D10C26}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LineDetection", "LineDetection\Win\LineDetection.vcxproj", "{52CB21FD-EB41-484F-B74F-0780D6EA017C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorKey", "ColorKey\Win\ColorKey.vcxproj", "{E18653F0-FFEF-48A1-90AE-CC6562614526}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChannelShift", "ChannelShift\Win\ChannelShift.vcxproj", "{24A77FF4-0D0C-45AC-A4D1-845BE0006E48}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CreateAlpha", "CreateAlpha\Win\CreateAlpha.vcxproj", "{B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LineTrace", "LineTrace\Win\LineTrace.vcxproj", "{97918B48-8322-43BF-92D6-ECCA9621EE76}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PaintMultPoint", "PaintMultPoint\Win\PaintMultPoint.vcxproj", "{A7067AA4-DFD9-439A-8B04-561FED26BD8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EdgeLine", "EdgeLine\Win\EdgeLine.vcxproj", "{3B9083EB-A40D-4614-AC8E-52FBD6EF3349}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MainLineRepaint", "MainLineRepaint\Win\MainLineRepaint.vcxproj", "{D083FA16-AF6A-409F-8A7B-43B782BFFB0F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tone", "Tone\Win\Tone.vcxproj", "{9857C05E-3174-42F6-AE20-A66113514946}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FsSSFrame", "FsSSFrame\Win\FsSSFrame.vcxproj", "{072FB965-D7D5-406C-BF93-EFDAA378C4FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NoiseHiLo_Alpha", "NoiseHiLo_Alpha\Win\NoiseHiLo_Alpha.vcxproj", "{2F37F615-6971-4E25-A7E7-F84C9667FC17}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NoiseHiLo_RGB", "NoiseHiLo_RGB\Win\NoiseHiLo_RGB.vcxproj", "{EBF5387A-7397-47AE-BF29-ADCF3650796C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpticalDiffusion", "OpticalDiffusion\Win\OpticalDiffusion.vcxproj", "{EEAFB167-BD4D-4CD8-BB63-083C667979D4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MainLineRepaint_old", "MainLineRepaint_old\Win\MainLineRepaint_old.vcxproj", "{AA6B61AB-FE84-4800-B04E-7470C9773B86}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alphaThreshold", "AlphaThreshold\Win\alphaThreshold.vcxproj", "{7C83E956-B2B9-430B-959E-BA86D9E4E624}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "colorThreshold", "colorThreshold\Win\colorThreshold.vcxproj", "{237FD67B-9D84-415B-ADE7-61D01A74ED16}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grayToColorize", "grayToColorize\Win\grayToColorize.vcxproj", "{8F86C9BF-D1FC-4619-8480-44010D50BA38}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaskFromRGB", "MaskFromRGB\Win\MaskFromRGB.vcxproj", "{5FFF4BF4-9036-4470-A0E0-90990F4D7A69}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaskFromRGB_Multi", "MaskFromRGB_Multi\Win\MaskFromRGB_Multi.vcxproj", "{EB192493-9742-464D-A0AD-C1EF56EE122F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IroToreAdjacent", "IroToreAdjacent\Win\IroToreAdjacent.vcxproj", "{A03946F0-46CA-4B50-967F-95B8ADC6402F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Thin", "Thin\Win\Thin.vcxproj", "{D0FDBB96-04C3-4085-869E-76DA167D012A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IroTore", "IroTore\Win\IroTore.vcxproj", "{E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NamiGarasu", "NamiGarasu\Win\NamiGarasu.vcxproj", "{3AF9C08C-1DE7-4B2C-8980-B34A0A308454}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smokeThreshold", "smokeThreshold\Win\smokeThreshold.vcxproj", "{0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScreenShakeDir", "ScreenShakeDir\Win\ScreenShakeDir.vcxproj", "{12CE4732-9565-4A94-BA30-EB26CA530AAD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScreenShakeMM", "ScreenShakeMM\Win\ScreenShakeMM.vcxproj", "{AB4B1925-42DA-49A6-B439-EBF997C564A3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OutLine", "OutLine\Win\OutLine.vcxproj", "{A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Extract-Hi", "Extract-Hi\Win\Extract-Hi.vcxproj", "{02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PaperPlaneGetWeight", "PaperPlaneGetWeight\Win\PaperPlaneGetWeight.vcxproj", "{22B65B86-5251-4F16-BB10-B6550F974FA3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PaperPlaneGetWeightInfo", "PaperPlaneGetWeightInfo\Win\PaperPlaneGetWeightInfo.vcxproj", "{B50A9D90-4F2C-42CD-A516-2CF8740F959D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "whiteInOut", "whiteInOut\Win\whiteInOut.vcxproj", "{007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShitsuKanBlur", "ShitsuKanBlur\Win\ShitsuKanBlur.vcxproj", "{CAC5DEDC-2E7E-48DF-984E-9E65F0375230}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Max_Kasumi", "Max_Kasumi\Win\Max_Kasumi.vcxproj", "{81DD7657-558F-48CC-8F7C-A1C10D68E7F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Star_Colorful", "Star_Colorful\Win\Star_Colorful.vcxproj", "{D29C628E-C486-467B-B09E-29206F95A625}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoLine2nd", "VideoLine2nd\Win\VideoLine2nd.vcxproj", "{B90C5834-E60D-4E09-A286-44C8004ADF7E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColorMatKey", "ColorMatKey\Win\ColorMatKey.vcxproj", "{2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Release-MD|Mixed Platforms = Release-MD|Mixed Platforms + Release-MD|Win32 = Release-MD|Win32 + Release-MD|x64 = Release-MD|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Debug|Win32.ActiveCfg = Debug|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Debug|x64.ActiveCfg = Debug|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Debug|x64.Build.0 = Debug|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release|Mixed Platforms.Build.0 = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release|Win32.ActiveCfg = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release|x64.ActiveCfg = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release|x64.Build.0 = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release-MD|Win32.ActiveCfg = Release|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {82675920-EFDC-4880-84E3-4D234C1A86BC}.Release-MD|x64.Build.0 = Release-MD|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Debug|Win32.ActiveCfg = Debug|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Debug|x64.ActiveCfg = Debug|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Debug|x64.Build.0 = Debug|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release|Mixed Platforms.Build.0 = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release|Win32.ActiveCfg = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release|x64.ActiveCfg = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release|x64.Build.0 = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release-MD|Win32.ActiveCfg = Release|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {AA3A8CBE-4ACE-4728-9579-7904CCA685A1}.Release-MD|x64.Build.0 = Release-MD|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Debug|Win32.ActiveCfg = Debug|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Debug|x64.ActiveCfg = Debug|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Debug|x64.Build.0 = Debug|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release|Mixed Platforms.Build.0 = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release|Win32.ActiveCfg = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release|x64.ActiveCfg = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release|x64.Build.0 = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release-MD|Win32.ActiveCfg = Release|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {18BD60EF-07A0-4FC2-AFFC-A29482C663F4}.Release-MD|x64.Build.0 = Release-MD|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|Win32.Build.0 = Debug|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|x64.ActiveCfg = Debug|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Debug|x64.Build.0 = Debug|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|Mixed Platforms.Build.0 = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|Win32.ActiveCfg = Release|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|Win32.Build.0 = Release|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|x64.ActiveCfg = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release|x64.Build.0 = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|Win32.ActiveCfg = Release|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|Win32.Build.0 = Release|Win32 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {721DF89F-3009-4A4C-8F72-963A237CA8B1}.Release-MD|x64.Build.0 = Release-MD|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Debug|Win32.ActiveCfg = Debug|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Debug|x64.ActiveCfg = Debug|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Debug|x64.Build.0 = Debug|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release|Mixed Platforms.Build.0 = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release|Win32.ActiveCfg = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release|x64.ActiveCfg = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release|x64.Build.0 = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release-MD|Win32.ActiveCfg = Release|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A057BED7-A75C-4769-BA94-BF3A709420AF}.Release-MD|x64.Build.0 = Release-MD|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Debug|Win32.ActiveCfg = Debug|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Debug|x64.ActiveCfg = Debug|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Debug|x64.Build.0 = Debug|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release|Mixed Platforms.Build.0 = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release|Win32.ActiveCfg = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release|x64.ActiveCfg = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release|x64.Build.0 = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release-MD|Win32.ActiveCfg = Release|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {6EB2A53D-63DB-462B-990A-14D37F42E338}.Release-MD|x64.Build.0 = Release-MD|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Debug|Win32.ActiveCfg = Debug|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Debug|x64.ActiveCfg = Debug|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Debug|x64.Build.0 = Debug|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release|Mixed Platforms.Build.0 = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release|Win32.ActiveCfg = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release|x64.ActiveCfg = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release|x64.Build.0 = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release-MD|Win32.ActiveCfg = Release|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {AB06F139-C65E-4DA0-8226-59DA70145BC7}.Release-MD|x64.Build.0 = Release-MD|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Debug|Win32.ActiveCfg = Debug|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Debug|x64.ActiveCfg = Debug|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Debug|x64.Build.0 = Debug|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release|Mixed Platforms.Build.0 = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release|Win32.ActiveCfg = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release|x64.ActiveCfg = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release|x64.Build.0 = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release-MD|Win32.ActiveCfg = Release|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496}.Release-MD|x64.Build.0 = Release-MD|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Debug|Win32.ActiveCfg = Debug|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Debug|x64.ActiveCfg = Debug|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Debug|x64.Build.0 = Debug|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release|Mixed Platforms.Build.0 = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release|Win32.ActiveCfg = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release|x64.ActiveCfg = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release|x64.Build.0 = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release-MD|Win32.ActiveCfg = Release|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7}.Release-MD|x64.Build.0 = Release-MD|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Debug|Win32.ActiveCfg = Debug|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Debug|x64.ActiveCfg = Debug|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Debug|x64.Build.0 = Debug|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release|Mixed Platforms.Build.0 = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release|Win32.ActiveCfg = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release|x64.ActiveCfg = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release|x64.Build.0 = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release-MD|Win32.ActiveCfg = Release|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {266832DE-B72D-4186-9D9F-C92B4A970742}.Release-MD|x64.Build.0 = Release-MD|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Debug|Win32.ActiveCfg = Debug|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Debug|x64.ActiveCfg = Debug|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Debug|x64.Build.0 = Debug|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release|Mixed Platforms.Build.0 = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release|Win32.ActiveCfg = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release|x64.ActiveCfg = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release|x64.Build.0 = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release-MD|Win32.ActiveCfg = Release|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {BD391ECE-3835-4336-A4C8-94205D097C40}.Release-MD|x64.Build.0 = Release-MD|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|Win32.ActiveCfg = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|x64.ActiveCfg = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|x64.Build.0 = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|Mixed Platforms.Build.0 = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|Win32.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|x64.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|x64.Build.0 = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release-MD|Win32.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release-MD|x64.Build.0 = Release-MD|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|Win32.ActiveCfg = Debug|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|Win32.Build.0 = Debug|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|x64.ActiveCfg = Debug|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Debug|x64.Build.0 = Debug|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|Mixed Platforms.Build.0 = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|Win32.ActiveCfg = Release|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|Win32.Build.0 = Release|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|x64.ActiveCfg = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release|x64.Build.0 = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|Win32.ActiveCfg = Release|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|Win32.Build.0 = Release|Win32 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {F69A4DE5-0611-445F-AC50-32CE40DD5545}.Release-MD|x64.Build.0 = Release-MD|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Debug|Win32.ActiveCfg = Debug|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Debug|x64.ActiveCfg = Debug|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Debug|x64.Build.0 = Debug|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|Mixed Platforms.Build.0 = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|Win32.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|x64.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|x64.Build.0 = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release-MD|Win32.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release-MD|x64.Build.0 = Release-MD|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|Win32.Build.0 = Debug|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|x64.ActiveCfg = Debug|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Debug|x64.Build.0 = Debug|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|Mixed Platforms.Build.0 = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|Win32.ActiveCfg = Release|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|Win32.Build.0 = Release|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|x64.ActiveCfg = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release|x64.Build.0 = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|Win32.ActiveCfg = Release|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|Win32.Build.0 = Release|Win32 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B}.Release-MD|x64.Build.0 = Release-MD|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|Win32.ActiveCfg = Debug|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|Win32.Build.0 = Debug|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|x64.ActiveCfg = Debug|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Debug|x64.Build.0 = Debug|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|Mixed Platforms.Build.0 = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|Win32.ActiveCfg = Release|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|Win32.Build.0 = Release|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|x64.ActiveCfg = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release|x64.Build.0 = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|Win32.ActiveCfg = Release|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|Win32.Build.0 = Release|Win32 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {D3252997-B98A-4685-A06A-E30C4B472F48}.Release-MD|x64.Build.0 = Release-MD|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Mixed Platforms.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|Win32.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|Win32.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release-MD|x64.Build.0 = Release-MD|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|Win32.ActiveCfg = Debug|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|Win32.Build.0 = Debug|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|x64.ActiveCfg = Debug|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Debug|x64.Build.0 = Debug|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|Mixed Platforms.Build.0 = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|Win32.ActiveCfg = Release|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|Win32.Build.0 = Release|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|x64.ActiveCfg = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release|x64.Build.0 = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|Win32.ActiveCfg = Release|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|Win32.Build.0 = Release|Win32 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {82BCECD2-399F-4286-87BA-0E6A222A98F9}.Release-MD|x64.Build.0 = Release-MD|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|Win32.ActiveCfg = Debug|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|Win32.Build.0 = Debug|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|x64.ActiveCfg = Debug|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Debug|x64.Build.0 = Debug|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|Mixed Platforms.Build.0 = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|Win32.ActiveCfg = Release|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|Win32.Build.0 = Release|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|x64.ActiveCfg = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release|x64.Build.0 = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|Win32.ActiveCfg = Release|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|Win32.Build.0 = Release|Win32 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62}.Release-MD|x64.Build.0 = Release-MD|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|Win32.ActiveCfg = Debug|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|Win32.Build.0 = Debug|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|x64.ActiveCfg = Debug|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Debug|x64.Build.0 = Debug|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|Mixed Platforms.Build.0 = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|Win32.ActiveCfg = Release|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|Win32.Build.0 = Release|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|x64.ActiveCfg = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release|x64.Build.0 = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|Win32.ActiveCfg = Release|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|Win32.Build.0 = Release|Win32 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {DDCCEE64-7056-42C9-B77E-78E7043B74F4}.Release-MD|x64.Build.0 = Release-MD|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|Win32.ActiveCfg = Debug|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|Win32.Build.0 = Debug|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|x64.ActiveCfg = Debug|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Debug|x64.Build.0 = Debug|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|Mixed Platforms.Build.0 = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|Win32.ActiveCfg = Release|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|Win32.Build.0 = Release|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|x64.ActiveCfg = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release|x64.Build.0 = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|Win32.ActiveCfg = Release|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|Win32.Build.0 = Release|Win32 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7}.Release-MD|x64.Build.0 = Release-MD|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|Win32.ActiveCfg = Debug|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|Win32.Build.0 = Debug|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|x64.ActiveCfg = Debug|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Debug|x64.Build.0 = Debug|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|Mixed Platforms.Build.0 = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|Win32.ActiveCfg = Release|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|Win32.Build.0 = Release|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|x64.ActiveCfg = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release|x64.Build.0 = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|Win32.ActiveCfg = Release|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|Win32.Build.0 = Release|Win32 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A43E360B-7EF0-45BC-BD56-9F6E6853472E}.Release-MD|x64.Build.0 = Release-MD|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|Win32.ActiveCfg = Debug|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|Win32.Build.0 = Debug|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|x64.ActiveCfg = Debug|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Debug|x64.Build.0 = Debug|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|Mixed Platforms.Build.0 = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|Win32.ActiveCfg = Release|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|Win32.Build.0 = Release|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|x64.ActiveCfg = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release|x64.Build.0 = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|Win32.ActiveCfg = Release|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|Win32.Build.0 = Release|Win32 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B}.Release-MD|x64.Build.0 = Release-MD|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Debug|Win32.ActiveCfg = Debug|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Debug|x64.ActiveCfg = Debug|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Debug|x64.Build.0 = Debug|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release|Mixed Platforms.Build.0 = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release|Win32.ActiveCfg = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release|x64.ActiveCfg = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release|x64.Build.0 = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release-MD|Win32.ActiveCfg = Release|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C}.Release-MD|x64.Build.0 = Release-MD|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|Win32.ActiveCfg = Debug|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|Win32.Build.0 = Debug|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|x64.ActiveCfg = Debug|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Debug|x64.Build.0 = Debug|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|Mixed Platforms.Build.0 = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|Win32.ActiveCfg = Release|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|Win32.Build.0 = Release|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|x64.ActiveCfg = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release|x64.Build.0 = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|Win32.ActiveCfg = Release|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|Win32.Build.0 = Release|Win32 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362}.Release-MD|x64.Build.0 = Release-MD|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Debug|Win32.ActiveCfg = Debug|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Debug|x64.ActiveCfg = Debug|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Debug|x64.Build.0 = Debug|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release|Mixed Platforms.Build.0 = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release|Win32.ActiveCfg = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release|x64.ActiveCfg = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release|x64.Build.0 = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release-MD|Win32.ActiveCfg = Release|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8}.Release-MD|x64.Build.0 = Release-MD|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|Win32.ActiveCfg = Debug|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|Win32.Build.0 = Debug|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|x64.ActiveCfg = Debug|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Debug|x64.Build.0 = Debug|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|Mixed Platforms.Build.0 = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|Win32.ActiveCfg = Release|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|Win32.Build.0 = Release|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|x64.ActiveCfg = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release|x64.Build.0 = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|Win32.ActiveCfg = Release|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|Win32.Build.0 = Release|Win32 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9}.Release-MD|x64.Build.0 = Release-MD|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|Win32.ActiveCfg = Debug|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|Win32.Build.0 = Debug|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|x64.ActiveCfg = Debug|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Debug|x64.Build.0 = Debug|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|Mixed Platforms.Build.0 = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|Win32.ActiveCfg = Release|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|Win32.Build.0 = Release|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|x64.ActiveCfg = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release|x64.Build.0 = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|Win32.ActiveCfg = Release|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|Win32.Build.0 = Release|Win32 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {E892EF45-987E-4500-873A-DCEDF2AD78A8}.Release-MD|x64.Build.0 = Release-MD|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|Win32.Build.0 = Debug|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|x64.ActiveCfg = Debug|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Debug|x64.Build.0 = Debug|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|Mixed Platforms.Build.0 = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|Win32.ActiveCfg = Release|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|Win32.Build.0 = Release|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|x64.ActiveCfg = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release|x64.Build.0 = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|Win32.ActiveCfg = Release|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|Win32.Build.0 = Release|Win32 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {0E98D15B-AF28-4F91-A6B0-8A544907D376}.Release-MD|x64.Build.0 = Release-MD|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|Win32.Build.0 = Debug|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|x64.ActiveCfg = Debug|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Debug|x64.Build.0 = Debug|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|Mixed Platforms.Build.0 = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|Win32.ActiveCfg = Release|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|Win32.Build.0 = Release|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|x64.ActiveCfg = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release|x64.Build.0 = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|Win32.ActiveCfg = Release|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|Win32.Build.0 = Release|Win32 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE}.Release-MD|x64.Build.0 = Release-MD|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|Win32.Build.0 = Debug|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|x64.ActiveCfg = Debug|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Debug|x64.Build.0 = Debug|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|Mixed Platforms.Build.0 = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|Win32.ActiveCfg = Release|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|Win32.Build.0 = Release|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|x64.ActiveCfg = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release|x64.Build.0 = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|Win32.ActiveCfg = Release|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|Win32.Build.0 = Release|Win32 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F}.Release-MD|x64.Build.0 = Release-MD|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|Win32.ActiveCfg = Debug|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|Win32.Build.0 = Debug|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|x64.ActiveCfg = Debug|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Debug|x64.Build.0 = Debug|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|Mixed Platforms.Build.0 = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|Win32.ActiveCfg = Release|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|Win32.Build.0 = Release|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|x64.ActiveCfg = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release|x64.Build.0 = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|Win32.ActiveCfg = Release|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|Win32.Build.0 = Release|Win32 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {DF53575A-3898-40BE-BA28-D8BE0403127C}.Release-MD|x64.Build.0 = Release-MD|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|Win32.ActiveCfg = Debug|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|Win32.Build.0 = Debug|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|x64.ActiveCfg = Debug|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Debug|x64.Build.0 = Debug|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|Mixed Platforms.Build.0 = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|Win32.ActiveCfg = Release|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|Win32.Build.0 = Release|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|x64.ActiveCfg = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release|x64.Build.0 = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|Win32.ActiveCfg = Release|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|Win32.Build.0 = Release|Win32 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE}.Release-MD|x64.Build.0 = Release-MD|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|Win32.Build.0 = Debug|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|x64.ActiveCfg = Debug|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Debug|x64.Build.0 = Debug|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|Mixed Platforms.Build.0 = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|Win32.ActiveCfg = Release|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|Win32.Build.0 = Release|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|x64.ActiveCfg = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release|x64.Build.0 = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|Win32.ActiveCfg = Release|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|Win32.Build.0 = Release|Win32 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {5EB482B1-B231-41DB-9532-DF324D2674F8}.Release-MD|x64.Build.0 = Release-MD|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|Win32.ActiveCfg = Debug|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|Win32.Build.0 = Debug|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|x64.ActiveCfg = Debug|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Debug|x64.Build.0 = Debug|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|Mixed Platforms.Build.0 = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|Win32.ActiveCfg = Release|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|Win32.Build.0 = Release|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|x64.ActiveCfg = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release|x64.Build.0 = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|Win32.ActiveCfg = Release|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|Win32.Build.0 = Release|Win32 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {24CD6769-03B6-42F0-A48D-C3DF38DD3275}.Release-MD|x64.Build.0 = Release-MD|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Debug|Win32.ActiveCfg = Debug|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Debug|x64.ActiveCfg = Debug|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Debug|x64.Build.0 = Debug|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release|Mixed Platforms.Build.0 = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release|Win32.ActiveCfg = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release|x64.ActiveCfg = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release|x64.Build.0 = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release-MD|Win32.ActiveCfg = Release|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {2FCA0603-734A-4C23-B96D-794991FBD82C}.Release-MD|x64.Build.0 = Release-MD|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|Win32.Build.0 = Debug|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|x64.ActiveCfg = Debug|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Debug|x64.Build.0 = Debug|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|Mixed Platforms.Build.0 = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|Win32.ActiveCfg = Release|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|Win32.Build.0 = Release|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|x64.ActiveCfg = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release|x64.Build.0 = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|Win32.ActiveCfg = Release|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|Win32.Build.0 = Release|Win32 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8}.Release-MD|x64.Build.0 = Release-MD|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|Win32.ActiveCfg = Debug|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|Win32.Build.0 = Debug|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|x64.ActiveCfg = Debug|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Debug|x64.Build.0 = Debug|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|Mixed Platforms.Build.0 = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|Win32.ActiveCfg = Release|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|Win32.Build.0 = Release|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|x64.ActiveCfg = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release|x64.Build.0 = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|Win32.ActiveCfg = Release|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|Win32.Build.0 = Release|Win32 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {B44E5587-2ABB-4857-A0E6-A52499D10C26}.Release-MD|x64.Build.0 = Release-MD|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|Win32.ActiveCfg = Debug|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|Win32.Build.0 = Debug|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|x64.ActiveCfg = Debug|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Debug|x64.Build.0 = Debug|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|Mixed Platforms.Build.0 = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|Win32.ActiveCfg = Release|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|Win32.Build.0 = Release|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|x64.ActiveCfg = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release|x64.Build.0 = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|Win32.ActiveCfg = Release|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|Win32.Build.0 = Release|Win32 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {52CB21FD-EB41-484F-B74F-0780D6EA017C}.Release-MD|x64.Build.0 = Release-MD|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|Win32.ActiveCfg = Debug|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|Win32.Build.0 = Debug|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|x64.ActiveCfg = Debug|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Debug|x64.Build.0 = Debug|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|Mixed Platforms.Build.0 = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|Win32.ActiveCfg = Release|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|Win32.Build.0 = Release|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|x64.ActiveCfg = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release|x64.Build.0 = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|Win32.ActiveCfg = Release|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|Win32.Build.0 = Release|Win32 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {E18653F0-FFEF-48A1-90AE-CC6562614526}.Release-MD|x64.Build.0 = Release-MD|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Debug|Win32.ActiveCfg = Debug|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Debug|x64.ActiveCfg = Debug|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Debug|x64.Build.0 = Debug|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release|Mixed Platforms.Build.0 = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release|Win32.ActiveCfg = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release|x64.ActiveCfg = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release|x64.Build.0 = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release-MD|Win32.ActiveCfg = Release|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {24A77FF4-0D0C-45AC-A4D1-845BE0006E48}.Release-MD|x64.Build.0 = Release-MD|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Debug|Win32.ActiveCfg = Debug|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Debug|x64.ActiveCfg = Debug|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Debug|x64.Build.0 = Debug|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release|Mixed Platforms.Build.0 = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release|Win32.ActiveCfg = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release|x64.ActiveCfg = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release|x64.Build.0 = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release-MD|Win32.ActiveCfg = Release|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {B64069B0-6049-4E43-B5F0-7B7C6A3EE5A8}.Release-MD|x64.Build.0 = Release-MD|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|Win32.ActiveCfg = Debug|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|Win32.Build.0 = Debug|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|x64.ActiveCfg = Debug|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Debug|x64.Build.0 = Debug|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|Mixed Platforms.Build.0 = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|Win32.ActiveCfg = Release|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|Win32.Build.0 = Release|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|x64.ActiveCfg = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release|x64.Build.0 = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|Win32.ActiveCfg = Release|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|Win32.Build.0 = Release|Win32 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {97918B48-8322-43BF-92D6-ECCA9621EE76}.Release-MD|x64.Build.0 = Release-MD|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Debug|Win32.ActiveCfg = Debug|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Debug|x64.ActiveCfg = Debug|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Debug|x64.Build.0 = Debug|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release|Mixed Platforms.Build.0 = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release|Win32.ActiveCfg = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release|x64.ActiveCfg = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release|x64.Build.0 = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release-MD|Win32.ActiveCfg = Release|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A7067AA4-DFD9-439A-8B04-561FED26BD8D}.Release-MD|x64.Build.0 = Release-MD|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|Win32.ActiveCfg = Debug|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|Win32.Build.0 = Debug|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|x64.ActiveCfg = Debug|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Debug|x64.Build.0 = Debug|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|Mixed Platforms.Build.0 = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|Win32.ActiveCfg = Release|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|Win32.Build.0 = Release|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|x64.ActiveCfg = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release|x64.Build.0 = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|Win32.ActiveCfg = Release|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|Win32.Build.0 = Release|Win32 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {3B9083EB-A40D-4614-AC8E-52FBD6EF3349}.Release-MD|x64.Build.0 = Release-MD|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.ActiveCfg = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.Build.0 = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.ActiveCfg = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.Build.0 = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Mixed Platforms.Build.0 = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.ActiveCfg = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.Build.0 = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.ActiveCfg = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.Build.0 = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|Win32.ActiveCfg = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|Win32.Build.0 = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release-MD|x64.Build.0 = Release-MD|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|Win32.ActiveCfg = Debug|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|Win32.Build.0 = Debug|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|x64.ActiveCfg = Debug|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Debug|x64.Build.0 = Debug|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|Mixed Platforms.Build.0 = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|Win32.ActiveCfg = Release|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|Win32.Build.0 = Release|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|x64.ActiveCfg = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release|x64.Build.0 = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|Win32.ActiveCfg = Release|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|Win32.Build.0 = Release|Win32 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {9857C05E-3174-42F6-AE20-A66113514946}.Release-MD|x64.Build.0 = Release-MD|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Debug|Win32.ActiveCfg = Debug|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Debug|x64.ActiveCfg = Debug|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Debug|x64.Build.0 = Debug|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release|Mixed Platforms.Build.0 = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release|Win32.ActiveCfg = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release|x64.ActiveCfg = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release|x64.Build.0 = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release-MD|Win32.ActiveCfg = Release|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {072FB965-D7D5-406C-BF93-EFDAA378C4FD}.Release-MD|x64.Build.0 = Release-MD|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|Win32.Build.0 = Debug|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|x64.ActiveCfg = Debug|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Debug|x64.Build.0 = Debug|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|Mixed Platforms.Build.0 = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|Win32.ActiveCfg = Release|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|Win32.Build.0 = Release|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|x64.ActiveCfg = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release|x64.Build.0 = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|Win32.ActiveCfg = Release|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|Win32.Build.0 = Release|Win32 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {2F37F615-6971-4E25-A7E7-F84C9667FC17}.Release-MD|x64.Build.0 = Release-MD|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|Win32.ActiveCfg = Debug|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|Win32.Build.0 = Debug|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|x64.ActiveCfg = Debug|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Debug|x64.Build.0 = Debug|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|Mixed Platforms.Build.0 = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|Win32.ActiveCfg = Release|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|Win32.Build.0 = Release|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|x64.ActiveCfg = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release|x64.Build.0 = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|Win32.ActiveCfg = Release|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|Win32.Build.0 = Release|Win32 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {EBF5387A-7397-47AE-BF29-ADCF3650796C}.Release-MD|x64.Build.0 = Release-MD|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|Win32.ActiveCfg = Debug|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|Win32.Build.0 = Debug|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|x64.ActiveCfg = Debug|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Debug|x64.Build.0 = Debug|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|Mixed Platforms.Build.0 = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|Win32.ActiveCfg = Release|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|Win32.Build.0 = Release|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|x64.ActiveCfg = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release|x64.Build.0 = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|Win32.ActiveCfg = Release|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|Win32.Build.0 = Release|Win32 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {EEAFB167-BD4D-4CD8-BB63-083C667979D4}.Release-MD|x64.Build.0 = Release-MD|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|Win32.Build.0 = Debug|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|x64.ActiveCfg = Debug|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Debug|x64.Build.0 = Debug|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|Mixed Platforms.Build.0 = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|Win32.ActiveCfg = Release|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|Win32.Build.0 = Release|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|x64.ActiveCfg = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release|x64.Build.0 = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|Win32.ActiveCfg = Release|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|Win32.Build.0 = Release|Win32 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {AA6B61AB-FE84-4800-B04E-7470C9773B86}.Release-MD|x64.Build.0 = Release-MD|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|Win32.ActiveCfg = Debug|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|Win32.Build.0 = Debug|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|x64.ActiveCfg = Debug|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Debug|x64.Build.0 = Debug|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|Mixed Platforms.Build.0 = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|Win32.ActiveCfg = Release|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|Win32.Build.0 = Release|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|x64.ActiveCfg = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release|x64.Build.0 = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|Win32.ActiveCfg = Release|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|Win32.Build.0 = Release|Win32 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {7C83E956-B2B9-430B-959E-BA86D9E4E624}.Release-MD|x64.Build.0 = Release-MD|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|Win32.ActiveCfg = Debug|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|Win32.Build.0 = Debug|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|x64.ActiveCfg = Debug|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Debug|x64.Build.0 = Debug|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|Mixed Platforms.Build.0 = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|Win32.ActiveCfg = Release|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|Win32.Build.0 = Release|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|x64.ActiveCfg = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release|x64.Build.0 = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|Win32.ActiveCfg = Release|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|Win32.Build.0 = Release|Win32 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {237FD67B-9D84-415B-ADE7-61D01A74ED16}.Release-MD|x64.Build.0 = Release-MD|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|Win32.ActiveCfg = Debug|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|Win32.Build.0 = Debug|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|x64.ActiveCfg = Debug|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Debug|x64.Build.0 = Debug|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|Mixed Platforms.Build.0 = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|Win32.ActiveCfg = Release|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|Win32.Build.0 = Release|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|x64.ActiveCfg = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release|x64.Build.0 = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|Win32.ActiveCfg = Release|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|Win32.Build.0 = Release|Win32 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {8F86C9BF-D1FC-4619-8480-44010D50BA38}.Release-MD|x64.Build.0 = Release-MD|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|Win32.ActiveCfg = Debug|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|Win32.Build.0 = Debug|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|x64.ActiveCfg = Debug|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Debug|x64.Build.0 = Debug|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|Mixed Platforms.Build.0 = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|Win32.ActiveCfg = Release|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|Win32.Build.0 = Release|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|x64.ActiveCfg = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release|x64.Build.0 = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|Win32.ActiveCfg = Release|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|Win32.Build.0 = Release|Win32 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69}.Release-MD|x64.Build.0 = Release-MD|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|Win32.ActiveCfg = Debug|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|Win32.Build.0 = Debug|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|x64.ActiveCfg = Debug|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Debug|x64.Build.0 = Debug|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|Mixed Platforms.Build.0 = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|Win32.ActiveCfg = Release|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|Win32.Build.0 = Release|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|x64.ActiveCfg = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release|x64.Build.0 = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|Mixed Platforms.ActiveCfg = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|Mixed Platforms.Build.0 = Release|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|Win32.ActiveCfg = Release|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|Win32.Build.0 = Release|Win32 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {EB192493-9742-464D-A0AD-C1EF56EE122F}.Release-MD|x64.Build.0 = Release-MD|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Win32.ActiveCfg = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Win32.Build.0 = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|x64.ActiveCfg = Debug|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|x64.Build.0 = Debug|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Mixed Platforms.Build.0 = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Win32.ActiveCfg = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Win32.Build.0 = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|x64.ActiveCfg = Release|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|x64.Build.0 = Release|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|Win32.ActiveCfg = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|Win32.Build.0 = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release-MD|x64.Build.0 = Release-MD|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|Win32.ActiveCfg = Debug|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|Win32.Build.0 = Debug|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|x64.ActiveCfg = Debug|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Debug|x64.Build.0 = Debug|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|Mixed Platforms.Build.0 = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|Win32.ActiveCfg = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|Win32.Build.0 = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|x64.ActiveCfg = Release|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release|x64.Build.0 = Release|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|Win32.ActiveCfg = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|Win32.Build.0 = Release|Win32 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {D0FDBB96-04C3-4085-869E-76DA167D012A}.Release-MD|x64.Build.0 = Release-MD|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Win32.ActiveCfg = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Win32.Build.0 = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|x64.ActiveCfg = Debug|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|x64.Build.0 = Debug|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Mixed Platforms.Build.0 = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Win32.ActiveCfg = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Win32.Build.0 = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|x64.ActiveCfg = Release|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|x64.Build.0 = Release|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|Win32.ActiveCfg = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|Win32.Build.0 = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release-MD|x64.Build.0 = Release-MD|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|Win32.Build.0 = Debug|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|x64.ActiveCfg = Debug|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Debug|x64.Build.0 = Debug|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|Mixed Platforms.Build.0 = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|Win32.ActiveCfg = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|Win32.Build.0 = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|x64.ActiveCfg = Release|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release|x64.Build.0 = Release|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|Win32.ActiveCfg = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|Win32.Build.0 = Release|Win32 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454}.Release-MD|x64.Build.0 = Release-MD|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|Win32.Build.0 = Debug|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|x64.ActiveCfg = Debug|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Debug|x64.Build.0 = Debug|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|Win32.ActiveCfg = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|Win32.Build.0 = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|x64.ActiveCfg = Release|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release|x64.Build.0 = Release|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|Win32.ActiveCfg = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|Win32.Build.0 = Release|Win32 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E}.Release-MD|x64.Build.0 = Release-MD|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|Win32.ActiveCfg = Debug|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|Win32.Build.0 = Debug|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|x64.ActiveCfg = Debug|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Debug|x64.Build.0 = Debug|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|Mixed Platforms.Build.0 = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|Win32.ActiveCfg = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|Win32.Build.0 = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|x64.ActiveCfg = Release|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release|x64.Build.0 = Release|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|Win32.ActiveCfg = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|Win32.Build.0 = Release|Win32 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {12CE4732-9565-4A94-BA30-EB26CA530AAD}.Release-MD|x64.Build.0 = Release-MD|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|Win32.ActiveCfg = Debug|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|Win32.Build.0 = Debug|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|x64.ActiveCfg = Debug|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Debug|x64.Build.0 = Debug|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|Mixed Platforms.Build.0 = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|Win32.ActiveCfg = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|Win32.Build.0 = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|x64.ActiveCfg = Release|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release|x64.Build.0 = Release|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|Win32.ActiveCfg = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|Win32.Build.0 = Release|Win32 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {AB4B1925-42DA-49A6-B439-EBF997C564A3}.Release-MD|x64.Build.0 = Release-MD|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|Win32.ActiveCfg = Debug|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|Win32.Build.0 = Debug|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|x64.ActiveCfg = Debug|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Debug|x64.Build.0 = Debug|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|Mixed Platforms.Build.0 = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|Win32.ActiveCfg = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|Win32.Build.0 = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|x64.ActiveCfg = Release|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release|x64.Build.0 = Release|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|Win32.ActiveCfg = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|Win32.Build.0 = Release|Win32 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92}.Release-MD|x64.Build.0 = Release-MD|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|Win32.ActiveCfg = Debug|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|Win32.Build.0 = Debug|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|x64.ActiveCfg = Debug|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Debug|x64.Build.0 = Debug|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|Win32.ActiveCfg = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|Win32.Build.0 = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|x64.ActiveCfg = Release|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release|x64.Build.0 = Release|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|Win32.ActiveCfg = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|Win32.Build.0 = Release|Win32 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {02C2B344-DDBA-4CA4-8B09-91F4B061D7A8}.Release-MD|x64.Build.0 = Release-MD|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|Win32.ActiveCfg = Debug|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|Win32.Build.0 = Debug|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|x64.ActiveCfg = Debug|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Debug|x64.Build.0 = Debug|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|Mixed Platforms.Build.0 = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|Win32.ActiveCfg = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|Win32.Build.0 = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|x64.ActiveCfg = Release|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release|x64.Build.0 = Release|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|Win32.ActiveCfg = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|Win32.Build.0 = Release|Win32 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {22B65B86-5251-4F16-BB10-B6550F974FA3}.Release-MD|x64.Build.0 = Release-MD|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|Win32.ActiveCfg = Debug|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|Win32.Build.0 = Debug|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|x64.ActiveCfg = Debug|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Debug|x64.Build.0 = Debug|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|Mixed Platforms.Build.0 = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|Win32.ActiveCfg = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|Win32.Build.0 = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|x64.ActiveCfg = Release|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release|x64.Build.0 = Release|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|Win32.ActiveCfg = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|Win32.Build.0 = Release|Win32 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {B50A9D90-4F2C-42CD-A516-2CF8740F959D}.Release-MD|x64.Build.0 = Release-MD|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|Win32.ActiveCfg = Debug|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|Win32.Build.0 = Debug|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|x64.ActiveCfg = Debug|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Debug|x64.Build.0 = Debug|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|Mixed Platforms.Build.0 = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|Win32.ActiveCfg = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|Win32.Build.0 = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|x64.ActiveCfg = Release|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release|x64.Build.0 = Release|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|Win32.ActiveCfg = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|Win32.Build.0 = Release|Win32 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184}.Release-MD|x64.Build.0 = Release-MD|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|Win32.ActiveCfg = Debug|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|Win32.Build.0 = Debug|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|x64.ActiveCfg = Debug|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Debug|x64.Build.0 = Debug|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|Mixed Platforms.Build.0 = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|Win32.ActiveCfg = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|Win32.Build.0 = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|x64.ActiveCfg = Release|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release|x64.Build.0 = Release|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|Mixed Platforms.ActiveCfg = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|Mixed Platforms.Build.0 = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|Win32.ActiveCfg = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|Win32.Build.0 = Release|Win32 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230}.Release-MD|x64.Build.0 = Release-MD|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|Win32.Build.0 = Debug|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|x64.ActiveCfg = Debug|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Debug|x64.Build.0 = Debug|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|Win32.ActiveCfg = Release|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|Win32.Build.0 = Release|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|x64.ActiveCfg = Release|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release|x64.Build.0 = Release|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|Mixed Platforms.ActiveCfg = Release-MD|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|Mixed Platforms.Build.0 = Release-MD|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|Win32.ActiveCfg = Release-MD|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|Win32.Build.0 = Release-MD|Win32 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8}.Release-MD|x64.Build.0 = Release-MD|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|Win32.ActiveCfg = Debug|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|Win32.Build.0 = Debug|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|x64.ActiveCfg = Debug|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Debug|x64.Build.0 = Debug|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|Mixed Platforms.Build.0 = Release|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|Win32.ActiveCfg = Release|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|Win32.Build.0 = Release|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|x64.ActiveCfg = Release|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Release|x64.Build.0 = Release|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|Mixed Platforms.ActiveCfg = Release-MD|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|Mixed Platforms.Build.0 = Release-MD|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|Win32.ActiveCfg = Release-MD|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|Win32.Build.0 = Release-MD|Win32 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {D29C628E-C486-467B-B09E-29206F95A625}.Release-MD|x64.Build.0 = Release-MD|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Debug|Win32.ActiveCfg = Debug|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Debug|x64.ActiveCfg = Debug|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Debug|x64.Build.0 = Debug|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release|Mixed Platforms.Build.0 = Release|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release|Win32.ActiveCfg = Release|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release|x64.ActiveCfg = Release|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release|x64.Build.0 = Release|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release-MD|Mixed Platforms.ActiveCfg = Release-MD|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release-MD|Mixed Platforms.Build.0 = Release-MD|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release-MD|Win32.ActiveCfg = Release-MD|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {B90C5834-E60D-4E09-A286-44C8004ADF7E}.Release-MD|x64.Build.0 = Release-MD|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|Win32.ActiveCfg = Debug|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|Win32.Build.0 = Debug|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|x64.ActiveCfg = Debug|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Debug|x64.Build.0 = Debug|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|Mixed Platforms.Build.0 = Release|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|Win32.ActiveCfg = Release|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|Win32.Build.0 = Release|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|x64.ActiveCfg = Release|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release|x64.Build.0 = Release|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|Mixed Platforms.ActiveCfg = Release-MD|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|Mixed Platforms.Build.0 = Release-MD|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|Win32.ActiveCfg = Release-MD|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|Win32.Build.0 = Release-MD|Win32 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|x64.ActiveCfg = Release-MD|x64 + {2BD2347F-DEA3-4D20-8011-55ECF78D8ECE}.Release-MD|x64.Build.0 = Release-MD|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FEB27DCA-390B-42FB-AEAF-3182057898DD} + EndGlobalSection +EndGlobal diff --git a/FillColor/FillColor.cpp b/FillColor/FillColor.cpp new file mode 100644 index 0000000..dab3ae4 --- /dev/null +++ b/FillColor/FillColor.cpp @@ -0,0 +1,500 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "FillColor.h" + + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err +ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ENABLED_CB1, + STR_ENABLED_CB2, + FALSE, + 0, + ID_ENABLED_CB + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0xff, + 0x00, + 0x00, + ID_FILL_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPA_FIXED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPA_COLOR_FIXED + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//----------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_NOISE_FRAME,&b)); + ERR(ae.UI_DISABLE(ID_NOISE_OFFSET, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + /* + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_NOISE_FRAME,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo8 * niP = reinterpret_cast(refcon); + + if (niP){ + if ( niP->opa_color >=1.0) + { + outP->blue = niP->fill_color.blue; + outP->green = niP->fill_color.green; + outP->red = niP->fill_color.red; + }else{ + outP->blue = RoundByteFpLong(((PF_FpLong)niP->fill_color.blue * niP->opa_color) + ((PF_FpLong)outP->blue * niP->opa_color2)); + outP->green = RoundByteFpLong(((PF_FpLong)niP->fill_color.green * niP->opa_color) + ((PF_FpLong)outP->green * niP->opa_color2)); + outP->red = RoundByteFpLong(((PF_FpLong)niP->fill_color.red * niP->opa_color) + ((PF_FpLong)outP->red * niP->opa_color2)); + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (niP){ + if ( niP->opa_color >=1.0) + { + outP->blue = niP->fill_color.blue; + outP->green = niP->fill_color.green; + outP->red = niP->fill_color.red; + }else{ + outP->blue = RoundShortFpLong(((PF_FpLong)niP->fill_color.blue * niP->opa_color) + ((PF_FpLong)outP->blue * niP->opa_color2)); + outP->green = RoundShortFpLong(((PF_FpLong)niP->fill_color.green * niP->opa_color) + ((PF_FpLong)outP->green * niP->opa_color2)); + outP->red = RoundShortFpLong(((PF_FpLong)niP->fill_color.red * niP->opa_color) + ((PF_FpLong)outP->red * niP->opa_color2)); + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + ParamInfo32 * niP = reinterpret_cast(refcon); + + if (niP){ + if ( niP->opa_color >=1.0) + { + outP->blue = niP->fill_color.blue; + outP->green = niP->fill_color.green; + outP->red = niP->fill_color.red; + }else{ + outP->blue = RoundFpShortDouble((niP->fill_color.blue * niP->opa_color) + (outP->blue * niP->opa_color2)); + outP->green = RoundFpShortDouble((niP->fill_color.green * niP->opa_color) + (outP->green * niP->opa_color2)); + outP->red = RoundFpShortDouble((niP->fill_color.red * niP->opa_color) + (outP->red * niP->opa_color2)); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_ENABLED_CB,&infoP->enabled)); + ERR(ae->GetCOLOR(ID_FILL_COLOR,&infoP->fill_color)); + ERR(ae->GetFIXED2FpShort(ID_OPA_COLOR_FIXED,&infoP->opa_color)); + if (!err) { + if (infoP->opa_color<0) infoP->opa_color =0; + infoP->opa_color /=100; + infoP->opa_color2 = (PF_FpShort)1.0 - infoP->opa_color; + } + return err; +} +//----------------------------------------------------------------------------------- +static ParamInfo16 to16(ParamInfo8 *prm) +{ + ParamInfo16 prm16; + prm16.enabled = prm->enabled; + prm16.fill_color = CONV8TO16(prm->fill_color); + prm16.opa_color = prm->opa_color; + prm16.opa_color2 = prm->opa_color2; + + return prm16; +} +//----------------------------------------------------------------------------------- +static ParamInfo32 to32(ParamInfo8 *prm) +{ + ParamInfo32 prm32; + prm32.enabled = prm->enabled; + prm32.fill_color = CONV8TO32(prm->fill_color); + prm32.opa_color = prm->opa_color; + prm32.opa_color2 = prm->opa_color2; + return prm32; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->CopyInToOut()); + if ((infoP->enabled ==TRUE)&&(infoP->opa_color>0)) { + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ParamInfo32 info32; + info32 = to32(infoP); + ERR(ae->iterate32((refconType)&info32,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + info16 = to16(infoP); + ERR(ae->iterate16((refconType)&info16,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + } + + return err; +} + + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo8 info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo8),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo8 *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/FillColor/FillColor.h b/FillColor/FillColor.h new file mode 100644 index 0000000..bdc3743 --- /dev/null +++ b/FillColor/FillColor.h @@ -0,0 +1,99 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef FillColor_H +#define FillColor_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + + +#define STR_ENABLED_CB1 "実行する" +#define STR_ENABLED_CB2 "ON" +#define STR_COLOR "色" +#define STR_OPA_FIXED "不透明度" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + //以下参考用 + ID_ENABLED_CB, //boolean + ID_FILL_COLOR, // + ID_OPA_COLOR_FIXED, + ID_NUM_PARAMS + }; + +typedef struct ParamInfo8{ + PF_Boolean enabled; + PF_Pixel fill_color; + PF_FpShort opa_color; + PF_FpShort opa_color2; + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + +typedef struct ParamInfo16{ + PF_Boolean enabled; + PF_Pixel16 fill_color; + PF_FpShort opa_color; + PF_FpShort opa_color2; + +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; + +typedef struct ParamInfo32{ + PF_Boolean enabled; + PF_PixelFloat fill_color; + PF_FpShort opa_color; + PF_FpShort opa_color2; + +} ParamInfo32, *ParamInfo32P, **ParamInfo32H; + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +//------------------------------------------------------------------------------------ +#endif // FillColor_H diff --git a/FillColor/FillColorPiPL.r b/FillColor/FillColorPiPL.r new file mode 100644 index 0000000..34a840c --- /dev/null +++ b/FillColor/FillColorPiPL.r @@ -0,0 +1,75 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/FillColor/Fs_Target.h b/FillColor/Fs_Target.h new file mode 100644 index 0000000..73dcf29 --- /dev/null +++ b/FillColor/Fs_Target.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's FillColor" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "不透明部分の塗りつぶし" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 + +#define FS_VERSION 558592 +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/FillColor/Win/FillColor.vcxproj b/FillColor/Win/FillColor.vcxproj new file mode 100644 index 0000000..89c51e8 --- /dev/null +++ b/FillColor/Win/FillColor.vcxproj @@ -0,0 +1,331 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {0A2ECA9F-F0F9-40BE-B53D-BBFC63945496} + FillColor + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FillColor.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FillColor.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FillColor.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/FillColor/Win/FillColor.vcxproj.filters b/FillColor/Win/FillColor.vcxproj.filters new file mode 100644 index 0000000..b8ba159 --- /dev/null +++ b/FillColor/Win/FillColor.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {99b5cfa2-fb98-4491-9cb2-e48614842629} + h;hpp;hxx;hm;inl;fi;fd + + + {61398880-6220-4fd2-b4c1-143cbf55a8c3} + + + {95ff4768-10fd-4d83-ac69-4b18e5f63948} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {ba1ba800-5df0-47ec-a37b-41d323ef6106} + + + {bf1a934f-ae15-498b-ac1a-b7cc3cfad285} + + + {2277fef7-d716-4047-8a6c-db03872fcc83} + + + {de6a0ee8-1132-401a-ac7c-40d584da8627} + + + {055f95ae-72a0-4610-bcb8-cbb12a68057d} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/FillColor/Win/FillColorPiPL.rc b/FillColor/Win/FillColorPiPL.rc new file mode 100644 index 0000000..398cb8a --- /dev/null +++ b/FillColor/Win/FillColorPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0DF's FillColor\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0DF's FillColor\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Frame/Frame.cpp b/Frame/Frame.cpp new file mode 100644 index 0000000..49cdce8 --- /dev/null +++ b/Frame/Frame.cpp @@ -0,0 +1,324 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Frame.h" + + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_WIDTH_ADD, //パラメータの名前 + 50, //数値入力する場合の最小値 + 4800, //数値入力する場合の最大値 + 640, //スライダーの最小値 + 1920, //スライダーの最大値 + 1280, //デフォルトの値 + ID_WIDTH_ADD + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_HEIGHT_ADD, //パラメータの名前 + 50, //数値入力する場合の最小値 + 4800, //数値入力する場合の最大値 + 480, //スライダーの最小値 + 1080, //スライダーの最大値 + 720, //デフォルトの値 + ID_HEIGHT_ADD + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( Str_LINE_COLOR, + 0xFF, + 0x00, + 0x00, + ID_LINE_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_SAFE_ADD, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 50, //スライダーの最小値 + 100, //スライダーの最大値 + 80, //デフォルトの値 + ID_SAFE_ADD + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(Str_CENTER_CB1, + Str_CENTER_CB2, + TRUE, + 0, + ID_CENTER_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( Str_OUT_COLOR, + 0xFF, + 0x00, + 0xFF, + ID_OUT_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_OUT_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OUT_OPACITY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_LINE_HEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 10, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 5, //スライダーの最大値 + 2, //デフォルトの値 + ID_LINE_HEIGHT + ); + //---------------------------------------------------------------- + //7個目のパラメータ + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( Str_SIZE_POP1, + 7, //メニューの数 + 1, //デフォルト + Str_SIZE_POP2, + ID_SIZE_POP + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if ( ( ae == NULL) || ( infoP == NULL)){ + err = PF_Err_BAD_CALLBACK_PARAM; + return err; + } + ERR(ae->GetPOPUP(ID_SIZE_POP,&infoP->size_kind)); + if(!err) { + switch (infoP->size_kind){ + case SIZE_720_540: + infoP->frame_Width = 720; + infoP->frame_Height = 540; + break; + case SIZE_1024_576: + infoP->frame_Width = 1024; + infoP->frame_Height = 576; + break; + case SIZE_1024_768: + infoP->frame_Width = 1024; + infoP->frame_Height = 768; + break; + case SIZE_1280_720: + infoP->frame_Width = 1280; + infoP->frame_Height = 720; + break; + case SIZE_1440_810: + infoP->frame_Width = 1440; + infoP->frame_Height = 810; + break; + case SIZE_1920_1080: + infoP->frame_Width = 1920; + infoP->frame_Height = 1080; + break; + case SIZE_CUSTUM: + default: + ERR(ae->GetADD(ID_WIDTH_ADD,&infoP->frame_Width)); + ERR(ae->GetADD(ID_HEIGHT_ADD,&infoP->frame_Height)); + break; + } + //infoP->frame_Width = ae->downScale(infoP->frame_Width); + //infoP->frame_Height = ae->downScale(infoP->frame_Height); + + ERR(ae->GetCOLOR(ID_LINE_COLOR, &infoP->line_color)); + ERR(ae->GetADD(ID_SAFE_ADD, &infoP->safe_frame)); + ERR(ae->GetCHECKBOX(ID_CENTER_CB, &infoP->center_line)); + ERR(ae->GetCOLOR(ID_OUT_COLOR, &infoP->out_color)); + ERR(ae->GetFIXED2FpShort(ID_OUT_OPACITY, &infoP->out_opacity)); + if ( !err) { + infoP->out_opacity /=100; + infoP->out_color.alpha = RoundByteFpShort(PF_MAX_CHAN8 * infoP->out_opacity); + } + ERR(ae->GetADD(ID_LINE_HEIGHT, &infoP->line_height)); + /* + if ( !err) { + infoP->line_height = ae->downScale(infoP->line_height); + infoP->center_x = ae->out->width() /2; + infoP->center_y = ae->out->height() /2; + infoP->frm.top = (A_short)(infoP->center_y - (infoP->frame_Height /2)); + infoP->frm.bottom = (A_short)(infoP->center_y + (infoP->frame_Height /2) -1); + infoP->frm.left = (A_short)(infoP->center_x - (infoP->frame_Width /2)); + infoP->frm.right = (A_short)(infoP->center_x + (infoP->frame_Width /2) -1); + + A_long sW = infoP->frame_Width * infoP->safe_frame / 100; + A_long sH = infoP->frame_Height * infoP->safe_frame / 100; + infoP->safe.top = (A_short)(infoP->center_y - (sH /2)); + infoP->safe.bottom = (A_short)(infoP->center_y + (sH /2) -1); + infoP->safe.left = (A_short)(infoP->center_x - (sW /2)); + infoP->safe.right = (A_short)(infoP->center_x + (sW /2) -1); + } + */ + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + infoP->frame_Width = ae->downScale(infoP->frame_Width); + infoP->frame_Height = ae->downScale(infoP->frame_Height); + + infoP->line_height = ae->downScale(infoP->line_height); + infoP->center_x = ae->out->width() /2; + infoP->center_y = ae->out->height() /2; + infoP->frm.top = (A_short)(infoP->center_y - (infoP->frame_Height /2)); + infoP->frm.bottom = (A_short)(infoP->center_y + (infoP->frame_Height /2) -1); + infoP->frm.left = (A_short)(infoP->center_x - (infoP->frame_Width /2)); + infoP->frm.right = (A_short)(infoP->center_x + (infoP->frame_Width /2) -1); + + A_long sW = infoP->frame_Width * infoP->safe_frame / 100; + A_long sH = infoP->frame_Height * infoP->safe_frame / 100; + infoP->safe.top = (A_short)(infoP->center_y - (sH /2)); + infoP->safe.bottom = (A_short)(infoP->center_y + (sH /2) -1); + infoP->safe.left = (A_short)(infoP->center_x - (sW /2)); + infoP->safe.right = (A_short)(infoP->center_x + (sW /2) -1); + + + PF_InData *in_data; + in_data = ae->in_data; + + ERR(PF_FILL(NULL, NULL, ae->output)); + ERR(PF_FILL(&infoP->out_color, NULL, ae->output)); + ERR(PF_FILL(NULL, &infoP->frm, ae->output)); + A_long bak =ae->out->lineHeiht; + ae->out->lineHeiht = infoP->line_height; + ae->out->box(infoP->frm.left,infoP->frm.top,infoP->frm.right,infoP->frm.bottom,infoP->line_color,infoP->line_color); + if (infoP->center_line==TRUE){ + A_long p = ae->out->lineHeiht / 2; + ae->out->XLine(0,ae->out->width(),infoP->center_y -p,infoP->line_color); + ae->out->YLine(infoP->center_x - p,0,ae->out->height(),infoP->line_color); + } + if ( (infoP->safe_frame>0)&&(infoP->safe_frame<100) ){ + ae->out->box(infoP->safe.left,infoP->safe.top,infoP->safe.right,infoP->safe.bottom,infoP->line_color,infoP->line_color); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/Frame/Frame.h b/Frame/Frame.h new file mode 100644 index 0000000..9ad4a6c --- /dev/null +++ b/Frame/Frame.h @@ -0,0 +1,117 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + + +#ifndef Frame_H +#define Frame_H + +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_WIDTH_ADD, //long + ID_HEIGHT_ADD, //long + ID_LINE_COLOR, //PF_Pixel + ID_SAFE_ADD, //long + ID_CENTER_CB, //boolean + ID_OUT_COLOR, //PF_Pixel + ID_OUT_OPACITY, + ID_LINE_HEIGHT, + ID_SIZE_POP, + ID_NUM_PARAMS + }; + +enum { + SIZE_CUSTUM = 1, + SIZE_720_540, + SIZE_1024_576, + SIZE_1024_768, + SIZE_1280_720, + SIZE_1440_810, + SIZE_1920_1080, +}; + + +#define Str_WIDTH_ADD "width" +#define Str_HEIGHT_ADD "height" +#define Str_LINE_COLOR "line_color" +#define Str_SAFE_ADD "safe_frame" +#define Str_CENTER_CB1 "center_line" +#define Str_CENTER_CB2 "ON" +#define Str_OUT_COLOR "out_color" +#define Str_OUT_OPACITY "out_opacity" +#define Str_LINE_HEIGHT "line_height" +#define Str_SIZE_POP1 "size" +#define Str_SIZE_POP2 "上の数値|720x540|1024x576|1024x768|1280x720|1440x810|1920x1080" + + +typedef struct { + A_long frame_Width; + A_long frame_Height; + PF_Pixel line_color; + A_long safe_frame; + PF_Boolean center_line; + PF_Pixel out_color; + PF_FpShort out_opacity; + A_long line_height; + A_long center_x; + A_long center_y; + PF_Rect frm; + PF_Rect safe; + A_long size_kind; +} ParamInfo; + + + + +//------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} +//------------------------------------------------------- + +#endif // Frame_H diff --git a/Frame/FramePiPL.r b/Frame/FramePiPL.r new file mode 100644 index 0000000..ee44aad --- /dev/null +++ b/Frame/FramePiPL.r @@ -0,0 +1,77 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + /*"F's Plugins"*/ + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/Frame/Fs_Entry.h b/Frame/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/Frame/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Frame/Fs_Target.h b/Frame/Fs_Target.h new file mode 100644 index 0000000..7e1a0a3 --- /dev/null +++ b/Frame/Fs_Target.h @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Frame" +//#define FS_NAME "FsSSFrame" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "フレームを描く" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //標準16/32bit対応 +//#define FS_OUT_FLAGS 33556036 //毎フレーム描画 +//#define FS_OUT_FLAGS 1600 //8bit飲み + + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ + +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + +//#define FS_OUT_FLAGS2 73 //8Bitのみ + +#endif diff --git a/Frame/Win/Frame.vcxproj b/Frame/Win/Frame.vcxproj new file mode 100644 index 0000000..f787e05 --- /dev/null +++ b/Frame/Win/Frame.vcxproj @@ -0,0 +1,335 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {4C755A4A-5DC9-403F-B35B-D2800DBE64D7} + Frame + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Frame.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Frame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Frame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/Frame/Win/Frame.vcxproj.filters b/Frame/Win/Frame.vcxproj.filters new file mode 100644 index 0000000..2d4e314 --- /dev/null +++ b/Frame/Win/Frame.vcxproj.filters @@ -0,0 +1,172 @@ + + + + + {5358c6a6-d518-47ef-a36f-cb9dea9776d7} + h;hpp;hxx;hm;inl;fi;fd + + + {5d36c585-c012-4e88-8c9b-4b679681e273} + + + {cdab52c8-5aca-4674-849a-3ae1ea1dedc0} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {5511e854-740b-46ed-8b67-22594ada62dc} + + + {bb19d122-7600-4423-bdc8-ccc80039ace6} + + + {2ff27aae-4187-43e3-8ab0-1673447398f8} + + + {a7b64b92-c353-4d3f-a269-e7246f6f2805} + + + {0e050205-01b8-4c7c-aabb-7d6d32fede18} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/Frame/Win/FramePiPL.rc b/Frame/Win/FramePiPL.rc new file mode 100644 index 0000000..d14db6a --- /dev/null +++ b/Frame/Win/FramePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 12, 0x0, + "\x09F's Frame\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x12F's Plugins-Script\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 12, 0x0, + "\x09F's Frame\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/FsLibrary/AE_headers.h b/FsLibrary/AE_headers.h new file mode 100644 index 0000000..7159ffc --- /dev/null +++ b/FsLibrary/AE_headers.h @@ -0,0 +1,31 @@ +#pragma once +#ifndef AEHEADERS_H +#define AEHEADERS_H + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + + +#endif // AE_headers.H \ No newline at end of file diff --git a/FsLibrary/FsAE.h b/FsLibrary/FsAE.h new file mode 100644 index 0000000..9c40847 --- /dev/null +++ b/FsLibrary/FsAE.h @@ -0,0 +1,2056 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +//FsAE +#pragma once +#ifndef FsAE_H +#define FsAE_H + +//****************************************************************************** + +#include "AEConfig.h" +#include "entry.h" +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #ifndef refconType + #define refconTypeF void* + #endif +#else + #include "PF_Suite_Helper.h" + #ifndef refconType + #define refconTypeF A_long + #endif +#endif +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#ifdef AE_OS_WIN + #include +#endif + +#include "FsUtils.h" +#include "FsBuffer.h" + +#ifndef NO_USE_FSGRAPHICS + #include "FsGraphics.h" +#endif + +enum +{ + FsAE_NONE = 0, + FsAE_ABOUT, + FsAE_GLOBAL_SETUP, + FsAE_GLOBAL_SETDOWN, + FsAE_PARAMS_SETUP, + FsAE_SEQUENCE_SETUP, + FsAE_SEQUENCE_SETDOWN, + FsAE_SEQUENCE_RESETUP, + FsAE_RENDER, + FsAE_SMART_PR_ERENDER, + FsAE_SMART_RENDER, + FsAE_DO_DIALOG, + FsAE_USER_CHANGED_PARAM, + FsAE_QUERY_DYNAMIC_FLAGS + +}; + + +#define FsAE_ERR PF_Err_BAD_CALLBACK_PARAM +//----------------------------------------------------------------------------------- +/* + プラグインID獲得のための構造体 +*/ +typedef struct { + PF_Boolean initializedB; + AEGP_PluginID my_id; +} ae_global_data, *ae_global_dataP, **ae_global_dataH; +//----------------------------------------------------------------------------------- +typedef struct FsPixelCopyParam{ + A_long srcX; + A_long srcY; + A_long dstX; + A_long dstY; + A_long width; + A_long height; +}FsPixelCopyParam; + + +//****************************************************************************** +#define FS_ABOUT_DIALOG "function FsAbout()\ +{\ + var strName = \"%s\";\ + var strVersion = \"version %d.%d\";\ + var strDis = \"%s\";\ + var strMyName = \"bryful@gmail.com Twitte:bryful\";\ + var winObj = new Window(\"dialog\", \"F's Plugins\", [ 709, 430, 709+ 485, 430+ 152] );\ + this.edFsName = winObj.add(\"edittext\", [ 32, 12, 32+ 441, 12+ 39], strName, { readonly:true, borderless:true });\ + this.edFsName.graphics.font = ScriptUI.newFont(\"Tahoma\",ScriptUI.FontStyle.BOLD, 32);\ + this.edFsVersion = winObj.add(\"edittext\", [ 71, 57, 71+ 384, 57+ 20], strVersion, { readonly:true, borderless:true });\ + this.edFsVersion.graphics.font = ScriptUI.newFont(\"Tahoma\",ScriptUI.FontStyle.BOLD, 16);\ + this.edFsDis = winObj.add(\"edittext\", [ 32, 85, 32+ 441, 85+ 20], strDis, { readonly:true, borderless:true });\ + this.edFsDis.graphics.font = ScriptUI.newFont(\"Tahoma\",ScriptUI.FontStyle.REGULAR, 16);\ + this.edMyName = winObj.add(\"edittext\", [ 32, 117, 32+ 304, 117+ 20], strMyName, { readonly:true, borderless:true });\ + this.edMyName.graphics.font = ScriptUI.newFont(\"Tahoma\",ScriptUI.FontStyle.REGULAR, 16);\ + var btnOK = winObj.add(\"button\", [ 357, 117, 357+ 98, 117+ 23], \"OK\" , { name:\"ok\" });\ + btnOK.graphics.font = ScriptUI.newFont(\"Tahoma\",ScriptUI.FontStyle.REGULAR, 11);\ + this.show = function()\ + {\ + winObj.center(); \ + return winObj.show();\ + }\ +}\ +var dlg = new FsAbout;\ +dlg.show();" + + +#define FsAE_ITEM_COUNT 256 + +//****************************************************************************** +//----------------------------------------------------------------------------- +//描画に必要な情報を集めた構造体 +typedef struct{ + // + /*01*/PF_InData *in_data; + /*02*/PF_OutData *out_data; + // + /*03*/PF_EffectWorld *input; + /*04*/PF_EffectWorld *output; + // + /*05*/PF_PixelPtr inData; + /*06*/PF_PixelPtr outData; + /*07*/PF_Boolean is16Bit; + + /*08*/A_long width; + /*09*/A_long height; + /*10*/A_long inWidthTrue; + /*11*/A_long outWidthTrue; + /*12*/A_long offsetInWidth; + /*13*/A_long offsetOutWidth; + /*14*/A_long currentFrame; + /*15*/PF_PixelFormat pixelFormat; + /*16*/A_long reserve2; +} AEInfo; +//****************************************************************************** +class CFsAE{ +private: +protected: + PF_PixelFormat m_format; + A_long m_frame; + A_long m_mode; + A_long m_paramsCount; + PF_Err m_resultErr; + PF_Boolean m_isGetEffectStream; + PF_EffectWorld m_tmp; + + PF_EffectWorld m_buf1; + PF_EffectWorld m_buf2; + +public: + //-------------------------------------------------------------------- + PF_InData *in_data; + PF_OutData *out_data; + PF_ParamDef *params[FsAE_ITEM_COUNT]; + + PF_SmartRenderExtra *SRextraP; + PF_PreRenderExtra *PRextraP; + PF_WorldSuite2 *ws2P; + + PF_EffectWorld *input; + PF_EffectWorld *output; + PF_EffectWorld *tmpP; + + PF_EffectWorld *buf1P; + PF_EffectWorld *buf2P; + +#ifndef NO_USE_FSGRAPHICS + CFsGraph* in; + CFsGraph* out; + CFsGraph* tmp; + CFsGraph* buf1; + CFsGraph* buf2; +#endif + PF_Handle PreRenderH; + AEGP_SuiteHandler *suitesP; + PF_Handle ae_plugin_idH; + ae_global_dataP ae_plugin_idP; + AEGP_StreamRefH ae_item_streamH[FsAE_ITEM_COUNT]; + AEGP_EffectRefH ae_effect_refH; + //********************************************************************************* + //********************************************************************************* + void Init() + { + m_format = PF_PixelFormat_INVALID; + m_frame = 0; + m_mode = FsAE_NONE; + m_paramsCount = 0; + m_isGetEffectStream = FALSE; + m_resultErr = PF_Err_NONE; + + //m_tmp = NULL; + //m_buf1 = NULL; + //m_buf2 = NULL; + + CFsAE::in_data = NULL; + CFsAE::out_data = NULL; + CFsAE::input = NULL; + CFsAE::output = NULL; + CFsAE::tmpP = NULL; + CFsAE::buf1P = NULL; + CFsAE::buf2P = NULL; + +#ifndef NO_USE_FSGRAPHICS + CFsAE::in = NULL; + CFsAE::out = NULL; + CFsAE::tmp = NULL; + CFsAE::buf1 = NULL; + CFsAE::buf2 = NULL; +#endif + + CFsAE::PreRenderH = NULL; + CFsAE::PRextraP = NULL; + CFsAE::SRextraP = NULL; + CFsAE::ws2P = NULL; + CFsAE::suitesP = NULL; + CFsAE::ae_plugin_idH = NULL; + CFsAE::ae_plugin_idP = NULL; + + CFsAE::ae_effect_refH = NULL; + for (A_long i=0; icurrent_time>=0)&&(in_dataP->time_step>0) ) { + m_frame =(in_dataP->current_time/in_dataP->time_step); + } + + CFsAE::in_data = in_dataP; + CFsAE::out_data = out_dataP; + + if ( paramsP !=NULL){ + CFsAE::input = ¶msP[0]->u.ld; + for ( A_long i=0; ipica_basicP); + + if (in_dataP->global_data){ + ae_plugin_idH = in_dataP->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_dataP->global_data)); + } + + m_resultErr = err; + + m_mode = FsAE_RENDER; + return err; + } + //********************************************************************************* + //PreRender + //********************************************************************************* + //-------------------------------- + CFsAE( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP, + A_long infoSize, + A_long paramsCount + ) + { + m_resultErr = PreRender(in_dataP,out_dataP,extraP,infoSize,paramsCount); + } + //-------------------------------- + PF_Err PreRender( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP, + A_long infoSize, + A_long paramsCount + ) + { + Init(); + PF_Err err = PF_Err_NONE; + if ((in_dataP ==NULL) || ( out_dataP ==NULL)|| (extraP ==NULL)){ + m_resultErr = FsAE_ERR; + return m_resultErr; + } + CFsAE::in_data = in_dataP; + CFsAE::out_data = out_dataP; + CFsAE::PRextraP = extraP; + m_paramsCount = paramsCount; + + //カレントフレームを求める画頭は0 + if ( (in_dataP->current_time>=0)&&(in_dataP->time_step>0) ) { + m_frame =(in_dataP->current_time/in_dataP->time_step); + } + m_mode = FsAE_SMART_PR_ERENDER; + CFsAE::suitesP = new AEGP_SuiteHandler(in_dataP->pica_basicP); + if ( infoSize>0){ + NewPreRenderData(infoSize); + if (PreRenderH==NULL){ + m_resultErr = PF_Err_OUT_OF_MEMORY; + m_mode = FsAE_NONE; + return m_resultErr; + } + } + if (in_dataP->global_data){ + ae_plugin_idH = in_dataP->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_dataP->global_data)); + } + + + m_resultErr = err; + return err; + } + //********************************************************************************* + //SmartRender + //********************************************************************************* + //-------------------------------- + CFsAE( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_SmartRenderExtra *extraP, + A_long paramsCount + ) + { + m_resultErr = SmartRender(in_dataP, out_dataP, extraP, paramsCount); + } + //-------------------------------- + PF_Err SmartRender( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_SmartRenderExtra *extraP, + A_long paramsCount + ) + { + Init(); + PF_Err err = PF_Err_NONE; + if ((in_dataP ==NULL) || ( out_dataP ==NULL)|| (extraP ==NULL)){ + m_resultErr = FsAE_ERR; + return m_resultErr; + } + //カレントフレームを求める画頭は0 + if ( (in_dataP->current_time>=0)&&(in_dataP->time_step>0) ) { + m_frame =(in_dataP->current_time/in_dataP->time_step); + } + CFsAE::in_data = in_dataP; + CFsAE::out_data = out_dataP; + CFsAE::SRextraP = extraP; + m_paramsCount = paramsCount; + + CFsAE::suitesP = new AEGP_SuiteHandler(in_dataP->pica_basicP); + + ERR((extraP->cb->checkout_layer_pixels( in_dataP->effect_ref, 0, &(CFsAE::input)))); + ERR(extraP->cb->checkout_output(in_dataP->effect_ref, &(CFsAE::output))); + ERR(AEFX_AcquireSuite( in_dataP, + out_dataP, + kPFWorldSuite, + kPFWorldSuiteVersion2, + "Couldn't load suite.", + (void**)&(CFsAE::ws2P))); + ERR(CFsAE::ws2P->PF_GetPixelFormat(CFsAE::input, &m_format)); + if (err) { + m_resultErr = PF_Err_BAD_CALLBACK_PARAM; + return m_resultErr; + } + +#ifndef NO_USE_FSGRAPHICS + CFsAE::in = new CFsGraph(CFsAE::input,CFsAE::in_data,m_format); + CFsAE::out = new CFsGraph(CFsAE::output,CFsAE::in_data,m_format); +#endif + if (in_dataP->global_data){ + ae_plugin_idH = in_dataP->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_dataP->global_data)); + } + + + m_resultErr = err; + m_mode = FsAE_SMART_RENDER; + return err; + } + //********************************************************************************* + //********************************************************************************* + //その他の処理 + //********************************************************************************* + PF_Err About + ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) + { + PF_Err err = PF_Err_NONE; + CFsAE::suitesP = new AEGP_SuiteHandler(in_data->pica_basicP); + if (in_data->global_data){ + ae_plugin_idH = in_data->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_data->global_data)); + } + //カレントフレームを求める画頭は0 + if ( (in_data->current_time>=0)&&(in_data->time_step>0) ) { + m_frame =(in_data->current_time/in_data->time_step); + } + if (ae_plugin_idP!=NULL){ + + A_char scriptCode[2048] = {'\0'}; + PF_SPRINTF( scriptCode,FS_ABOUT_DIALOG, + FS_NAME, + MAJOR_VERSION, + MINOR_VERSION, + FS_DESCRIPTION); + + ERR(suitesP->UtilitySuite5()->AEGP_ExecuteScript(ae_plugin_idP->my_id, scriptCode, TRUE, NULL, NULL)); + + }else{ + PF_SPRINTF( out_data->return_msg, + "%s, v%d.%d\r%s", + FS_NAME, + MAJOR_VERSION, + MINOR_VERSION, + FS_DESCRIPTION); + } + m_resultErr = err; + m_mode = FsAE_ABOUT; + return err; + } + //********************************************************************************* + PF_Err GlobalSetup + ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) + { + PF_Err err = PF_Err_NONE; + CFsAE::suitesP = new AEGP_SuiteHandler(in_data->pica_basicP); + + //Fs_Target.hで定義 + out_data->my_version = FS_VERSION; + out_data->out_flags = FS_OUT_FLAGS; + out_data->out_flags2 = FS_OUT_FLAGS2; + + /********************************************************** + プラグインIDを獲得して、グローバルにアクセスできるように保存 + */ + ae_plugin_idH = suitesP->HandleSuite1()->host_new_handle(sizeof(ae_global_data)); + + if (ae_plugin_idH) { + ae_plugin_idP = reinterpret_cast(suitesP->HandleSuite1()->host_lock_handle(ae_plugin_idH)); + if (ae_plugin_idP) { + ae_plugin_idP->initializedB = TRUE; + + if (in_data->appl_id != 'PrMr') { + ERR(suitesP->UtilitySuite3()->AEGP_RegisterWithAEGP(NULL, FS_NAME, &ae_plugin_idP->my_id)); + } + if (!err){ + out_data->global_data = ae_plugin_idH; + } + } + suitesP->HandleSuite1()->host_unlock_handle(ae_plugin_idH); + } else { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + } + //********************************************************** + m_mode = FsAE_GLOBAL_SETUP; + + return err; + + } + //********************************************************************************* + PF_Err GlobalSetdown(PF_InData *in_data) + { + PF_Err err = PF_Err_NONE; + CFsAE::suitesP = new AEGP_SuiteHandler(in_data->pica_basicP); + + //ae_plugin_idH + if (in_data->global_data) { + suitesP->HandleSuite1()->host_dispose_handle(in_data->global_data); + } + m_mode = FsAE_GLOBAL_SETDOWN; + + return err; + } + //********************************************************************************* + PF_Err HandleChangedParam( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_ParamDef *paramsP[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP, + A_long paramsCount + ) + { + PF_Err err = PF_Err_NONE; + if ( (in_dataP ==NULL) || ( out_dataP ==NULL)||(paramsCount<=0)){ + m_resultErr = FsAE_ERR; + return m_resultErr; + } + CFsAE::in_data = in_dataP; + CFsAE::out_data = out_dataP; + + if ( outputP != NULL){ + if ( PF_WORLD_IS_DEEP(outputP) ==TRUE){ + m_format = PF_PixelFormat_ARGB64; + }else{ + m_format = PF_PixelFormat_ARGB32; + } + CFsAE::output = outputP; + } + //カレントフレームを求める画頭は0 + if ( (in_dataP->current_time>=0)&&(in_dataP->time_step>0) ) { + m_frame =(in_dataP->current_time/in_dataP->time_step); + } + + if ( paramsP !=NULL){ + CFsAE::input = ¶msP[0]->u.ld; + for ( A_long i=0; ipica_basicP); + if (in_dataP->global_data){ + ae_plugin_idH = in_dataP->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_dataP->global_data)); + } + if ( ae_plugin_idP){ + err = suitesP->PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(ae_plugin_idP->my_id, in_dataP->effect_ref, &ae_effect_refH); + } + if (!err) + m_mode = FsAE_USER_CHANGED_PARAM; + + return err; + } + //********************************************************************************* + PF_Err + QueryDynamicFlags( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_ParamDef *paramsP[], + void *extraP, + A_long paramsCount + ) + { + PF_Err err = PF_Err_NONE; + if ( (in_dataP ==NULL) || ( out_dataP ==NULL)|| (paramsCount<=0)){ + m_resultErr = FsAE_ERR; + return m_resultErr; + } + + //カレントフレームを求める画頭は0 + if ( (in_dataP->current_time>=0)&&(in_dataP->time_step>0) ) { + m_frame =(in_dataP->current_time/in_dataP->time_step); + } + + m_paramsCount = paramsCount; + + CFsAE::in_data = in_dataP; + CFsAE::out_data = out_dataP; + + if ( paramsP !=NULL){ + CFsAE::input = ¶msP[0]->u.ld; + for ( A_long i=0; ipica_basicP); + if (in_dataP->global_data){ + ae_plugin_idH = in_dataP->global_data; + ae_plugin_idP = reinterpret_cast(DH(in_dataP->global_data)); + } + m_mode = FsAE_QUERY_DYNAMIC_FLAGS; + + return err; + + } + //********************************************************************************* + //デストラクタ + //********************************************************************************* + ~CFsAE(){ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + if (ae_effect_refH!=NULL){ + suitesP->EffectSuite2()->AEGP_DisposeEffect(ae_effect_refH); + ae_effect_refH=NULL; + } + if (m_paramsCount>0){ + if ( m_isGetEffectStream==TRUE){ + for ( A_long i=0; iStreamSuite2()->AEGP_DisposeStream(ae_item_streamH[i])); + ae_item_streamH[i]=NULL; + } + } + } + } + + if (tmpP!= NULL) { + if (m_mode==FsAE_SMART_RENDER){ + ERR( CFsAE::ws2P->PF_DisposeWorld( in_data->effect_ref, CFsAE::tmpP )); + }else{ + ERR( (*in_data->utils->dispose_world)(in_data->effect_ref,CFsAE::tmpP)); + } + } + if (buf1P!= NULL) { + if (m_mode==FsAE_SMART_RENDER){ + ERR( CFsAE::ws2P->PF_DisposeWorld( in_data->effect_ref, CFsAE::buf1P )); + }else{ + ERR( (*in_data->utils->dispose_world)(in_data->effect_ref,CFsAE::buf1P)); + } + } + if (buf2P!= NULL) { + if (m_mode==FsAE_SMART_RENDER){ + ERR( CFsAE::ws2P->PF_DisposeWorld( in_data->effect_ref, CFsAE::buf2P )); + }else{ + ERR( (*in_data->utils->dispose_world)(in_data->effect_ref,CFsAE::buf2P)); + } + } + +#ifndef NO_USE_FSGRAPHICS + if ( (m_mode==FsAE_RENDER)||(m_mode==FsAE_SMART_RENDER)){ + if ( in != NULL) delete in; + if (out != NULL) delete out; + if (tmp != NULL) delete tmp; + if (buf1 != NULL) delete tmp; + if (buf2 != NULL) delete tmp; + } +#endif + if ( suitesP != NULL) { + delete suitesP; + suitesP = NULL; + } + + if (CFsAE::ws2P != NULL){ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + ERR2(AEFX_ReleaseSuite( in_data, + out_data, + kPFWorldSuite, + kPFWorldSuiteVersion2, + "Couldn't release suite.")); + } + } + //********************************************************************************* + //-------------------------------------------------------------------- + PF_Handle NewPreRenderData(A_long handleSize) + { + if (m_mode == FsAE_SMART_PR_ERENDER){ + PreRenderH = suitesP->HandleSuite1()->host_new_handle(handleSize); + return PreRenderH; + }else{ + return NULL; + } + } + //-------------------------------------------------------------------- + void * LockPreRenderData() + { + if (m_mode == FsAE_SMART_PR_ERENDER){ + if ( PreRenderH != NULL){ + return suitesP->HandleSuite1()->host_lock_handle(PreRenderH); + } + }else if (m_mode == FsAE_SMART_RENDER){ + if ( SRextraP != NULL){ + return suitesP->HandleSuite1()->host_lock_handle(reinterpret_cast(SRextraP->input->pre_render_data)); + } + } + return NULL; + } + //-------------------------------------------------------------------- + void UnlockPreRenderData() + { + if (m_mode == FsAE_SMART_PR_ERENDER){ + if ( PreRenderH != NULL){ + suitesP->HandleSuite1()->host_unlock_handle(PreRenderH); + } + }else if (m_mode == FsAE_SMART_RENDER){ + if ( SRextraP != NULL){ + suitesP->HandleSuite1()->host_lock_handle(reinterpret_cast(SRextraP->input->pre_render_data)); + } + } + } + //-------------------------------------------------------------------- + PF_Boolean SetHostPreRenderData() + { + PF_Boolean ret = FALSE; + if ( m_mode == FsAE_SMART_PR_ERENDER){ + if ( PreRenderH != NULL){ + PRextraP->output->pre_render_data = PreRenderH; + ret = TRUE; + } + } + return ret; + } + //-------------------------------------------------------------------- + PF_Err UnSetPreRenderData(PF_RenderRequest *req, PF_CheckoutResult *in_result) + { + PF_Err err = PF_Err_NONE; + if ( m_mode == FsAE_SMART_PR_ERENDER){ + ERR(PRextraP->cb->checkout_layer( in_data->effect_ref, + 0, + 0, + req, + in_data->current_time, + in_data->time_step, + in_data->time_scale, + in_result)); + + UnionLRect(&in_result->result_rect, &PRextraP->output->result_rect); + UnionLRect(&in_result->max_result_rect, &PRextraP->output->max_result_rect); + } + return err; + } + //-------------------------------------------------------------------- + PF_Err UnSetPreRenderData() + { + PF_RenderRequest req = PRextraP->input->output_request; + PF_CheckoutResult in_result; + return UnSetPreRenderData(&req,&in_result); + } + //-------------------------------------------------------------------- + PF_Err UnsetSmartRender() + { + return SRextraP->cb->checkin_layer_pixels(in_data->effect_ref, 0); + } + //-------------------------------------------------------------------- + PF_Err UI_DISABLE(A_long idx,PF_Boolean b) + { + PF_Err err = PF_Err_NONE; + if ((idx<0)||(idx>=m_paramsCount)||(params == NULL)) + { + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ + if (b == TRUE){ + params[idx]->ui_flags |= PF_PUI_DISABLED; + }else{ + params[idx]->ui_flags &= ~PF_PUI_DISABLED; + } +#if defined(PF_AE110_PLUG_IN_VERSION) + err =suitesP->ParamUtilsSuite3()->PF_UpdateParamUI(in_data->effect_ref, idx,params[idx]); +#else + err =suitesP->ParamUtilsSuite1()->PF_UpdateParamUI(in_data->effect_ref, idx,params[idx]); +#endif + } + return err; + } + //-------------------------------------------------------------------- + PF_Err UpdateParamUI(A_long idx) + { + PF_Err err = PF_Err_NONE; + if ((idx<0)||(idx>=m_paramsCount)||(params == NULL)||(in_data==NULL)) + { + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ +#if defined(PF_AE110_PLUG_IN_VERSION) + err =suitesP->ParamUtilsSuite3()->PF_UpdateParamUI(in_data->effect_ref, idx,params[idx]); +#else + err =suitesP->ParamUtilsSuite1()->PF_UpdateParamUI(in_data->effect_ref, idx,params[idx]); +#endif + } + return err; + } + //-------------------------------------------------------------------- + PF_Err GetNewEffectStreamAll() + { + PF_Err err = PF_Err_NONE; + for ( A_long i=0; i0){ + if ( (ae_plugin_idP)&&(ae_effect_refH)){ + for ( A_long i=1; iStreamSuite2()->AEGP_GetNewEffectStreamByIndex(ae_plugin_idP->my_id, ae_effect_refH, i, &ae_item_streamH[i])); + } + }else{ + err = FsAE_ERR; + } + } + if (!err) m_isGetEffectStream =TRUE; + return err; + } + //-------------------------------------------------------------------- + PF_Err SetDynamicStreamFlag(A_long idx,AEGP_DynStreamFlags flg,A_Boolean setB) + { + PF_Err err = PF_Err_NONE; + if ( (m_paramsCount>0)&&(m_isGetEffectStream ==TRUE)){ + if ( (idx>=1)&&(idxDynamicStreamSuite2()->AEGP_SetDynamicStreamFlag(ae_item_streamH[idx],flg,FALSE,setB); + }else{ + err = FsAE_ERR; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + } + return err; + } + //-------------------------------------------------------------------- + PF_Err DisposeEffectStream() + { + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + for ( A_long i=0; iStreamSuite2()->AEGP_DisposeStream(ae_item_streamH[i])); + ae_item_streamH[i]=NULL; + } + } + if (ae_effect_refH!=NULL){ + ERR2(suitesP->EffectSuite2()->AEGP_DisposeEffect(ae_effect_refH)); + ae_effect_refH=NULL; + } + + return err; + } + + //-------------------------------------------------------------------- + //********************************************************************************* + PF_Err checkout_param(A_long idx,PF_ParamDef *paramP) + { + PF_Err err = PF_Err_NONE; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + case FsAE_QUERY_DYNAMIC_FLAGS: + //PF_ParamDef param; + //AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + paramP)); + if (!err) { + //*paramP = param; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + return err; + } + //********************************************************************************* + PF_Err GetADD(A_long idx,A_long *a) + { + PF_Err err = PF_Err_NONE; + A_long ret =0; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.sd.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.sd.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *a = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetFIXED(A_long idx,PF_Fixed *f) + { + PF_Err err = PF_Err_NONE; + PF_Fixed ret =0; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.sd.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.sd.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *f = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetFIXED2FpShort(A_long idx,PF_FpShort *d) + { + PF_Err err = PF_Err_NONE; + PF_Fixed ret =0; + err = GetFIXED(idx,&ret); + if (!err){ + *d = (PF_FpShort)ret/65536; + }else{ + err =FsAE_ERR; + } + return err; + } + //-------------------------------------------------------------------- + PF_Err GetFIXED2FpShort_P1(A_long idx,PF_FpShort *d) + { + PF_Err err = PF_Err_NONE; + PF_Fixed ret =0; + err = GetFIXED(idx,&ret); + if (!err){ + *d = (PF_FpShort)ret/6553600; + }else{ + err =FsAE_ERR; + } + return err; + } + //-------------------------------------------------------------------- + PF_Err GetFIXED_PER2ONE(A_long idx,PF_Fixed *d) + { + PF_Err err = PF_Err_NONE; + PF_Fixed ret =0; + err = GetFIXED(idx,&ret); + if (!err){ + *d = (PF_Fixed)ret/100; + }else{ + err =FsAE_ERR; + } + return err; + } + //-------------------------------------------------------------------- + PF_Err GetANGLE(A_long idx,PF_Fixed *r) + { + PF_Err err = PF_Err_NONE; + PF_Fixed ret =0; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.ad.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.ad.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *r = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetANGLE_FLT(A_long idx, PF_FpLong *r) + { + PF_Err err = PF_Err_NONE; + PF_Fixed rr; + err = GetANGLE(idx, &rr); + + *r = (PF_FpLong)rr / 65536.0; + + return err; + } + //-------------------------------------------------------------------- + PF_Err GetCHECKBOX(A_long idx,PF_Boolean *b) + { + PF_Err err = PF_Err_NONE; + PF_Boolean ret =FALSE; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = (PF_Boolean)param.u.bd.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = (PF_Boolean)params[idx]->u.bd.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *b = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetCOLOR(A_long idx,PF_Pixel* c) + { + PF_Err err = PF_Err_NONE; + PF_Pixel ret = {0,0,0,0}; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.cd.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.cd.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *c = ret; + return err; + + + } + //-------------------------------------------------------------------- + PF_Err GetFLOAT(A_long idx,PF_FpLong *f) + { + PF_Err err = PF_Err_NONE; + PF_FpLong ret = 0; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.fs_d.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.fs_d.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *f = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetFIXEDPOINT(A_long idx,PF_FixedPoint *pos) + { + PF_Err err = PF_Err_NONE; + PF_FixedPoint ret; + ret.x =-1; + ret.y =-1; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret.x = param.u.td.x_value; + ret.y = param.u.td.y_value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret.x = CFsAE::params[idx]->u.td.x_value; + ret.y = CFsAE::params[idx]->u.td.y_value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *pos = ret; + return err; + } + //-------------------------------------------------------------------- + PF_Err GetPOPUP(A_long idx,A_long *pop) + { + PF_Err err = PF_Err_NONE; + A_long ret = 1; + if (( idx >=1)&&(idx < m_paramsCount)) { + switch(m_mode) + { + case FsAE_SMART_PR_ERENDER: + //case FsAE_QUERY_DYNAMIC_FLAGS: + PF_ParamDef param; + AEFX_CLR_STRUCT(param); + ERR(PF_CHECKOUT_PARAM( + in_data, + idx, + in_data->current_time, in_data->time_step,in_data->time_scale, + ¶m)); + if (!err) { + ret = param.u.pd.value; + }else{ + err = PF_Err_BAD_CALLBACK_PARAM; + } + break; + case FsAE_RENDER: + case FsAE_USER_CHANGED_PARAM: + ret = params[idx]->u.pd.value; + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + }else{ + err = PF_Err_INVALID_INDEX; + } + *pop = ret; + return err; + } + + //********************************************************************************* + PF_Err iterate8( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) + ) + { + return suitesP->Iterate8Suite1()->iterate( in_data, + 0, // progress base + output->height, // progress final + input, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + output); // dest + + } + //********************************************************************************* + PF_Err iterateBuf2_8( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) + ) + { + return suitesP->Iterate8Suite1()->iterate( in_data, + 0, // progress base + buf2P->height, // progress final + buf1P, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + buf2P); // dest + + } + //********************************************************************************* + PF_Err iterateBuf2_16( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) + ) + { + return suitesP->Iterate16Suite1()->iterate( in_data, + 0, // progress base + buf2P->height, // progress final + buf1P, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + buf2P); // dest + + } + //********************************************************************************* + PF_Err iterateBuf1_8( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) + ) + { + return suitesP->Iterate8Suite1()->iterate( in_data, + 0, // progress base + buf1P->height, // progress final + buf2P, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + buf1P); // dest + + } + //********************************************************************************* + PF_Err iterateBuf1_16( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) + ) + { + return suitesP->Iterate16Suite1()->iterate( in_data, + 0, // progress base + buf1P->height, // progress final + buf2P, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + buf1P); // dest + + } + //********************************************************************************* + //********************************************************************************* + PF_Err iterateEx8( + refconType refcon, + PF_EffectWorld *i, + PF_EffectWorld *o, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) + ) + { + return suitesP->Iterate8Suite1()->iterate( in_data, + 0, // progress base + o->height, // progress final + i, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + o); // dest + + } + //********************************************************************************* + PF_Err iterate8_origin( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) + ) + { + PF_Point origin; + origin.h = (A_short)(in_data->output_origin_x); + origin.v = (A_short)(in_data->output_origin_y); + + return suitesP->Iterate8Suite1()->iterate_origin(in_data, + 0, + output->height, + input, + &output->extent_hint, + &origin, + (refconType)refcon, + pix_fn, + output); + + } + //********************************************************************************* + PF_Err iterate16_origin( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) + ) + { + PF_Point origin; + origin.h = (A_short)(in_data->output_origin_x); + origin.v = (A_short)(in_data->output_origin_y); + + return suitesP->Iterate16Suite1()->iterate_origin(in_data, + 0, + output->height, + input, + &output->extent_hint, + &origin, + (refconType)refcon, + pix_fn, + output); + + } + //********************************************************************************* + PF_Err iterate32_origin( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_PixelFloat *in, PF_PixelFloat *out) + ) + { + PF_Point origin; + origin.h = (A_short)(in_data->output_origin_x); + origin.v = (A_short)(in_data->output_origin_y); + + return suitesP->IterateFloatSuite1()->iterate_origin(in_data, + 0, + output->height, + input, + &output->extent_hint, + &origin, + (refconType)refcon, + pix_fn, + output); + + } + //********************************************************************************* + PF_Err iterate16( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) + ) + { + return suitesP->Iterate16Suite1()->iterate( in_data, + 0, // progress base + output->height, // progress final + input, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + output); // dest + + } + //********************************************************************************* + PF_Err iterateEx16( + refconType refcon, + PF_EffectWorld *i, + PF_EffectWorld *o, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) + ) + { + return suitesP->Iterate16Suite1()->iterate( in_data, + 0, // progress base + o->height, // progress final + i, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + o); // dest + + } + //********************************************************************************* + PF_Err iterate32( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_PixelFloat *in, PF_PixelFloat *out) + ) + { + return suitesP->IterateFloatSuite1()->iterate( + in_data, + 0, // progress base + output->height, // progress final + input, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + output); // dest + + } + //********************************************************************************* + PF_Err iterate32( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_PixelFloat *in, PF_PixelFloat *out), + PF_EffectWorld *src, + PF_EffectWorld *dst + ) + { + return suitesP->IterateFloatSuite1()->iterate( + in_data, + 0, // progress base + output->height, // progress final + src, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + dst); // dest + + } + //********************************************************************************* + PF_Err iterateEx32( + refconType refcon, + PF_EffectWorld *i, + PF_EffectWorld *o, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_PixelFloat *in, PF_PixelFloat *out) + ) + { + return suitesP->IterateFloatSuite1()->iterate( in_data, + 0, // progress base + o->height, // progress final + i, // src + NULL, // area - null for all pixels + refcon, // refcon - your custom data pointer + pix_fn, // pixel function pointer + o); // dest + + } + //********************************************************************************* + PF_Err iterate32_ORG( + refconType refcon, + PF_Err (*pix_fn)(refconType refcon, A_long x, A_long y, PF_PixelFloat *in, PF_PixelFloat *out) + ) + { + A_long w = in->width(); + A_long h = in->height(); + + PF_PixelFloat *inD; + PF_PixelFloat *outD; + + inD = (PF_PixelFloat *)in->data(); + outD = (PF_PixelFloat *)out->data(); + for ( A_long y =0; yoffsetWidth(); + outD += out->offsetWidth(); + } + return PF_Err_NONE; + } + //********************************************************************************* + //********************************************************************************* + PF_Err SetOutFlag_NON_PARAM_VARY(PF_Boolean b) + { + PF_Err err = PF_Err_NONE; + if( out_data !=NULL){ + if (b==TRUE){ + out_data->out_flags |= PF_OutFlag_NON_PARAM_VARY; + }else{ + out_data->out_flags &= ~PF_OutFlag_NON_PARAM_VARY; + } + } + return err; + } + //********************************************************************************* + PF_Err checkin_param(PF_ParamDef *defP) + { + return PF_CHECKIN_PARAM(in_data, defP); + } + //********************************************************************************* + //-------------------------------------------------------------------- + PF_Boolean is8Bit(){ return (m_format == PF_PixelFormat_ARGB32);} + PF_Boolean is16Bit(){ return (m_format == PF_PixelFormat_ARGB64);} + PF_Boolean is32Bit(){ return (m_format == PF_PixelFormat_ARGB128);} + PF_PixelFormat pixelFormat() { return m_format;} + A_long frame(){ return m_frame; } + A_long mode(){ return m_mode; } + PF_Err resultErr() { return m_resultErr;} + //********************************************************************************* + PF_Err Get_AEParams(AEInfo *prm) + { + prm->in_data = in_data; + prm->out_data = out_data; + prm->input = input; + prm->output = output; + prm->inData = input->data; + prm->outData = output->data; + prm->is16Bit = (m_format == PF_PixelFormat_ARGB64); + prm->width = in->width(); + prm->height = in->height(); + prm->inWidthTrue = in->widthTrue(); + prm->outWidthTrue = out->widthTrue(); + prm->offsetInWidth = in->offsetWidth(); + prm->offsetOutWidth = out->offsetWidth(); + prm->currentFrame = m_frame; + prm->pixelFormat = m_format; + return PF_Err_NONE; + } + //********************************************************************************* + PF_Err NewTmpWorld() + { + PF_Err err = PF_Err_NONE; + AEFX_CLR_STRUCT(m_tmp); + if (m_mode==FsAE_SMART_RENDER){ + ERR( CFsAE::ws2P->PF_NewWorld( in_data->effect_ref, output->width, output->height,TRUE,m_format,&m_tmp )); + + }else{ + PF_NewWorldFlags f = PF_NewWorldFlag_CLEAR_PIXELS | PF_NewWorldFlag_NONE; + if (m_format ==PF_PixelFormat_ARGB64 ) f = PF_NewWorldFlag_CLEAR_PIXELS | PF_NewWorldFlag_DEEP_PIXELS; + + ERR( (*in_data->utils->new_world)( in_data->effect_ref, output->width, output->height, f,&m_tmp )); + } + CFsAE::tmpP = &m_tmp; +#ifndef NO_USE_FSGRAPHICS + CFsAE::tmp = new CFsGraph(CFsAE::tmpP,CFsAE::in_data,m_format); +#endif + return err; + } + //********************************************************************************* + PF_Err NewHarfBuf() + { + PF_Err err = PF_Err_NONE; + AEFX_CLR_STRUCT(m_buf1); + AEFX_CLR_STRUCT(m_buf2); + + A_long w = output->width/2; + if ( (output->width % 2) == 1) w +=1; + A_long h = output->height/2; + if ( (output->height % 2) == 1) h +=1; + + if (m_mode==FsAE_SMART_RENDER){ + ERR( CFsAE::ws2P->PF_NewWorld( in_data->effect_ref, w, h,TRUE,m_format,&m_buf1 )); + ERR( CFsAE::ws2P->PF_NewWorld( in_data->effect_ref, w, h,TRUE,m_format,&m_buf2 )); + + }else{ + PF_NewWorldFlags f = PF_NewWorldFlag_CLEAR_PIXELS | PF_NewWorldFlag_NONE; + if (m_format ==PF_PixelFormat_ARGB64 ) f = PF_NewWorldFlag_CLEAR_PIXELS | PF_NewWorldFlag_DEEP_PIXELS; + + ERR( (*in_data->utils->new_world)( in_data->effect_ref, w, h, f,&m_buf1 )); + ERR( (*in_data->utils->new_world)( in_data->effect_ref, w, h, f,&m_buf2 )); + } + CFsAE::buf1P = &m_buf1; + CFsAE::buf2P = &m_buf2; +#ifndef NO_USE_FSGRAPHICS + CFsAE::buf1 = new CFsGraph(CFsAE::buf1P,CFsAE::in_data,m_format); + CFsAE::buf2 = new CFsGraph(CFsAE::buf2P,CFsAE::in_data,m_format); +#endif + return err; + } + //********************************************************************************* + PF_Handle NewHandle(A_long size) + { + return PF_NEW_HANDLE(size); + } + //********************************************************************************* + void LockHandle(PF_Handle h) + { + PF_LOCK_HANDLE(h); + } + //********************************************************************************* + void UnlockHandle(PF_Handle h) + { + PF_UNLOCK_HANDLE(h); + } + //********************************************************************************* + void DisposeHandle(PF_Handle h) + { + PF_DISPOSE_HANDLE(h); + } + //********************************************************************************* + CFsBuffer NewBuffer(A_long size) + { + return CFsBuffer(in_data,size); + } + //********************************************************************************* + CFsBuffer NewBuffer(A_long w,A_long h,A_long size) + { + return CFsBuffer(in_data,w,h,size); + } + //********************************************************************************* + int ShowDialog(const A_char * p) + { + return PF_SPRINTF( out_data->return_msg, p ); + } + //********************************************************************************* + //-------------------------------------------------------------------- + A_long downScale(A_long v) + { + v = v * in_data->downsample_x.num / in_data->downsample_x.den; + if (v==0) v =1; + return v; + } + //-------------------------------------------------------------------- + PF_FpLong downScaleNoClip(PF_FpLong v) + { + v = v * (PF_FpLong)in_data->downsample_x.num / (PF_FpLong)in_data->downsample_x.den; + return v; + } + //-------------------------------------------------------------------- + A_long downSaleValue() + { + return in_data->downsample_x.den / in_data->downsample_x.num; + } + //-------------------------------------------------------------------- + A_long downScaleNoClip(A_long v) + { + return v * in_data->downsample_x.num / in_data->downsample_x.den; + } + //-------------------------------------------------------------------- + PF_Err CopyInToOut() + { + PF_Err err = PF_Err_NONE; + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + input, // Source + output, // Dest + NULL, // Source rect - null for all pixels + NULL); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err Copy(PF_EffectWorld *i,PF_EffectWorld *o) + { + PF_Err err = PF_Err_NONE; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + i, // Source + o, // Dest + NULL, // Source rect - null for all pixels + NULL); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyInToBuf1() + { + PF_Err err = PF_Err_NONE; + PF_Rect src = {0,0,0,0}; + PF_Rect dst = {0,0,0,0}; + src.top = src.left = 0; + src.right = (short)input->width; + src.bottom = (short)input->height; + + dst.top = dst.left = 0; + dst.right = (short)buf1P->width; + dst.bottom = (short)buf1P->height; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + input, // Source + buf1P, // Dest + &src, // Source rect - null for all pixels + &dst); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyInToBuf2() + { + PF_Err err = PF_Err_NONE; + PF_Rect src = {0,0,0,0}; + PF_Rect dst = {0,0,0,0}; + src.top = src.left = 0; + src.right = (short)input->width; + src.bottom = (short)input->height; + + dst.top = dst.left = 0; + dst.right = (short)buf2P->width; + dst.bottom = (short)buf2P->height; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + input, // Source + buf2P, // Dest + &src, // Source rect - null for all pixels + &dst); // Dest rect - null for all pixels + return err; + } + + //-------------------------------------------------------------------- + PF_Err CopyBuf1ToBuf2() + { + PF_Err err = PF_Err_NONE; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + buf1P, // Source + buf2P, // Dest + NULL, // Source rect - null for all pixels + NULL); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyBuf2ToBuf1() + { + PF_Err err = PF_Err_NONE; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + buf2P, // Source + buf1P, // Dest + NULL, // Source rect - null for all pixels + NULL); // Dest rect - null for all pixels + return err; + } + + //-------------------------------------------------------------------- + PF_Err CopyBuf1ToOut() + { + PF_Err err = PF_Err_NONE; + PF_Rect src = {0,0,0,0}; + PF_Rect dst = {0,0,0,0}; + src.top = src.left = 0; + src.right = (short)buf1P->width; + src.bottom = (short)buf1P->height; + + dst.top = dst.left = 0; + dst.right = (short)output->width; + dst.bottom = (short)output->height; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + buf1P, // Source + output, // Dest + &src, // Source rect - null for all pixels + &dst); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyBuf2ToOut() + { + PF_Err err = PF_Err_NONE; + PF_Rect src = {0,0,0,0}; + PF_Rect dst = {0,0,0,0}; + src.top = src.left = 0; + src.right = (short)buf2P->width; + src.bottom = (short)buf2P->height; + + dst.top = dst.left = 0; + dst.right = (short)output->width; + dst.bottom = (short)output->height; + + err = suitesP->WorldTransformSuite1()->copy_hq(in_data->effect_ref, // This effect ref (unique id) + buf2P, // Source + output, // Dest + &src, // Source rect - null for all pixels + &dst); // Dest rect - null for all pixels + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyBuf2ToOutEX8() + { + PF_Err err = PF_Err_NONE; + PF_Pixel *src; + PF_Pixel *dst; + src = (PF_Pixel*)buf2->data(); + dst = (PF_Pixel*)out->data(); + A_long w = out->width(); + A_long h = out->height(); + A_long target = 0; + for ( A_long y=0; yheight() / (double)out->height(); + A_long y0 = (A_long)y2; + A_long y1 = y0+1; + if (y1>=buf2->height()) y1 = y0; + double yd2 = y2 - (double)y0; + double yd1 = 1.0 - yd2; + + for ( A_long x=0; xwidth() / (double)out->width(); + A_long x0 = (A_long)x2; + A_long x1 = x0+1; + double xd2 = x2 - (double)x0; + double xd1 = 1.0 - xd2; + if (x1>=buf2->width()) x1 = x0; + PF_Pixel p[4]; + p[0] = src[ x0 + y0 * buf2->widthTrue()]; + p[1] = src[ x1 + y0 * buf2->widthTrue()]; + p[2] = src[ x0 + y1 * buf2->widthTrue()]; + p[3] = src[ x1 + y1 * buf2->widthTrue()]; + PF_Pixel o; + + o.red = RoundByteLong((A_long)((double)p[0].red *xd1 * yd1 + (double)p[1].red *xd2 * yd1 + (double)p[2].red *xd1 * yd2 + (double)p[3].red *xd2 * yd2 + 0.5)); + o.green = RoundByteLong((A_long)((double)p[0].green *xd1 * yd1 + (double)p[1].green *xd2 * yd1 + (double)p[2].green *xd1 * yd2 + (double)p[3].green *xd2 * yd2 + 0.5)); + o.blue = RoundByteLong((A_long)((double)p[0].blue *xd1 * yd1 + (double)p[1].blue *xd2 * yd1 + (double)p[2].blue *xd1 * yd2 + (double)p[3].blue *xd2 * yd2 + 0.5)); + o.alpha = RoundByteLong((A_long)((double)p[0].alpha *xd1 * yd1 + (double)p[1].alpha *xd2 * yd1 + (double)p[2].alpha *xd1 * yd2 + (double)p[3].alpha *xd2 * yd2 + 0.5)); + dst[target] = o; + target++; + } + target += out->offsetWidth(); + } + + return err; + } + //-------------------------------------------------------------------- + PF_Err CopyBuf2ToOutEX16() + { + PF_Err err = PF_Err_NONE; + PF_Pixel16 *src; + PF_Pixel16 *dst; + src = (PF_Pixel16*)buf2->data(); + dst = (PF_Pixel16*)out->data(); + A_long w = out->width(); + A_long h = out->height(); + A_long target = 0; + for ( A_long y=0; yheight() / (double)out->height(); + A_long y0 = (A_long)y2; + A_long y1 = y0+1; + if (y1>=buf2->height()) y1 = y0; + double yd2 = y2 - (double)y0; + double yd1 = 1.0 - yd2; + + for ( A_long x=0; xwidth() / (double)out->width(); + A_long x0 = (A_long)x2; + A_long x1 = x0+1; + double xd2 = x2 - (double)x0; + double xd1 = 1.0 - xd2; + if (x1>=buf2->width()) x1 = x0; + PF_Pixel16 p[4]; + p[0] = src[ x0 + y0 * buf2->widthTrue()]; + p[1] = src[ x1 + y0 * buf2->widthTrue()]; + p[2] = src[ x0 + y1 * buf2->widthTrue()]; + p[3] = src[ x1 + y1 * buf2->widthTrue()]; + PF_Pixel16 o; + + o.red = RoundShort((A_long)((double)p[0].red *xd1 * yd1 + (double)p[1].red *xd2 * yd1 + (double)p[2].red *xd1 * yd2 + (double)p[3].red *xd2 * yd2 + 0.5)); + o.green = RoundShort((A_long)((double)p[0].green *xd1 * yd1 + (double)p[1].green *xd2 * yd1 + (double)p[2].green *xd1 * yd2 + (double)p[3].green *xd2 * yd2 + 0.5)); + o.blue = RoundShort((A_long)((double)p[0].blue *xd1 * yd1 + (double)p[1].blue *xd2 * yd1 + (double)p[2].blue *xd1 * yd2 + (double)p[3].blue *xd2 * yd2 + 0.5)); + o.alpha = RoundShort((A_long)((double)p[0].alpha *xd1 * yd1 + (double)p[1].alpha *xd2 * yd1 + (double)p[2].alpha *xd1 * yd2 + (double)p[3].alpha *xd2 * yd2 + 0.5)); + dst[target] = o; + target++; + } + target += out->offsetWidth(); + } + + return err; + } + //-----------;--------------------------------------------------------- + inline void CopyInToOut8(FsPixelCopyParam *cm) + { + A_long sx,sy; + A_long dx,dy; + A_long i,j; + sy = cm->srcY; + dy = cm->dstY; + for (j=0;jheight;j++){ + sx =cm->srcX; + dx =cm->dstX; + for (i=0;iwidth;i++){ + out->setPixel8(dx,dy,in->getPixel8_F(sx,sy)); + sx++; + dx++; + } + sy++; + dy++; + } + } + //-------------------------------------------------------------------- + inline void CopyInToOut16(FsPixelCopyParam *cm) + { + A_long sx,sy; + A_long dx,dy; + A_long i,j; + sy = cm->srcY; + dy = cm->dstY; + for (j=0;jheight;j++){ + sx =cm->srcX; + dx =cm->dstX; + for (i=0;iwidth;i++){ + out->setPixel16(dx,dy,in->getPixel16_F(sx,sy)); + sx++; + dx++; + } + sy++; + dy++; + } + } + //-------------------------------------------------------------------- + inline void CopyInToOut32(FsPixelCopyParam *cm) + { + A_long sx,sy; + A_long dx,dy; + A_long i,j; + sy = cm->srcY; + dy = cm->dstY; + for (j=0;jheight;j++){ + sx =cm->srcX; + dx =cm->dstX; + for (i=0;iwidth;i++){ + out->setPixel32(dx,dy,in->getPixel32_F(sx,sy)); + sx++; + dx++; + } + sy++; + dy++; + } + } + //-------------------------------------------------------------------- + PF_Err premultiply_color(A_long mode, PF_Pixel *color) + { +#if defined(PF_AE100_PLUG_IN_VERSION) + return suitesP->FillMatteSuite2()->premultiply_color( + in_data->effect_ref, + input, + color, + mode, + output); + +#else + return suitesP->FillMatteSuite1()->premultiply_color( + in_data->effect_ref, + input, + color, + mode, + output); +#endif + } + //-------------------------------------------------------------------- + PF_Err premultiply(A_long mode) + { +#if defined(PF_AE100_PLUG_IN_VERSION) + return suitesP->FillMatteSuite2()->premultiply( + in_data->effect_ref, + mode, + output); +#else + return suitesP->FillMatteSuite1()->premultiply( + in_data->effect_ref, + mode, + output); +#endif + } + //-------------------------------------------------------------------- +#ifndef NO_USE_FSGRAPHICS + PF_Err Blend(PF_Fixed per){ + switch(m_format){ + case PF_PixelFormat_ARGB32: + FsBlend8(input,output,per); + break; + case PF_PixelFormat_ARGB64: + FsBlend16(input,output,per); + break; + case PF_PixelFormat_ARGB128: + FsBlend32(input,output,per); + break; + } + } +#endif +}; +//****************************************************************************** +// +//****************************************************************************** +//****************************************************************************** + + +/* +class CFsParamsSetup { +private: + PF_Err m_resultErr; + PF_InData *in_data; + PF_OutData *out_data; + //PF_ParamDef *params[64]; + //PF_LayerDef *output; + + PF_ParamDef def; +public: + //-------------------------------------------------------------------- + CFsParamsSetup( + PF_InData *in_dataP, + PF_OutData *out_dataP, + PF_ParamDef *paramsP[], + PF_LayerDef *outputP) + { + m_resultErr = PF_Err_NONE; + in_data = in_dataP; + out_data = out_dataP; + if ( (in_dataP==NULL)||(out_dataP==NULL)){ + m_resultErr =FsAE_ERR; + return; + } + } + //-------------------------------------------------------------------- + void Add_Slider(const *A_char NAME, A_long VALID_MIN, A_long VALID_MAX, A_long SLIDER_MIN, A_long SLIDER_MAX, A_long DFLT, A_long ID) + { + PF_ParamDef def; + + } +}; +*/ + +#endif diff --git a/FsLibrary/FsBlur.cpp b/FsLibrary/FsBlur.cpp new file mode 100644 index 0000000..971141f --- /dev/null +++ b/FsLibrary/FsBlur.cpp @@ -0,0 +1,604 @@ +#include "FsGraphics.h" + +PF_Err CFsGraph::gblur8(PF_FpLong value,ScanLineMode mode) +{ + PF_Err err = PF_Err_NONE; + if (value <=0 ) return err; + + PF_InData *in_data; + in_data = m_in_data; + + //スキャンラインの用意 + A_long w = m_width; + if (w0){ + r += scanline[x].red * gauss; + g += scanline[x].green * gauss; + b += scanline[x].blue * gauss; + a += scanline[x].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = x-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += scanline[il].red * gauss; + g += scanline[il].green * gauss; + b += scanline[il].blue * gauss; + a += scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = x + i; + if ( ir0){ + r += scanline[ir].red * gauss; + g += scanline[ir].green * gauss; + b += scanline[ir].blue * gauss; + a += scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_Pixel c; + c.alpha = RoundByteLong(a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha0){ + r += scanline[y].red * gauss; + g += scanline[y].green * gauss; + b += scanline[y].blue * gauss; + a += scanline[y].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = y-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += scanline[il].red * gauss; + g += scanline[il].green * gauss; + b += scanline[il].blue * gauss; + a += scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = y + i; + if ( ir0){ + r += scanline[ir].red * gauss; + g += scanline[ir].green * gauss; + b += scanline[ir].blue * gauss; + a += scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_Pixel c; + c.alpha = RoundByteLong(a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha0){ + r += (A_u_long)scanline[x].red * gauss; + g += (A_u_long)scanline[x].green * gauss; + b += (A_u_long)scanline[x].blue * gauss; + a += (A_u_long)scanline[x].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = x-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += (A_u_long)scanline[il].red * gauss; + g += (A_u_long)scanline[il].green * gauss; + b += (A_u_long)scanline[il].blue * gauss; + a += (A_u_long)scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = x + i; + if ( ir0){ + r += (A_u_long)scanline[ir].red * gauss; + g += (A_u_long)scanline[ir].green * gauss; + b += (A_u_long)scanline[ir].blue * gauss; + a += (A_u_long)scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_Pixel16 c; + c.alpha = RoundShort(a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha0){ + r += (A_u_long)scanline[y].red * gauss; + g += (A_u_long)scanline[y].green * gauss; + b += (A_u_long)scanline[y].blue * gauss; + a += (A_u_long)scanline[y].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = y-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += (A_u_long)scanline[il].red * gauss; + g += (A_u_long)scanline[il].green * gauss; + b += (A_u_long)scanline[il].blue * gauss; + a += (A_u_long)scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = y + i; + if ( ir0){ + r += (A_u_long)scanline[ir].red * gauss; + g += (A_u_long)scanline[ir].green * gauss; + b += (A_u_long)scanline[ir].blue * gauss; + a += (A_u_long)scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_Pixel16 c; + c.alpha = RoundShortFpLong((double)a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha0){ + r += (PF_FpLong)scanline[x].red * gauss; + g += (PF_FpLong)scanline[x].green * gauss; + b += (PF_FpLong)scanline[x].blue * gauss; + a += (PF_FpLong)scanline[x].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = x-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += (PF_FpLong)scanline[il].red * gauss; + g += (PF_FpLong)scanline[il].green * gauss; + b += (PF_FpLong)scanline[il].blue * gauss; + a += (PF_FpLong)scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = x + i; + if ( ir0){ + r += (PF_FpLong)scanline[ir].red * gauss; + g += (PF_FpLong)scanline[ir].green * gauss; + b += (PF_FpLong)scanline[ir].blue * gauss; + a += (PF_FpLong)scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_PixelFloat c; + c.alpha = RoundFpShortDouble(a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha<1.0){ + double div = ((double)1/(double)count)/(double)c.alpha; + c.red = RoundFpShortDouble((double)r * div); + c.green = RoundFpShortDouble((double)g * div); + c.blue = RoundFpShortDouble((double)b * div); + }else{ + c.red = RoundFpShortDouble(r/count); + c.green = RoundFpShortDouble(g/count); + c.blue = RoundFpShortDouble(b/count); + } + + data[adr + x] = c; + } + } + adr += m_widthTrue; + } + } + //**** + if( (mode ==SCANLINE::HorAndVer)||(mode ==SCANLINE::Ver)){ + A_long adr = 0; + for (A_long x=0; x0){ + r += (PF_FpLong)scanline[y].red * gauss; + g += (PF_FpLong)scanline[y].green * gauss; + b += (PF_FpLong)scanline[y].blue * gauss; + a += (PF_FpLong)scanline[y].alpha * gauss; + } + count += gauss; + for (A_long i=1; i<=range;i++) + { + A_long il = y-i; + gauss = tbl[i]; + if ( il>=0) { + if (scanline[il].alpha>0){ + r += (PF_FpLong)scanline[il].red * gauss; + g += (PF_FpLong)scanline[il].green * gauss; + b += (PF_FpLong)scanline[il].blue * gauss; + a += (PF_FpLong)scanline[il].alpha * gauss; + } + count += gauss; + } + A_long ir = y + i; + if ( ir0){ + r += (PF_FpLong)scanline[ir].red * gauss; + g += (PF_FpLong)scanline[ir].green * gauss; + b += (PF_FpLong)scanline[ir].blue * gauss; + a += (PF_FpLong)scanline[ir].alpha * gauss; + } + count += gauss; + } + } + if (count>0){ + PF_PixelFloat c; + c.alpha = RoundFpShortDouble(a/count); + if (c.alpha<=0){ + c.red = c.green = c.blue = 0; + }else if(c.alpha<1.0){ + double div = ((double)1/(double)count)/(double)c.alpha; + c.red = RoundFpShortDouble((double)r * div); + c.green = RoundFpShortDouble((double)g * div); + c.blue = RoundFpShortDouble((double)b * div); + }else{ + c.red = RoundFpShortDouble(r/count); + c.green = RoundFpShortDouble(g/count); + c.blue = RoundFpShortDouble(b/count); + } + + data[adr] = c; + } + adr += m_widthTrue; + } + } + } + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(tH); + return err; +} diff --git a/FsLibrary/FsBuffer.h b/FsLibrary/FsBuffer.h new file mode 100644 index 0000000..f23f6ef --- /dev/null +++ b/FsLibrary/FsBuffer.h @@ -0,0 +1,168 @@ + +#pragma once + +#ifndef FsBUFFER_H +#define FsBUFFER_H + +//****************************************************************************** + +/* +#include "AEConfig.h" +#include "entry.h" +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" +*/ + +//****************************************************************************** +class CFsBuffer{ +private: +protected: + PF_InData *in_data; + A_long m_size; + PF_Handle m_bufH; + PF_Err m_err; + PF_Boolean m_isLock; + A_long m_width; + A_long m_height; + //----------------------------- + void Init(){ + in_data = NULL; + m_size = 0; + m_bufH = 0; + m_err = PF_Err_NONE; + m_isLock = FALSE; + m_width =0; + m_height =0; + } +public: + //----------------------------- + PF_Err Create(A_long size) + { + PF_Err err = PF_Err_NONE; + if (in_data!= NULL) { + try{ + if (size>0) m_bufH = PF_NEW_HANDLE(size); + }catch(PF_Err & e){ + err = e; + } + if (!m_bufH) { + err = PF_Err_OUT_OF_MEMORY; + }else{ + m_size = size; + m_width = size; + m_height = 1; + } + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + return err; + } + //----------------------------- + void Dispose(){ + if ( in_data !=NULL){ + if ( m_bufH) { + if ( m_isLock ==TRUE){ + PF_UNLOCK_HANDLE(m_bufH); + m_isLock = FALSE; + } + PF_DISPOSE_HANDLE(m_bufH); + m_bufH = NULL; + m_size = 0; + m_err = PF_Err_NONE; + } + } + } + //----------------------------- + CFsBuffer(PF_InData *in_dataP) + { + Init(); + in_data = in_dataP; + } + //----------------------------- + CFsBuffer(PF_InData *in_dataP,A_long w,A_long h,A_long size) + { + A_long sz = w * h * size; + Init(); + if ((sz>0)&&(in_dataP !=NULL)){ + in_data = in_dataP; + m_err = Create(sz); + if (m_err==PF_Err_NONE){ + m_size = sz; + m_width = w; + m_height = h; + } + }else{ + m_err = PF_Err_OUT_OF_MEMORY; + } + } + //----------------------------- + CFsBuffer(PF_InData *in_dataP,A_long size) + { + Init(); + if (in_dataP !=NULL){ + in_data = in_dataP; + m_err = Create(size); + if (!m_err){ + m_size = size; + m_width = size; + m_height = 1; + } + }else{ + m_err = PF_Err_OUT_OF_MEMORY; + } + } + //----------------------------- + ~CFsBuffer(){ + Dispose(); + } + //----------------------------- + void Lock() + { + if ( in_data != NULL) + if ( m_bufH != NULL) + if ( m_isLock ==FALSE){ + PF_LOCK_HANDLE(m_bufH); + m_isLock = TRUE; + } + } + //----------------------------- + void Unlock() + { + if ( in_data != NULL) + if ( m_bufH != NULL) + if ( m_isLock ==TRUE) { + PF_LOCK_HANDLE(m_bufH); + m_isLock = FALSE; + } + } + //----------------------------- + PF_Err err() { return m_err;} + PF_Handle bufH() {return m_bufH;} + A_long* bufA_long() { return *(A_long**)m_bufH;} + A_u_char* bufA_u_char() { return *(A_u_char**)m_bufH;} + PF_FpShort* bufFpShort() {return *(PF_FpShort**)m_bufH;} + A_u_short* bufA_u_short() { return *(A_u_short**)m_bufH;} + PF_PixelPtr bufPixelPtr() { return *(PF_PixelPtr*)m_bufH;} + PF_Pixel* bufPixel() { return *(PF_Pixel**)m_bufH;} + PF_Pixel16* bufPixel16() { return *(PF_Pixel16**)m_bufH;} + PF_PixelFloat* bufPixelFloat() { return *(PF_PixelFloat**)m_bufH;} + PF_Boolean alive() { return ((in_data!=NULL)&&(m_bufH!=NULL));} + + A_u_longlong size() + { + if ( m_bufH != NULL) + return PF_GET_HANDLE_SIZE(m_bufH); + else + return 0; + } +}; + + +#endif \ No newline at end of file diff --git a/FsLibrary/FsDebug.h b/FsLibrary/FsDebug.h new file mode 100644 index 0000000..9851437 --- /dev/null +++ b/FsLibrary/FsDebug.h @@ -0,0 +1,57 @@ +#pragma once +#ifndef FSDEBUG_H +#define FSDEBUG_H + + +#include + +#ifdef AE_OS_WIN + #include + #include +#else +#include + +#endif + + +//*********************************************************************** +static void writeLog(char *s) +{ + FILE *fp; + char *nm = "log.txt"; + +#ifdef AE_OS_WIN + if ( fopen_s(&fp, nm,"a") ==0){ + fputs(s,fp); + fputc('\n',fp); + fclose(fp); + } +#else + fp = fopen(nm,"a"); + if (fp!=NULL) { + fputs(s,fp); + fputc('\n',fp); + fclose(fp); + } +#endif +} +//*********************************************************************** +static void writeCurrentPath() +{ + char path[512] =""; +#ifdef AE_OS_WIN + GetCurrentDirectory(512,path); + writeLog(path); + SHGetSpecialFolderPath(NULL,path,CSIDL_APPDATA,0); + writeLog(path); + GetModuleFileName(NULL,path,512); + writeLog(path); +#else + getcwd(path,512); +#endif +} + + + + +#endif \ No newline at end of file diff --git a/FsLibrary/FsGraphics.cpp b/FsLibrary/FsGraphics.cpp new file mode 100644 index 0000000..663a894 --- /dev/null +++ b/FsLibrary/FsGraphics.cpp @@ -0,0 +1,80 @@ +#include "FsGraphics.h" + + +//****************************************************************************** +/* + CFsGraph + 描画用のクラス +*/ +//****************************************************************************** + //----------------------- +CFsGraph::CFsGraph( + PF_EffectWorld *world, + PF_InData *in_data, + PF_PixelFormat format) +{ + //メンバの初期化 + m_Enabled = FALSE; + m_in_data = NULL; + m_world = NULL; + m_data = NULL; + m_format = PF_PixelFormat_INVALID; + + m_width = 0; + m_widthTrue = 0; + m_height = 0; + m_offsetWidth = 0; + + m_mat = MAT::none; + + lineHeiht = 1; + + if (in_data!=NULL){ + m_in_data = in_data; + //カレントフレームを求める画頭は0 + if ( (in_data->current_time>=0)&&(in_data->time_step>0) ) { + m_frame =(in_data->current_time/in_data->time_step); + } + } + m_format = format; + if ( world!=NULL){ + m_world = world; + m_data = world->data; + m_width = m_world->width; + m_height = m_world->height; + switch(m_format){ + case PF_PixelFormat_ARGB128: + m_widthTrue = m_world->rowbytes / sizeof(PF_PixelFloat); + break; + case PF_PixelFormat_ARGB64: + m_widthTrue = m_world->rowbytes / sizeof(PF_Pixel16); + break; + + case PF_PixelFormat_ARGB32: + default: + m_widthTrue = m_world->rowbytes / sizeof(PF_Pixel8); + break; + } + m_offsetWidth = m_widthTrue - m_width; + m_Enabled = TRUE; + } + + +} +//****************************************************************************** +/* +CFsGraph::CFsGraph( + PF_EffectWorld *world, + PF_InData *in_data) +{ + PF_PixelFormat fromat = PF_PixelFormat_INVALID; + if( PF_WORLD_IS_DEEP( world )){ + fromat = PF_PixelFormat_ARGB64; + }else{ + fromat = PF_PixelFormat_ARGB32; + } + CFsGraph(world,in_data,fromat); +} + */ +//****************************************************************************** +//****************************************************************************** diff --git a/FsLibrary/FsGraphics.h b/FsLibrary/FsGraphics.h new file mode 100644 index 0000000..3b728e5 --- /dev/null +++ b/FsLibrary/FsGraphics.h @@ -0,0 +1,928 @@ +#pragma once +#ifndef FsGraphics_H +#define FsGraphics_H +//******************************************************************************************* +#include "AEConfig.h" +#include "entry.h" +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #ifndef refconType + #define refconType void* + #endif +#else + #include "PF_Suite_Helper.h" + #ifndef refconType + #define refconType A_long + #endif +#endif + +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#ifdef AE_OS_WIN + #include +#endif + +#include "FsUtils.h" + + +typedef struct FsMosaicParam{ + A_long sizeX; + A_long sizeY; + PF_FixedPoint pos; + PF_FpShort rand; + PF_Boolean isRandGray; + PF_Boolean isFrameRand; +}FsMosaicParam, *FsMosaicParamP, **FsMosaicParamH; + +enum{ + FsFLAT_TOLLEFT =0, + FsFLAT_TOPRIGHT, + FsFLAT_BOTTOMLEFT, + FsFLAT_BOTTOMRIGHT, +}; + +enum +{ + FsMax_MODE_HOR_VER =1, + FsMax_MODE_HORIZON =2, + FsMax_MODE_VERTUAL =3 +}; + +namespace MAT +{ + enum + { + none =0, + blackMat, + whiteMat + }; +} +typedef A_long ScanLineMode; +namespace SCANLINE +{ + /// 1:水平&垂直 2: 水平 3:垂直 + enum + { + HorAndVer = 1, + Hor, + Ver + }; +} +typedef A_long TargetChannelMode; +namespace TARGET_CHANNEL +{ + enum{ + rgbAndAlpha = 1, + rgb, + alpha + }; +} +typedef A_long FsMax_MODE; + +typedef struct { + A_long x; + A_long y; + A_long sizeX; + A_long sizeY; +}FsFlatParam; + +typedef struct { + A_long a; + A_long r; + A_long g; + A_long b; +}FsPixelRand; + +typedef struct { + PF_FpShort a; + PF_FpShort r; + PF_FpShort g; + PF_FpShort b; +}FsPixelRandFloat; + + +typedef struct GInfo { + PF_InData *in_data; + A_long width; + A_long widthTrue; + A_long offsetWidth; + A_long height; + PF_PixelPtr data; + PF_FpLong xD; + PF_FpLong yD; +}GInfo; + + +//******************************************************************************************* +/* + 描画用のクラス + EffectWorldとin_dataから作成 +*/ +//******************************************************************************************* +class CFsGraph{ +private: + PF_Boolean m_Enabled; + PF_InData *m_in_data; + PF_EffectWorld *m_world; + PF_PixelPtr m_data; + PF_PixelFormat m_format; + A_long m_frame; + + A_long m_width; + A_long m_height; + A_long m_widthTrue; + A_long m_offsetWidth; + A_long m_mat; + //-------------------------------------------------------------------- + // paint start + typedef struct { + A_long Xleft; /* 領域左端のX座標 */ + A_long Xright; /* 領域右端のX座標 */ + A_long Y; /* 領域のY座標 */ + A_long Yparent; /* 親ラインのY座標 */ + } paintQue; + + typedef struct { + PF_Pixel targetCol; + PF_Pixel16 targetCol16; + PF_PixelFloat targetCol32; + A_long max; + A_long start; + A_long last; + paintQue now; + paintQue *buf; + }paintPrm; + + typedef struct blurPrm + { + A_long blur; + A_long tbl[513]; + PF_PixelPtr scanline; + }blurPrm; + + typedef struct MiniMaxPrm + { + ScanLineMode mode; + PF_PixelPtr scanline; //スキャンラインバッファー + A_long *level; //画像の明るさ + + A_long value; //Max/Minの値 + PF_Boolean minusFlag; + }MiniMaxPrm; + + PF_Boolean paint_cmp8(PF_Pixel s,PF_Pixel d){ return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue) );} + PF_Boolean paint_cmp16(PF_Pixel16 s,PF_Pixel16 d){return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue));} + PF_Boolean paint_cmp32(PF_PixelFloat s,PF_PixelFloat d){return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue));} + + PF_Pixel paint_getPix8(A_long x,A_long y){ PF_Pixel *data =(PF_Pixel *)m_data; return data[x + y * m_widthTrue];}; + PF_Pixel16 paint_getPix16(A_long x,A_long y){ PF_Pixel16 *data =(PF_Pixel16 *)m_data; return data[x + y * m_widthTrue];}; + PF_PixelFloat paint_getPix32(A_long x,A_long y){ PF_PixelFloat *data =(PF_PixelFloat *)m_data; return data[x + y * m_widthTrue];}; + + void paint_scan_line8(paintPrm *prm); + void paint_scan_line16(paintPrm *prm); + void paint_scan_line32(paintPrm *prm); + // paint end + + + + //-------------------------------------------------------------------- +protected: + PF_Err paint8(A_long x, A_long y,PF_Pixel col); + PF_Err paint16(A_long x, A_long y,PF_Pixel col); + PF_Err paint32(A_long x, A_long y,PF_Pixel col); + + PF_Err mosaic8(FsMosaicParam *mp); + PF_Err mosaic16(FsMosaicParam *mp); + PF_Err mosaic32(FsMosaicParam *mp); + + + + + void verBlur8(blurPrm *sub); + void horBlur8(blurPrm *sub); + void verBlur16(blurPrm *sub); + void horBlur16(blurPrm *sub); + void verBlur32(blurPrm *sub); + void horBlur32(blurPrm *sub); +public: + //----------------------- + CFsGraph( + PF_EffectWorld *world, + PF_InData *in_data); + //----------------------- + CFsGraph( + PF_EffectWorld *world, + PF_InData *in_data, + PF_PixelFormat format + ); + //----------------------- + //~CFsGraph(); + //----------------------- + PF_Boolean Enabled(){ return m_Enabled;} + + PF_Boolean is8Bit(){ return (m_format == PF_PixelFormat_ARGB32);} + PF_Boolean is16Bit(){ return (m_format == PF_PixelFormat_ARGB64);} + PF_Boolean is32Bit(){ return (m_format == PF_PixelFormat_ARGB128);} + + PF_PixelFormat pixelFormat() { return m_format;} + + A_long width(){ return m_width;} + A_long height(){ return m_height;} + A_long widthTrue(){ return m_widthTrue;} + A_long offsetWidth(){ return m_offsetWidth;} + PF_PixelPtr data() { return m_data;} + //----------------------- + //塗りつぶし + PF_Err paint(A_long x, A_long y,PF_Pixel col); + PF_Err paint(PF_FixedPoint pos,PF_Pixel col); + //----------------------- + PF_Err flat8(FsFlatParam *fp,FsPixelRand *pr); + PF_Err flat16(FsFlatParam *fp,FsPixelRand *pr); + PF_Err flat32(FsFlatParam *fp,FsPixelRandFloat *pr); + + PF_Err mosaic(FsMosaicParam *mp); + //----------------------- + /* + PF_Err Max_rgb8(A_long value,ScanLineMode mode); + PF_Err Max_rgb16(A_long value,ScanLineMode mode); + PF_Err Max_rgb32(A_long value,ScanLineMode mode); + PF_Err Max_alpha8(A_long value,ScanLineMode mode); + PF_Err Max_alpha16(A_long value,ScanLineMode mode); + PF_Err Max_alpha32(A_long value,ScanLineMode mode); + + PF_Err Max_rgb(A_long value,ScanLineMode mode); // 1:水平&垂直 2: 水平 3:垂直 + PF_Err Max_alpha(A_long value,ScanLineMode mode); // 1:水平&垂直 2: 水平 3:垂直 + */ + + void Minimax_rgb8(MiniMaxPrm *prm); + void Minimax_alpha8(MiniMaxPrm *prm); + PF_Err Minimax8(A_long value,ScanLineMode mode = SCANLINE::HorAndVer,TargetChannelMode target = TARGET_CHANNEL::rgbAndAlpha); + + PF_Err MinimaxA8(A_long value); + PF_Err MinimaxA16(A_long value); + PF_Err MinimaxA32(A_long value); + + void Minimax_rgb16(MiniMaxPrm *prm); + void Minimax_alpha16(MiniMaxPrm *prm); + PF_Err Minimax16(A_long value,ScanLineMode mode = SCANLINE::HorAndVer,TargetChannelMode target = TARGET_CHANNEL::rgbAndAlpha); + + void Minimax_rgb32(MiniMaxPrm *prm); + void Minimax_alpha32(MiniMaxPrm *prm); + PF_Err Minimax32(A_long value,ScanLineMode mode = SCANLINE::HorAndVer,TargetChannelMode target = TARGET_CHANNEL::rgbAndAlpha); + + PF_Err Minimax(A_long value,ScanLineMode mode = SCANLINE::HorAndVer,TargetChannelMode target = TARGET_CHANNEL::rgbAndAlpha); + + //----------------------- + PF_Err blur8(A_long value,ScanLineMode mode); + PF_Err gblur8(PF_FpLong value,ScanLineMode mode = SCANLINE::HorAndVer); + PF_Err gblur16(PF_FpLong value,ScanLineMode mode = SCANLINE::HorAndVer); + PF_Err gblur32(PF_FpLong value,ScanLineMode mode = SCANLINE::HorAndVer); + //----------------------- + void toBlackMat8(); + void toBlackMat16(); + void toBlackMat32(); + + void fromBlackMat8(); + void fromBlackMat16(); + void fromBlackMat32(); + + void toStraightMat8(); + void toStraightMat16(); + void toStraightMat32(); + + void toWhiteMat8(); + void toWhiteMat16(); + void toWhiteMat32(); + + void fromWhiteMat8(); + void fromWhiteMat16(); + void fromWhiteMat32(); + + void SetMatMode(A_long m) { + m_mat = m; + } + //----------------------- + //AlphaBlend + inline PF_Pixel PixelBlend8(PF_Pixel src,PF_Pixel dst) + { + PF_Pixel rr = {0,0,0,0}; + PF_Pixel ss = src; + PF_Pixel dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN8) ) return dd; + if (dd.alpha == 0) return ss; + + A_long as2 = ( (PF_MAX_CHAN8+1) - dd.alpha) * ss.alpha >> 8; + A_long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN8) ad2 = PF_MAX_CHAN8; + + if (ad2<=0) { + //0の除算を防ぐ + return rr; + }else{ + A_long r = ( dd.red * dd.alpha + ss.red * as2 ); + A_long g = ( dd.green * dd.alpha + ss.green * as2 ); + A_long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>PF_MAX_CHAN8) r = PF_MAX_CHAN8; + if (g>PF_MAX_CHAN8) g = PF_MAX_CHAN8; + if (b>PF_MAX_CHAN8) b = PF_MAX_CHAN8; + + rr.alpha = (A_u_char)ad2; + rr.red = (A_u_char)r; + rr.green = (A_u_char)g; + rr.blue = (A_u_char)b; + return rr; + } + } + inline PF_Pixel16 PixelBlend16(PF_Pixel16 src,PF_Pixel16 dst) + { + PF_Pixel16 rr = {0,0,0,0}; + PF_Pixel16 ss = src; + PF_Pixel16 dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN8) ) return dd; + if (dd.alpha == 0) return ss; + A_long as2 = ( PF_MAX_CHAN16 - dd.alpha) * ss.alpha >> 15; + A_long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN16) ad2 = PF_MAX_CHAN16; + + if (ad2<=0) { + return rr; + }else{ + A_long r = ( dd.red * dd.alpha + ss.red * as2 ); + A_long g = ( dd.green * dd.alpha + ss.green * as2 ); + A_long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>PF_MAX_CHAN16) r = PF_MAX_CHAN16; + if (g>PF_MAX_CHAN16) g = PF_MAX_CHAN16; + if (b>PF_MAX_CHAN16) b = PF_MAX_CHAN16; + + rr.alpha = (A_u_short)ad2; + rr.red = (A_u_short)r; + rr.green = (A_u_short)g; + rr.blue = (A_u_short)b; + return rr; + } + } + inline PF_PixelFloat PixelBlend32(PF_PixelFloat src,PF_PixelFloat dst) + { + PF_PixelFloat rr = {0,0,0,0}; + PF_PixelFloat ss = src; + PF_PixelFloat dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha>=1.0) ) return dd; + if (dd.alpha == 0) return ss; + PF_FpShort as2 = ( 1 - dd.alpha) * ss.alpha; + PF_FpShort ad2 = dd.alpha + as2; + + if (ad2>1.0) ad2 = 1.0; + + if (ad2<=0) { + return rr; + }else{ + PF_FpShort r = ( dd.red * dd.alpha + ss.red * as2 ); + PF_FpShort g = ( dd.green * dd.alpha + ss.green * as2 ); + PF_FpShort b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>1.0) r = 1.0; + if (g>1.0) g = 1.0; + if (b>1.0) b = 1.0; + + rr.alpha = ad2; + rr.red = r; + rr.green = g; + rr.blue = b; + return rr; + } + } + //----------------------- + //point/pset + inline PF_Pixel getPixel8_F(A_long x, A_long y){ + A_long xx = x; + if (xx<0) { xx=0; }else if (xx>=m_width) {xx = m_width -1;} + A_long yy = y; + if (yy<0) { yy=0; }else if (yy>=m_height) {yy = m_height -1;} + + PF_Pixel *data = (PF_Pixel *)m_data; + return data[xx + yy * m_widthTrue]; + } + + //----------------------- + inline PF_Pixel getPixel8(A_long x, A_long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel r ={0,0,0,0}; + return r; + }else{ + PF_Pixel *data = (PF_Pixel *)m_data; + return data[x + y * m_widthTrue]; + } + } + //----------------------- + //point/pset + inline PF_Pixel getPixelFloat8(PF_FpLong x, PF_FpLong y){ + A_long x0 = (A_long)x; + A_long x1 = x0 + 1; + A_long y0 = (A_long)y; + A_long y1 = y0 + 1; + + double dx1 = x -(double)x0; + double dx0 = 1.0 - dx1; + double dy1 = y -(double)y0; + double dy0 = 1.0 - dy1; + + PF_Pixel p[4]; + PF_Pixel ret; + p[0] = getPixel8_F(x0,y0); + p[1] = getPixel8_F(x1,y0); + p[2] = getPixel8_F(x0,y1); + p[3] = getPixel8_F(x1,y1); + + ret.alpha = RoundByteLong( + (A_long)( + (double)(p[0].alpha) * dx0 *dy0 + + (double)(p[1].alpha) * dx0 *dy0 + + (double)(p[2].alpha) * dx0 *dy0 + + (double)(p[3].alpha) * dx1 *dy0 +0.5)); + + ret.red = RoundByteLong( + (A_long)( + (double)(p[0].red) * dx1 *dy0 + + (double)(p[1].red) * dx1 *dy0 + + (double)(p[2].red) * dx1 *dy0 + + (double)(p[3].red) * dx1 *dy0 +0.5)); + + ret.green = RoundByteLong( + (A_long)( + (double)(p[0].green) * dx0 *dy1 + + (double)(p[1].green) * dx0 *dy1 + + (double)(p[2].green) * dx0 *dy1 + + (double)(p[3].green) * dx0 *dy1 +0.5)); + + ret.blue = RoundByteLong( + (A_long)( + (double)(p[0].blue) * dx1 *dy1 + + (double)(p[1].blue) * dx1 *dy1 + + (double)(p[2].blue) * dx1 *dy1 + + (double)(p[3].blue) * dx1 *dy1 +0.5)); + + return ret; + } + //----------------------- + //point/pset + inline PF_Pixel16 getPixelFloat16(PF_FpLong x, PF_FpLong y){ + A_long x0 = (A_long)x; + A_long x1 = x0 + 1; + A_long y0 = (A_long)y; + A_long y1 = y0 + 1; + + double dx1 = x -(double)x0; + double dx0 = 1.0 - dx1; + double dy1 = y -(double)y0; + double dy0 = 1.0 - dy1; + + PF_Pixel16 p[4]; + PF_Pixel16 ret; + p[0] = getPixel16_F(x0,y0); + p[1] = getPixel16_F(x1,y0); + p[2] = getPixel16_F(x0,y1); + p[3] = getPixel16_F(x1,y1); + + ret.alpha = RoundShort( + (A_long)( + (double)(p[0].alpha) * dx0 *dy0 + + (double)(p[1].alpha) * dx0 *dy0 + + (double)(p[2].alpha) * dx0 *dy0 + + (double)(p[3].alpha) * dx1 *dy0 +0.5)); + + ret.red = RoundShort( + (A_long)( + (double)(p[0].red) * dx1 *dy0 + + (double)(p[1].red) * dx1 *dy0 + + (double)(p[2].red) * dx1 *dy0 + + (double)(p[3].red) * dx1 *dy0 +0.5)); + + ret.green = RoundShort( + (A_long)( + (double)(p[0].green) * dx0 *dy1 + + (double)(p[1].green) * dx0 *dy1 + + (double)(p[2].green) * dx0 *dy1 + + (double)(p[3].green) * dx0 *dy1 +0.5)); + + ret.blue = RoundShort( + (A_long)( + (double)(p[0].blue) * dx1 *dy1 + + (double)(p[1].blue) * dx1 *dy1 + + (double)(p[2].blue) * dx1 *dy1 + + (double)(p[3].blue) * dx1 *dy1 +0.5)); + + return ret; + } + //----------------------- + inline PF_Pixel16 getPixel16_F(A_long x, A_long y){ + A_long xx = x; + if (xx<0) { xx=0; }else if (xx>=m_width) {xx = m_width -1;} + A_long yy = y; + if (yy<0) { yy=0; }else if (yy>=m_height) {yy = m_height -1;} + + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + + return data[xx + yy * m_widthTrue]; + } + + //----------------------- + inline PF_Pixel16 getPixel16(A_long x, A_long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel16 r ={0,0,0,0}; + return r; + }else{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + return data[x + y * m_widthTrue]; + } + } + //----------------------- + inline PF_PixelFloat getPixel32_F(A_long x, A_long y){ + A_long xx = x; + if (xx<0) { xx=0; }else if (xx>=m_width) {xx = m_width -1;} + A_long yy = y; + if (yy<0) { yy=0; }else if (yy>=m_height) {yy = m_height -1;} + + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + + return data[xx + yy * m_widthTrue]; + } + + //----------------------- + inline PF_PixelFloat getPixel32(A_long x, A_long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_PixelFloat r ={0,0,0,0}; + return r; + }else{ + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + + return data[x + y * m_widthTrue]; + } + } + + //----------------------- + inline void setPixel8(A_long x, A_long y,PF_Pixel col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel *data = (PF_Pixel *)m_data; + data[x + y * m_widthTrue] = col; + } + + //----------------------- + inline void setPixel16(A_long x, A_long y,PF_Pixel16 col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + data[x + y * m_widthTrue] = col; + } + //----------------------- + inline void setPixel32(A_long x, A_long y,PF_PixelFloat col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + data[x + y * m_widthTrue] = col; + } + + //----------------------- + inline void setPixelBlend8(A_long x, A_long y,PF_Pixel col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel *data = (PF_Pixel *)m_data; + PF_Pixel s; + A_long adr = x + y * m_widthTrue; + s =data[adr]; + data[adr] = PixelBlend8(s,col); + } + //----------------------- + inline void setPixelBlend16(A_long x, A_long y,PF_Pixel16 col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + PF_Pixel16 s; + A_long adr = x + y * m_widthTrue; + s = data[adr]; + data[adr] = PixelBlend16(s,col); + } + //----------------------- + inline void setPixelBlend32(A_long x, A_long y,PF_PixelFloat col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + PF_PixelFloat s; + A_long adr = x + y * m_widthTrue; + s = data[adr]; + data[adr] = PixelBlend32(s,col); + } + //************************************************************************** + inline PF_Pixel scrBlend8(PF_Pixel s, PF_Pixel d) + { + d.alpha = RoundByteLong((A_long)((double)s.alpha + (double)d.alpha - ((double)s.alpha * (double)d.alpha / PF_MAX_CHAN8) + 0.5)); + d.red = RoundByteLong((A_long)((double)s.red + (double)d.red - ((double)s.red * (double)d.red / PF_MAX_CHAN8) + 0.5)); + d.green = RoundByteLong((A_long)((double)s.green + (double)d.green - ((double)s.green * (double)d.green / PF_MAX_CHAN8) + 0.5)); + d.blue = RoundByteLong((A_long)((double)s.blue + (double)d.blue - ((double)s.blue * (double)d.blue / PF_MAX_CHAN8) + 0.5)); + return d; + } + inline PF_Pixel16 scrBlend16(PF_Pixel16 s, PF_Pixel16 d) + { + d.alpha = RoundShort((A_long)((double)s.alpha + (double)d.alpha - ((double)s.alpha * (double)d.alpha / PF_MAX_CHAN16) + 0.5)); + d.red = RoundShort((A_long)((double)s.red + (double)d.red - ((double)s.red * (double)d.red / PF_MAX_CHAN16) + 0.5)); + d.green = RoundShort((A_long)((double)s.green + (double)d.green - ((double)s.green * (double)d.green / PF_MAX_CHAN16) + 0.5)); + d.blue = RoundShort((A_long)((double)s.blue + (double)d.blue - ((double)s.blue * (double)d.blue / PF_MAX_CHAN16) + 0.5)); + return d; + } + inline PF_Pixel pxPer8(PF_Pixel s,PF_FpLong per) + { + PF_Pixel d; + d.alpha = RoundByteLong((A_long)((double)s.alpha * per + 0.5)); + d.red = RoundByteLong((A_long)((double)s.red * per + 0.5)); + d.green = RoundByteLong((A_long)((double)s.green * per + 0.5)); + d.blue = RoundByteLong((A_long)((double)s.blue * per + 0.5)); + return d; + } + inline PF_Pixel16 pxPer16(PF_Pixel16 s,PF_FpLong per) + { + PF_Pixel16 d; + d.alpha = RoundShort((A_long)((double)s.alpha * per + 0.5)); + d.red = RoundShort((A_long)((double)s.red * per + 0.5)); + d.green = RoundShort((A_long)((double)s.green * per + 0.5)); + d.blue = RoundShort((A_long)((double)s.blue * per + 0.5)); + return d; + } + //-------------- + inline PF_Boolean setPixelScreenF8(PF_FpLong x, PF_FpLong y,PF_Pixel col) + { + PF_Boolean ret = FALSE; + A_long x0 = (A_long)x; + A_long x1 = x0+1; + A_long y0 = (A_long)y; + A_long y1 = y0+1; + + double dx1 = x - (double)x0; + double dx0 = 1.0 - dx1; + + double dy1 = y - (double)y0; + double dy0 = 1.0 - dy1; + + PF_Pixel *data = (PF_Pixel *)m_data; + A_long adr = x0 + y0 * m_widthTrue; + + if ( (x0>=0)&&(x0=0)&&(y0=0)&&(x1=0)&&(y0=0)&&(x0=0)&&(y1=0)&&(x1=0)&&(y1=0)&&(x0=0)&&(y0=0)&&(x1=0)&&(y0=0)&&(x0=0)&&(y1=0)&&(x1=0)&&(y1in_data = m_in_data; + gi->width = m_width; + gi->widthTrue = m_widthTrue; + gi->offsetWidth = m_offsetWidth; + gi->height = m_height; + gi->data = m_data; + } +}; +//****************************************************************************** +// FsGraphicsBlend.cpp +// Blend関数 +// perは(0L<<16)から(1L<<16)の間 +//****************************************************************************** +PF_Err FsBlend8(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per); +PF_Err FsBlend16(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per); +PF_Err FsBlend32(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per); + +//****************************************************************************** + +//****************************************************************************** +/* +アルファーブレンド関数 +以下の記事をそのまま流用。 + +参考元 +悟茶辞苑ッ -ごちゃたんファンクラブくらぶ- +http://d.hatena.ne.jp/GOCHA/20071027/alphablend + +の2007-10-27 土曜日「RGBAのアルファブレンドに感激 -続・レイヤー処理- 」の記事 + +A(s): 合成元(下のレイヤー)の不透明度 +A(d): 合成先(上のレイヤー)の不透明度 +A(s'): 合成元(下のレイヤー)の合成量 +A(d'): 合成結果の不透明度 + +A(s') = (1.0 - A(d)) * A(s); +A(d') = A(d) + A(s'); + +A(d') = A(d) + (1.0 - A(d)) * A(s) + +c(s): 合成元(下のレイヤー)の輝度(RGBそれぞれの値に対応) +c(d): 合成先(上のレイヤー)の輝度(RGBそれぞれの値に対応) +c(d'): 合成結果の輝度(RGBそれぞれの値に対応) +c(d') = c(d) * (A(d) / A(d')) + c(s) * (A(s') / A(d')) + +A(d')による除算部分をくくって変形すると、 + +c(d') = (c(d) * A(d) + c(s) * A(s')) / A(d'); + + +*/ +//****************************************************************************** +#endif diff --git a/FsLibrary/FsGraphicsBlend.cpp b/FsLibrary/FsGraphicsBlend.cpp new file mode 100644 index 0000000..be76be4 --- /dev/null +++ b/FsLibrary/FsGraphicsBlend.cpp @@ -0,0 +1,240 @@ +#include "FsGraphics.h" + +//********************************************************************************************** +PF_Err FsBlend8(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per) +{ + PF_Err err = PF_Err_NONE; + PF_Fixed p = per; + PF_Fixed p2; + + PF_Pixel *inData; + PF_Pixel *outData; + + inData = input->data; + outData = output->data; + A_long width = input->width; + A_long height = input->height; + A_long inWidth = input->rowbytes/sizeof(PF_Pixel); + A_long outWidth = output->rowbytes/sizeof(PF_Pixel); + A_long offsetInWidth = inWidth - width; + A_long offsetOutWidth = outWidth - width; + + A_long i,j,targetIn,targetOut,temp; + PF_Pixel pin,pout; + if ((input==NULL)||(output==NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + //p = p / 100; + if (p<(0L<<16)) p = 0L<<16; + if (p>(1L<<16)) p = 1L<<16; + p2 = (1L<<16) - p; + + if (p==0){ + //何もしない。 + return err; + }else if (p == (1L<<16)) { + targetIn = targetOut =0; + for (j=0;j> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.alpha = (A_u_char)temp; + + temp = ( pin.red * p + pout.red * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.red = (A_u_char)temp; + + temp = ( pin.green * p + pout.green * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.green = (A_u_char)temp; + + temp = ( pin.blue * p + pout.blue * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.blue = (A_u_char)temp; + + outData[targetOut] = pout; + + targetIn++; + targetOut++; + } + targetIn += offsetInWidth; + targetOut+= offsetOutWidth; + } + } + + return err; +} +//********************************************************************************************** +PF_Err FsBlend16(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per) +{ + PF_Err err = PF_Err_NONE; + PF_Fixed p = per; + PF_Fixed p2; + + PF_Pixel16 *inData; + PF_Pixel16 *outData; + + inData = (PF_Pixel16 *)input->data; + outData = (PF_Pixel16 *)output->data; + A_long width = input->width; + A_long height = input->height; + A_long inWidth = input->rowbytes/sizeof(PF_Pixel16); + A_long outWidth = output->rowbytes/sizeof(PF_Pixel16); + A_long offsetInWidth = inWidth - width; + A_long offsetOutWidth = outWidth - width; + + A_long i,j,targetIn,targetOut,temp; + PF_Pixel16 pin,pout; + + if ((input==NULL)||(output==NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + p = p >>2; + if (p<(0L<<14)) p = 0L<<14; + if (p>(1L<<14)) p = 1L<<14; + p2 = (1L<<14) - p; + + if (p==0){ + //何もしない。 + return err; + }else if (p == (1L<<14)) { + targetIn = targetOut =0; + for (j=0;j> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.alpha = (A_u_short)temp; + + temp = ( pin.red * p + pout.red * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.red = (A_u_short)temp; + + temp = ( pin.green * p + pout.green * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.green = (A_u_short)temp; + + temp = ( pin.blue * p + pout.blue * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.blue = (A_u_short)temp; + + outData[targetOut] = pout; + + targetIn++; + targetOut++; + } + targetIn += offsetInWidth; + targetOut+= offsetOutWidth; + } + } + + return err; +} +//********************************************************************************************** +PF_Err FsBlend32(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *inData; + PF_PixelFloat *outData; + + inData = (PF_PixelFloat *)input->data; + outData = (PF_PixelFloat *)output->data; + A_long width = input->width; + A_long height = input->height; + A_long inWidth = input->rowbytes/sizeof(PF_PixelFloat); + A_long outWidth = output->rowbytes/sizeof(PF_PixelFloat); + A_long offsetInWidth = inWidth - width; + A_long offsetOutWidth = outWidth - width; + + A_long i,j,targetIn,targetOut; + PF_FpShort temp; + PF_PixelFloat pin,pout; + + if ((input==NULL)||(output==NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + PF_FpShort p = (PF_FpShort)per / (1L<<16); + if ( p<0.0) p=0.0; + else if ( p>1.0) p= 1.0; + + PF_FpShort p2 = (PF_FpShort)1.0 - p; + + if (p==0){ + //何もしない。 + return err; + }else if (p == 1.0) { + targetIn = targetOut =0; + for (j=0;j1.0) { temp=1.0;} + pout.alpha = temp; + + temp = pin.red * p + pout.red * p2; + if (temp<0) { temp=0; } else if (temp>1.0) { temp=1.0;} + pout.red = temp; + + temp = pin.green * p + pout.green * p2; + if (temp<0) { temp=0; } else if (temp>1.0) { temp=1.0;} + pout.green = temp; + + temp = pin.blue * p + pout.blue * p2; + if (temp<0) { temp=0; } else if (temp>1.0) { temp=1.0;} + pout.blue = temp; + + outData[targetOut] = pout; + + targetIn++; + targetOut++; + } + targetIn += offsetInWidth; + targetOut+= offsetOutWidth; + } + } + + return err; +} +//********************************************************************************************** + diff --git a/FsLibrary/FsGraphicsBox.cpp b/FsLibrary/FsGraphicsBox.cpp new file mode 100644 index 0000000..84c80ac --- /dev/null +++ b/FsLibrary/FsGraphicsBox.cpp @@ -0,0 +1,245 @@ +#include "FsGraphics.h" + + +//------------------------------------------------------------------- +void CFsGraph::boxFill8(A_long x0,A_long y0,A_long x1,A_long y1,PF_Pixel col) +{ + PF_Pixel *data = (PF_Pixel *)m_data; + A_long w = m_width; + A_long wt = m_widthTrue; + A_long wo; + A_long h = m_height; + A_long xx0 = x0; + A_long xx1 = x1; + A_long yy0 = y0; + A_long yy1 = y1; + A_long target,i,j; + PF_Pixel c = col; + // + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx0>=w) || (yy0>=h) || (xx1<0) || (yy1<0) ) return; + + if (xx0<0) xx0=0; + if (yy0<0) yy0=0; + if (xx1>=w) xx1=w-1; + if (yy1>=h) yy1=h-1; + + wo = wt -(xx1-xx0+1); + target = xx0 + yy0 * wt; + for (j=yy0; j<=yy1; j++){ + for (i=xx0; i<=xx1; i++){ + data[target]= PixelBlend8(data[target],c); + target++; + } + target += wo; + } + +} +//****************************************************************************** +void CFsGraph::boxFill16(A_long x0,A_long y0,A_long x1,A_long y1,PF_Pixel16 col) +{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + A_long w = m_width; + A_long wt = m_widthTrue; + A_long wo; + A_long h = m_height; + A_long xx0 = x0; + A_long xx1 = x1; + A_long yy0 = y0; + A_long yy1 = y1; + A_long target,i,j; + PF_Pixel16 c = col; + // + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx0>=w) || (yy0>=h) || (xx1<0) || (yy1<0) ) return; + + if (xx0<0) xx0=0; + if (yy0<0) yy0=0; + if (xx1>=w) xx1=w-1; + if (yy1>=h) yy1=h-1; + + target = xx0 + yy0 * wt; + wo = wt -(xx1-xx0+1); + for (j=yy0; j<=yy1; j++){ + for (i=xx0; i<=xx1; i++){ + data[target]= PixelBlend16(data[target],c); + target++; + } + target += wo; + } + +} +//****************************************************************************** +void CFsGraph::boxFill32(A_long x0,A_long y0,A_long x1,A_long y1,PF_PixelFloat col) +{ + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + A_long w = m_width; + A_long wt = m_widthTrue; + A_long wo; + A_long h = m_height; + A_long xx0 = x0; + A_long xx1 = x1; + A_long yy0 = y0; + A_long yy1 = y1; + A_long target,i,j; + PF_PixelFloat c = col; + // + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx0>=w) || (yy0>=h) || (xx1<0) || (yy1<0) ) return; + + if (xx0<0) xx0=0; + if (yy0<0) yy0=0; + if (xx1>=w) xx1=w-1; + if (yy1>=h) yy1=h-1; + + target = xx0 + yy0 * wt; + wo = wt -(xx1-xx0+1); + for (j=yy0; j<=yy1; j++){ + for (i=xx0; i<=xx1; i++){ + data[target]= PixelBlend32(data[target],c); + target++; + } + target += wo; + } + +}//****************************************************************************** +void CFsGraph::box8(A_long x0,A_long y0,A_long x1,A_long y1,PF_Pixel colu,PF_Pixel cold) +{ + A_long bak = lineHeiht; + lineHeiht = 1; + A_long hh = bak; + A_long xx0 = x0; + A_long yy0 = y0; + A_long xx1 = x1; + A_long yy1 = y1; + A_long i; + + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx1-xx0) < (hh*2) ){ + hh = (xx1-xx0) / 2; + } + + if ( (yy1-yy0) < (hh*2) ){ + hh = (yy1-yy0) / 2; + } + hh = hh -1; + + if (hh>=0) { + for (i=0; i<=hh;i++){ + //上 + XLine8(xx0,xx1,yy0,colu); + //左 + YLine8(xx0,yy0+1,yy1-1,colu); + + //下 + XLine8(xx0,xx1,yy1,cold); + //右 + YLine8(xx1,yy0+1,yy1-1,cold); + xx0++; + yy0++; + xx1--; + yy1--; + } + } + lineHeiht = bak; + +} +//****************************************************************************** +void CFsGraph::box16(A_long x0,A_long y0,A_long x1,A_long y1,PF_Pixel16 colu,PF_Pixel16 cold) +{ + A_long bak = lineHeiht; + lineHeiht = 1; + A_long hh = bak; + A_long xx0 = x0; + A_long yy0 = y0; + A_long xx1 = x1; + A_long yy1 = y1; + A_long i; + + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx1-xx0) < (hh*2) ){ + hh = (xx1-xx0) / 2; + } + + if ( (yy1-yy0) < (hh*2) ){ + hh = (yy1-yy0) / 2; + } + hh = hh -1; + + if (hh>=0) { + for (i=0; i<=hh;i++){ + //上 + XLine16(xx0,xx1,yy0,colu); + //左 + YLine16(xx0,yy0+1,yy1-1,colu); + + //下 + XLine16(xx0,xx1,yy1,cold); + //右 + YLine16(xx1,yy0+1,yy1-1,cold); + xx0++; + yy0++; + xx1--; + yy1--; + } + } + lineHeiht = bak; + + +} +//****************************************************************************** +void CFsGraph::box32(A_long x0,A_long y0,A_long x1,A_long y1,PF_PixelFloat colu,PF_PixelFloat cold) +{ + A_long bak = lineHeiht; + lineHeiht = 1; + A_long hh = bak; + A_long xx0 = x0; + A_long yy0 = y0; + A_long xx1 = x1; + A_long yy1 = y1; + A_long i; + + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx1-xx0) < (hh*2) ){ + hh = (xx1-xx0) / 2; + } + + if ( (yy1-yy0) < (hh*2) ){ + hh = (yy1-yy0) / 2; + } + hh = hh -1; + + if (hh>=0) { + for (i=0; i<=hh;i++){ + //上 + XLine32(xx0,xx1,yy0,colu); + //左 + YLine32(xx0,yy0+1,yy1-1,colu); + + //下 + XLine32(xx0,xx1,yy1,cold); + //右 + YLine32(xx1,yy0+1,yy1-1,cold); + xx0++; + yy0++; + xx1--; + yy1--; + } + } + lineHeiht = bak; + + +} +//****************************************************************************** diff --git a/FsLibrary/FsGraphicsCircle.cpp b/FsLibrary/FsGraphicsCircle.cpp new file mode 100644 index 0000000..10d9c20 --- /dev/null +++ b/FsLibrary/FsGraphicsCircle.cpp @@ -0,0 +1,296 @@ +#include "FsGraphics.h" + +//****************************************************************************** +void CFsGraph::circle8(A_long x ,A_long y, A_long r,PF_Pixel col) +{ + //void circle(FsGrfPrm *prm, A_long cx ,A_long cy, A_long r) + PF_Pixel c = col; + A_long ix,iy,px,py,F; + A_long xx = x; + A_long yy = y; + if (r<=0) return; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix >= iy ) { + px = xx + ix; py = yy + iy; setPixelBlend8(px,py,c); + px = xx - ix; py = yy + iy; setPixelBlend8(px,py,c); + px = xx + ix; py = yy - iy; setPixelBlend8(px,py,c); + px = xx - ix; py = yy - iy; setPixelBlend8(px,py,c); + px = xx + iy; py = yy + ix; setPixelBlend8(px,py,c); + px = xx - iy; py = yy + ix; setPixelBlend8(px,py,c); + px = xx + iy; py = yy - ix; setPixelBlend8(px,py,c); + px = xx - iy; py = yy - ix; setPixelBlend8(px,py,c); + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + +} +//****************************************************************************** +void CFsGraph::circle16(A_long x ,A_long y, A_long r,PF_Pixel16 col) +{ + //void circle(FsGrfPrm *prm, A_long cx ,A_long cy, A_long r) + PF_Pixel16 c = col; + A_long ix,iy,px,py,F; + A_long xx = x; + A_long yy = y; + if (r<=0) return; + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix >= iy ) { + px = xx + ix; py = yy + iy; setPixelBlend16(px,py,c); + px = xx - ix; py = yy + iy; setPixelBlend16(px,py,c); + px = xx + ix; py = yy - iy; setPixelBlend16(px,py,c); + px = xx - ix; py = yy - iy; setPixelBlend16(px,py,c); + px = xx + iy; py = yy + ix; setPixelBlend16(px,py,c); + px = xx - iy; py = yy + ix; setPixelBlend16(px,py,c); + px = xx + iy; py = yy - ix; setPixelBlend16(px,py,c); + px = xx - iy; py = yy - ix; setPixelBlend16(px,py,c); + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + +} +//****************************************************************************** +void CFsGraph::circle32(A_long x ,A_long y, A_long r,PF_PixelFloat col) +{ + //void circle(FsGrfPrm *prm, A_long cx ,A_long cy, A_long r) + PF_PixelFloat c = col; + A_long ix,iy,px,py,F; + A_long xx = x; + A_long yy = y; + if (r<=0) return; + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix >= iy ) { + px = xx + ix; py = yy + iy; setPixelBlend32(px,py,c); + px = xx - ix; py = yy + iy; setPixelBlend32(px,py,c); + px = xx + ix; py = yy - iy; setPixelBlend32(px,py,c); + px = xx - ix; py = yy - iy; setPixelBlend32(px,py,c); + px = xx + iy; py = yy + ix; setPixelBlend32(px,py,c); + px = xx - iy; py = yy + ix; setPixelBlend32(px,py,c); + px = xx + iy; py = yy - ix; setPixelBlend32(px,py,c); + px = xx - iy; py = yy - ix; setPixelBlend32(px,py,c); + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + +}//****************************************************************************** +void CFsGraph::circleFill8(A_long x ,A_long y, A_long r,PF_Pixel col) +{ + PF_Pixel c = col; + A_long bak = lineHeiht; + lineHeiht =1; + A_long xx = x; + A_long yy = y; + + A_long ix,iy,F; + A_long px0,px1,py0,py1; + + if (r>0) { + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + ix; + px1 =xx - ix; + py0 =yy + iy; + XLine8(px0,px1,py0,c); + + if ( iy>0){ + px0 =xx + ix; + px1 =xx - ix; + py0 =yy - iy; + XLine8(px0,px1,py0,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + A_long k = iy; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + iy; + py0 =yy - ix; + py1 =yy - k; + YLine8(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine8(px0,py0,py1,c); + + if (iy>0){ + px0 =xx - iy; + py0 =yy - ix; + py1 =yy - k; + YLine8(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine8(px0,py0,py1,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + + } + lineHeiht =bak; +} +//****************************************************************************** +void CFsGraph::circleFill16(A_long x ,A_long y, A_long r,PF_Pixel16 col) +{ + PF_Pixel16 c = col; + A_long bak = lineHeiht; + lineHeiht =1; + A_long xx = x; + A_long yy = y; + + A_long ix,iy,F; + A_long px0,px1,py0,py1; + + if (r>0){ + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + ix; + px1 =xx - ix; + py0 =yy + iy; + XLine16(px0,px1,py0,c); + if (iy>0){ + px0 =xx + ix; + px1 =xx - ix; + py0 =yy - iy; + XLine16(px0,px1,py0,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + A_long k = iy; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + iy; + py0 =yy - ix; + py1 =yy - k; + YLine16(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine16(px0,py0,py1,c); + if (iy>0) { + px0 =xx - iy; + py0 =yy - ix; + py1 =yy - k; + YLine16(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine16(px0,py0,py1,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + + } + lineHeiht = bak; +} +//****************************************************************************** +void CFsGraph::circleFill32(A_long x ,A_long y, A_long r,PF_PixelFloat col) +{ + PF_PixelFloat c = col; + A_long bak = lineHeiht; + lineHeiht =1; + A_long xx = x; + A_long yy = y; + + A_long ix,iy,F; + A_long px0,px1,py0,py1; + + if (r>0){ + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + ix; + px1 =xx - ix; + py0 =yy + iy; + XLine32(px0,px1,py0,c); + if (iy>0){ + px0 =xx + ix; + px1 =xx - ix; + py0 =yy - iy; + XLine32(px0,px1,py0,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + A_long k = iy; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + iy; + py0 =yy - ix; + py1 =yy - k; + YLine32(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine32(px0,py0,py1,c); + if (iy>0) { + px0 =xx - iy; + py0 =yy - ix; + py1 =yy - k; + YLine32(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine32(px0,py0,py1,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + + } + lineHeiht = bak; +} diff --git a/FsLibrary/FsGraphicsLine.cpp b/FsLibrary/FsGraphicsLine.cpp new file mode 100644 index 0000000..9c75b20 --- /dev/null +++ b/FsLibrary/FsGraphicsLine.cpp @@ -0,0 +1,341 @@ +#include "FsGraphics.h" + +//****************************************************************************** +void CFsGraph::XLine8(A_long x0,A_long x1,A_long y,PF_Pixel col) +{ + PF_Pixel *data = (PF_Pixel *)m_data; + A_long w = m_width; + A_long wt = m_widthTrue; + A_long h = m_height; + A_long xx0 = x0; + A_long xx1 = x1; + A_long yy = y; + A_long target,i,j; + A_long hh = lineHeiht-1; + if (hh<0) return; + PF_Pixel c = col; + + //クリッピング + if ( ((yy+hh)<0)||((yy-hh)>=h) ) return; + + //起点と終点の確認 + if (xx0>xx1) swapLong(&xx0,&xx1); + if ( (xx0>=w) || (xx1<0) ) return; + if (xx0<0) xx0=0; + if (xx1>=w) xx1=w-1; + for (j=0;j<=hh;j++) { + yy = y+j; + if ( (yy>=0)&&(yy=h) ) return; + + //起点と終点の確認 + if (xx0>xx1) swapLong(&xx0,&xx1); + if ( (xx0>=w) || (xx1<0) ) return; + if (xx0<0) xx0=0; + if (xx1>=w) xx1=w-1; + for (j=0;j<=hh;j++) { + yy = y+j; + if ( (yy>=0)&&(yy=h) ) return; + + //起点と終点の確認 + if (xx0>xx1) swapLong(&xx0,&xx1); + if ( (xx0>=w) || (xx1<0) ) return; + if (xx0<0) xx0=0; + if (xx1>=w) xx1=w-1; + for (j=0;j<=hh;j++) { + yy = y+j; + if ( (yy>=0)&&(yy=w) ) return; + + //起点と終点の確認 + if (yy0>yy1) swapLong(&yy0,&yy1); + if ( (yy0>=h) || (yy1<0) ) return; + if (yy0<0) yy0=0; + if (yy1>=h) yy1=h-1; + + for (j=0;j<=hh;j++){ + xx = x+j; + if ( (xx>=0)&&(xx=w) ) return; + + //起点と終点の確認 + if (yy0>yy1) swapLong(&yy0,&yy1); + if ( (yy0>=h) || (yy1<0) ) return; + if (yy0<0) yy0=0; + if (yy1>=h) yy1=h-1; + + for (j=0;j<=hh;j++){ + xx = x+j; + if ( (xx>=0)&&(xx=w) ) return; + + //起点と終点の確認 + if (yy0>yy1) swapLong(&yy0,&yy1); + if ( (yy0>=h) || (yy1<0) ) return; + if (yy0<0) yy0=0; + if (yy1>=h) yy1=h-1; + + for (j=0;j<=hh;j++){ + xx = x+j; + if ( (xx>=0)&&(xx x0 ) ? 1 : -1; + dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1; + sy = ( y1 > y0 ) ? 1 : -1; + dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1; + + A_long x = x0; + A_long y = y0; + /* 傾きが1以下の場合 */ + if( dx >= dy ) { + E = -dx; + for( i = 0; i <= dx; i++ ) { + setPixelBlend8(x,y,c); + x += sx; + E += 2 * dy; + if( E >= 0 ) { + y += sy; + E -= 2 * dx; + } + } + /* 傾きが1より大きい場合 */ + } else { + E = -dy; + for( i = 0; i <= dy; i++ ) { + setPixelBlend8(x,y,c); + y += sy; + E += 2 * dx; + if( E >= 0 ) { + x += sx; + E -= 2 * dy; + } + } + } +} + +//****************************************************************************** +void CFsGraph::Line16(A_long x0,A_long y0,A_long x1,A_long y1,PF_Pixel16 col) +{ + A_long E; + A_long dx,dy,sx,sy,i; + + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + A_long w = m_width; + A_long h = m_height; + PF_Pixel16 c = col; + + sx = ( x1 > x0 ) ? 1 : -1; + dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1; + sy = ( y1 > y0 ) ? 1 : -1; + dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1; + + A_long x = x0; + A_long y = y0; + /* 傾きが1以下の場合 */ + if( dx >= dy ) { + E = -dx; + for( i = 0; i <= dx; i++ ) { + setPixelBlend16(x,y,c); + x += sx; + E += 2 * dy; + if( E >= 0 ) { + y += sy; + E -= 2 * dx; + } + } + /* 傾きが1より大きい場合 */ + } else { + E = -dy; + for( i = 0; i <= dy; i++ ) { + setPixelBlend16(x,y,c); + y += sy; + E += 2 * dx; + if( E >= 0 ) { + x += sx; + E -= 2 * dy; + } + } + } +} +//****************************************************************************** +void CFsGraph::Line32(A_long x0,A_long y0,A_long x1,A_long y1,PF_PixelFloat col) +{ + A_long E; + A_long dx,dy,sx,sy,i; + + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + A_long w = m_width; + A_long h = m_height; + PF_PixelFloat c = col; + + sx = ( x1 > x0 ) ? 1 : -1; + dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1; + sy = ( y1 > y0 ) ? 1 : -1; + dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1; + + A_long x = x0; + A_long y = y0; + /* 傾きが1以下の場合 */ + if( dx >= dy ) { + E = -dx; + for( i = 0; i <= dx; i++ ) { + setPixelBlend32(x,y,c); + x += sx; + E += 2 * dy; + if( E >= 0 ) { + y += sy; + E -= 2 * dx; + } + } + /* 傾きが1より大きい場合 */ + } else { + E = -dy; + for( i = 0; i <= dy; i++ ) { + setPixelBlend32(x,y,c); + y += sy; + E += 2 * dx; + if( E >= 0 ) { + x += sx; + E -= 2 * dy; + } + } + } +} diff --git a/FsLibrary/FsGraphicsPaint.cpp b/FsLibrary/FsGraphicsPaint.cpp new file mode 100644 index 0000000..b075670 --- /dev/null +++ b/FsLibrary/FsGraphicsPaint.cpp @@ -0,0 +1,493 @@ +#include "FsGraphics.h" + +//------------------------------------------------------------------------------ +void CFsGraph::paint_scan_line8(paintPrm *prm) +{ + paintPrm *p = prm; + A_long xl = prm->now.Xleft; + A_long xr = prm->now.Xright; + A_long y = prm->now.Y; + A_long oy = prm->now.Yparent; + PF_Pixel col = prm->targetCol; + + while(xl <= xr){ + while(xl < xr){ + if ( paint_cmp8( paint_getPix8(xl,y),col)==TRUE ) break; + xl++; + } + if (paint_cmp8( paint_getPix8(xl,y),col)==FALSE) break; + p->buf[p->last].Xleft = xl; + + while (xl <= xr) { + if (paint_cmp8( paint_getPix8(xl,y),col)==FALSE) break; + xl++; + } + p->buf[p->last].Xright = xl -1; + p->buf[p->last].Y = y; + p->buf[p->last].Yparent = oy; + p->last+=1; + if (p->last==p->max) p->last = 0; + } +} +//------------------------------------------------------------------------------ +void CFsGraph::paint_scan_line16(paintPrm *prm) +{ + paintPrm *p = prm; + A_long xl = prm->now.Xleft; + A_long xr = prm->now.Xright; + A_long y = prm->now.Y; + A_long oy = prm->now.Yparent; + PF_Pixel16 col = prm->targetCol16; + + while(xl <= xr){ + while(xl < xr){ + if ( paint_cmp16( paint_getPix16(xl,y),col)==TRUE ) break; + xl++; + } + if (paint_cmp16( paint_getPix16(xl,y),col)==FALSE) break; + p->buf[p->last].Xleft = xl; + + while (xl <= xr) { + if (paint_cmp16( paint_getPix16(xl,y),col)==FALSE) break; + xl++; + } + p->buf[p->last].Xright = xl -1; + p->buf[p->last].Y = y; + p->buf[p->last].Yparent = oy; + p->last+=1; + if (p->last==p->max) p->last = 0; + } +} +//------------------------------------------------------------------------------ +void CFsGraph::paint_scan_line32(paintPrm *prm) +{ + paintPrm *p = prm; + A_long xl = prm->now.Xleft; + A_long xr = prm->now.Xright; + A_long y = prm->now.Y; + A_long oy = prm->now.Yparent; + PF_PixelFloat col = prm->targetCol32; + + while(xl <= xr){ + while(xl < xr){ + if ( paint_cmp32( paint_getPix32(xl,y),col)==TRUE ) break; + xl++; + } + if (paint_cmp32( paint_getPix32(xl,y),col)==FALSE) break; + p->buf[p->last].Xleft = xl; + + while (xl <= xr) { + if (paint_cmp32( paint_getPix32(xl,y),col)==FALSE) break; + xl++; + } + p->buf[p->last].Xright = xl -1; + p->buf[p->last].Y = y; + p->buf[p->last].Yparent = oy; + p->last+=1; + if (p->last==p->max) p->last = 0; + } +}//------------------------------------------------------------------------------ +PF_Err CFsGraph::paint8(A_long x, A_long y, PF_Pixel col) +{ + PF_Err err = PF_Err_NONE; + paintPrm prm; + PF_Handle queTable = NULL; + PF_InData *in_data = m_in_data; + PF_Pixel *data = (PF_Pixel *)m_data; + A_long wt = m_widthTrue; + A_long i,target; + A_long lx,rx,uy,dy,oy; + A_long lxsav,rxsav; + PF_Pixel paintCol = col; + + if ( (x<0)||(y<0)||(x>=m_width)||(y>=m_height) ) { + return err; + } + + //バッファーの作成。初期値を代入 + queTable = PF_NEW_HANDLE(m_width * sizeof(paintQue)); + if (!queTable) { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + prm.buf = *(paintQue**)queTable; + + prm.max = m_width; + prm.start = 0; + prm.last = 1; + prm.buf[prm.start].Xleft = x; + prm.buf[prm.start].Xright = x; + prm.buf[prm.start].Y = y; + prm.buf[prm.start].Yparent = y; + prm.targetCol = paint_getPix8(x,y); + do { + lx = prm.buf[prm.start].Xleft; + rx = prm.buf[prm.start].Xright; + uy = prm.buf[prm.start].Y; + dy = prm.buf[prm.start].Y; + oy = prm.buf[prm.start].Yparent; + + lxsav = lx - 1; + rxsav = rx + 1; + + prm.start+=1; + if (prm.start == prm.max) prm.start =0; + + // 処理済のシードなら無視 + if (paint_cmp8(paint_getPix8(lx,uy),paintCol)==TRUE) continue; + + //右方向の境界を探す + while (rx < (m_width -1) ) { + if (paint_cmp8(paint_getPix8(rx+1,uy),prm.targetCol)==FALSE) break; + rx++; + } + + //左方向の境界を探す + while(lx>0) { + if (paint_cmp8(paint_getPix8(lx-1,uy),prm.targetCol)==FALSE) break; + lx--; + } + + //lx-rxの線分を描画 + target = lx + uy * wt; + for (i=lx;i<=rx;i++) { + data[target] = col; + target++; + } + + //真上のスキャンラインを走査する + uy--; + if (uy>=0) { + if (uy==oy) { + prm.now.Xleft = lx; + prm.now.Xright = lxsav; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + prm.now.Xleft = rxsav; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + }else{ + prm.now.Xleft = lx; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + } + } + //真下のスキャンラインを走査する + dy++; + if (dy=m_width)||(y>=m_height) ) { + return err; + } + + paintCol.alpha = (A_u_short)CONVERT8TO16(col.alpha); + paintCol.red = (A_u_short)CONVERT8TO16(col.red); + paintCol.green = (A_u_short)CONVERT8TO16(col.green); + paintCol.blue = (A_u_short)CONVERT8TO16(col.blue); + + //バッファーの作成。初期値を代入 + queTable = PF_NEW_HANDLE(m_width * sizeof(paintQue)); + if (!queTable) { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + prm.buf = *(paintQue**)queTable; + + prm.max = m_width; + prm.start = 0; + prm.last = 1; + prm.buf[prm.start].Xleft = x; + prm.buf[prm.start].Xright = x; + prm.buf[prm.start].Y = y; + prm.buf[prm.start].Yparent = y; + prm.targetCol16 = paint_getPix16(x,y); + do { + lx = prm.buf[prm.start].Xleft; + rx = prm.buf[prm.start].Xright; + uy = prm.buf[prm.start].Y; + dy = prm.buf[prm.start].Y; + oy = prm.buf[prm.start].Yparent; + + lxsav = lx - 1; + rxsav = rx + 1; + + prm.start+=1; + if (prm.start == prm.max) prm.start =0; + + // 処理済のシードなら無視 + if (paint_cmp16(paint_getPix16(lx,uy),paintCol)==TRUE) continue; + + //右方向の境界を探す + while (rx < (m_width -1) ) { + if (paint_cmp16(paint_getPix16(rx+1,uy),prm.targetCol16)==FALSE) break; + rx++; + } + + //左方向の境界を探す + while(lx>0) { + if (paint_cmp16(paint_getPix16(lx-1,uy),prm.targetCol16)==FALSE) break; + lx--; + } + + //lx-rxの線分を描画 + target = lx + uy * wt; + for (i=lx;i<=rx;i++) { + data[target] = paintCol; + target++; + } + + //真上のスキャンラインを走査する + uy--; + if (uy>=0) { + if (uy==oy) { + prm.now.Xleft = lx; + prm.now.Xright = lxsav; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + prm.now.Xleft = rxsav; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + }else{ + prm.now.Xleft = lx; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + } + } + //真下のスキャンラインを走査する + dy++; + if (dy=m_width)||(y>=m_height) ) { + return err; + } + + paintCol.alpha = (PF_FpShort)((PF_FpShort)col.alpha/ PF_MAX_CHAN8); + paintCol.red = (PF_FpShort)((PF_FpShort)col.red / PF_MAX_CHAN8); + paintCol.green = (PF_FpShort)((PF_FpShort)col.green/ PF_MAX_CHAN8); + paintCol.blue = (PF_FpShort)((PF_FpShort)col.blue / PF_MAX_CHAN8); + + //バッファーの作成。初期値を代入 + queTable = PF_NEW_HANDLE(m_width * sizeof(paintQue)); + if (!queTable) { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + prm.buf = *(paintQue**)queTable; + + prm.max = m_width; + prm.start = 0; + prm.last = 1; + prm.buf[prm.start].Xleft = x; + prm.buf[prm.start].Xright = x; + prm.buf[prm.start].Y = y; + prm.buf[prm.start].Yparent = y; + prm.targetCol32 = paint_getPix32(x,y); + do { + lx = prm.buf[prm.start].Xleft; + rx = prm.buf[prm.start].Xright; + uy = prm.buf[prm.start].Y; + dy = prm.buf[prm.start].Y; + oy = prm.buf[prm.start].Yparent; + + lxsav = lx - 1; + rxsav = rx + 1; + + prm.start+=1; + if (prm.start == prm.max) prm.start =0; + + // 処理済のシードなら無視 + if (paint_cmp32(paint_getPix32(lx,uy),paintCol)==TRUE) continue; + + //右方向の境界を探す + while (rx < (m_width -1) ) { + if (paint_cmp32(paint_getPix32(rx+1,uy),prm.targetCol32)==FALSE) break; + rx++; + } + + //左方向の境界を探す + while(lx>0) { + if (paint_cmp32(paint_getPix32(lx-1,uy),prm.targetCol32)==FALSE) break; + lx--; + } + + //lx-rxの線分を描画 + target = lx + uy * wt; + for (i=lx;i<=rx;i++) { + data[target] = paintCol; + target++; + } + + //真上のスキャンラインを走査する + uy--; + if (uy>=0) { + if (uy==oy) { + prm.now.Xleft = lx; + prm.now.Xright = lxsav; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line32(&prm); + prm.now.Xleft = rxsav; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line32(&prm); + }else{ + prm.now.Xleft = lx; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line32(&prm); + } + } + //真下のスキャンラインを走査する + dy++; + if (dy>16, pos.y >>16,col); +} +//****************************************************************************** diff --git a/FsLibrary/FsHLS.h b/FsLibrary/FsHLS.h new file mode 100644 index 0000000..582104f --- /dev/null +++ b/FsLibrary/FsHLS.h @@ -0,0 +1,356 @@ +#pragma once +#ifndef FsHLS_H +#define FsHLS_H +//******************************************************************************************* +#include "AEConfig.h" +#include "entry.h" +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" +#else + #include "PF_Suite_Helper.h" +#endif +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#ifdef AE_OS_WIN + #include +#endif + +#include "FsUtils.h" + +#include + +typedef struct { + PF_FpLong H; + PF_FpLong L; + PF_FpLong S; + PF_FpLong A; +}HLSA; + +typedef struct { + PF_FpLong L; + PF_FpLong A; + PF_FpLong B; + PF_FpShort alpha; + +}LABA; + +typedef struct { + PF_FpLong Y; + PF_FpLong U; + PF_FpLong V; + PF_FpShort alpha; + +}YUVA; + + +typedef struct { + PF_FpLong hs; + PF_FpLong l; +}COL_DIS; + +#define HLSMAX (1.0) +#define UNDEFINED (HLSMAX*2/3) +#define RGBMAX PF_MAX_CHAN8 +#define RGBMAX16 PF_MAX_CHAN16 +#define RGBMAX32 (1.0) + +static HLSA RGBtoHLS(PF_PixelFloat c) +{ + HLSA hls; + + hls.A = c.alpha; + + PF_FpLong R = c.red; + PF_FpLong G = c.green; + PF_FpLong B = c.blue; + + PF_FpLong cMax = MAX( MAX(R,G), B); + PF_FpLong cMin = MIN( MIN(R,G), B); + PF_FpLong C = cMax - cMin; + + hls.H = 0; + hls.S = 0; + hls.L = (cMax + cMin) / 2; + + if (C != 0) { + if (hls.L <= 0.5) { + hls.S = C / (2*hls.L); + } + else { + hls.S = C / (2 - 2*hls.L); + } + + if (R == cMax) { + hls.H = (G - B) / C; + if (hls.H < 0) { + hls.H += 6; + } + } + else if (G == cMax) { + hls.H = (B - R) / C + 2; + } + else if (B == cMax) { + hls.H = (R - G) / C + 4; + } + hls.H /= 6; + } + + return hls; +} +//------------------------------------------------------------------------------------------------- +inline PF_FpLong hsl_value(PF_FpLong hh, PF_FpLong C, PF_FpLong m) +{ + PF_FpLong val; + + if (hh < 0) { + hh += 6; + } + else if (hh >= 6) { + hh -= 6; + } + + if (hh < 1) { + val = C * hh; + } + else if (hh < 3) { + val = C; + } + else if (hh < 4) { + val = C * (4 - hh); + } + else { + val = 0; + } + val += m; + + return val; +} +//------------------------------------------------------------------------------------------------- +static PF_PixelFloat HLStoRGB(HLSA hls) +{ + PF_FpLong R =0, G =0, B = 0; + PF_FpLong C ,m; + + if (hls.S == 0) { + R = G = B = hls.L; + } + else { + if (hls.L <= 0.5) { + C = 2*hls.L * hls.S; + } + else { + C = (2 - 2*hls.L) * hls.S; + } + m = hls.L - C/2; + + R = hsl_value(6*hls.H + 2, C, m); + G = hsl_value(6*hls.H, C, m); + B = hsl_value(6*hls.H - 2, C, m); + } + + PF_PixelFloat r; + r.red = (PF_FpShort)R; + r.green = (PF_FpShort)G; + r.blue = (PF_FpShort)B; + r.alpha = (PF_FpShort)hls.A; + return r; +} +#define SQMAX2 1.4142135623730950488016887242097 +#define SQMAX3 1.7320508075688772935274463415059 +//------------------------------------------------------------------------------------------------- +static PF_FpLong pixelDistane(PF_PixelFloat p0,PF_PixelFloat p1) +{ + HLSA s = RGBtoHLS(p0); + HLSA d = RGBtoHLS(p1); + PF_FpLong hueDiff = 0; + if (s.H > d.H) { + hueDiff = MIN((s.H - d.H), (d.H - s.H + 1.0)); + } else { + hueDiff = MIN((d.H - s.H), (s.H - d.H + 1.0)); + } + return (sqrt(pow((double)hueDiff, 2)+ pow((double)s.S - (double)d.S, 2) + pow((double)s.L - (double)d.L, 2))/SQMAX3) ; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong pixelDistane(PF_Pixel p0,PF_Pixel p1) +{ + return pixelDistane(CONV8TO32(p0),CONV8TO32(p1)); +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong pixelDistane(PF_Pixel16 p0,PF_Pixel16 p1) +{ + return pixelDistane(CONV16TO32(p0),CONV16TO32(p1)); +} +//------------------------------------------------------------------------------------------------- +static COL_DIS pixelDistaneHSL(PF_PixelFloat p0,PF_PixelFloat p1) +{ + COL_DIS ret; + + HLSA s = RGBtoHLS(p0); + HLSA d = RGBtoHLS(p1); + PF_FpLong hueDiff = 0; + if (s.H > d.H) { + hueDiff = MIN((s.H - d.H), (d.H - s.H + 1.0)); + } else { + hueDiff = MIN((d.H - s.H), (s.H - d.H + 1.0)); + } + ret.hs = (sqrt(pow((double)hueDiff, 2)+ pow((double)s.S - (double)d.S, 2) )/SQMAX2) ; + if (s.L != d.L) { + PF_FpLong maxL = MAX(s.L , d.L); + PF_FpLong minL = MIN(s.L , d.L); + ret.l = 1 - minL/maxL; + }else{ + ret.l = 0; + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static COL_DIS pixelDistaneHSL(PF_Pixel p0,PF_Pixel p1) +{ + return pixelDistaneHSL(CONV8TO32(p0),CONV8TO32(p1)); +} +//------------------------------------------------------------------------------------------------- +static COL_DIS pixelDistaneHSL(PF_Pixel16 p0,PF_Pixel16 p1) +{ + return pixelDistaneHSL(CONV16TO32(p0),CONV16TO32(p1)); +} +//------------------------------------------------------------------------------------------------- +static LABA RgbToLab(PF_PixelFloat rgb) +{ + double sr = rgb.red; + if (sr < 0.04045) + sr /= 12.92; + else + sr = pow((sr + 0.055) / 1.055, 2.4); + + double sg = rgb.green; + if (sg < 0.04045) + sg /= 12.92; + else + sg = pow((sg + 0.055) / 1.055, 2.4); + + double sb = rgb.blue; + if (sb < 0.04045) + sb /= 12.92; + else + sb = pow((sb + 0.055) / 1.055, 2.4); + + // XYZに変換 + double x = 0.412453*sr + 0.357580*sg + 0.180423*sb; + double y = 0.212671*sr + 0.715160*sg + 0.072169*sb; + double z = 0.019334*sr + 0.119193*sg + 0.950227*sb; + + x /= 0.950456; + z /= 1.088754; + + // Labに変換 + LABA lab; + double fy; + if (y > 0.008856) { + fy = pow(y, 1. / 3); + lab.L = 1.16*fy; + } + else { + fy = 7.787*y + 16. / 116; + lab.L = 9.033*y; + } + lab.L -= 0.16; + double fx = x > 0.008856 ? pow(x, 1. / 3) : 7.787*x + 16. / 116; + double fz = z > 0.008856 ? pow(z, 1. / 3) : 7.787*z + 16. / 116; + + lab.A = 5 * (fx - fy); + lab.B = 2 * (fy - fz); + lab.alpha = rgb.alpha; + + return lab; + +} +//------------------------------------------------------------------------------------------------- +static PF_PixelFloat Lab2Rgb(LABA lab) + +{ + lab.L *= 100; + lab.A *= 100; + lab.B *= 100; + double x, y, z; + // XYZに変換 + if (lab.L < 7.9996) { + y = lab.L / 903.3; + x = 0.950456*(lab.A / 3893.5 + y); + z = 1.088754*(y - lab.B / 1557.4); + } + else { + y = pow((lab.L + 16) / 116, 3.); + x = 0.950456*pow((lab.L + 16) / 116 + lab.A / 500, 3); + z = 1.088754*pow((lab.L + 16) / 116 - lab.B / 200, 3); + } + + // sRGBに変換 + double r, g, b; + r = 3.241*x - 1.5374*y - 0.4986*z; + g = -0.9692*x + 1.876*y + 0.0416*z; + b = 0.0556*x - 0.2040*y + 1.057*z; + + // linear RGBに変換 + if (r > 0.00313080728) + r = pow(r, 10. / 24)*1.055 - 0.055; + else + r *= 12.92; + + if (g > 0.00313080728) + g = pow(g, 10. / 24)*1.055 - 0.055; + else + g *= 12.92; + + if (b > 0.00313080728) + b = pow(b, 10. / 24)*1.055 - 0.055; + else + b *= 12.92; + + + PF_PixelFloat bgr; + bgr.red = (PF_FpShort)(MAX(MIN(b, 1), 0)); + bgr.green = (PF_FpShort)(MAX(MIN(g, 1), 0)); + bgr.blue = (PF_FpShort)(MAX(MIN(r, 1), 0)); + bgr.alpha = lab.alpha; + + return bgr; +} +//------------------------------------------------------------------------------------------------- +static YUVA RgbToYuv(PF_PixelFloat rgb) +{ + YUVA yuv; + yuv.Y = (0.299 * rgb.red + 0.587 * rgb.green + 0.114 * rgb.blue); + if (yuv.Y < 0) yuv.Y = 0; else if (yuv.Y > 1) yuv.Y = 1; + yuv.U = (-0.169 * rgb.red - 0.331 * rgb.green + 0.500 * rgb.blue) + 0.5; + if (yuv.U < 0) yuv.U = 0; else if (yuv.U > 1) yuv.U = 1; + yuv.V = (0.500 * rgb.red - 0.419 * rgb.green - 0.081 * rgb.blue) + 0.5; + if (yuv.V < 0) yuv.V = 0; else if (yuv.V > 1) yuv.V = 1; + yuv.alpha = rgb.alpha; + + return yuv; + +} +//------------------------------------------------------------------------------------------------- +static PF_PixelFloat YuvToRgb(YUVA yuv) +{ + PF_PixelFloat rgb; + PF_FpLong u2, v2; + u2 = yuv.U - 0.5; + v2 = yuv.V - 0.5; + rgb.red = RoundFpShort2(1.000*yuv.Y + 1.402 *v2); + rgb.green = RoundFpShort2(1.000*yuv.Y - 0.344*u2 - 0.714*v2); + rgb.blue = RoundFpShort2(1.000*yuv.Y + 1.772*u2); + rgb.alpha = yuv.alpha; + + return rgb; +} +#endif \ No newline at end of file diff --git a/FsLibrary/FsMat.cpp b/FsLibrary/FsMat.cpp new file mode 100644 index 0000000..5a9e7c9 --- /dev/null +++ b/FsLibrary/FsMat.cpp @@ -0,0 +1,378 @@ +#include "FsGraphics.h" + +//------------------------------------------------------- +void CFsGraph::toBlackMat8() +{ + + if (m_mat == MAT::blackMat) { + return; + }else if (m_mat == MAT::whiteMat){ + fromWhiteMat8(); + } + A_long target = 0; + PF_Pixel *data; + data =(PF_Pixel *)m_data; + for ( A_long j=0; j=d);} +static bool levelMax(A_long s,A_long d){ return (s<=d);} +static bool (*levelComp)(A_long s,A_long d); +//********************************************************************************************* +void CFsGraph::Minimax_rgb16(MiniMaxPrm *prm) +{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + PF_Pixel16 *scanline = (PF_Pixel16 *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].red = scanline[maxIndex].red; + data[adr+x].green = scanline[maxIndex].green; + data[adr+x].blue = scanline[maxIndex].blue; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].red = scanline[maxIndex].red; + data[adr].green = scanline[maxIndex].green; + data[adr].blue = scanline[maxIndex].blue; + adr += m_widthTrue; + } + } + } +} +//********************************************************************************************* +void CFsGraph::Minimax_alpha16(MiniMaxPrm *prm) +{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + PF_Pixel16 *scanline = (PF_Pixel16 *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].alpha = scanline[maxIndex].alpha; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].alpha = scanline[maxIndex].alpha; + adr += m_widthTrue; + } + } + } + +} +//********************************************************************************************* +PF_Err CFsGraph::Minimax16(A_long value,ScanLineMode mode,TargetChannelMode target) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = mode; + + if (mp.minusFlag){ + toWhiteMat16(); + }else{ + toBlackMat16(); + } + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_Pixel16)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + + //rgb + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::rgb)){ + Minimax_rgb16(&mp); + } + + //alpha + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::alpha)){ + Minimax_alpha16(&mp); + } + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + if (mp.minusFlag){ + fromWhiteMat16(); + }else{ + fromBlackMat16(); + } + + + + return err; +} +//********************************************************************************************* +//********************************************************************************************* +PF_Err CFsGraph::MinimaxA16(A_long value) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = SCANLINE::HorAndVer; + + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_Pixel16)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + + + Minimax_alpha16(&mp); + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + + + + return err; +} +//********************************************************************************************* diff --git a/FsLibrary/FsMiniMax32.cpp b/FsLibrary/FsMiniMax32.cpp new file mode 100644 index 0000000..d0e2697 --- /dev/null +++ b/FsLibrary/FsMiniMax32.cpp @@ -0,0 +1,279 @@ +#include "FsGraphics.h" + + +static bool levelMin(A_long s,A_long d){ return (s>=d);} +static bool levelMax(A_long s,A_long d){ return (s<=d);} +static bool (*levelComp)(A_long s,A_long d); +//********************************************************************************************* +void CFsGraph::Minimax_rgb32(MiniMaxPrm *prm) +{ + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + PF_PixelFloat *scanline = (PF_PixelFloat *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].red = scanline[maxIndex].red; + data[adr+x].green = scanline[maxIndex].green; + data[adr+x].blue = scanline[maxIndex].blue; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].red = scanline[maxIndex].red; + data[adr].green = scanline[maxIndex].green; + data[adr].blue = scanline[maxIndex].blue; + adr += m_widthTrue; + } + } + } +} +//********************************************************************************************* +void CFsGraph::Minimax_alpha32(MiniMaxPrm *prm) +{ + PF_PixelFloat *data = (PF_PixelFloat *)m_data; + PF_PixelFloat *scanline = (PF_PixelFloat *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].alpha = scanline[maxIndex].alpha; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].alpha = scanline[maxIndex].alpha; + adr += m_widthTrue; + } + } + } + +} +//********************************************************************************************* +PF_Err CFsGraph::Minimax32(A_long value,ScanLineMode mode,TargetChannelMode target) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = mode; + + if (mp.minusFlag){ + toWhiteMat32(); + }else{ + toBlackMat32(); + } + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_PixelFloat)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + + //rgb + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::rgb)){ + Minimax_rgb32(&mp); + } + + //alpha + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::alpha)){ + Minimax_alpha32(&mp); + } + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + if (mp.minusFlag){ + fromWhiteMat32(); + }else{ + fromBlackMat32(); + } + + + + return err; +} +//********************************************************************************************* +//********************************************************************************************* +PF_Err CFsGraph::MinimaxA32(A_long value) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = SCANLINE::HorAndVer; + + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_PixelFloat)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + + + //alpha + Minimax_alpha32(&mp); + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + return err; +} +//********************************************************************************************* \ No newline at end of file diff --git a/FsLibrary/FsMiniMax8.cpp b/FsLibrary/FsMiniMax8.cpp new file mode 100644 index 0000000..e0022c9 --- /dev/null +++ b/FsLibrary/FsMiniMax8.cpp @@ -0,0 +1,297 @@ +#include "FsGraphics.h" + + +static bool levelMin(A_long s,A_long d){ return (s>=d);} +static bool levelMax(A_long s,A_long d){ return (s<=d);} +static bool (*levelComp)(A_long s,A_long d); +//********************************************************************************************* +void CFsGraph::Minimax_rgb8(MiniMaxPrm *prm) +{ + PF_Pixel *data = m_data; + PF_Pixel *scanline = (PF_Pixel *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].red = scanline[maxIndex].red; + data[adr+x].green = scanline[maxIndex].green; + data[adr+x].blue = scanline[maxIndex].blue; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].red = scanline[maxIndex].red; + data[adr].green = scanline[maxIndex].green; + data[adr].blue = scanline[maxIndex].blue; + adr += m_widthTrue; + } + } + } +} +//********************************************************************************************* +void CFsGraph::Minimax_alpha8(MiniMaxPrm *prm) +{ + PF_Pixel *data = m_data; + PF_Pixel *scanline = (PF_Pixel *)prm->scanline; + A_long *lv = prm->level; + + if(prm->minusFlag){ + levelComp = levelMin; + }else{ + levelComp = levelMax; + } + + A_long adr = 0; + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Hor)){ + + for ( A_long y=0; yvalue; + if (k0<0) k0=0; + A_long k1 = x + prm->value-1; + if (k1>=m_width) k1 = m_width -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr+x].alpha = scanline[maxIndex].alpha; + } + adr += m_widthTrue; + } + + + } + if ((prm->mode == SCANLINE::HorAndVer)||(prm->mode == SCANLINE::Ver)){ + for ( A_long x=0; xvalue; + if (k0<0) k0=0; + A_long k1 = y + prm->value-1; + if (k1>=m_height) k1 = m_height -1; + + if (maxIndex >= k0) + { + if (levelComp(lv[maxIndex],lv[k1]))maxIndex = k1; + }else{ + maxIndex = k0; + for ( A_long k= k0; k<=k1;k++) + { + if (levelComp(lv[maxIndex],lv[k]))maxIndex = k; + } + } + data[adr].alpha = scanline[maxIndex].alpha; + adr += m_widthTrue; + } + } + } + +} +//********************************************************************************************* +PF_Err CFsGraph::Minimax8(A_long value,ScanLineMode mode,TargetChannelMode target) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = mode; + + if (mp.minusFlag){ + toWhiteMat8(); + }else{ + toBlackMat8(); + } + + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_Pixel)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + + //rgb + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::rgb)){ + Minimax_rgb8(&mp); + } + + //alpha + if ( (target == TARGET_CHANNEL::rgbAndAlpha)||(target == TARGET_CHANNEL::alpha)){ + Minimax_alpha8(&mp); + } + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + if (mp.minusFlag){ + fromWhiteMat8(); + }else{ + fromBlackMat8(); + } + + + + return err; +} +//********************************************************************************************* +PF_Err CFsGraph::MinimaxA8(A_long value) +{ + PF_Err err = PF_Err_NONE; + if (value == 0) return err; + + PF_InData *in_data; + in_data = m_in_data; + + MiniMaxPrm mp; + mp.value = F_ABS(value); + mp.minusFlag = (value<0); + mp.mode = SCANLINE::HorAndVer; + + A_long w = MAX(m_width,m_height); + + PF_Handle sH = PF_NEW_HANDLE( w * sizeof(PF_Pixel)*2); + if (!sH) return PF_Err_OUT_OF_MEMORY; + PF_Handle lH = PF_NEW_HANDLE(w * sizeof(A_long)*2); + if (!lH) { + PF_DISPOSE_HANDLE(sH); + return PF_Err_OUT_OF_MEMORY; + } + + mp.scanline = *(PF_PixelPtr*)sH; + mp.level = *(A_long **)lH; + + + //alpha + Minimax_alpha8(&mp); + + + PF_DISPOSE_HANDLE(sH); + PF_DISPOSE_HANDLE(lH); + + + return err; +} +//********************************************************************************************* +//---------------------------------------------------------------------------- +PF_Err CFsGraph::Minimax(A_long value,ScanLineMode mode,TargetChannelMode target) +{ + PF_Err err = PF_Err_NONE; + if ( value !=0){ + switch(m_format) + { + case PF_PixelFormat_ARGB128: + err = Minimax32(value,mode,target); + break; + case PF_PixelFormat_ARGB64: + err = Minimax16(value,mode,target); + break; + case PF_PixelFormat_ARGB32: + err = Minimax8(value,mode,target); + break; + } + } + return err; +} diff --git a/FsLibrary/FsMosaic.cpp b/FsLibrary/FsMosaic.cpp new file mode 100644 index 0000000..f42c116 --- /dev/null +++ b/FsLibrary/FsMosaic.cpp @@ -0,0 +1,449 @@ +#include "FsGraphics.h" + +//******************************************************** +//指定した範囲を平坦化する。prの値で数値を加減できる +//******************************************************** +PF_Err CFsGraph::flat8(FsFlatParam *fp,FsPixelRand *pr) +{ + PF_Err err = PF_Err_NONE; + if ( (fp->sizeX<0)||(fp->sizeY<0)) return err; + if ( (fp->sizeX<=1)&&(fp->sizeY<=1)) return err; + A_long x = fp->x; + A_long y = fp->y; + A_long sx = fp->sizeX; + A_long sy = fp->sizeY; + if ( x>=m_width) return err; + if ( y>=m_height) return err; + + if (x<0) { + sx += x; + if ( sx<=0) return err; + x =0; + } + if ( (x+sx)>m_width){ + sx = m_width -x; + if ( sx<=0) return err; + } + if (y<0) { + sy += y; + if ( sy<=0) return err; + y =0; + } + if ( (y+sy)>m_height){ + sy = m_height -y; + if ( sy<=0) return err; + } + FsPixelRand pp; + if ( pr == NULL){ + pp.a = pp.b = pp.g = pp.r =0; + }else{ + pp = *pr; + } + + A_long i,j; + PF_Pixel * data; + data = (PF_Pixel *)m_data; + A_long target; + A_long targetBase = x + y * m_widthTrue; + A_long yr = 0,yg = 0,yb = 0,ya = 0; + target =targetBase; + for ( j=0; jsizeX<0)||(fp->sizeY<0)) return err; + if ( (fp->sizeX<=1)&&(fp->sizeY<=1)) return err; + A_long x = fp->x; + A_long y = fp->y; + A_long sx = fp->sizeX; + A_long sy = fp->sizeY; + if ( x>=m_width) return err; + if ( y>=m_height) return err; + + if (x<0) { + sx += x; + if ( sx<=0) return err; + x =0; + } + if ( (x+sx)>m_width){ + sx = m_width -x; + if ( sx<=0) return err; + } + if (y<0) { + sy += y; + if ( sy<=0) return err; + y =0; + } + if ( (y+sy)>m_height){ + sy = m_height -y; + if ( sy<=0) return err; + } + FsPixelRand pp; + if ( pr == NULL){ + pp.a = pp.b = pp.g = pp.r =0; + }else{ + pp = *pr; + } + + A_long i,j; + PF_Pixel16 * data; + data = (PF_Pixel16 *)m_data; + A_long target; + A_long targetBase = x + y * m_widthTrue; + A_long yr = 0,yg = 0,yb = 0,ya = 0; + target =targetBase; + for ( j=0; jsizeX<0)||(fp->sizeY<0)) return err; + if ( (fp->sizeX<=1)&&(fp->sizeY<=1)) return err; + A_long x = fp->x; + A_long y = fp->y; + A_long sx = fp->sizeX; + A_long sy = fp->sizeY; + if ( x>=m_width) return err; + if ( y>=m_height) return err; + + if (x<0) { + sx += x; + if ( sx<=0) return err; + x =0; + } + if ( (x+sx)>m_width){ + sx = m_width -x; + if ( sx<=0) return err; + } + if (y<0) { + sy += y; + if ( sy<=0) return err; + y =0; + } + if ( (y+sy)>m_height){ + sy = m_height -y; + if ( sy<=0) return err; + } + FsPixelRandFloat pp; + if ( pr == NULL){ + pp.a = pp.b = pp.g = pp.r =0; + }else{ + pp = *pr; + } + + A_long i,j; + PF_PixelFloat * data; + data = (PF_PixelFloat *)m_data; + A_long target; + A_long targetBase = x + y * m_widthTrue; + PF_FpLong yr = 0,yg = 0,yb = 0,ya = 0; + target =targetBase; + for ( j=0; jsizeX; + fp.sizeY = mp->sizeY; + A_long posX = (mp->pos.x>>16) % mp->sizeX; + if (posX>0) posX -= mp->sizeX; + A_long cntX = (m_width - posX) / mp->sizeX; + if (((m_width - posX) % mp->sizeX)>0)cntX++; + A_long posY = (mp->pos.y>>16) % mp->sizeY; + if (posY>0) posY -= mp->sizeY; + A_long cntY = (m_height - posY) / mp->sizeY; + if (((m_height - posY) % mp->sizeY)>0) cntY++; + + if (( (posX+fp.sizeX) + fp.sizeX)>=m_width){ + posX = 0; + fp.sizeX = m_width; + cntX = 1; + } + if (( (posY + fp.sizeY) + fp.sizeY)>=m_height){ + posY = 0; + fp.sizeY = m_height; + cntY = 1; + } + + //ランダムの初期化 + FsPixelRand pr; + pr.a = pr.b = pr.g = pr.r = 0; + A_long randValue; + if (mp->rand >0){ + if (mp->isFrameRand == TRUE){ + init_xorShift(m_frame); + }else{ + init_xorShift(0); + } + randValue = (A_long)(PF_MAX_CHAN8 * mp->rand); + } + A_long i,j; + for ( j=0; jrand>0){ + if ( mp->isRandGray){ + pr.a = pr.b = pr.g = pr.r + = F_RAND2(-randValue,randValue); + }else{ + pr.a = F_RAND2(-randValue,randValue); + pr.b = F_RAND2(-randValue,randValue); + pr.g = F_RAND2(-randValue,randValue); + pr.r = F_RAND2(-randValue,randValue); + } + } + flat8(&fp, &pr); + } + } + return err; +} +//******************************************************** +//******************************************************** +PF_Err CFsGraph::mosaic16(FsMosaicParam *mp) +{ + PF_Err err = PF_Err_NONE; + //基点とループ回数 + FsFlatParam fp; + fp.sizeX = mp->sizeX; + fp.sizeY = mp->sizeY; + A_long posX = (mp->pos.x>>16) % mp->sizeX; + if (posX>0) posX -= mp->sizeX; + A_long cntX = (m_width - posX) / mp->sizeX; + if (((m_width - posX) % mp->sizeX)>0)cntX++; + A_long posY = (mp->pos.y>>16) % mp->sizeY; + if (posY>0) posY -= mp->sizeY; + A_long cntY = (m_height - posY) / mp->sizeY; + if (((m_height - posY) % mp->sizeY)>0) cntY++; + + if (( (posX+fp.sizeX) + fp.sizeX)>=m_width){ + posX = 0; + fp.sizeX = m_width; + cntX = 1; + } + if (( (posY + fp.sizeY) + fp.sizeY)>=m_height){ + posY = 0; + fp.sizeY = m_height; + cntY = 1; + } + + //ランダムの初期化 + FsPixelRand pr; + pr.a = pr.b = pr.g = pr.r = 0; + A_long randValue; + if (mp->rand >0){ + if (mp->isFrameRand == TRUE){ + init_xorShift(m_frame); + }else{ + init_xorShift(0); + } + randValue = (A_long)(PF_MAX_CHAN16 * mp->rand); + } + A_long i,j; + for ( j=0; jrand>0){ + if ( mp->isRandGray){ + pr.a = pr.b = pr.g = pr.r + = F_RAND2(-randValue,randValue); + }else{ + pr.a = F_RAND2(-randValue,randValue); + pr.b = F_RAND2(-randValue,randValue); + pr.g = F_RAND2(-randValue,randValue); + pr.r = F_RAND2(-randValue,randValue); + } + } + flat16(&fp, &pr); + } + } + return err; +} +//******************************************************** +//******************************************************** +PF_Err CFsGraph::mosaic32(FsMosaicParam *mp) +{ + PF_Err err = PF_Err_NONE; + //基点とループ回数 + FsFlatParam fp; + fp.sizeX = mp->sizeX; + fp.sizeY = mp->sizeY; + A_long posX = (mp->pos.x>>16) % mp->sizeX; + if (posX>0) posX -= mp->sizeX; + A_long cntX = (m_width - posX) / mp->sizeX; + if (((m_width - posX) % mp->sizeX)>0)cntX++; + A_long posY = (mp->pos.y>>16) % mp->sizeY; + if (posY>0) posY -= mp->sizeY; + A_long cntY = (m_height - posY) / mp->sizeY; + if (((m_height - posY) % mp->sizeY)>0) cntY++; + + if (( (posX+fp.sizeX) + fp.sizeX)>=m_width){ + posX = 0; + fp.sizeX = m_width; + cntX = 1; + } + if (( (posY + fp.sizeY) + fp.sizeY)>=m_height){ + posY = 0; + fp.sizeY = m_height; + cntY = 1; + } + + //ランダムの初期化 + FsPixelRandFloat pr; + pr.a = pr.b = pr.g = pr.r = 0; + A_long randValue; + if (mp->rand >0){ + if (mp->isFrameRand == TRUE){ + init_xorShift(m_frame); + }else{ + init_xorShift(0); + } + randValue = (A_long)(PF_MAX_CHAN16 * mp->rand); + } + A_long i,j; + for ( j=0; jrand>0){ + if ( mp->isRandGray){ + pr.a = pr.b = pr.g = pr.r + = (PF_FpShort)((PF_FpShort)F_RAND2(-randValue,randValue) / PF_MAX_CHAN16); + }else{ + pr.a = (PF_FpShort)((PF_FpShort)F_RAND2(-randValue,randValue)/ PF_MAX_CHAN16); + pr.b = (PF_FpShort)((PF_FpShort)F_RAND2(-randValue,randValue)/ PF_MAX_CHAN16); + pr.g = (PF_FpShort)((PF_FpShort)F_RAND2(-randValue,randValue)/ PF_MAX_CHAN16); + pr.r = (PF_FpShort)((PF_FpShort)F_RAND2(-randValue,randValue)/ PF_MAX_CHAN16); + } + } + flat32(&fp, &pr); + } + } + return err; +} +//******************************************************** +PF_Err CFsGraph::mosaic(FsMosaicParam *mp) +{ + PF_Err err = PF_Err_NONE; + switch(m_format) + { + case PF_PixelFormat_ARGB128: + mosaic32(mp); + break; + case PF_PixelFormat_ARGB64: + mosaic16(mp); + break; + case PF_PixelFormat_ARGB32: + mosaic8(mp); + break; + default: + err = PF_Err_OUT_OF_MEMORY; + break; + } + return err; +} diff --git a/FsLibrary/FsRandom.h b/FsLibrary/FsRandom.h new file mode 100644 index 0000000..7d31458 --- /dev/null +++ b/FsLibrary/FsRandom.h @@ -0,0 +1,1050 @@ +#pragma once +#ifndef FS_RAND_TABLE_H +#define FS_RAND_TABLE_H + +#define FS_RANDOM_MAX 1024 +#define _FS_RANDOM_TABLE_COUNT 1025 +static long _FS_RANDOM_COUNTER = 0; +static long _FS_RANDOM_TABLE[_FS_RANDOM_TABLE_COUNT]= { + 0x2bf, + 0x36a, + 0x090, + 0x196, + 0x2f9, + 0x0bc, + 0x303, + 0x0a3, + 0x3de, + 0x1a9, + 0x208, + 0x0ce, + 0x1a2, + 0x099, + 0x3a6, + 0x34f, + 0x10b, + 0x212, + 0x27c, + 0x36c, + 0x014, + 0x20e, + 0x34c, + 0x00a, + 0x156, + 0x1d7, + 0x398, + 0x22c, + 0x2cc, + 0x363, + 0x11a, + 0x3c9, + 0x095, + 0x12d, + 0x2f8, + 0x0d5, + 0x139, + 0x067, + 0x314, + 0x3b9, + 0x1cf, + 0x222, + 0x01f, + 0x2fa, + 0x158, + 0x360, + 0x15e, + 0x2ad, + 0x0d9, + 0x143, + 0x216, + 0x346, + 0x22a, + 0x094, + 0x0ef, + 0x3d6, + 0x0b6, + 0x352, + 0x128, + 0x367, + 0x085, + 0x1fe, + 0x357, + 0x186, + 0x2f2, + 0x1de, + 0x264, + 0x1d9, + 0x129, + 0x1c9, + 0x35f, + 0x0fc, + 0x160, + 0x309, + 0x14c, + 0x38c, + 0x1ec, + 0x0c2, + 0x1ab, + 0x376, + 0x1ea, + 0x0c6, + 0x23a, + 0x034, + 0x203, + 0x0cc, + 0x252, + 0x1ad, + 0x235, + 0x3cc, + 0x14e, + 0x353, + 0x073, + 0x181, + 0x0ae, + 0x236, + 0x2c0, + 0x04a, + 0x1ba, + 0x33b, + 0x13e, + 0x0c5, + 0x19d, + 0x0ec, + 0x035, + 0x135, + 0x0a6, + 0x2bd, + 0x13c, + 0x2ed, + 0x227, + 0x0b3, + 0x2c7, + 0x1c7, + 0x322, + 0x029, + 0x15a, + 0x20d, + 0x0c0, + 0x30a, + 0x164, + 0x2c3, + 0x19e, + 0x08a, + 0x037, + 0x1da, + 0x3bd, + 0x049, + 0x103, + 0x3a3, + 0x132, + 0x1fd, + 0x3fe, + 0x1f7, + 0x019, + 0x35d, + 0x20a, + 0x01d, + 0x21a, + 0x1a4, + 0x0e1, + 0x025, + 0x041, + 0x28e, + 0x3d1, + 0x0e0, + 0x320, + 0x21e, + 0x11e, + 0x3d3, + 0x146, + 0x00d, + 0x3e1, + 0x0b9, + 0x0da, + 0x259, + 0x255, + 0x318, + 0x107, + 0x18c, + 0x24c, + 0x087, + 0x3d4, + 0x27d, + 0x179, + 0x330, + 0x076, + 0x35b, + 0x237, + 0x3d5, + 0x188, + 0x336, + 0x05a, + 0x17c, + 0x238, + 0x28b, + 0x0cd, + 0x030, + 0x3f2, + 0x110, + 0x3dd, + 0x294, + 0x09f, + 0x2e8, + 0x07e, + 0x1bb, + 0x108, + 0x032, + 0x262, + 0x171, + 0x0f9, + 0x283, + 0x394, + 0x026, + 0x32f, + 0x004, + 0x258, + 0x1c4, + 0x293, + 0x17e, + 0x001, + 0x1c1, + 0x069, + 0x2dc, + 0x3b0, + 0x1b6, + 0x093, + 0x047, + 0x13d, + 0x2cf, + 0x364, + 0x269, + 0x167, + 0x021, + 0x144, + 0x2d9, + 0x04f, + 0x343, + 0x05e, + 0x0bd, + 0x3e9, + 0x038, + 0x29a, + 0x3f8, + 0x14d, + 0x2ab, + 0x0e4, + 0x373, + 0x289, + 0x397, + 0x1a7, + 0x01e, + 0x191, + 0x0d6, + 0x2bc, + 0x3db, + 0x133, + 0x24f, + 0x168, + 0x175, + 0x1a8, + 0x338, + 0x25e, + 0x2ca, + 0x159, + 0x260, + 0x3ab, + 0x11f, + 0x1d4, + 0x126, + 0x2f6, + 0x080, + 0x3e7, + 0x072, + 0x22e, + 0x0be, + 0x0f0, + 0x0f1, + 0x05d, + 0x30f, + 0x03d, + 0x18b, + 0x12c, + 0x3c1, + 0x253, + 0x1ac, + 0x15d, + 0x07b, + 0x3dc, + 0x166, + 0x339, + 0x0ff, + 0x32e, + 0x27e, + 0x14f, + 0x0c4, + 0x366, + 0x242, + 0x16e, + 0x3b7, + 0x0c3, + 0x3ce, + 0x0f3, + 0x274, + 0x0cb, + 0x19a, + 0x2f7, + 0x1d3, + 0x2a9, + 0x3fa, + 0x26e, + 0x060, + 0x3e5, + 0x10a, + 0x23c, + 0x00e, + 0x319, + 0x1ae, + 0x3a7, + 0x042, + 0x3f6, + 0x007, + 0x100, + 0x1f2, + 0x0aa, + 0x1aa, + 0x2ee, + 0x1a6, + 0x114, + 0x024, + 0x1e7, + 0x3e2, + 0x2a7, + 0x09e, + 0x281, + 0x089, + 0x1a3, + 0x384, + 0x15b, + 0x0ea, + 0x2a8, + 0x372, + 0x246, + 0x02b, + 0x091, + 0x018, + 0x1ce, + 0x053, + 0x234, + 0x200, + 0x37f, + 0x347, + 0x0dc, + 0x27b, + 0x04b, + 0x2b7, + 0x3fd, + 0x111, + 0x2d5, + 0x0a8, + 0x2d4, + 0x0f5, + 0x38a, + 0x195, + 0x2ac, + 0x0df, + 0x06d, + 0x251, + 0x0c1, + 0x31d, + 0x10f, + 0x3bf, + 0x192, + 0x00b, + 0x2b1, + 0x30d, + 0x243, + 0x106, + 0x1c5, + 0x38f, + 0x00f, + 0x292, + 0x09d, + 0x170, + 0x0ed, + 0x043, + 0x1be, + 0x2df, + 0x0a9, + 0x21b, + 0x315, + 0x2a3, + 0x375, + 0x1f5, + 0x16c, + 0x01a, + 0x225, + 0x39a, + 0x162, + 0x3b4, + 0x194, + 0x3ac, + 0x229, + 0x334, + 0x2da, + 0x1d8, + 0x286, + 0x0f8, + 0x387, + 0x21d, + 0x345, + 0x119, + 0x36d, + 0x1f0, + 0x081, + 0x350, + 0x1e9, + 0x0a2, + 0x04c, + 0x3cd, + 0x22d, + 0x327, + 0x020, + 0x118, + 0x24d, + 0x197, + 0x213, + 0x18d, + 0x0b4, + 0x25b, + 0x3b3, + 0x1d0, + 0x383, + 0x254, + 0x27f, + 0x245, + 0x3e3, + 0x08f, + 0x239, + 0x2c2, + 0x045, + 0x391, + 0x263, + 0x1a0, + 0x38d, + 0x1c2, + 0x0ee, + 0x03c, + 0x13a, + 0x38e, + 0x23b, + 0x377, + 0x248, + 0x140, + 0x247, + 0x400, + 0x29f, + 0x176, + 0x112, + 0x39e, + 0x1d2, + 0x342, + 0x017, + 0x2eb, + 0x265, + 0x371, + 0x059, + 0x24a, + 0x33e, + 0x24e, + 0x3d7, + 0x101, + 0x382, + 0x19b, + 0x3ec, + 0x29c, + 0x3df, + 0x062, + 0x1f4, + 0x2f4, + 0x0d0, + 0x211, + 0x131, + 0x1a1, + 0x2a2, + 0x189, + 0x1e6, + 0x351, + 0x151, + 0x2ae, + 0x122, + 0x1cb, + 0x340, + 0x3f1, + 0x13b, + 0x02a, + 0x1e8, + 0x08d, + 0x25d, + 0x302, + 0x123, + 0x3fc, + 0x29e, + 0x120, + 0x261, + 0x06a, + 0x232, + 0x083, + 0x390, + 0x078, + 0x26b, + 0x2e0, + 0x098, + 0x348, + 0x1e2, + 0x3af, + 0x1b7, + 0x104, + 0x20f, + 0x031, + 0x275, + 0x03a, + 0x3c8, + 0x2b8, + 0x39b, + 0x279, + 0x1fb, + 0x31a, + 0x2af, + 0x1f6, + 0x2b9, + 0x209, + 0x3f4, + 0x290, + 0x084, + 0x230, + 0x015, + 0x206, + 0x17a, + 0x22b, + 0x12a, + 0x34e, + 0x215, + 0x1fa, + 0x272, + 0x1ed, + 0x105, + 0x277, + 0x07c, + 0x3a1, + 0x16a, + 0x2c9, + 0x13f, + 0x0b0, + 0x316, + 0x023, + 0x079, + 0x3b2, + 0x36b, + 0x102, + 0x0ac, + 0x25f, + 0x33a, + 0x3c2, + 0x013, + 0x2e1, + 0x287, + 0x341, + 0x3f3, + 0x323, + 0x2d2, + 0x077, + 0x000, + 0x11d, + 0x365, + 0x172, + 0x312, + 0x0a7, + 0x02c, + 0x1b3, + 0x068, + 0x2a1, + 0x34d, + 0x033, + 0x1ff, + 0x2ea, + 0x3eb, + 0x08c, + 0x301, + 0x012, + 0x26a, + 0x0eb, + 0x071, + 0x354, + 0x12f, + 0x21c, + 0x161, + 0x096, + 0x1e0, + 0x0a5, + 0x10c, + 0x3ba, + 0x2cd, + 0x002, + 0x2ff, + 0x2e2, + 0x34b, + 0x153, + 0x0ab, + 0x177, + 0x317, + 0x217, + 0x14b, + 0x257, + 0x1c6, + 0x3d0, + 0x23d, + 0x169, + 0x359, + 0x249, + 0x165, + 0x267, + 0x06e, + 0x3f5, + 0x051, + 0x221, + 0x368, + 0x20c, + 0x046, + 0x37a, + 0x280, + 0x056, + 0x1ca, + 0x009, + 0x29d, + 0x0d1, + 0x282, + 0x1cc, + 0x2c6, + 0x199, + 0x2a5, + 0x040, + 0x369, + 0x182, + 0x30b, + 0x1e1, + 0x055, + 0x393, + 0x183, + 0x3c3, + 0x296, + 0x02e, + 0x17d, + 0x05c, + 0x1db, + 0x148, + 0x3a5, + 0x297, + 0x3b6, + 0x288, + 0x3ee, + 0x32d, + 0x1f3, + 0x2d0, + 0x10d, + 0x396, + 0x0e2, + 0x214, + 0x113, + 0x3a9, + 0x2c4, + 0x147, + 0x31c, + 0x137, + 0x35a, + 0x2fd, + 0x092, + 0x2fc, + 0x03f, + 0x223, + 0x02d, + 0x37c, + 0x1cd, + 0x2ef, + 0x20b, + 0x187, + 0x134, + 0x027, + 0x17f, + 0x0a0, + 0x036, + 0x141, + 0x298, + 0x1b5, + 0x07a, + 0x2fe, + 0x086, + 0x240, + 0x356, + 0x3bb, + 0x244, + 0x0db, + 0x3ae, + 0x2a6, + 0x3b8, + 0x0c8, + 0x1d6, + 0x33f, + 0x2de, + 0x3e4, + 0x052, + 0x1f9, + 0x0b7, + 0x2a0, + 0x3c7, + 0x32b, + 0x202, + 0x374, + 0x01b, + 0x231, + 0x3d2, + 0x0e9, + 0x2e3, + 0x02f, + 0x204, + 0x125, + 0x3ea, + 0x0d7, + 0x219, + 0x3a2, + 0x127, + 0x329, + 0x10e, + 0x3e0, + 0x34a, + 0x3ed, + 0x1fc, + 0x3be, + 0x28c, + 0x3a8, + 0x1f1, + 0x362, + 0x1f8, + 0x003, + 0x379, + 0x0bf, + 0x1e4, + 0x12b, + 0x006, + 0x11b, + 0x355, + 0x0ba, + 0x358, + 0x2ba, + 0x0e5, + 0x1b2, + 0x2e5, + 0x028, + 0x178, + 0x385, + 0x306, + 0x14a, + 0x399, + 0x1a5, + 0x3c5, + 0x228, + 0x06b, + 0x3cf, + 0x2aa, + 0x1bc, + 0x270, + 0x066, + 0x26d, + 0x088, + 0x1d5, + 0x3cb, + 0x06c, + 0x190, + 0x220, + 0x184, + 0x054, + 0x321, + 0x38b, + 0x115, + 0x2b0, + 0x0b5, + 0x2b6, + 0x331, + 0x284, + 0x2e7, + 0x09a, + 0x271, + 0x1c8, + 0x276, + 0x3a0, + 0x154, + 0x3aa, + 0x185, + 0x116, + 0x250, + 0x1e5, + 0x0d4, + 0x022, + 0x31b, + 0x117, + 0x09c, + 0x1eb, + 0x313, + 0x16d, + 0x201, + 0x0fe, + 0x291, + 0x09b, + 0x3fb, + 0x070, + 0x32a, + 0x0e3, + 0x3c4, + 0x0fa, + 0x28d, + 0x157, + 0x2e4, + 0x149, + 0x2d3, + 0x04e, + 0x2d1, + 0x016, + 0x3f7, + 0x048, + 0x25a, + 0x0fd, + 0x3d8, + 0x2b2, + 0x0f7, + 0x3c6, + 0x0d2, + 0x30e, + 0x082, + 0x1c0, + 0x00c, + 0x193, + 0x224, + 0x2ce, + 0x35c, + 0x145, + 0x33d, + 0x0b1, + 0x17b, + 0x332, + 0x180, + 0x39f, + 0x19f, + 0x2ec, + 0x18a, + 0x06f, + 0x23f, + 0x3a4, + 0x31e, + 0x381, + 0x12e, + 0x0a4, + 0x39c, + 0x3ff, + 0x075, + 0x35e, + 0x0f6, + 0x310, + 0x388, + 0x21f, + 0x36f, + 0x307, + 0x0cf, + 0x138, + 0x305, + 0x04d, + 0x3bc, + 0x0fb, + 0x044, + 0x3d9, + 0x1b1, + 0x328, + 0x11c, + 0x1b9, + 0x2c5, + 0x2fb, + 0x0c7, + 0x207, + 0x380, + 0x074, + 0x36e, + 0x308, + 0x152, + 0x33c, + 0x0ca, + 0x08e, + 0x37b, + 0x1e3, + 0x05f, + 0x218, + 0x2d7, + 0x23e, + 0x2e9, + 0x1df, + 0x3da, + 0x1af, + 0x324, + 0x1dc, + 0x0e8, + 0x15f, + 0x278, + 0x173, + 0x27a, + 0x0d8, + 0x39d, + 0x058, + 0x1bf, + 0x039, + 0x1ee, + 0x124, + 0x010, + 0x233, + 0x37d, + 0x163, + 0x1b0, + 0x064, + 0x15c, + 0x370, + 0x08b, + 0x386, + 0x198, + 0x285, + 0x3b1, + 0x142, + 0x389, + 0x325, + 0x07f, + 0x395, + 0x2e6, + 0x16f, + 0x0f2, + 0x150, + 0x25c, + 0x0de, + 0x30c, + 0x1ef, + 0x311, + 0x01c, + 0x22f, + 0x057, + 0x0f4, + 0x28f, + 0x008, + 0x333, + 0x210, + 0x0ad, + 0x2be, + 0x0af, + 0x3ca, + 0x26c, + 0x097, + 0x361, + 0x268, + 0x16b, + 0x241, + 0x31f, + 0x0e6, + 0x2c8, + 0x2d6, + 0x061, + 0x2d8, + 0x18e, + 0x121, + 0x299, + 0x1bd, + 0x2f1, + 0x3e6, + 0x2db, + 0x1b4, + 0x2cb, + 0x378, + 0x1d1, + 0x326, + 0x0e7, + 0x3e8, + 0x392, + 0x174, + 0x0b2, + 0x1b8, + 0x05b, + 0x37e, + 0x266, + 0x3c0, + 0x2b3, + 0x3b5, + 0x0b8, + 0x2b5, + 0x109, + 0x3f0, + 0x1c3, + 0x344, + 0x0a1, + 0x304, + 0x0d3, + 0x2f0, + 0x136, + 0x3ef, + 0x2bb, + 0x3ad, + 0x19c, + 0x07d, + 0x28a, + 0x2f5, + 0x005, + 0x26f, + 0x130, + 0x2b4, + 0x050, + 0x3f9, + 0x295, + 0x155, + 0x337, + 0x18f, + 0x256, + 0x349, + 0x0dd, + 0x300, + 0x011, + 0x205, + 0x2a4, + 0x063, + 0x29b, + 0x0bb, + 0x03e, + 0x226, + 0x32c, + 0x1dd, + 0x273, + 0x2dd, + 0x335, + 0x065, + 0x2f3, + 0x24b, + 0x03b, + 0x2c1, + 0x0c9 +}; +//--------------------------------------------------------- +static void FS_RANDOM_INIT(long v) +{ + long vv = v % _FS_RANDOM_TABLE_COUNT; + if ( vv<0) vv *=-1; + _FS_RANDOM_COUNTER = vv; +} +//--------------------------------------------------------- +static long FS_RANDOM() +{ + _FS_RANDOM_COUNTER = (_FS_RANDOM_COUNTER+1) % _FS_RANDOM_TABLE_COUNT; + return _FS_RANDOM_TABLE[_FS_RANDOM_COUNTER]; +} +//--------------------------------------------------------- + +#endif diff --git a/FsLibrary/FsScreenShake.h b/FsLibrary/FsScreenShake.h new file mode 100644 index 0000000..42f3c80 --- /dev/null +++ b/FsLibrary/FsScreenShake.h @@ -0,0 +1,689 @@ +#pragma once +#ifndef FSSCREENSHAKE_H +#define FSSCREENSHAKE_H + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "FsUtils.h" + +// +typedef struct getPixelPrm{ + A_long widthTrue; + A_long width; + A_long height; + PF_PixelPtr data; +} getPixelPrm; + +typedef struct channelShiftPrm{ + PF_FixedPoint a; + PF_FixedPoint b; + PF_FixedPoint g; + PF_FixedPoint r; +} channelShiftPrm; + +PF_Pixel (*getPixel8_sub)(getPixelPrm *prm,A_long x,A_long y); +PF_Pixel16 (*getPixel16_sub)(getPixelPrm *prm,A_long x,A_long y); +PF_PixelFloat (*getPixel32_sub)(getPixelPrm *prm,A_long x,A_long y); + +PF_Pixel (*getPixel8_CS_sub)(getPixelPrm *prm,channelShiftPrm *sft); +PF_Pixel16 (*getPixel16_CS_sub)(getPixelPrm *prm,channelShiftPrm *sft); +PF_PixelFloat (*getPixel32_CS_sub)(getPixelPrm *prm,channelShiftPrm *sft); + +//------------------------------------------------------------------------------------------------- +//縁は透明 +inline PF_Pixel getPixel8_none(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel blank ={0,0,0,0}; + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + if (x<0) { + return blank; + }else if (x>=prm->width){ + return blank; + }else if (y<0) { + return blank; + }else if (y>=prm->height) { + return blank; + } + return data[x + y * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel16 getPixel16_none(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel16 blank ={0,0,0,0}; + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + if (x<0) { + return blank; + }else if (x>=prm->width){ + return blank; + }else if (y<0) { + return blank; + }else if (y>=prm->height) { + return blank; + } + return data[x + y * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat getPixel32_none(getPixelPrm *prm,A_long x,A_long y) +{ + PF_PixelFloat blank ={0,0,0,0}; + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + if (x<0) { + return blank; + }else if (x>=prm->width){ + return blank; + }else if (y<0) { + return blank; + }else if (y>=prm->height) { + return blank; + } + return data[x + y * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//縁は塗りつぶし +inline PF_Pixel getPixel8_fill(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + A_long xx,yy; + if (x<0) { xx=0;} + else if (x>=prm->width) { xx = prm->width -1;} + else { xx = x; } + + if (y<0) { yy=0;} + else if (y>=prm->height) { yy = prm->height -1;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +///------------------------------------------------------------------------------------------------- +//縁は塗りつぶし +inline PF_Pixel16 getPixel16_fill(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + A_long xx,yy; + if (x<0) { xx=0;} + else if (x>=prm->width) { xx = prm->width -1;} + else { xx = x; } + + if (y<0) { yy=0;} + else if (y>=prm->height) { yy = prm->height -1;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +///------------------------------------------------------------------------------------------------- +//縁は塗りつぶし +inline PF_PixelFloat getPixel32_fill(getPixelPrm *prm,A_long x,A_long y) +{ + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + A_long xx,yy; + if (x<0) { xx=0;} + else if (x>=prm->width) { xx = prm->width -1;} + else { xx = x; } + + if (y<0) { yy=0;} + else if (y>=prm->height) { yy = prm->height -1;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_Pixel getPixel8_rep(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x + prm->width;} + else if (x>=prm->width) { xx = x - prm->width;} + else { xx = x; } + + if (y<0) { yy = y + prm->height;} + else if (y>=prm->height) { yy = y - prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_Pixel16 getPixel16_rep(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x + prm->width;} + else if (x>=prm->width) { xx = x - prm->width;} + else { xx = x; } + + if (y<0) { yy = y + prm->height;} + else if (y>=prm->height) { yy = y - prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_PixelFloat getPixel32_rep(getPixelPrm *prm,A_long x,A_long y) +{ + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x + prm->width;} + else if (x>=prm->width) { xx = x - prm->width;} + else { xx = x; } + + if (y<0) { yy = y + prm->height;} + else if (y>=prm->height) { yy = y - prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_Pixel getPixel8_mirror(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x * -1;} + else if (x>=prm->width) { xx = prm->width - (x - prm->width)-1;xx %= prm->width;} + else { xx = x ; } + + + if (y<0) { yy = y * -1;} + else if (y>=prm->height) { yy = prm->height - (y - prm->height)-1; yy %= prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_Pixel16 getPixel16_mirror(getPixelPrm *prm,A_long x,A_long y) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x * -1;} + else if (x>=prm->width) { xx = prm->width - (x - prm->width)-1;xx %= prm->width;} + else { xx = x ; } + + + if (y<0) { yy = y * -1;} + else if (y>=prm->height) { yy = prm->height - (y - prm->height)-1; yy %= prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +//繰り返し +inline PF_PixelFloat getPixel32_mirror(getPixelPrm *prm,A_long x,A_long y) +{ + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + A_long xx,yy; + + if (x<0) { xx = x * -1;} + else if (x>=prm->width) { xx = prm->width - (x - prm->width)-1;xx %= prm->width;} + else { xx = x ; } + + + if (y<0) { yy = y * -1;} + else if (y>=prm->height) { yy = prm->height - (y - prm->height)-1; yy %= prm->height;} + else { yy = y; } + + return data[xx + yy * prm->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel getPixel8(getPixelPrm *prm,PF_Fixed x,PF_Fixed y) +{ + PF_Pixel p[4]; + PF_Pixel r; + A_long xx,yy,dx1,dy1,dx2,dy2,temp; + xx = x >>16; + yy = y >>16; + dx1 = (x & 0xFFFF) >>8; + dy1 = (y & 0xFFFF) >>8; + dx2 = (1L<<8) - dx1; + dy2 = (1L<<8) - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getPixel8_sub(prm,xx,yy); + } + + p[0] = getPixel8_sub(prm,xx ,yy ); + p[1] = getPixel8_sub(prm,xx+1,yy ); + p[2] = getPixel8_sub(prm,xx ,yy+1); + p[3] = getPixel8_sub(prm,xx+1,yy+1); + + temp = ( (p[0].alpha * dx2 * dy2) + (p[1].alpha * dx1 * dy2) + (p[2].alpha * dx2 * dy1) + (p[3].alpha * dx1 * dy1) ) >>(16); + if ( temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + r.alpha = (unsigned char)temp; + temp = ( (p[0].red * dx2 * dy2) + (p[1].red * dx1 * dy2) + (p[2].red * dx2 * dy1) + (p[3].red * dx1 * dy1) ) >>(16); + if ( temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + r.red = (unsigned char)temp; + temp = ( (p[0].green * dx2 * dy2) + (p[1].green * dx1 * dy2) + (p[2].green * dx2 * dy1) + (p[3].green * dx1 * dy1) ) >>(16); + if ( temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + r.green = (unsigned char)temp; + temp = ( (p[0].blue * dx2 * dy2) + (p[1].blue * dx1 * dy2) + (p[2].blue * dx2 * dy1) + (p[3].blue * dx1 * dy1) ) >>(16); + if ( temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + r.blue = (unsigned char)temp; + + return r; +} + + +//------------------------------------------------------------------------------------------------- +inline PF_Pixel16 getPixel16(getPixelPrm *prm,PF_Fixed x,PF_Fixed y) +{ + PF_Pixel16 p[4]; + PF_Pixel16 r; + A_long xx,yy,dx1,dy1,dx2,dy2,temp; + xx = x >>16; + yy = y >>16; + dx1 = (x & 0xFFFF) >>8; + dy1 = (y & 0xFFFF) >>8; + dx2 = (1L<<8) - dx1; + dy2 = (1L<<8) - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getPixel16_sub(prm,xx,yy); + } + + p[0] = getPixel16_sub(prm,xx ,yy ); + p[1] = getPixel16_sub(prm,xx+1,yy ); + p[2] = getPixel16_sub(prm,xx ,yy+1); + p[3] = getPixel16_sub(prm,xx+1,yy+1); + + temp = (p[0].alpha * dx2 * dy2 >>16 ) + (p[1].alpha * dx1 * dy2 >>16 ) + (p[2].alpha * dx2 * dy1 >>16) + (p[3].alpha * dx1 * dy1>>16 ); + if ( temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + r.alpha = (unsigned short)temp; + temp = (p[0].red * dx2 * dy2 >>16) + (p[1].red * dx1 * dy2 >>16) + (p[2].red * dx2 * dy1>>16) + (p[3].red * dx1 * dy1>>16); + if ( temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + r.red = (unsigned short)temp; + temp = (p[0].green * dx2 * dy2 >>16) + (p[1].green * dx1 * dy2>>16) + (p[2].green * dx2 * dy1>>16) + (p[3].green * dx1 * dy1>>16); + if ( temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + r.green = (unsigned short)temp; + temp = (p[0].blue * dx2 * dy2 >> 16) + (p[1].blue * dx1 * dy2 >>16 ) + (p[2].blue * dx2 * dy1 >>16) + (p[3].blue * dx1 * dy1 >> 16); + if ( temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + r.blue = (unsigned short)temp; + + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat getPixel32(getPixelPrm *prm,PF_Fixed x,PF_Fixed y) +{ + PF_PixelFloat p[4]; + PF_PixelFloat r; + PF_FpShort temp; + + A_long xx = x >>16; + A_long yy = y >>16; + + PF_FpShort dx1 = (PF_FpShort)((PF_FpShort)(x & 0xFFFF)/65536.0); + PF_FpShort dy1 = (PF_FpShort)((PF_FpShort)(y & 0xFFFF)/65536.0); + PF_FpShort dx2 = (PF_FpShort)(1.0 - dx1); + PF_FpShort dy2 = (PF_FpShort)(1.0 - dy1); + + if ( (dx1==0)&&(dy1==0) ) { + return getPixel32_sub(prm,xx,yy); + } + PF_FpShort b[4]; + b[0] = dx2 * dy2; + b[1] = dx1 * dy2; + b[2] = dx2 * dy1; + b[3] = dx1 * dy1; + + p[0] = getPixel32_sub(prm,xx ,yy ); + p[1] = getPixel32_sub(prm,xx+1,yy ); + p[2] = getPixel32_sub(prm,xx ,yy+1); + p[3] = getPixel32_sub(prm,xx+1,yy+1); + + temp = (p[0].alpha * b[0]) + (p[1].alpha * b[1]) + (p[2].alpha * b[2]) + (p[3].alpha * b[3]); + r.alpha = temp; + + temp = (p[0].red * b[0]) + (p[1].red * b[1]) + (p[2].red * b[2]) + (p[3].red * b[3]); + r.red = temp; + + temp = (p[0].green * b[0]) + (p[1].green * b[1]) + (p[2].green * b[2]) + (p[3].green * b[3]); + r.green = temp; + + temp = (p[0].blue * b[0]) + (p[1].blue * b[1]) + (p[2].blue * b[2]) + (p[3].blue * b[3]); + r.blue = temp; + + return r; +} +//******************************************************************** +//------------------------------------------------------------------------------------------------- +inline PF_Pixel getPixel8_CS(getPixelPrm *prm,channelShiftPrm *sht) +{ + PF_Pixel p[4]; + PF_Pixel r; + A_long xx,yy; + + PF_FpLong dx1,dy1,dx2,dy2; + PF_Fixed x,y; + //alpha--------------------------------------- + x = sht->a.x; + y = sht->a.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.alpha = getPixel8_sub(prm,xx,yy).alpha; + }else{ + p[0] = getPixel8_sub(prm,xx ,yy ); + p[1] = getPixel8_sub(prm,xx+1,yy ); + p[2] = getPixel8_sub(prm,xx ,yy+1); + p[3] = getPixel8_sub(prm,xx+1,yy+1); + + r.alpha = RoundByteFpLong( (p[0].alpha * dx2 * dy2) + (p[1].alpha * dx1 * dy2) + (p[2].alpha * dx2 * dy1) + (p[3].alpha * dx1 * dy1) ); + } + //red--------------------------------------- + x = sht->r.x; + y = sht->r.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.red = getPixel8_sub(prm,xx,yy).red; + }else{ + p[0] = getPixel8_sub(prm,xx ,yy ); + p[1] = getPixel8_sub(prm,xx+1,yy ); + p[2] = getPixel8_sub(prm,xx ,yy+1); + p[3] = getPixel8_sub(prm,xx+1,yy+1); + + r.red =RoundByteFpLong( (p[0].red * dx2 * dy2) + (p[1].red * dx1 * dy2) + (p[2].red * dx2 * dy1) + (p[3].red * dx1 * dy1) ); + } + //green--------------------------------------- + x = sht->g.x; + y = sht->g.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.green = getPixel8_sub(prm,xx,yy).green; + }else{ + p[0] = getPixel8_sub(prm,xx ,yy ); + p[1] = getPixel8_sub(prm,xx+1,yy ); + p[2] = getPixel8_sub(prm,xx ,yy+1); + p[3] = getPixel8_sub(prm,xx+1,yy+1); + + r.green =RoundByteFpLong( (p[0].green * dx2 * dy2) + (p[1].green * dx1 * dy2) + (p[2].green * dx2 * dy1) + (p[3].green * dx1 * dy1) ); + } + //blue--------------------------------------- + x = sht->b.x; + y = sht->b.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.blue = getPixel8_sub(prm,xx,yy).blue; + }else{ + p[0] = getPixel8_sub(prm,xx ,yy ); + p[1] = getPixel8_sub(prm,xx+1,yy ); + p[2] = getPixel8_sub(prm,xx ,yy+1); + p[3] = getPixel8_sub(prm,xx+1,yy+1); + + r.blue =RoundByteFpLong( (p[0].blue * dx2 * dy2) + (p[1].blue * dx1 * dy2) + (p[2].blue * dx2 * dy1) + (p[3].blue * dx1 * dy1) ); + } + + + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel16 getPixel16_CS(getPixelPrm *prm,channelShiftPrm *sht) +{ + PF_Pixel16 p[4]; + PF_Pixel16 r; + A_long xx,yy; + + PF_FpLong dx1,dy1,dx2,dy2; + PF_Fixed x,y; + //alpha--------------------------------------- + x = sht->a.x; + y = sht->a.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.alpha = getPixel16_sub(prm,xx,yy).alpha; + }else{ + p[0] = getPixel16_sub(prm,xx ,yy ); + p[1] = getPixel16_sub(prm,xx+1,yy ); + p[2] = getPixel16_sub(prm,xx ,yy+1); + p[3] = getPixel16_sub(prm,xx+1,yy+1); + + r.alpha = RoundShortFpLong( (p[0].alpha * dx2 * dy2) + (p[1].alpha * dx1 * dy2) + (p[2].alpha * dx2 * dy1) + (p[3].alpha * dx1 * dy1) ); + } + //red--------------------------------------- + x = sht->r.x; + y = sht->r.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.red = getPixel16_sub(prm,xx,yy).red; + }else{ + p[0] = getPixel16_sub(prm,xx ,yy ); + p[1] = getPixel16_sub(prm,xx+1,yy ); + p[2] = getPixel16_sub(prm,xx ,yy+1); + p[3] = getPixel16_sub(prm,xx+1,yy+1); + + r.red =RoundShortFpLong( (p[0].red * dx2 * dy2) + (p[1].red * dx1 * dy2) + (p[2].red * dx2 * dy1) + (p[3].red * dx1 * dy1) ); + } + //green--------------------------------------- + x = sht->g.x; + y = sht->g.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.green = getPixel16_sub(prm,xx,yy).green; + }else{ + p[0] = getPixel16_sub(prm,xx ,yy ); + p[1] = getPixel16_sub(prm,xx+1,yy ); + p[2] = getPixel16_sub(prm,xx ,yy+1); + p[3] = getPixel16_sub(prm,xx+1,yy+1); + + r.green =RoundShortFpLong( (p[0].green * dx2 * dy2) + (p[1].green * dx1 * dy2) + (p[2].green * dx2 * dy1) + (p[3].green * dx1 * dy1) ); + } + //blue--------------------------------------- + x = sht->b.x; + y = sht->b.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.blue = getPixel16_sub(prm,xx,yy).blue; + }else{ + p[0] = getPixel16_sub(prm,xx ,yy ); + p[1] = getPixel16_sub(prm,xx+1,yy ); + p[2] = getPixel16_sub(prm,xx ,yy+1); + p[3] = getPixel16_sub(prm,xx+1,yy+1); + + r.blue =RoundShortFpLong( (p[0].blue * dx2 * dy2) + (p[1].blue * dx1 * dy2) + (p[2].blue * dx2 * dy1) + (p[3].blue * dx1 * dy1) ); + } + + + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat getPixel32_CS(getPixelPrm *prm,channelShiftPrm *sht) +{ + PF_PixelFloat p[4]; + PF_PixelFloat r; + A_long xx,yy; + + PF_FpLong dx1,dy1,dx2,dy2; + PF_Fixed x,y; + //alpha--------------------------------------- + x = sht->a.x; + y = sht->a.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536.0; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536.0; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.alpha = getPixel32_sub(prm,xx,yy).alpha; + }else{ + p[0] = getPixel32_sub(prm,xx ,yy ); + p[1] = getPixel32_sub(prm,xx+1,yy ); + p[2] = getPixel32_sub(prm,xx ,yy+1); + p[3] = getPixel32_sub(prm,xx+1,yy+1); + + r.alpha = RoundFpShortDouble( (p[0].alpha * dx2 * dy2) + (p[1].alpha * dx1 * dy2) + (p[2].alpha * dx2 * dy1) + (p[3].alpha * dx1 * dy1) ); + } + //red--------------------------------------- + x = sht->r.x; + y = sht->r.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.red = getPixel32_sub(prm,xx,yy).red; + }else{ + p[0] = getPixel32_sub(prm,xx ,yy ); + p[1] = getPixel32_sub(prm,xx+1,yy ); + p[2] = getPixel32_sub(prm,xx ,yy+1); + p[3] = getPixel32_sub(prm,xx+1,yy+1); + + r.red =RoundFpShortDouble( (p[0].red * dx2 * dy2) + (p[1].red * dx1 * dy2) + (p[2].red * dx2 * dy1) + (p[3].red * dx1 * dy1) ); + } + //green--------------------------------------- + x = sht->g.x; + y = sht->g.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.green = getPixel32_sub(prm,xx,yy).green; + }else{ + p[0] = getPixel32_sub(prm,xx ,yy ); + p[1] = getPixel32_sub(prm,xx+1,yy ); + p[2] = getPixel32_sub(prm,xx ,yy+1); + p[3] = getPixel32_sub(prm,xx+1,yy+1); + + r.green =RoundFpShortDouble( (p[0].green * dx2 * dy2) + (p[1].green * dx1 * dy2) + (p[2].green * dx2 * dy1) + (p[3].green * dx1 * dy1) ); + } + //blue--------------------------------------- + x = sht->b.x; + y = sht->b.y; + xx = x >>16; + yy = y >>16; + dx1 = (PF_FpLong)(x & 0xFFFF)/65536; + dy1 = (PF_FpLong)(y & 0xFFFF)/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + r.blue = getPixel32_sub(prm,xx,yy).blue; + }else{ + p[0] = getPixel32_sub(prm,xx ,yy ); + p[1] = getPixel32_sub(prm,xx+1,yy ); + p[2] = getPixel32_sub(prm,xx ,yy+1); + p[3] = getPixel32_sub(prm,xx+1,yy+1); + + r.blue =RoundFpShortDouble( (p[0].blue * dx2 * dy2) + (p[1].blue * dx1 * dy2) + (p[2].blue * dx2 * dy1) + (p[3].blue * dx1 * dy1) ); + } + + + return r; +} +//---------------------------------------------------------------------------------------- +inline channelShiftPrm addChannelShiftPrm(PF_Fixed X,PF_Fixed Y,channelShiftPrm *cs) +{ + channelShiftPrm ret; + ret.a.x = X + cs->a.x; + ret.a.y = Y + cs->a.y; + + ret.r.x = X + cs->r.x; + ret.r.y = Y + cs->r.y; + + ret.g.x = X + cs->g.x; + ret.g.y = Y + cs->g.y; + + ret.b.x = X + cs->b.x; + ret.b.y = Y + cs->b.y; + + return ret; +} + + + +#endif diff --git a/FsLibrary/FsSputtering.h b/FsLibrary/FsSputtering.h new file mode 100644 index 0000000..76a0ad7 --- /dev/null +++ b/FsLibrary/FsSputtering.h @@ -0,0 +1,1220 @@ +#pragma once +#ifndef sputteringData_H +#define sputteringData_H + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" +#else + #include "PF_Suite_Helper.h" +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + +#define FR_RAND(LO,HI) (A_long)( F_RAND() * (HI - LO + 1.0) / (1.0 + F_RAND_MAX)) +#define FM_RAND(HI) (A_long)( F_RAND() * (HI + 1.0) / (1.0 + F_RAND_MAX)) + +//----------------------------------------------------------------------------- +typedef struct{ + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; + A_long x; + A_long y; + PF_FpShort opa; + A_long sptIdx; +} sputDrawPrm; + + + +#define SPT_COUNT 60 +#define SPT_WIDTH 14 +#define SPT_SIZE(IDX) (SPT_SIZE_TBL[(IDX)]) +#define SPT_VALUE(IDX,X,Y) (SPT[(IDX)][(X) + ((Y) * SPT_WIDTH)]) + +static A_u_char SPT[SPT_COUNT][SPT_WIDTH* SPT_WIDTH] = { + { + 68,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 109,199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 105,199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 199, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 109, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 199,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 27, 80, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 126,245,125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40,127, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 46,185,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 140,255,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 95, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 4, 72, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66,253,159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84,131, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 71, 83, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 181,255,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128,203, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 91, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,109,255,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30,226,202, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 36, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 16, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27,161,181, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81,209,220,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 49, 44, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 92,128, 99, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 163,233,229,154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108,218,219,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14,112,131, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 76, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 45,208, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,198,255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29,136, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 19, 29, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95,209,205, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 150,226,255,213,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119,220,255,192,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 42,190,181, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 19, 29, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95,209,205, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 150,226,255,213,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119,220,255,192,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 42,190,181, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 1, 14, 36, 31, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33,111,173,112, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 109,203,255,183, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41,147,246,195, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 30, 61, 47, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 6, 71, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,102,216,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,109,207,231,133, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90,190,154, 93, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 110,101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 16, 90, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5,180,255,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30,194,255,231, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89,255,222, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 70, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 92,107, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 66, 87,172,176, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 36,176,213,255,253, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 53,237,253,255,244, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 27,190,238,224,135, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 0,127,209,193, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 38, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72,121, 38, 75, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32,143,188,208,173, 12, 0, 0, 0, 0, 0, 0, 0, 0, + 0,130,255,255,252, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0,119,241,240,204, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80,193,189,109, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 29, 75,151, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 30,215,255,255,232, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 97,255,248,247,255,131, 0, 0, 0, 0, 0, 0, 0, 0, + 46,229,254,255,242, 86, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96,255,207, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 66, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 84,223,232,219, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 186,255,255,255,236, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 150,255,254,255,255, 85, 0, 0, 0, 0, 0, 0, 0, 0, + 200,255,255,255,255, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 134,255,255,255,141, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 84, 90, 33, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 84,138,101, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,168,206,190, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35,252,255,255,147, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44,242,250,255,205, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 18,230,255,255,255,175, 76, 0, 0, 0, 0, 0, 0, 0, + 0,131,199,186,190,180,112, 0, 0, 0, 0, 0, 0, 0, + 0, 45,121, 92, 89, 89, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 1, 26, 94,118,103, 86, 27, 0, 0, 0, 0, 0, 0, 0, + 53,185,250,229,232,255,134, 0, 0, 0, 0, 0, 0, 0, + 62,214,255,255,255,255,228, 0, 0, 0, 0, 0, 0, 0, + 2,161,255,255,248,227,131, 0, 0, 0, 0, 0, 0, 0, + 0,116,255,214,120,122, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 36,221,101, 24, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 63, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 6, 13,111, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37,143,170,157, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 16,185,255,255,203, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 65,255,255,255,255,156, 51, 0, 0, 0, 0, 0, 0, 0, + 88,255,255,255,255,255,172, 0, 0, 0, 0, 0, 0, 0, + 33,177,240,255,248,255,140, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 53, 82, 60, 83, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 5, 52, 56, 21, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 48,158,230,227,191,150, 25, 0, 0, 0, 0, 0, 0, 0, + 105,253,255,255,255,246, 81, 0, 0, 0, 0, 0, 0, 0, + 35,209,255,255,255,240, 90, 0, 0, 0, 0, 0, 0, 0, + 85,241,255,255,255,226, 89, 0, 0, 0, 0, 0, 0, 0, + 50,109,182,255,255,154, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20,118,150, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0,128,133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,177,255,132, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18,190,255,255,151, 2, 0, 0, 0, 0, 0, 0, 0, + 0,127,255,255,255,238, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 46,228,255,251,123, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90,173,220,161, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,170,184, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0,102,202,168, 91, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0,150,255,255,255,143, 0, 0, 0, 0, 0, 0, 0, + 0, 1,198,255,255,255,144, 0, 0, 0, 0, 0, 0, 0, + 0, 37,255,255,255,202, 12, 0, 0, 0, 0, 0, 0, 0, + 32,164,229,255,255,102, 0, 0, 0, 0, 0, 0, 0, 0, + 148,249, 58,197,149, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 51,114, 12, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 4,135, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52,199,217, 66, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 24,181,255,211,149,121, 0, 0, 0, 0, 0, 0, 0, + 0,113,247,255,255,255,207, 0, 0, 0, 0, 0, 0, 0, + 0, 76,239,255,255,255,173, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 59,174,255,255, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,119,148, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 1, 6, 15, 24, 27, 0, 0, 0, 0, 0, 0, + 57, 57, 56, 49, 45, 54, 73, 81, 0, 0, 0, 0, 0, 0, + 173,191,221,212,157, 90, 47, 35, 0, 0, 0, 0, 0, 0, + 35, 46, 85,155,201,164, 69, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 65,118,109, 45, 13, 0, 0, 0, 0, 0, 0, + 0, 1, 5, 13, 19, 16, 6, 2, 0, 0, 0, 0, 0, 0, + 2, 6, 14, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 21, 47, 47, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 20, 82,181,191,133, 0, 0, 0, 0, 0, 0, + 0, 60,168,243,249,255,216,144, 0, 0, 0, 0, 0, 0, + 0, 78,199,255,252,255,201,113, 0, 0, 0, 0, 0, 0, + 0, 98,218,255,255,249,136, 13, 0, 0, 0, 0, 0, 0, + 13,133,249,255,243,166, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 29,153,234, 90, 12, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 84,173, 49, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 17, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 11, 32, 27, 8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20,133,252,241,197, 99, 22, 0, 0, 0, 0, 0, 0, + 0, 75,199,255,255,255,194, 71, 0, 0, 0, 0, 0, 0, + 11,137,255,255,255,255,169, 43, 0, 0, 0, 0, 0, 0, + 2,118,241,255,255,255,189, 71, 0, 0, 0, 0, 0, 0, + 0, 20,137,255,255,255,208,108, 0, 0, 0, 0, 0, 0, + 0, 0, 62,208,255,255,155, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 8, 34, 53, 55, 29, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 2, 12, 28, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43,163,231,235,146, 0, 0, 0, 0, 0, 0, 0, 0, + 38,201,255,255,255,241,161, 22, 0, 0, 0, 0, 0, 0, + 31,201,255,255,253,255,230, 71, 0, 0, 0, 0, 0, 0, + 0, 89,224,255,255,255,207, 44, 0, 0, 0, 0, 0, 0, + 0, 73,220,255,255,221, 75, 0, 0, 0, 0, 0, 0, 0, + 0, 86,192,255,205, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 61, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 12, 17, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79,112, 31, 0, 36, 71, 64, 19, 0, 0, 0, 0, 0, 0, + 14, 15, 0, 71,209,255,237,142, 0, 0, 0, 0, 0, 0, + 0, 0, 82,212,255,255,235,132, 0, 0, 0, 0, 0, 0, + 0, 50,207,255,248,255,237,142, 0, 0, 0, 0, 0, 0, + 0, 74,217,255,248,255,233,117, 0, 0, 0, 0, 0, 0, + 0, 0,109,232,255,230,149, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 51,111, 86, 20, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 5, 20,135, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 76,139,132,155, 10, 0, 0, 0, 0, 0, 0, 0, + 1,102,255,255,255,111, 0, 0, 0, 0, 0, 0, 0, 0, + 20,225,255,255,255,231, 38, 0, 0, 0, 0, 0, 0, 0, + 59,250,255,255,255,255,210,104, 0, 0, 0, 0, 0, 0, + 55,255,255,255,255,255,255,170, 0, 0, 0, 0, 0, 0, + 7,132,200,254,247,233,255, 98, 0, 0, 0, 0, 0, 0, + 0, 4, 16, 56, 51, 35, 66, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 3, 23, 43, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 96,169,193, 95, 6, 0, 0, 0, 0, 0, 0, + 0, 2, 71,222,255,255,227, 60, 0, 0, 0, 0, 0, 0, + 1, 94,204,244,233,251,255, 93, 0, 0, 0, 0, 0, 0, + 32,211,255,214,108,118,145, 42, 0, 0, 0, 0, 0, 0, + 63,253,255,195, 22, 1, 7, 1, 0, 0, 0, 0, 0, 0, + 40,208,225,112, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,106,129, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 65,159,190, 77, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 83,223,255,255,161, 0, 0, 0, 0, 0, 0, 0, + 0,115,243,255,255,250,196,122, 60, 0, 0, 0, 0, 0, + 0, 33,209,255,255,170,140,245,132, 0, 0, 0, 0, 0, + 4, 94,224,255,255,232,173, 83, 17, 0, 0, 0, 0, 0, + 0,139,255,255,244,212,163, 8, 0, 0, 0, 0, 0, 0, + 37,160,252,255,236, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 101,255,255,255,147, 16, 21, 8, 0, 0, 0, 0, 0, 0, + 17, 72,104, 97, 10, 0,100,113, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 8,116,154, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 57,244,255,194, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 22,169,255,255,255, 83, 26,103, 27, 0, 0, 0, 0, 0, + 196,253,255,255,254, 73, 64,255,108, 0, 0, 0, 0, 0, + 229,255,255,255,243,159,104,104, 38, 0, 0, 0, 0, 0, + 126,255,255,255,252,255,233, 38, 0, 0, 0, 0, 0, 0, + 18,112,134,178,255,255,228, 43, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 17,149,255,160, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 25,178, 65, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26,168,239,102, 26, 48, 26, 0, 0, 0, 0, 0, + 0, 76,213,255,255,247,216,239,138, 0, 0, 0, 0, 0, + 0, 83,255,255,255,255,255,255,107, 0, 0, 0, 0, 0, + 120,158,250,255,255,255,245,108, 3, 0, 0, 0, 0, 0, + 223,255,171,226,255,255,136, 0, 0, 0, 0, 0, 0, 0, + 96,150, 28,108,186,106, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 1, 0, 0, 36, 75, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,126,223,140, 0, 0, 0, 0, 0, 0, 0, + 60, 90, 93,160,233,255,207, 45, 0, 0, 0, 0, 0, 0, + 140,213,214,245,255,255,243,142, 4, 0, 0, 0, 0, 0, + 118,138,188,244,255,255,255,201, 5, 0, 0, 0, 0, 0, + 43, 4,114,234,255,231,200,132, 2, 0, 0, 0, 0, 0, + 9, 0, 79,159,167,116, 51, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 69,107,152, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 63,211,240,200,108, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 117,240,255,253,231,172, 56, 0, 0, 0, 0, 0, 0, 0, + 172,243,255,255,255,255,188, 48, 0, 0, 0, 0, 0, 0, + 208,255,255,255,255,246,178, 41, 0, 0, 0, 0, 0, 0, + 148,180,200,232,255,224, 90, 7, 19, 0, 0, 0, 0, 0, + 26, 22, 51,111,179,203,151, 79, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3,139,249,156, 27, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 44,122, 86, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 28, 80,133,177,171, 85, 0, 0, 0, 0, 0, 0, 0, + 0, 94,209,238,244,240,146, 0, 0, 0, 0, 0, 0, 0, + 19,173,255,255,255,255,227,116, 7, 0, 0, 0, 0, 0, + 32,208,255,255,255,255,255,218, 86, 0, 0, 0, 0, 0, + 42,218,255,255,255,255,255,242,110, 0, 0, 0, 0, 0, + 56,217,255,255,255,255,255,230, 62, 0, 0, 0, 0, 0, + 42,139,210,226,242,255,249,170, 21, 0, 0, 0, 0, 0, + 0, 0, 58, 95,147,212,178, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 44, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 53, 0, 8, 33, 18, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51,224,227,209,121, 29, 82, 45, 0, 0, 0, 0, + 0, 0,110,255,255,255,255,233,249,116, 0, 0, 0, 0, + 2, 88,227,255,252,255,255,140, 36, 1, 0, 0, 0, 0, + 8,159,255,252,252,255,254, 52, 0, 0, 0, 0, 0, 0, + 2,111,255,255,255,255,255, 74, 0, 0, 0, 0, 0, 0, + 37,187,255,243,225,255,232, 47, 0, 0, 0, 0, 0, 0, + 99,255,247, 98, 16,140, 86, 0, 0, 0, 0, 0, 0, 0, + 54,231,142, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 5, 20, 40, 17, 60, 23, 0, 0, 0, 0, 0, + 24,102,110,153,203,216,198,233, 90, 0, 0, 0, 0, 0, + 124,238,243,252,255,255,255,255,132, 0, 0, 0, 0, 0, + 199,255,254,255,255,255,255,255,187, 0, 0, 0, 0, 0, + 225,255,250,255,254,255,254,255,219, 27, 0, 0, 0, 0, + 152,202,185,255,255,254,255,255,242, 92, 0, 0, 0, 0, + 35, 55, 57,241,255,255,255,255,245,102, 0, 0, 0, 0, + 0, 0, 0,151,235,255,255,255,210, 29, 0, 0, 0, 0, + 0, 0, 0, 35, 94,174,238,247,163, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 60,130, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 3, 19, 38, 45, 34, 13, 0, 0, 0, 0, 0, 0, + 23, 49,104,170,217,215,157, 72, 13, 0, 0, 0, 0, 0, + 163,198,243,255,255,229,157, 72, 14, 0, 0, 0, 0, 0, + 141,174,225,255,248,180, 86, 13, 0, 0, 0, 0, 0, 0, + 4, 16, 58,130,190,192,131, 52, 6, 0, 0, 0, 0, 0, + 0, 7, 59,144,222,255,234,160, 74, 23, 0, 0, 0, 0, + 11, 56,142,225,255,255,255,222,149, 90, 0, 0, 0, 0, + 0, 20, 94,190,253,255,255,228,154, 95, 0, 0, 0, 0, + 0, 0, 44,128,200,218,178,108, 45, 13, 0, 0, 0, 0, + 0, 0, 5, 17, 25, 21, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 10, 84, 57, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51,243,180, 83,122, 8, 50, 75, 3, 0, 0, 0, 0, 0, + 80,255,246,237,253,152,210,212, 28, 0, 0, 0, 0, 0, + 98,255,255,255,255,255,255,250,154, 25, 0, 0, 0, 0, + 35,196,255,255,255,255,255,255,255,113, 0, 0, 0, 0, + 0, 52,150,203,253,245,241,255,255,179, 0, 0, 0, 0, + 21, 13, 0,136,255,150,161,255,252,160, 0, 0, 0, 0, + 134, 36, 0, 80,155,151,184,150,100, 34, 0, 0, 0, 0, + 106, 9, 0, 3, 7,166,247, 58, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 60,127, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 1, 8, 38, 82,149,197,194,160,133, 0, 0, 0, + 25, 44, 79,105,134,156,196,221,208,168,141, 0, 0, 0, + 65,110,193,242,255,255,255,252,224,172,143, 0, 0, 0, + 74,122,208,250,255,255,255,250,221,164,132, 0, 0, 0, + 85,135,218,249,255,254,255,243,193,117, 75, 0, 0, 0, + 98,149,228,251,255,255,255,225,152, 59, 13, 0, 0, 0, + 133,185,255,255,255,255,241,179,103, 28, 0, 0, 0, 0, + 112,163,239,253,243,205,156, 90, 44, 8, 0, 0, 0, 0, + 39, 89,178,239,205,104, 46, 11, 5, 1, 0, 0, 0, 0, + 4, 43,120,196,162, 54, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 96,168,142, 49, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 2, 8, 22, 29, 23, 6, 0, 0, 0, 0, 0, + 0, 0, 32, 94,133,158,142, 93, 9, 0, 0, 0, 0, 0, + 12, 50,135,213,254,255,253,195, 88, 26, 4, 0, 0, 0, + 39,135,240,255,255,255,255,247,207,104, 25, 0, 0, 0, + 37,141,250,255,255,254,255,255,250,157, 64, 0, 0, 0, + 15, 84,189,242,254,254,255,255,255,167, 66, 0, 0, 0, + 0, 27,125,227,253,255,255,254,219,113, 32, 0, 0, 0, + 0, 28,123,227,252,255,255,233,133, 35, 2, 0, 0, 0, + 0, 41,136,226,255,255,211,118, 39, 3, 0, 0, 0, 0, + 0, 26, 76,124,173,174,108, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 19, 55, 60, 32, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 35,115, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 61,228, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12,210,168, 44, 25, 36, 11, 0, 0, 0, 0, 0, 0, + 0, 59,219,245,205,200,203,139, 31, 0, 0, 0, 0, 0, + 2,154,245,255,255,255,255,227, 98, 0, 0, 0, 0, 0, + 11,201,255,255,253,255,255,193, 43, 0, 0, 0, 0, 0, + 27,215,255,255,252,255,255,165, 0, 0, 0, 0, 0, 0, + 28,154,209,245,255,255,255,227,120, 28, 0, 0, 0, 0, + 2, 17, 51,159,234,237,234,255,246,154, 6, 0, 0, 0, + 5, 1, 0, 40,119,111,108,197,247,195, 26, 0, 0, 0, + 53, 6, 0, 1, 6, 2, 11, 62, 98, 45, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 42,137,147, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 24,122,225,255,255,137, 0, 0, 0, 0, 0, 0, 0, + 22,183,255,255,255,255,245,183, 49, 0, 0, 0, 0, 0, + 191,255,255,255,255,255,255,255,230, 79, 0, 0, 0, 0, + 140,243,255,255,255,255,255,255,255,209, 36, 0, 0, 0, + 11,183,255,255,255,255,255,255,255,255,168, 0, 0, 0, + 76,236,255,255,255,255,255,255,255,248,108, 0, 0, 0, + 138,255,255,255,255,255,255,255,255,255,136, 0, 0, 0, + 12,154,255,255,255,255,255,255,255,253,110, 0, 0, 0, + 0, 35,227,228,234,255,239,206,192,101, 1, 0, 0, 0, + 0, 3,171, 93, 49,146,128, 16, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 2, 5, 69, 83, 10, 9, 4, 0, 0, 0, 0, 13, 0, 0, + 0, 4,127,255,180,164, 72, 0, 0, 0, 0, 0, 0, 0, + 0, 10,161,255,255,255,124, 0, 0, 0, 0, 0, 0, 0, + 1, 58,219,255,255,255,197,104, 19, 0, 2, 2, 0, 0, + 2,108,255,255,255,255,255,255,129, 68, 86, 10, 0, 0, + 0, 66,250,255,255,255,255,254,232,240,192, 12, 0, 0, + 91,186,253,254,255,255,255,255,223,253,238, 93, 0, 0, + 158,255,255,255,255,255,255,175, 83,221,255, 81, 0, 0, + 57,234,255,254,255,255,254, 86, 0,125,122, 6, 0, 0, + 15,134,255,255,255,255,255,117, 0, 12, 7, 0, 0, 0, + 47, 32,180,255,255,255,191, 52, 0, 0, 0, 0, 0, 0, + 145, 0, 24,114,121, 80, 30, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 0, 0, 6, 36, 59, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33,141,217,255,128, 9, 0, 0, 0, 0, + 0, 0, 0, 7,126,255,255,255,255,136, 4, 0, 0, 0, + 0, 0, 31,137,234,255,255,255,255,253, 92, 0, 0, 0, + 1, 44,190,255,255,255,255,255,255,255,232, 77, 0, 0, + 6,149,255,255,255,255,255,255,255,255,255,160, 0, 0, + 6,155,255,255,255,255,255,255,255,255,216, 49, 0, 0, + 17,183,255,241,220,255,255,255,255,233, 86, 0, 0, 0, + 30,214,255,153, 43,127,232,255,171, 53, 5, 0, 0, 0, + 131,248,233, 60, 0, 7,108,177, 46, 0, 0, 0, 0, 0, + 147,255,180, 4, 0, 0, 6, 16, 0, 0, 0, 0, 0, 0, + 35,130, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 12, 79, 42, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34,214,215,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73,255,255,208, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98,255,255,240,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100,255,255,255,238,104, 61, 33, 4, 0, 0, 0, 0, 0, + 59,238,255,240,204,239,207,184,124, 34, 0, 0, 0, 0, + 9, 94,126,101, 35,179,255,255,250,182, 90, 11, 0, 0, + 0, 0, 0, 0, 0, 98,252,255,255,255,240, 36, 0, 0, + 0, 0, 0, 0, 0, 45,218,255,255,255,255, 79, 0, 0, + 0, 0, 0, 0, 0, 5,115,203,249,255,255, 92, 0, 0, + 0, 0, 0, 0, 0, 0, 8, 26,145,233,214, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 83, 70, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 22,108, 72, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99,246,201, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 24,108,235,220, 93, 64, 19, 1, 2, 0, 0, 0, + 60,182,192,212,163, 84,211,223, 79, 0, 3, 0, 0, 0, + 164,255,255,255,186,136,255,244, 97, 22, 8, 0, 0, 0, + 150,255,255,255,251,250,255,239,201,184,104, 10, 0, 0, + 90,254,255,255,255,255,255,255,255,255,252, 93, 0, 0, + 21,153,233,255,255,255,255,255,255,255,255,227, 0, 0, + 0, 11,136,255,248,218,254,255,255,255,255,232, 0, 0, + 0, 0, 58,220,147, 45,182,225,168,238,255,198, 0, 0, + 0, 0, 6, 45, 19, 0, 47, 80, 17,145,249,140, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 78, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 55, 54, 52, 39, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65, 65, 72, 59, 29, 4, 7, 14, 13, 9, 4, 1, 0, 0, + 94,103,130,120, 59, 12, 25, 51, 48, 32, 16, 3, 0, 0, + 103,119,171,183,125, 78,100,133,130,103, 58, 16, 1, 0, + 80,101,168,212,194,178,204,222,222,188,112, 35, 7, 0, + 43, 70,146,226,255,255,255,255,255,255,175, 59, 19, 0, + 17, 46,128,229,255,255,255,255,255,255,232, 83, 32, 0, + 1, 29,109,219,255,255,255,255,255,255,255, 96, 41, 0, + 0, 23,101,216,255,255,255,255,255,255,255, 96, 42, 0, + 0, 26,100,207,255,255,255,255,255,255,217, 81, 35, 0, + 0, 23, 84,180,255,255,255,255,255,255,162, 57, 20, 0, + 0, 17, 65,151,233,255,255,255,255,203,112, 33, 6, 0, + 0, 16, 59,141,222,255,255,255,238,180, 94, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 6, 18, 42, 61, 59, 37, 14, 0, 0, 0, 0, 0, 0, 0, + 45, 68,111,138,138,111, 66, 23, 5, 0, 0, 0, 0, 0, + 110,149,217,252,255,229,164, 83, 23, 0, 0, 0, 0, 0, + 141,182,245,255,255,255,225,150, 65, 6, 1, 0, 0, 0, + 102,141,208,238,254,255,251,214,149, 75, 31, 5, 0, 0, + 19, 59,136,191,224,224,239,241,229,167, 89, 25, 1, 0, + 0, 15, 51, 84,120,146,202,249,255,224,145, 54, 11, 0, + 0, 0, 0, 0, 26, 83,174,246,255,241,183, 83, 27, 0, + 0, 0, 0, 0, 21, 89,187,255,255,248,207,104, 43, 0, + 0, 0, 0, 0, 29,113,207,255,255,235,175, 83, 34, 0, + 0, 0, 0, 0, 38,126,216,255,255,192,106, 36, 9, 0, + 0, 0, 0, 0, 22, 74,134,163,148, 95, 39, 8, 1, 0, + 0, 0, 0, 0, 9, 35, 74, 94, 76, 39, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 4, 1, 6,123,221,202, 82, 0, 0, 0, 0, 0, + 0, 19,117, 88,111,220,251,249,199, 57, 0, 0, 0, 0, + 5,109,245,220,233,255,255,255,255,165, 18, 0, 0, 0, + 91,223,255,255,255,255,255,255,255,251,100, 0, 0, 0, + 131,255,255,254,255,255,255,255,255,255,169, 13, 0, 0, + 68,253,255,255,255,255,255,255,255,255,232,108, 8, 0, + 30,239,255,255,255,255,255,255,255,255,255,242, 58, 0, + 24,222,255,254,255,255,255,255,255,255,255,255, 95, 0, + 1,117,255,255,255,254,255,255,255,255,255,255, 89, 0, + 0, 26,156,219,252,255,255,255,255,255,255,198, 36, 0, + 0, 1, 27, 72,173,252,255,255,255,255,255, 90, 0, 0, + 0, 0, 0, 0, 38,152,236,252,224,229,190, 30, 0, 0, + 0, 0, 0, 0, 0, 21,167,225,131,129, 83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 0, 0, 4, 11, 12, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 56,111,137,110, 53, 18, 0, 0, 0, + 0, 10, 48, 94,135,181,221,240,229,182,105, 29, 0, 0, + 63,106,177,216,243,255,255,255,255,247,155, 47, 0, 0, + 162,213,255,255,255,255,255,255,255,243,167, 62, 8, 0, + 152,202,255,255,255,255,255,255,255,251,212,113, 45, 0, + 39, 95,192,249,255,255,255,255,255,254,255,164, 83, 0, + 3, 23,104,205,251,255,255,255,255,255,255,180, 99, 0, + 0, 0, 31,111,203,253,245,238,245,255,255,168, 90, 0, + 2, 0, 6, 39,141,220,216,157,120,126,129, 84, 42, 0, + 2, 0, 4, 32,135,226,229,138, 38, 0, 4, 6, 2, 0, + 0, 0, 9, 52,156,239,238,175, 82, 18, 3, 0, 0, 0, + 0, 0, 7, 41,125,177,160,124, 93, 73, 39, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 0, 0, 0, 0, 11, 30, 63,115,168,199,200,176,146,133, + 9, 18, 29, 40, 57, 76,102,143,187,210,207,181,150,137, + 31, 63,105,142,175,195,204,219,234,236,221,189,157,144, + 48, 97,158,215,244,251,252,253,254,252,233,195,160,147, + 57,112,177,233,255,255,255,255,255,250,228,187,149,134, + 61,118,183,231,253,255,255,255,255,248,213,161,114, 95, + 68,126,192,236,253,255,255,255,255,239,186,117, 61, 39, + 89,152,215,246,255,255,255,255,253,215,146, 73, 20, 4, + 111,178,237,255,255,255,255,250,226,170,102, 43, 7, 0, + 97,161,223,250,255,249,230,196,151,101, 53, 20, 4, 0, + 46, 98,164,223,252,229,166, 99, 56, 30, 12, 3, 0, 0, + 6, 42,105,187,236,202,109, 30, 0, 0, 0, 0, 1, 0, + 0, 21, 73,151,204,175, 88, 15, 0, 0, 0, 0, 0, 0, + 0, 14, 49,107,150,131, 67, 17, 0, 0, 0, 0, 0, 0 + }, + { + 3, 28, 74, 99, 59, 15, 0, 7, 5, 1, 0, 0, 22, 53, + 20,102,192,190,145, 78, 50, 84, 64, 22, 0, 0, 9, 21, + 22,142,255,255,238,190,162,201,176, 97, 23, 6, 2, 0, + 0, 71,185,247,255,255,255,255,251,195,110, 66, 27, 8, + 0, 10, 66,146,227,255,255,255,255,247,221,206,112, 28, + 0, 0, 2, 38,179,255,255,251,253,255,255,255,153, 30, + 0, 0, 0, 25,171,255,255,253,251,254,255,255,134, 15, + 0, 0, 29,128,225,255,255,255,255,255,255,251,125, 7, + 0, 0, 29,128,227,255,255,255,255,255,255,208, 87, 1, + 0, 0, 10, 57,148,208,211,201,215,244,248,138, 31, 0, + 0, 0, 0, 0, 31, 65, 72, 48, 91,184,233, 91, 0, 0, + 0, 0, 0, 0, 2, 8, 11, 1, 18,129,255,134, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,195,121, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,116, 74, 19, 0 + }, + { + 0, 0, 0, 1, 98,116, 7, 2, 2, 0, 0, 0, 0, 12, + 0, 0, 6,100,242,207, 85,121,115, 67, 81, 27, 0, 12, + 0, 23,127,245,255,252,244,255,255,238,248,145, 7, 5, + 0, 79,249,255,255,255,255,255,255,255,255,238, 71, 0, + 31,100,243,255,255,255,255,255,255,255,255,255,190, 41, + 198,221,247,255,255,255,255,255,255,255,255,255,255,145, + 174,251,255,255,255,255,255,255,255,255,255,255,255,194, + 50,222,255,255,255,255,255,255,255,255,255,255,253,171, + 43,206,255,255,255,255,255,255,255,255,255,255,255,178, + 5, 99,250,255,255,255,255,255,255,255,255,255,243,145, + 0, 11,136,249,255,255,255,255,255,255,222,177, 93, 26, + 0, 0, 10,125,235,255,255,255,255,174, 51, 19, 0, 2, + 0, 0, 0, 6,157,255,237,217,149, 28, 0, 0, 0, 12, + 4, 4, 0, 5, 96,132, 62, 45, 14, 0, 5, 4, 2, 14 + } +}; +static A_u_char SPT_SIZE_TBL[SPT_COUNT] = {2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14}; + +//*********************************************************************** +static void SputDataDraw8(sputDrawPrm *sdp,PF_Pixel col) +{ + PF_Pixel *oD; + oD = (PF_Pixel *)sdp->data; + A_long w = sdp->width; + A_long wt = sdp->widthTrue; + A_long h = sdp->height; + + PF_Pixel c = col; + if (sdp->sptIdx>=50){ + if ( (sdp->x>=0)&&(sdp->xy>=0)&&(sdp->yopa); + A_long adr = sdp->x + sdp->y * wt; + oD[adr] = PixelBlend8(oD[adr],c); + } + return; + } + + A_long sptSize = SPT_SIZE(sdp->sptIdx); + A_long x0 = sdp->x - (sptSize/2); + A_long y0 = sdp->y - (sptSize/2); + + A_long i,j,x,y; + for ( j=0;j=0)&&(y=0)&&(xsptIdx,i,j) * sdp->opa); + if (c.alpha>0){ + A_long adr = x + y * wt; + oD[adr] = PixelBlend8(oD[adr],c); + } + } + } + } +} +//*********************************************************************** +static void SputDataDraw16(sputDrawPrm *sdp,PF_Pixel16 col) +{ + PF_Pixel16 *oD; + oD = (PF_Pixel16 *)sdp->data; + A_long w = sdp->width; + A_long wt = sdp->widthTrue; + A_long h = sdp->height; + + PF_Pixel16 c = col; + if (sdp->sptIdx>=50){ + if ( (sdp->x>=0)&&(sdp->xy>=0)&&(sdp->yopa); + A_long adr = sdp->x + sdp->y * wt; + oD[adr] = PixelBlend16(oD[adr],c); + } + return; + } + + A_long sptSize = SPT_SIZE(sdp->sptIdx); + A_long x0 = sdp->x - (sptSize/2); + A_long y0 = sdp->y - (sptSize/2); + + A_long i,j,x,y; + for ( j=0;j=0)&&(y=0)&&(xsptIdx,i,j) * sdp->opa)); + if (c.alpha>0){ + A_long adr = x + y * wt; + oD[adr] = PixelBlend16(oD[adr],c); + } + } + } + } +} +//*********************************************************************** +#define SPD_RAND_MAX 200 +#define SPD_VSMALL_VALUE 255 + +static void SputDataDraw32(sputDrawPrm *sdp,PF_PixelFloat col) +{ + PF_PixelFloat *oD; + oD = (PF_PixelFloat *)sdp->data; + A_long w = sdp->width; + A_long wt = sdp->widthTrue; + A_long h = sdp->height; + + PF_PixelFloat c = col; + if (sdp->sptIdx>=50){ + if ( (sdp->x>=0)&&(sdp->xy>=0)&&(sdp->yopa; + A_long adr = sdp->x + sdp->y * wt; + oD[adr] = PixelBlend32(oD[adr],c); + } + return; + } + + A_long sptSize = SPT_SIZE(sdp->sptIdx); + A_long x0 = sdp->x - (sptSize/2); + A_long y0 = sdp->y - (sptSize/2); + + A_long i,j,x,y; + for ( j=0;j=0)&&(y=0)&&(xsptIdx,i,j)/PF_MAX_CHAN8 * sdp->opa)); + if (c.alpha>0){ + A_long adr = x + y * wt; + oD[adr] = PixelBlend32(oD[adr],c); + } + } + } + } +} +//*********************************************************************** +//------------------------------------------------------------------------------------------------- + +static PF_Err SetupSputData (A_long size,A_u_char *sputRandTable) +{ + PF_Err err = PF_Err_NONE; + if (sputRandTable == NULL) { + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + A_long i; + switch(size){ + case 1: // 極小 + for ( i=0; i<150;i++){ + sputRandTable[i] = SPD_VSMALL_VALUE; + } + for ( i=150; i<198;i++){ + sputRandTable[i] = (A_u_char)(i % 8); + } + sputRandTable[198] = 8; + sputRandTable[199] = 9; + break; + case 2: // 小 + for ( i=0; i<100;i++){ + sputRandTable[i] = SPD_VSMALL_VALUE; + } + for ( i=100; i<150;i++){ + sputRandTable[i] = (A_u_char)(i % 8); + } + for ( i=150; i<198;i++){ + sputRandTable[i] = (A_u_char)(i % 4) + 8; + } + sputRandTable[198] = 12; + sputRandTable[199] = 13; + break; + case 3: // 中 + for ( i=0; i<86;i++){ + sputRandTable[i] = SPD_VSMALL_VALUE; + } + for ( i=86; i<138;i++){ + sputRandTable[i] = (A_u_char)(i % 8); + } + for ( i=138; i<186;i++){ + sputRandTable[i] = (A_u_char)(i % 12) + 8; + } + for ( i=186; i<198;i++){ + sputRandTable[i] = (A_u_char)(i % 12) + 20; + } + sputRandTable[198] = 32; + sputRandTable[199] = 33; + break; + case 4: // 大 + for ( i=0; i<70;i++){ + sputRandTable[i] = SPD_VSMALL_VALUE; + } + for ( i=70; i<120;i++){ + sputRandTable[i] = (A_u_char)(i % 10) ; + } + for ( i=120; i<160;i++){ + sputRandTable[i] = (A_u_char)((i % 10) + 10) ; + } + for ( i=160; i<200;i++){ + sputRandTable[i] = (A_u_char)((i % 30) + 20) ; + } + break; + case 5: // 特大 + default: + for ( i=0; i<40;i++){ + sputRandTable[i] = SPD_VSMALL_VALUE; + } + for ( i=40; i<80;i++){ + sputRandTable[i] = (A_u_char)(i % 10) ; + } + for ( i=80; i<120;i++){ + sputRandTable[i] = (A_u_char)((i % 10) + 10) ; + } + for ( i=120; i<200;i++){ + sputRandTable[i] = (A_u_char)((i % 40) + 20) ; + } + } + return err; + +} + + + + + +#endif diff --git a/FsLibrary/FsUtils.h b/FsLibrary/FsUtils.h new file mode 100644 index 0000000..b7ccdab --- /dev/null +++ b/FsLibrary/FsUtils.h @@ -0,0 +1,759 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSUTILS_H +#define FSUTILS_H + +#include "AEConfig.h" +#include "entry.h" +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" +#else + #include "PF_Suite_Helper.h" +#endif +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#ifdef AE_OS_WIN + #include +#endif + + +//xorShift +#define F_SRAND(s) (init_xorShift(s)) +#define F_RAND() (xorShift()) +#define F_RAND_MAX 0x7FFF + +#define F_RAND_D() (xorShiftDouble()) + +#define F_RAND_D2(min,max) (min + ((max - min) * xorShiftDouble())) + +#define F_RAND_D1() (2 * xorShiftDouble() -1) + +//Cのライブラリ +//#define F_SRAND(s) srand(s);for(int b=0; b<100;b++) rand() +//#ifdef AE_OS_WIN +// //#define F_RAND() (xorShift()) +// #define F_RAND() (rand()) +//#else +// #define F_RAND() (rand()>>16) +// +//#endif + + + +#define F_RAND2(min,max) ((min) + (A_long)( (double)F_RAND()*((double)(max) - (double)(min) +1.0f )/(double)(1.0f+F_RAND_MAX))) +#define F_RAND3(max) ((A_long)( (double)F_RAND()*((double)(max) +1.0f )/(1.0f+F_RAND_MAX) ) ) + +#define FIX2FLT(X) ((double)(X) / 65536.0) +#define FLT2FIX(F) ((PF_Fixed)((F) * 65536 + (((F) < 0) ? -0.5 : 0.5))) +#define F_ABS(x) ((x) >= 0 ? (x) : -(x)) + +//変数の型変換 + +//----------------------------------------------------------------------------------- +inline A_u_char RoundByteLong(A_long x) +{ + A_long temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN8) temp=PF_MAX_CHAN8; + return (A_u_char)temp; +} +//----------------------------------------------------------------------------------- +inline A_u_char RoundByteFpLong(PF_FpLong x) +{ + PF_FpLong temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN8) temp=PF_MAX_CHAN8; + return (A_u_char)temp; +} +//----------------------------------------------------------------------------------- +inline A_u_char RoundByteFpShort(PF_FpShort x) +{ + PF_FpShort temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN8) temp=PF_MAX_CHAN8; + return (A_u_char)temp; +} +//----------------------------------------------------------------------------------- +inline A_u_char RoundByteDouble(double x) +{ + double temp = x; + if (temp<0) temp = 0; + if (temp>PF_MAX_CHAN8) temp = PF_MAX_CHAN8; + return (A_u_char)temp; +} +//----------------------------------------------------------------------------------- +inline A_u_short RoundShort(A_long x) +{ + A_long temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN16) temp=PF_MAX_CHAN16; + return (A_u_short)temp; +} +//----------------------------------------------------------------------------------- +inline A_u_short RoundShortFpLong(PF_FpLong x) +{ + PF_FpLong temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN16) temp=PF_MAX_CHAN16; + return (A_u_short)temp; +} +//----------------------------------------------------------------------------------- +inline PF_FpShort RoundFpShort(PF_FpShort x) +{ + PF_FpShort temp=x; + if (temp<0) temp=0; + if (temp>32.0) temp=32.0; + return temp; +} +//----------------------------------------------------------------------------------- +inline PF_FpShort RoundFpShortDouble(PF_FpLong x) +{ + double temp=x; + if (temp<0) temp=0; + if (temp>32) temp=32.0; + return (PF_FpShort)temp; +} +//----------------------------------------------------------------------------------- +inline PF_FpShort RoundFpShort2(PF_FpLong x) +{ + double temp = x; + if (temp < 0) temp = 0; + if (temp > 1) temp = 1; + return (PF_FpShort)temp; +} +//----------------------------------------------------------------------------------- +//*********************************************************************************** +/* + 乱数 + xorShiftに関しては以下のHPの記事を参考にしました。 + + ★小川暇つぶしチラ裏 2008年10月31日 ランダム + http://ogawa-sankinkoutai.seesaa.net/article/108848981.html + + ★銀天随筆集 Xorshift の初期化は + http://d.hatena.ne.jp/gintenlabo/20100930/1285859540 +*/ + +//*********************************************************************************** +// xorShift用のグローバル変数 +static A_u_long gSeed128[4]; +//------------------------------------------------------------------- +static A_u_long xorShift() +{ + A_u_long t = ( gSeed128[ 0 ] ^ ( gSeed128[ 0 ] << 11 ) ); + gSeed128[ 0 ] = gSeed128[ 1 ]; + gSeed128[ 1 ] = gSeed128[ 2 ]; + gSeed128[ 2 ] = gSeed128[ 3 ]; + A_u_long ret = (gSeed128[ 3 ] = ( gSeed128[ 3 ] ^ ( gSeed128[ 3 ] >> 19 ) ) ^ ( t ^ ( t >> 8 ) ) ); + ret = (ret>>16) & 0x7FFF; + return ret; + +} +//------------------------------------------------------------------- +static double xorShiftDouble() +{ + A_u_long t = ( gSeed128[ 0 ] ^ ( gSeed128[ 0 ] << 11 ) ); + gSeed128[ 0 ] = gSeed128[ 1 ]; + gSeed128[ 1 ] = gSeed128[ 2 ]; + gSeed128[ 2 ] = gSeed128[ 3 ]; + A_u_long ret = (gSeed128[ 3 ] = ( gSeed128[ 3 ] ^ ( gSeed128[ 3 ] >> 19 ) ) ^ ( t ^ ( t >> 8 ) ) ); + ret = ret & 0x7FFFFFFF; + + return (double)ret / 0x7FFFFFFF; + +} +//------------------------------------------------------------------- +static void init_xorShift(A_u_long s) +{ + A_u_long ss = s + 100; + for ( A_u_long i=1; i<=4;i++) + { + gSeed128[ i - 1 ] = ss = 1812433253U * ( ss ^ ( ss >> 30 ) ) + i; + } +} +//*********************************************************************************** +/* + ピクセル変換 +*/ +//*********************************************************************************** +#define FS_CONVERT8TO16(A) ( (((A_long)(A) * PF_MAX_CHAN16) + PF_HALF_CHAN8) / PF_MAX_CHAN8 ) +#define FS_CONVERT8TO32(A) ((double)(long)((double)A*10000.0/(double)PF_MAX_CHAN8 + 0.5)/10000.0) +//#define FS_CONVERT8TO32(A) ((double)(A)/PF_MAX_CHAN8) + +#define FS_CONVERT16TO8(A) ( (((A_long)(A) * PF_MAX_CHAN8) + PF_HALF_CHAN16) / PF_MAX_CHAN16) +#define FS_CONVERT16TO32(A) ((double)(long)((double)A*10000.0/(double)PF_MAX_CHAN16 + 0.5)/10000.0) +//#define FS_CONVERT16TO32(A) ((double)(A)/PF_MAX_CHAN16) + +#define FS_CONVERT32TO8(A) ( (long)((A)*PF_MAX_CHAN8+0.5) ) +#define FS_CONVERT32TO16(A) ( FS_CONVERT8TO16(FS_CONVERT32TO8(A)) ) +//#define FS_CONVERT32TO16(A) ( (long)(PF_MAX_CHAN16*(A)+0.5) ) + +#define FS_SHORT(A) ((double)(long)((double)A*10000.0 + 0.5)/10000.0) + +//----------------------------------------------------------------------------------- +inline PF_Pixel16 CONV8TO16(PF_Pixel c) +{ + PF_Pixel16 r; + r.alpha = RoundShortFpLong(FS_CONVERT8TO16(c.alpha)); + r.red = RoundShortFpLong(FS_CONVERT8TO16(c.red)); + r.green = RoundShortFpLong(FS_CONVERT8TO16(c.green)); + r.blue = RoundShortFpLong(FS_CONVERT8TO16(c.blue)); + return r; +} +#define C16TO8(A) (RoundByteFpLong( (((A_long)(A) * PF_MAX_CHAN8) + PF_HALF_CHAN16) / PF_MAX_CHAN16)) +//----------------------------------------------------------------------------------- +inline PF_Pixel CONV16TO8(PF_Pixel16 c) +{ + + PF_Pixel r; + r.alpha = RoundByteFpLong(FS_CONVERT16TO8(c.alpha)); + r.red = RoundByteFpLong(FS_CONVERT16TO8(c.red)); + r.green = RoundByteFpLong(FS_CONVERT16TO8(c.green)); + r.blue = RoundByteFpLong(FS_CONVERT16TO8(c.blue)); + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat CONV8TO32(PF_Pixel c) +{ + PF_PixelFloat r; + r.alpha = (PF_FpShort)(FS_CONVERT8TO32(c.alpha)); + r.red = (PF_FpShort)(FS_CONVERT8TO32(c.red)); + r.green = (PF_FpShort)(FS_CONVERT8TO32(c.green)); + r.blue = (PF_FpShort)(FS_CONVERT8TO32(c.blue)); + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat CONV16TO32(PF_Pixel16 c) +{ + PF_PixelFloat r; + r.alpha = (PF_FpShort)(FS_CONVERT16TO32(c.alpha)); + r.red = (PF_FpShort)(FS_CONVERT16TO32(c.red)); + r.green = (PF_FpShort)(FS_CONVERT16TO32(c.green)); + r.blue = (PF_FpShort)(FS_CONVERT16TO32(c.blue)); + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel CONV32TO8(PF_PixelFloat c) +{ + PF_Pixel r; + r.alpha = RoundByteLong(FS_CONVERT32TO8(c.alpha)); + r.red = RoundByteLong(FS_CONVERT32TO8(c.red)); + r.green = RoundByteLong(FS_CONVERT32TO8(c.green)); + r.blue = RoundByteLong(FS_CONVERT32TO8(c.blue)); + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel16 CONV32TO16(PF_PixelFloat c) +{ + PF_Pixel16 r; + r.alpha = RoundShortFpLong(FS_CONVERT32TO16(c.alpha)); + r.red = RoundShortFpLong(FS_CONVERT32TO16(c.red)); + r.green = RoundShortFpLong(FS_CONVERT32TO16(c.green)); + r.blue = RoundShortFpLong(FS_CONVERT32TO16(c.blue)); + return r; +} +//------------------------------------------------------------------------------------------------- +//************************************************************************************************* +//ピクセルの比較 +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix8(PF_Pixel s,PF_Pixel d) +{ + return ( (s.blue==d.blue)&&(s.green==d.green)&&(s.red==d.red) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix8Lv(PF_Pixel s,PF_Pixel d,A_u_char lv) +{ + return ( (F_ABS(s.blue-d.blue)<=lv)&&(F_ABS(s.green-d.green)<=lv)&&(F_ABS(s.red-d.red)<=lv) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix16(PF_Pixel16 s,PF_Pixel16 d) +{ + return ( (s.blue==d.blue)&&(s.green==d.green)&&(s.red==d.red) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix16Lv(PF_Pixel16 s,PF_Pixel16 d,A_u_short lv) +{ + return ( (F_ABS(s.blue-d.blue)<=lv)&&(F_ABS(s.green-d.green)<=lv)&&(F_ABS(s.red-d.red)<=lv) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix32(PF_PixelFloat s,PF_PixelFloat d) +{ + return ( (s.blue==d.blue)&&(s.green==d.green)&&(s.red==d.red) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix32Lv(PF_PixelFloat s,PF_PixelFloat d,PF_FpShort lv) +{ + return ( (F_ABS(s.blue-d.blue)<=lv)&&(F_ABS(s.green-d.green)<=lv)&&(F_ABS(s.red-d.red)<=lv) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix16_8(PF_Pixel16 s,PF_Pixel d) +{ + PF_Pixel ss; + ss = CONV16TO8(s); + return ( (ss.blue==d.blue)&&(ss.green==d.green)&&(ss.red==d.red) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix16_8Lv(PF_Pixel16 s,PF_Pixel d,A_u_char lv) +{ + PF_Pixel ss; + ss = CONV16TO8(s); + return ( (F_ABS(ss.blue-d.blue)<=lv)&&(F_ABS(ss.green-d.green)<=lv)&&(F_ABS(ss.red-d.red)<=lv) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix32_8Lv(PF_PixelFloat s,PF_Pixel d,A_u_char lv) +{ + PF_Pixel ss; + ss = CONV32TO8(s); + return ( (F_ABS(ss.blue-d.blue)<=lv)&&(F_ABS(ss.green-d.green)<=lv)&&(F_ABS(ss.red-d.red)<=lv) ); +} +//------------------------------------------------------------------------------------------------- +inline PF_Boolean compPix32_8(PF_PixelFloat s,PF_Pixel d) +{ + PF_Pixel ss; + ss = CONV32TO8(s); + return ( (ss.blue==d.blue)&&(ss.green==d.green)&&(ss.red==d.red) ); +} +//------------------------------------------------------------------------------------------------- +inline A_u_char Pixel8Level(PF_Pixel s) +{ + //77 150 29 + /* + A_long v = (s.red * 77 + s.green + s.blue * 29) /256; + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_u_char)v; + */ + + double v = ( 0.29891 * (double)s.red) + ( 0.58661 * (double)s.green) + ( 0.11448 * (double)s.blue); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_u_char)v; + +} +//------------------------------------------------------------------------------------------------- +inline A_u_long Pixel8LevelA(PF_Pixel s) +{ + //77 150 29 + /* + A_long v = (s.red * 77 + s.green + s.blue * 29) /256; + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_u_char)v; + */ + + double v = ( 0.29891 * (double)s.red) + ( 0.58661 * (double)s.green) + ( 0.11448 * (double)s.blue); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + v = ((v+1) *256) + s.alpha; + return (A_u_long)v; + +} +//------------------------------------------------------------------------------------------------- +inline PF_FpShort Pixel8LevelFloat(PF_Pixel s) +{ + return (PF_FpShort)( (( 0.29891 * (double)s.red) + ( 0.58661 * (double)s.green) + ( 0.11448 * (double)s.blue))/PF_MAX_CHAN8); + +} +//------------------------------------------------------------------------------------------------- +inline A_u_short Pixel16Level(PF_Pixel16 s) +{ + double v = ( 0.29891 * (double)s.red) + ( 0.58661 * (double)s.green) + ( 0.11448 * (double)s.blue); + if ( v>PF_MAX_CHAN16) v = PF_MAX_CHAN16; + return (A_u_short)v; + +} +//------------------------------------------------------------------------------------------------- +inline PF_FpShort Pixel16LevelFloat(PF_Pixel16 s) +{ + return (PF_FpShort)( (( 0.29891 * (double)s.red) + ( 0.58661 * (double)s.green) + ( 0.11448 * (double)s.blue))/PF_MAX_CHAN16); +} +//------------------------------------------------------------------------------------------------- +inline PF_FpShort Pixel32Level(PF_PixelFloat s) +{ + PF_FpLong v = ( 0.29891 * s.red) + ( 0.58661 * s.green) + ( 0.11448 * s.blue); + return (PF_FpShort)v; +} +//************************************************************************************************* +//AlphaBlend +inline PF_Pixel PixelBlend8(PF_Pixel src,PF_Pixel dst) +{ + PF_Pixel rr = {0,0,0,0}; + PF_Pixel ss = src; + PF_Pixel dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN8) ) return dd; + if (dd.alpha == 0) return ss; + + A_long as2 = ( (PF_MAX_CHAN8+1) - dd.alpha) * ss.alpha >> 8; + A_long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN8) ad2 = PF_MAX_CHAN8; + + if (ad2<=0) { + //0の除算を防ぐ + return rr; + }else{ + A_long r = ( dd.red * dd.alpha + ss.red * as2 ); + A_long g = ( dd.green * dd.alpha + ss.green * as2 ); + A_long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>PF_MAX_CHAN8) r = PF_MAX_CHAN8; + if (g>PF_MAX_CHAN8) g = PF_MAX_CHAN8; + if (b>PF_MAX_CHAN8) b = PF_MAX_CHAN8; + + rr.alpha = (A_u_char)ad2; + rr.red = (A_u_char)r; + rr.green = (A_u_char)g; + rr.blue = (A_u_char)b; + return rr; + } +} +inline PF_Pixel16 PixelBlend16(PF_Pixel16 src,PF_Pixel16 dst) +{ + PF_Pixel16 rr = {0,0,0,0}; + PF_Pixel16 ss = src; + PF_Pixel16 dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN16) ) return dd; + if (dd.alpha == 0) return ss; + A_long as2 = ( PF_MAX_CHAN16 - dd.alpha) * ss.alpha >> 15; + A_long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN16) ad2 = PF_MAX_CHAN16; + + if (ad2<=0) { + return rr; + }else{ + A_long r = ( dd.red * dd.alpha + ss.red * as2 ); + A_long g = ( dd.green * dd.alpha + ss.green * as2 ); + A_long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>PF_MAX_CHAN16) r = PF_MAX_CHAN16; + if (g>PF_MAX_CHAN16) g = PF_MAX_CHAN16; + if (b>PF_MAX_CHAN16) b = PF_MAX_CHAN16; + + rr.alpha = (A_u_short)ad2; + rr.red = (A_u_short)r; + rr.green = (A_u_short)g; + rr.blue = (A_u_short)b; + return rr; + } +} +inline PF_PixelFloat PixelBlend32(PF_PixelFloat src,PF_PixelFloat dst) +{ + PF_PixelFloat rr = {0,0,0,0}; + PF_PixelFloat ss = src; + PF_PixelFloat dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha>=1.0) ) return dd; + if (dd.alpha == 0) return ss; + PF_FpShort as2 = ( 1 - dd.alpha) * ss.alpha; + PF_FpShort ad2 = dd.alpha + as2; + + if (ad2>1.0) ad2 = 1.0; + + if (ad2<=0) { + return rr; + }else{ + PF_FpShort r = ( dd.red * dd.alpha + ss.red * as2 ); + PF_FpShort g = ( dd.green * dd.alpha + ss.green * as2 ); + PF_FpShort b = ( dd.blue * dd.alpha + ss.blue * as2 ); + r/=ad2; g/=ad2; b/=ad2; + + if (r>1.0) r = 1.0; + if (g>1.0) g = 1.0; + if (b>1.0) b = 1.0; + + rr.alpha = ad2; + rr.red = r; + rr.green = g; + rr.blue = b; + return rr; + } +} + +//************************************************************************************************* +//ミリ計算 +//************************************************************************************************* +inline PF_Fixed mm2px(PF_Fixed mm,PF_Fixed dpi) +{ + double ret; + ret = ((double)mm/65536) * ((double)dpi/65536) / 25.4; + return FLT2FIX(ret); +} +inline PF_Fixed px2mm(PF_Fixed px,PF_Fixed dpi) +{ + double ret; + ret = ((double)px/65536) * 25.4 / ((double)dpi/65536); + return FLT2FIX(ret); +} +//*************************************************************rot************************************ +//角度計算 +//************************************************************************************************* + +class CRotCalc +{ +protected: + PF_InData *in_data; + PF_Fixed m_rot; + PF_Fixed m_length; + PF_FixedPoint m_pos; + +public: + //------------------------------ + void Init() + { + in_data = NULL; + m_rot = + m_length = + m_pos.x = + m_pos.y = 0; + } + //------------------------------ + CRotCalc(PF_InData *in_dataP) + { + Init(); + in_data = in_dataP; + } + //------------------------------ + PF_Fixed rot() { return m_rot;} + PF_Fixed length() { return m_length;} + PF_Fixed x() { return m_pos.x;} + PF_Fixed y() { return m_pos.y;} + PF_FixedPoint pos() { return m_pos;} + double rotFLT() { return FIX2FLT(m_rot);} + double lengthFLT() { return FIX2FLT(m_length);} + double xFLT() { return FIX2FLT(m_pos.x);} + double yFLT() { return FIX2FLT(m_pos.y);} + //------------------------------ + PF_Fixed RoundRot(PF_Fixed r) + { + PF_Fixed rr = r % (360L<<16); + if ( rr<0) rr +=(360L<<16); + return rr; + } + //------------------------------ + PF_FixedPoint SetRotLength(PF_Fixed r, PF_Fixed len) + { + m_rot = r; + m_length = len; + if (len != 0){ + PF_Fixed rr = RoundRot(r); + double r2 = FIX2FLT(rr); + double v2 = FIX2FLT(len); + double x = 0; + double y = 0; + if ( (rr>=(0L<<16))&&(rr<(90L<<16)) ) { + x =PF_SIN((PF_PI/180)*r2)*v2; + y =PF_COS((PF_PI/180)*r2)*v2*-1; + + }else if ( (rr>=(90L<<16))&&(rr<(180L<<16)) ) { + x =PF_COS((PF_PI/180)*(r2-90))*v2; + y =PF_SIN((PF_PI/180)*(r2-90))*v2; + + }else if ( (rr>=(180L<<16))&&(rr<(270L<<16)) ) { + x =PF_SIN((PF_PI/180)*(r2-180))*v2*-1; + y =PF_COS((PF_PI/180)*(r2-180))*v2; + + }else if ( (rr>=(270L<<16))&&(rr<(360L<<16)) ) { + x =PF_COS((PF_PI/180)*(r2-270))*v2*-1; + y =PF_SIN((PF_PI/180)*(r2-270))*v2*-1; + } + m_pos.x = FLT2FIX(x); + m_pos.y = FLT2FIX(y); + }else{ + m_pos.x = 0; + m_pos.y = 0; + } + return m_pos; + } + //------------------------------ + PF_FixedPoint SetRot(PF_Fixed r) { return SetRotLength(r, m_length);} + PF_FixedPoint SetLength(PF_Fixed len) { return SetRotLength(m_rot,len);} + //------------------------------ + //------------------------------ + void SetPos(PF_Fixed x, PF_Fixed y) + { + m_pos.x = x; + m_pos.y = y; + if ( (x==0)&&(y==0) ){ + m_rot=0; m_length =0; + }else{ + double xx = FIX2FLT(x); + double yy = FIX2FLT(y); + double rr = 90 - PF_ATAN2(yy,xx) * 180 /PF_PI; + m_rot = FLT2FIX(rr) % (360L<<16); + if (m_rot<0) m_rot += 360L<<16; + + xx = F_ABS(xx); + xx = F_ABS(yy); + double ll = PF_SQRT( PF_POW(xx,2) +PF_POW(yy,2)); + m_length = FLT2FIX(ll); + } + } + //------------------------------ + void SetX(PF_Fixed x) + { + SetPos(x,m_pos.y); + } + //------------------------------ + void SetY(PF_Fixed y) + { + SetPos(m_pos.x,y); + } + //------------------------------ +}; +//******************************************************* +/* +inline void swapLong(A_long *s,A_long *d) +{ + A_long temp = *s; + *s = *d; + *d = temp; +} +*/ +//******************************************************* +template +inline void swapLong( T* s, T* d) +{ + T temp = *s; + *s = *d; + *d = temp; +} + //******************************************************* +inline PF_Fixed RoundAngle360(PF_Fixed f) +{ + PF_Fixed ret = f; + ret %= (360L<<16); + if ( ret<0) ret += (360L<<16); + return ret; +} +//******************************************************* +//*************************************************************rot************************************ +//角度計算 +//************************************************************************************************* + +class CRot +{ +protected: + PF_InData *in_data; + PF_FpLong m_rot; + PF_FpLong m_length; + PF_FpLong m_x; + PF_FpLong m_y; + + +public: + //------------------------------ + void Init() + { + in_data = NULL; + m_rot = + m_length = + m_x = + m_y = 0; + } + //------------------------------ + CRot(PF_InData *in_dataP) + { + Init(); + in_data = in_dataP; + } + //------------------------------ + PF_FpLong rot() { return m_rot; } + PF_FpLong length() { return m_length; } + PF_FpLong x() { return m_x; } + PF_FpLong y() { return m_y; } + //------------------------------ + static PF_FpLong RoundRot(PF_FpLong r) + { + A_long rr = (A_long)(r * 65536 +0.5); + rr = rr % (360*65536); + if (rr < 0) rr += (360 * 65536); + return (PF_FpLong)rr/65536; + } + //------------------------------ + void SetRotLength(PF_FpLong r, PF_FpLong len) + { + m_rot = r; + m_length = len; + if (len != 0) { + PF_FpLong rr = RoundRot(r); + double r2 = rr; + double v2 = len; + double x = 0; + double y = 0; + if ((rr >= 0.0) && (rr < 90.0)) { + x = PF_SIN((PF_PI / 180)*r2)*v2; + y = PF_COS((PF_PI / 180)*r2)*v2*-1; + + } + else if ((rr >= 90) && (rr < 180)) { + x = PF_COS((PF_PI / 180)*(r2 - 90))*v2; + y = PF_SIN((PF_PI / 180)*(r2 - 90))*v2; + + } + else if ((rr >= 180) && (rr < 270)) { + x = PF_SIN((PF_PI / 180)*(r2 - 180))*v2*-1; + y = PF_COS((PF_PI / 180)*(r2 - 180))*v2; + + } + else if ((rr >= 270) && (rr < 360)) { + x = PF_COS((PF_PI / 180)*(r2 - 270))*v2*-1; + y = PF_SIN((PF_PI / 180)*(r2 - 270))*v2*-1; + } + m_x = x; + m_y = y; + } + else { + m_x = 0; + m_y = 0; + } + } + //------------------------------ + void SetRot(PF_FpLong r) { return SetRotLength(r, m_length); } + void SetLength(PF_FpLong len) { return SetRotLength(m_rot, len); } + //------------------------------ + //------------------------------ + void SetXY(PF_FpLong x, PF_FpLong y) + { + m_x = x; + m_y = y; + if ((x == 0) && (y == 0)) { + m_rot = 0; m_length = 0; + } + else { + double xx = x; + double yy = y; + double rr = 90 - PF_ATAN2(yy, xx) * 180 / PF_PI; + m_rot = RoundRot( rr); + + double ll = PF_SQRT(PF_POW(xx, 2) + PF_POW(yy, 2)); + m_length = ll; + } + } + //------------------------------ + void SetX(PF_FpLong x) + { + SetXY(x, m_y); + } + //------------------------------ + void SetY(PF_FpLong y) + { + SetXY(m_x, y); + } + //------------------------------ +}; +#endif diff --git a/FsLibrary/FsVersion.h b/FsLibrary/FsVersion.h new file mode 100644 index 0000000..7c3d7de --- /dev/null +++ b/FsLibrary/FsVersion.h @@ -0,0 +1,21 @@ +#pragma once +#ifndef FS_VAERSION_H +#define FS_VAERSION_H + + +//----------------------------------------------------------------------------------- +//バージョンを買えたAlphaFixPiPL.rのAE_Effect_Versionも変えること +#define MAJOR_VERSION 2 +#define MINOR_VERSION 0 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 1050112 + + +#endif // FS_VAERSION_H diff --git a/FsSSFrame/FsSSFrame.cpp b/FsSSFrame/FsSSFrame.cpp new file mode 100644 index 0000000..c7f11ad --- /dev/null +++ b/FsSSFrame/FsSSFrame.cpp @@ -0,0 +1,324 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "FsSSFrame.h" + + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_WIDTH_ADD, //パラメータの名前 + 50, //数値入力する場合の最小値 + 4800, //数値入力する場合の最大値 + 640, //スライダーの最小値 + 1920, //スライダーの最大値 + 1280, //デフォルトの値 + ID_WIDTH_ADD + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_HEIGHT_ADD, //パラメータの名前 + 50, //数値入力する場合の最小値 + 4800, //数値入力する場合の最大値 + 480, //スライダーの最小値 + 1080, //スライダーの最大値 + 720, //デフォルトの値 + ID_HEIGHT_ADD + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( Str_LINE_COLOR, + 0xFF, + 0x00, + 0x00, + ID_LINE_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_SAFE_ADD, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 50, //スライダーの最小値 + 100, //スライダーの最大値 + 80, //デフォルトの値 + ID_SAFE_ADD + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(Str_CENTER_CB1, + Str_CENTER_CB2, + TRUE, + 0, + ID_CENTER_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( Str_OUT_COLOR, + 0xFF, + 0x00, + 0xFF, + ID_OUT_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( Str_OUT_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OUT_OPACITY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( Str_LINE_HEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 10, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 5, //スライダーの最大値 + 2, //デフォルトの値 + ID_LINE_HEIGHT + ); + //---------------------------------------------------------------- + //7個目のパラメータ + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( Str_SIZE_POP1, + 7, //メニューの数 + 1, //デフォルト + Str_SIZE_POP2, + ID_SIZE_POP + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if ( ( ae == NULL) || ( infoP == NULL)){ + err = PF_Err_BAD_CALLBACK_PARAM; + return err; + } + ERR(ae->GetPOPUP(ID_SIZE_POP,&infoP->size_kind)); + if(!err) { + switch (infoP->size_kind){ + case SIZE_720_540: + infoP->frame_Width = 720; + infoP->frame_Height = 540; + break; + case SIZE_1024_576: + infoP->frame_Width = 1024; + infoP->frame_Height = 576; + break; + case SIZE_1024_768: + infoP->frame_Width = 1024; + infoP->frame_Height = 768; + break; + case SIZE_1280_720: + infoP->frame_Width = 1280; + infoP->frame_Height = 720; + break; + case SIZE_1440_810: + infoP->frame_Width = 1440; + infoP->frame_Height = 810; + break; + case SIZE_1920_1080: + infoP->frame_Width = 1920; + infoP->frame_Height = 1080; + break; + case SIZE_CUSTUM: + default: + ERR(ae->GetADD(ID_WIDTH_ADD,&infoP->frame_Width)); + ERR(ae->GetADD(ID_HEIGHT_ADD,&infoP->frame_Height)); + break; + } + //infoP->frame_Width = ae->downScale(infoP->frame_Width); + //infoP->frame_Height = ae->downScale(infoP->frame_Height); + + ERR(ae->GetCOLOR(ID_LINE_COLOR, &infoP->line_color)); + ERR(ae->GetADD(ID_SAFE_ADD, &infoP->safe_frame)); + ERR(ae->GetCHECKBOX(ID_CENTER_CB, &infoP->center_line)); + ERR(ae->GetCOLOR(ID_OUT_COLOR, &infoP->out_color)); + ERR(ae->GetFIXED2FpShort(ID_OUT_OPACITY, &infoP->out_opacity)); + if ( !err) { + infoP->out_opacity /=100; + infoP->out_color.alpha = RoundByteFpShort(PF_MAX_CHAN8 * infoP->out_opacity); + } + ERR(ae->GetADD(ID_LINE_HEIGHT, &infoP->line_height)); + /* + if ( !err) { + infoP->line_height = ae->downScale(infoP->line_height); + infoP->center_x = ae->out->width() /2; + infoP->center_y = ae->out->height() /2; + infoP->frm.top = (A_short)(infoP->center_y - (infoP->frame_Height /2)); + infoP->frm.bottom = (A_short)(infoP->center_y + (infoP->frame_Height /2) -1); + infoP->frm.left = (A_short)(infoP->center_x - (infoP->frame_Width /2)); + infoP->frm.right = (A_short)(infoP->center_x + (infoP->frame_Width /2) -1); + + A_long sW = infoP->frame_Width * infoP->safe_frame / 100; + A_long sH = infoP->frame_Height * infoP->safe_frame / 100; + infoP->safe.top = (A_short)(infoP->center_y - (sH /2)); + infoP->safe.bottom = (A_short)(infoP->center_y + (sH /2) -1); + infoP->safe.left = (A_short)(infoP->center_x - (sW /2)); + infoP->safe.right = (A_short)(infoP->center_x + (sW /2) -1); + } + */ + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + infoP->frame_Width = ae->downScale(infoP->frame_Width); + infoP->frame_Height = ae->downScale(infoP->frame_Height); + + infoP->line_height = ae->downScale(infoP->line_height); + infoP->center_x = ae->out->width() /2; + infoP->center_y = ae->out->height() /2; + infoP->frm.top = (A_short)(infoP->center_y - (infoP->frame_Height /2)); + infoP->frm.bottom = (A_short)(infoP->center_y + (infoP->frame_Height /2) -1); + infoP->frm.left = (A_short)(infoP->center_x - (infoP->frame_Width /2)); + infoP->frm.right = (A_short)(infoP->center_x + (infoP->frame_Width /2) -1); + + A_long sW = infoP->frame_Width * infoP->safe_frame / 100; + A_long sH = infoP->frame_Height * infoP->safe_frame / 100; + infoP->safe.top = (A_short)(infoP->center_y - (sH /2)); + infoP->safe.bottom = (A_short)(infoP->center_y + (sH /2) -1); + infoP->safe.left = (A_short)(infoP->center_x - (sW /2)); + infoP->safe.right = (A_short)(infoP->center_x + (sW /2) -1); + + + PF_InData *in_data; + in_data = ae->in_data; + + ERR(PF_FILL(NULL, NULL, ae->output)); + ERR(PF_FILL(&infoP->out_color, NULL, ae->output)); + ERR(PF_FILL(NULL, &infoP->frm, ae->output)); + A_long bak =ae->out->lineHeiht; + ae->out->lineHeiht = infoP->line_height; + ae->out->box(infoP->frm.left,infoP->frm.top,infoP->frm.right,infoP->frm.bottom,infoP->line_color,infoP->line_color); + if (infoP->center_line==TRUE){ + A_long p = ae->out->lineHeiht / 2; + ae->out->XLine(0,ae->out->width(),infoP->center_y -p,infoP->line_color); + ae->out->YLine(infoP->center_x - p,0,ae->out->height(),infoP->line_color); + } + if ( (infoP->safe_frame>0)&&(infoP->safe_frame<100) ){ + ae->out->box(infoP->safe.left,infoP->safe.top,infoP->safe.right,infoP->safe.bottom,infoP->line_color,infoP->line_color); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/FsSSFrame/FsSSFrame.h b/FsSSFrame/FsSSFrame.h new file mode 100644 index 0000000..23d9554 --- /dev/null +++ b/FsSSFrame/FsSSFrame.h @@ -0,0 +1,117 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + + +#ifndef FsSSFrame_H +#define FsSSFrame_H + +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_WIDTH_ADD, //long + ID_HEIGHT_ADD, //long + ID_LINE_COLOR, //PF_Pixel + ID_SAFE_ADD, //long + ID_CENTER_CB, //boolean + ID_OUT_COLOR, //PF_Pixel + ID_OUT_OPACITY, + ID_LINE_HEIGHT, + ID_SIZE_POP, + ID_NUM_PARAMS + }; + +enum { + SIZE_CUSTUM = 1, + SIZE_720_540, + SIZE_1024_576, + SIZE_1024_768, + SIZE_1280_720, + SIZE_1440_810, + SIZE_1920_1080, +}; + + +#define Str_WIDTH_ADD "width" +#define Str_HEIGHT_ADD "height" +#define Str_LINE_COLOR "line_color" +#define Str_SAFE_ADD "safe_frame" +#define Str_CENTER_CB1 "center_line" +#define Str_CENTER_CB2 "ON" +#define Str_OUT_COLOR "out_color" +#define Str_OUT_OPACITY "out_opacity" +#define Str_LINE_HEIGHT "line_height" +#define Str_SIZE_POP1 "size" +#define Str_SIZE_POP2 "上の数値|720x540|1024x576|1024x768|1280x720|1440x810|1920x1080" + + +typedef struct { + A_long frame_Width; + A_long frame_Height; + PF_Pixel line_color; + A_long safe_frame; + PF_Boolean center_line; + PF_Pixel out_color; + PF_FpShort out_opacity; + A_long line_height; + A_long center_x; + A_long center_y; + PF_Rect frm; + PF_Rect safe; + A_long size_kind; +} ParamInfo; + + + + +//------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} +//------------------------------------------------------- + +#endif // FsSSFrame_H diff --git a/FsSSFrame/FsSSFramePiPL.r b/FsSSFrame/FsSSFramePiPL.r new file mode 100644 index 0000000..ee44aad --- /dev/null +++ b/FsSSFrame/FsSSFramePiPL.r @@ -0,0 +1,77 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + /*"F's Plugins"*/ + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/FsSSFrame/Fs_Entry.h b/FsSSFrame/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/FsSSFrame/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/FsSSFrame/Fs_Target.h b/FsSSFrame/Fs_Target.h new file mode 100644 index 0000000..c670560 --- /dev/null +++ b/FsSSFrame/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "FsSSFrame" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "フレームを描く" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //標準16/32bit対応 +//#define FS_OUT_FLAGS 33556036 //毎フレーム描画 +//#define FS_OUT_FLAGS 1600 //8bit飲み + + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ + +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + +//#define FS_OUT_FLAGS2 73 //8Bitのみ + +#endif diff --git a/FsSSFrame/Win/FramePiPL.rc b/FsSSFrame/Win/FramePiPL.rc new file mode 100644 index 0000000..44dad26 --- /dev/null +++ b/FsSSFrame/Win/FramePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 12, 0x0, + "\x09F's Frame\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x12F's Plugins-Script\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 2, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 12, 0x0, + "\x09F's Frame\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/FsSSFrame/Win/FsSSFrame.vcxproj b/FsSSFrame/Win/FsSSFrame.vcxproj new file mode 100644 index 0000000..37c150a --- /dev/null +++ b/FsSSFrame/Win/FsSSFrame.vcxproj @@ -0,0 +1,335 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {072FB965-D7D5-406C-BF93-EFDAA378C4FD} + FsSSFrame + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FsSSFrame.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FsSSFrame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/FsSSFrame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/FsSSFrame/Win/FsSSFrame.vcxproj.filters b/FsSSFrame/Win/FsSSFrame.vcxproj.filters new file mode 100644 index 0000000..4a46568 --- /dev/null +++ b/FsSSFrame/Win/FsSSFrame.vcxproj.filters @@ -0,0 +1,172 @@ + + + + + {5358c6a6-d518-47ef-a36f-cb9dea9776d7} + h;hpp;hxx;hm;inl;fi;fd + + + {5d36c585-c012-4e88-8c9b-4b679681e273} + + + {cdab52c8-5aca-4674-849a-3ae1ea1dedc0} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {5511e854-740b-46ed-8b67-22594ada62dc} + + + {bb19d122-7600-4423-bdc8-ccc80039ace6} + + + {2ff27aae-4187-43e3-8ab0-1673447398f8} + + + {a7b64b92-c353-4d3f-a269-e7246f6f2805} + + + {0e050205-01b8-4c7c-aabb-7d6d32fede18} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/FsSSFrame/Win/FsSSFramePiPL.rc b/FsSSFrame/Win/FsSSFramePiPL.rc new file mode 100644 index 0000000..d9ff41e --- /dev/null +++ b/FsSSFrame/Win/FsSSFramePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 12, 0x0, + "\x09FsSSFrame\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x12F's Plugins-Script\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 12, 0x0, + "\x09FsSSFrame\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/GuideFrame/Fs_Target.h b/GuideFrame/Fs_Target.h new file mode 100644 index 0000000..af9767f --- /dev/null +++ b/GuideFrame/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TARGET_H +#define FS_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's GuideFrame" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "範囲指定" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/GuideFrame/GuideFrame.cpp b/GuideFrame/GuideFrame.cpp new file mode 100644 index 0000000..47ce690 --- /dev/null +++ b/GuideFrame/GuideFrame.cpp @@ -0,0 +1,668 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "GuideFrame.h" + + +//------------------------------------------------------------------------------------------------- +// Aboutダイアログ +static PF_Err About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0xff, + 0x00, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_TOPLEFT, /*"New Center"*/ + 25, // X + 25, // Y + 0, // Flag + ID_TOPLEFT + ); + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_BOTTOMRIGHT, /*"New Center"*/ + 75, // X + 75, // Y + 0, // Flag + ID_BOTTOMRIGHT + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CHK1, + STR_CHK2, + FALSE, + 0, + ID_CHK + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SMOOTH1, + STR_SMOOTH2, + TRUE, + 0, + ID_SMOOTH + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static void chkW8(CFsAE *ae) +{ + PF_Pixel *data; + PF_Pixel c; + PF_Pixel bl ={64,0,0,255}; + data = (PF_Pixel *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + A_long tw = ae->out->widthTrue(); + + A_long x0,x1,y0,y1; + + A_long i,j,t; + //まず上から探す + y0 = -1; + t = 0; + for (j=0;j=0;j--){ + t = j * tw; + for(i=0;i=0;j--){ + t = j; + for(i=0;iout->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + A_long tw = ae->out->widthTrue(); + + A_long x0,x1,y0,y1; + + A_long i,j,t; + //まず上から探す + y0 = -1; + t = 0; + for (j=0;j=0;j--){ + t = j * tw; + for(i=0;i=0;j--){ + t = j; + for(i=0;iout->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + A_long tw = ae->out->widthTrue(); + + A_long x0,x1,y0,y1; + + A_long i,j,t; + //まず上から探す + y0 = -1; + t = 0; + for (j=0;j=0;j--){ + t = j * tw; + for(i=0;i=0;j--){ + t = j; + for(i=0;iGetCOLOR(ID_COLOR,&infoP->color)); + ERR(ae->GetFIXEDPOINT(ID_TOPLEFT,&infoP->top_left)); + ERR(ae->GetFIXEDPOINT(ID_BOTTOMRIGHT,&infoP->bottom_right)); + ERR(ae->GetCHECKBOX(ID_CHK,&infoP->check)); + ERR(ae->GetCHECKBOX(ID_SMOOTH,&infoP->smooth)); + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + A_long x0 = infoP->top_left.x >> 16; + A_long y0 = infoP->top_left.y >> 16; + A_long x1 = (infoP->bottom_right.x >> 16)-1; + A_long y1 = (infoP->bottom_right.y >> 16)-1; + + + ae->out->lineHeiht = 2; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + if ( infoP->check) chkW32(ae); + ae->out->box32(x0,y0,x1,y1,CONV8TO32(infoP->color)); + break; + case PF_PixelFormat_ARGB64: + if ( infoP->check) chkW16(ae); + ae->out->box16(x0,y0,x1,y1,CONV8TO16(infoP->color)); + break; + case PF_PixelFormat_ARGB32: + if ( infoP->check) chkW8(ae); + ae->out->box8(x0,y0,x1,y1,infoP->color); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/GuideFrame/GuideFrame.h b/GuideFrame/GuideFrame.h new file mode 100644 index 0000000..5d239ce --- /dev/null +++ b/GuideFrame/GuideFrame.h @@ -0,0 +1,349 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- +#pragma once + +#ifndef GuideFrame_H +#define GuideFrame_H + + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + + + +#define STR_COLOR "color" +#define STR_TOPLEFT "TopLeft" +#define STR_BOTTOMRIGHT "BottomRight" +#define STR_CHK1 "Check" +#define STR_CHK2 "on" +#define STR_SMOOTH1 "Smooth" +#define STR_SMOOTH2 "on" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_COLOR, // + ID_TOPLEFT, // + ID_BOTTOMRIGHT, // + ID_CHK, + ID_SMOOTH, + + + ID_NUM_PARAMS + }; +typedef struct ParamInfo { + PF_Pixel color; + PF_FixedPoint top_left; + PF_FixedPoint bottom_right; + PF_Boolean check; + PF_Boolean smooth; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//----------------------------------------------------------------------------------- +inline PF_Pixel16 toPixel16(PF_Pixel s){ + PF_Pixel16 r; + r.alpha = (unsigned short)CONVERT8TO16(s.alpha); + r.red = (unsigned short)CONVERT8TO16(s.red); + r.green = (unsigned short)CONVERT8TO16(s.green); + r.blue = (unsigned short)CONVERT8TO16(s.blue); + return r; + } +/* +class CGuideFrame : public CFsAE{ +public: + CGuideFrame( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ):CFsAE(in_data,out_data,params,output){ + getParams(in_data,out_data,params,output); + } + //パラメータを獲得する関数 + PF_Err getParams( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ); + //以下固有のパラメータ + PF_Pixel color; + PF_FixedPoint top_left; + PF_FixedPoint bottom_right; + PF_Boolean check; + PF_Boolean smooth; + + + //枠を描く + void drawRect(){ + long x0 = top_left.x >> 16; + long y0 = top_left.y >> 16; + long x1 = (bottom_right.x >> 16)-1; + long y1 = (bottom_right.y >> 16)-1; + + out->lineHeiht = 2; + if (is16Bit()==TRUE){ + PF_Pixel16 c16 = toPixel16(color); + out->box16(x0,y0,x1,y1,c16); + x0++; + y0++; + x1--; + y1--; + out->box16(x0,y0,x1,y1,c16); + }else{ + out->box8(x0,y0,x1,y1,color); + x0++; + y0++; + x1--; + y1--; + out->box8(x0,y0,x1,y1,color); + } + } + //------------- + void chkW8() + { + PF_Pixel *data; + PF_Pixel c; + PF_Pixel bl ={64,0,0,255}; + data = (PF_Pixel *)out->data(); + long w = out->width(); + long h = out->height(); + long ow = out->offsetWidth(); + long tw = out->widthTrue(); + + long x0,x1,y0,y1; + + long i,j,t; + //まず上から探す + y0 = -1; + t = 0; + for (j=0;j=0;j--){ + t = j * tw; + for(i=0;i=0;j--){ + t = j; + for(i=0;idata(); + long w = out->width(); + long h = out->height(); + long ow = out->offsetWidth(); + long tw = out->widthTrue(); + + long x0,x1,y0,y1; + + long i,j,t; + //まず上から探す + y0 = -1; + t = 0; + for (j=0;j=0;j--){ + t = j * tw; + for(i=0;i=0;j--){ + t = j; + for(i=0;i + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {266832DE-B72D-4186-9D9F-C92B4A970742} + GuideFrame + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/GuideFrame.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/GuideFrame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/GuideFrame.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/GuideFrame/Win/GuideFrame.vcxproj.filters b/GuideFrame/Win/GuideFrame.vcxproj.filters new file mode 100644 index 0000000..9772385 --- /dev/null +++ b/GuideFrame/Win/GuideFrame.vcxproj.filters @@ -0,0 +1,169 @@ + + + + + {6985eb85-6de5-45be-9bff-0eccf6a1691d} + h;hpp;hxx;hm;inl;fi;fd + + + {8e27413a-c803-4a92-a1d2-8d8d78a9c179} + + + {629bef71-14f8-4d47-94bd-c741b85eae76} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {c4938509-823c-4df4-b32f-df3e65eeb37a} + + + {dedcba7d-3003-4879-847a-3d132dec2738} + + + {973d3094-c8fa-476c-9cd6-6743b011e721} + + + {2f9c32ab-ec68-4d9c-8487-78e6844e5f4d} + + + {e832bb70-283f-4cf1-8102-a33d734cf239} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/GuideFrame/Win/GuideFramePiPL.rc b/GuideFrame/Win/GuideFramePiPL.rc new file mode 100644 index 0000000..51c218e --- /dev/null +++ b/GuideFrame/Win/GuideFramePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0EF's GuideFrame\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x12F's Plugins-Script\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0EF's GuideFrame\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/HLS_Reverse/Fs_Target.h b/HLS_Reverse/Fs_Target.h new file mode 100644 index 0000000..1b6a94e --- /dev/null +++ b/HLS_Reverse/Fs_Target.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's HLS_Reverse" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "HLS のLを反転させる" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/HLS_Reverse/HLS_Reverse.cpp b/HLS_Reverse/HLS_Reverse.cpp new file mode 100644 index 0000000..d536060 --- /dev/null +++ b/HLS_Reverse/HLS_Reverse.cpp @@ -0,0 +1,516 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "HLS_Reverse.h" +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_HUE, + STR_REV, + FALSE, + 0, + ID_HUE + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_LUM, + STR_REV, + TRUE, + 0, + ID_LUM + ); + + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SAT, + STR_REV, + FALSE, + 0, + ID_SAT + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_ORG_BLEND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 3, //数値表示に関するフラグ + 0, + 0, + ID_ORG_BLEND + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if (!err){ + PF_Boolean b = FALSE; + ERR(ae.GetCHECKBOX(ID_NOISE_FRAME,&b)); + ERR(ae.UI_DISABLE(ID_NOISE_OFFSET, b)); + if (!err){ + out_data->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + }catch ( PF_Err & errP){ + err = errP; + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + //PF_OutFlag_NON_PARAM_VARYの値をout_flagsへ設定して + //毎フレームごとの描画をするか切り替える。 + /* + CFsAE ae; + err = ae.QueryDynamicFlags(in_data,out_data,params,extra,ID_NUM_PARAMS); + if (!err){ + PF_ParamDef def; + AEFX_CLR_STRUCT(def); + ERR(ae.checkout_param(ID_NOISE_FRAME,&def)); + ERR(ae.SetOutFlag_NON_PARAM_VARY((PF_Boolean)def.u.bd.value)); + ERR(ae.checkin_param(&def)); + } + */ + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_PixelFloat p; + p.blue = (PF_FpShort)inP->blue / PF_MAX_CHAN8; + p.green = (PF_FpShort)inP->green/ PF_MAX_CHAN8; + p.red = (PF_FpShort)inP->red / PF_MAX_CHAN8; + HLSA hls = RGBtoHLS(p); + if (niP->h) hls.H = 1.0 - hls.H; + if (niP->l) hls.L = 1.0 - hls.L; + if (niP->s) hls.S = 1.0 - hls.S; + p = HLStoRGB(hls); + outP->alpha = inP->alpha; + A_u_char r = (A_u_char)(PF_MAX_CHAN8 * p.red); + A_u_char g = (A_u_char)(PF_MAX_CHAN8 * p.green); + A_u_char b = (A_u_char)(PF_MAX_CHAN8 * p.blue); + if ( niP->org_blend ==0){ + outP->red = r; + outP->green = g; + outP->blue = b; + }else{ + PF_FpLong k = 1 - niP->org_blend; + outP->red = RoundByteFpLong( (PF_FpLong)inP->red * niP->org_blend + (PF_FpLong)r * k); + outP->green = RoundByteFpLong( (PF_FpLong)inP->green * niP->org_blend + (PF_FpLong)g * k); + outP->blue = RoundByteFpLong( (PF_FpLong)inP->blue * niP->org_blend + (PF_FpLong)b * k); + } + } + + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_PixelFloat p; + p.blue = (PF_FpShort)inP->blue / PF_MAX_CHAN16; + p.green = (PF_FpShort)inP->green/ PF_MAX_CHAN16; + p.red = (PF_FpShort)inP->red / PF_MAX_CHAN16; + HLSA hls = RGBtoHLS(p); + if (niP->h) hls.H = 1.0 - hls.H; + if (niP->l) hls.L = 1.0 - hls.L; + if (niP->s) hls.S = 1.0 - hls.S; + p = HLStoRGB(hls); + outP->alpha = inP->alpha; + A_u_short r = (A_u_short)(PF_MAX_CHAN16 * p.red); + A_u_short g = (A_u_short)(PF_MAX_CHAN16 * p.green); + A_u_short b = (A_u_short)(PF_MAX_CHAN16 * p.blue); + if ( niP->org_blend ==0){ + outP->red = r; + outP->green = g; + outP->blue = b; + }else{ + PF_FpLong k = 1 - niP->org_blend; + outP->red = RoundShortFpLong( (PF_FpLong)inP->red * niP->org_blend + (PF_FpLong)r * k); + outP->green = RoundShortFpLong( (PF_FpLong)inP->green * niP->org_blend + (PF_FpLong)g * k); + outP->blue = RoundShortFpLong( (PF_FpLong)inP->blue * niP->org_blend + (PF_FpLong)b * k); + } + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_PixelFloat p; + p.blue = (PF_FpShort)inP->blue; + p.green = (PF_FpShort)inP->green; + p.red = (PF_FpShort)inP->red; + HLSA hls = RGBtoHLS(p); + if (niP->h) hls.H = 1.0 - hls.H; + if (niP->l) hls.L = 1.0 - hls.L; + if (niP->s) hls.S = 1.0 - hls.S; + p = HLStoRGB(hls); + outP->alpha = inP->alpha; + PF_FpShort r = p.red; + PF_FpShort g = p.green; + PF_FpShort b = p.blue; + if ( niP->org_blend ==0){ + outP->red = r; + outP->green = g; + outP->blue = b; + }else{ + PF_FpLong k = 1 - niP->org_blend; + outP->red = RoundFpShortDouble( (PF_FpLong)inP->red * niP->org_blend + (PF_FpLong)r * k); + outP->green = RoundFpShortDouble( (PF_FpLong)inP->green * niP->org_blend + (PF_FpLong)g * k); + outP->blue = RoundFpShortDouble( (PF_FpLong)inP->blue * niP->org_blend + (PF_FpLong)b * k); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_HUE,&infoP->h)); + ERR(ae->GetCHECKBOX(ID_LUM,&infoP->l)); + ERR(ae->GetCHECKBOX(ID_SAT,&infoP->s)); + ERR(ae->GetFIXED2FpShort(ID_ORG_BLEND,&infoP->org_blend)); + if ( !err) infoP->org_blend /= 100; + infoP->in_data = ae->in_data; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( infoP->org_blend<1){ + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,FilterImage16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,FilterImage8)); + break; + } + }else{ + ERR(ae->CopyInToOut()); + } + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} + +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- diff --git a/HLS_Reverse/HLS_Reverse.h b/HLS_Reverse/HLS_Reverse.h new file mode 100644 index 0000000..59cac17 --- /dev/null +++ b/HLS_Reverse/HLS_Reverse.h @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef HLS_Reverse_H +#define HLS_Reverse_H + + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsHLS.h" + +#define STR_HUE "hue" +#define STR_LUM "lightness" +#define STR_SAT "saturation" +#define STR_REV "Reverse" +#define STR_ORG_BLEND "blend original(%)" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_HUE, + ID_LUM, + ID_SAT, + ID_ORG_BLEND, //PF_Fixed(long) + ID_NUM_PARAMS + }; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + PF_FpShort org_blend; + PF_Boolean h; + PF_Boolean l; + PF_Boolean s; + PF_InData *in_data; +} ParamInfo; + +//------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // HLS_Reverse_H diff --git a/HLS_Reverse/HLS_ReversePiPL.r b/HLS_Reverse/HLS_ReversePiPL.r new file mode 100644 index 0000000..1ab76e4 --- /dev/null +++ b/HLS_Reverse/HLS_ReversePiPL.r @@ -0,0 +1,77 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + /*"F's Plugins"*/ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/HLS_Reverse/Win/HLS_Reverse.vcxproj b/HLS_Reverse/Win/HLS_Reverse.vcxproj new file mode 100644 index 0000000..c8ad3df --- /dev/null +++ b/HLS_Reverse/Win/HLS_Reverse.vcxproj @@ -0,0 +1,329 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {BD391ECE-3835-4336-A4C8-94205D097C40} + HLS_Reverse + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/HLS_Reverse.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/HLS_Reverse.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/HLS_Reverse.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/HLS_Reverse/Win/HLS_Reverse.vcxproj.filters b/HLS_Reverse/Win/HLS_Reverse.vcxproj.filters new file mode 100644 index 0000000..9c257ca --- /dev/null +++ b/HLS_Reverse/Win/HLS_Reverse.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {4ea6928b-cd42-4eae-8994-603b1be6c7eb} + h;hpp;hxx;hm;inl;fi;fd + + + {92f04fe5-86da-45dc-a438-3f24f2d50fcb} + + + {822d40e9-f53c-4f2e-82dc-396e4f7e92fe} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {9583adbd-99c7-43c1-bd43-8d6761d78132} + + + {548c8b28-6ba7-4177-a73f-57a818a96f1f} + + + {1a7cfdd7-f296-4e11-97c5-8d25186b9d28} + + + {81ce95bb-2fbd-4f77-9111-c42aadb9cb65} + + + {4aaaa953-e366-4408-82f9-39f638a3ddd1} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/HLS_Reverse/Win/HLS_ReversePiPL.rc b/HLS_Reverse/Win/HLS_ReversePiPL.rc new file mode 100644 index 0000000..19db2c3 --- /dev/null +++ b/HLS_Reverse/Win/HLS_ReversePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's HLS_Reverse", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's HLS_Reverse", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/IroTore/Fs_Entry.h b/IroTore/Fs_Entry.h new file mode 100644 index 0000000..753c045 --- /dev/null +++ b/IroTore/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + IroTore for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/IroTore/Fs_Target.h b/IroTore/Fs_Target.h new file mode 100644 index 0000000..4ada6f5 --- /dev/null +++ b/IroTore/Fs_Target.h @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's IroTore" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "主線を無理やり色トレスにします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +//#define FS_OUT_FLAGS2 5193 +#define FS_OUT_FLAGS2 1097 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/IroTore/IroTore.cpp b/IroTore/IroTore.cpp new file mode 100644 index 0000000..f64fe16 --- /dev/null +++ b/IroTore/IroTore.cpp @@ -0,0 +1,679 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "IroTore.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_LINE_ONLY, + STR_ON, + FALSE, + 0, + ID_LINE_ONLY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR1_ON, + STR_ON, + TRUE, + 0, + ID_COLOR1_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR1, + 0x0F, + 0x0F, + 0x0F, + ID_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR2_ON, + STR_ON, + TRUE, + 0, + ID_COLOR2_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR2, + 0x0A, + 0x0A, + 0x0A, + ID_COLOR2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR3_ON, + STR_ON, + TRUE, + 0, + ID_COLOR3_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR3, + 0x05, + 0x05, + 0x05, + ID_COLOR3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR4_ON, + STR_ON, + FALSE, + 0, + ID_COLOR4_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR4, + 0x00, + 0x00, + 0x00, + ID_COLOR4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR5_ON, + STR_ON, + FALSE, + 0, + ID_COLOR5_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR5, + 0x00, + 0x00, + 0x00, + ID_COLOR5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR6_ON, + STR_ON, + FALSE, + 0, + ID_COLOR6_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR6, + 0x00, + 0x00, + 0x00, + ID_COLOR6 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 10, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LEVEL + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_IG_COLOR, + 0x10, + 0x10, + 0x10, + ID_IG_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_MINMAX1, //パラメータの名前 + -50, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + -10, //スライダーの最小値 + 10, //スライダーの最大値 + -2, //デフォルトの値 + ID_LINE_MINMAX1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_MINMAX2, //パラメータの名前 + -50, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + -10, //スライダーの最小値 + 10, //スライダーの最大値 + 0, //デフォルトの値 + ID_LINE_MINMAX2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_BLUR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 4, //デフォルトの値 + ID_LINE_BLUR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_LINE_H,0,ID_LINE_H); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LINE_S, //Name + -100, //VALID_MIN + 100, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LINE_S + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LINE_L, //Name + -100, //VALID_MIN + 100, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + -50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LINE_L + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LINE_R, //Name + -100, //VALID_MIN + 100, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LINE_RED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LINE_G, //Name + -100, //VALID_MIN + 100, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LINE_GREEN + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LINE_B, //Name + -100, //VALID_MIN + 100, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LINE_BLUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_NEG_COLOR1_ON, + STR_ON, + FALSE, + 0, + ID_NEG_COLOR1_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NEG_COLOR1, + 0xFE, + 0xFE, + 0xFE, + ID_NEG_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_NEG_COLOR2_ON, + STR_ON, + FALSE, + 0, + ID_NEG_COLOR2_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NEG_COLOR2, + 0xFD, + 0xFD, + 0xFD, + ID_NEG_COLOR2 + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_NEG_COLOR3_ON, + STR_ON, + FALSE, + 0, + ID_NEG_COLOR3_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NEG_COLOR3, + 0xFC, + 0xFC, + 0xFC, + ID_NEG_COLOR3 + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_NEG_COLOR4_ON, + STR_ON, + FALSE, + 0, + ID_NEG_COLOR4_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NEG_COLOR4, + 0xFC, + 0xFC, + 0xFC, + ID_NEG_COLOR4 + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Boolean FindColor(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + if (infoP->colorMax >0 ) { + for ( int i=0; icolorMax; i++){ + if ( + (p.blue == infoP->color[i].blue) + &&(p.green == infoP->color[i].green) + &&(p.red == infoP->color[i].red)){ + + ret = TRUE; + break; + } + + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Boolean FindNegColor(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + if (infoP->ngColorMax >0 ) { + for ( int i=0; ingColorMax; i++){ + if ( + (p.blue == infoP->ngColor[i].blue) + &&(p.green == infoP->ngColor[i].green) + &&(p.red == infoP->ngColor[i].red)){ + + ret = TRUE; + break; + } + + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + + + ERR(ae->GetCHECKBOX(ID_LINE_ONLY,&infoP->lineOnly)); + + + PF_Boolean on = FALSE; + int idx = 0; + PF_Pixel p = {0,0,0,0}; + infoP->colorMax = 0; + ERR(ae->GetCHECKBOX(ID_COLOR1_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR1,&p)); + infoP->color[idx] = p; + idx++; + } + ERR(ae->GetCHECKBOX(ID_COLOR2_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR2,&p)); + if ( FindColor(infoP,p) == FALSE) { + infoP->color[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_COLOR3_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR3,&p)); + if ( FindColor(infoP,p) == FALSE) { + infoP->color[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_COLOR4_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR4,&p)); + if ( FindColor(infoP,p)==FALSE) { + infoP->color[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_COLOR5_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR5,&p)); + infoP->color[idx] = p; + idx++; + } + ERR(ae->GetCHECKBOX(ID_COLOR6_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_COLOR6,&p)); + infoP->color[idx] = p; + idx++; + } + infoP->colorMax = idx; + + double lv = 0; + ERR(ae->GetFLOAT(ID_LEVEL,&lv)); + infoP->level = (A_long)((double)PF_MAX_CHAN8 * lv / 100.0 + 0.5); + + + ERR(ae->GetCOLOR(ID_IG_COLOR,&infoP->igColor)); + + ERR(ae->GetADD(ID_LINE_MINMAX1,&infoP->minmax1)); + ERR(ae->GetADD(ID_LINE_MINMAX2,&infoP->minmax2)); + ERR(ae->GetADD(ID_LINE_BLUR,&infoP->blur)); + + + PF_Fixed r = 0; + infoP->hue = 0.0; + ERR(ae->GetANGLE(ID_LINE_H,&r)); + r = r % (360L<<16); + if (r <0) r += (360L<<16); + infoP->hue = ((double)r / (double)(1L<<16))/360.0; + + ERR(ae->GetFLOAT(ID_LINE_S,&infoP->sat)); + ERR(ae->GetFLOAT(ID_LINE_L,&infoP->light)); + ERR(ae->GetFLOAT(ID_LINE_RED,&infoP->red)); + ERR(ae->GetFLOAT(ID_LINE_GREEN,&infoP->green)); + ERR(ae->GetFLOAT(ID_LINE_BLUE,&infoP->blue)); + infoP->sat /= 100.0; + infoP->light /= 100.0; + infoP->red /= 100.0; + infoP->green /= 100.0; + infoP->blue /= 100.0; + + idx = 0; + infoP->ngColorMax = 0; + + ERR(ae->GetCHECKBOX(ID_NEG_COLOR1_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_NEG_COLOR1,&p)); + if ( FindColor(infoP,p)==FALSE) { + infoP->ngColor[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_NEG_COLOR2_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_NEG_COLOR2,&p)); + if ( FindColor(infoP,p)==FALSE) { + if ( FindNegColor(infoP,p)==FALSE) { + infoP->ngColor[idx] = p; + idx++; + } + } + } + ERR(ae->GetCHECKBOX(ID_NEG_COLOR3_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_NEG_COLOR3,&p)); + if ( FindColor(infoP,p)==FALSE) { + if ( FindNegColor(infoP,p)==FALSE) { + infoP->ngColor[idx] = p; + idx++; + } + } + } + ERR(ae->GetCHECKBOX(ID_NEG_COLOR4_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_NEG_COLOR4,&p)); + if ( FindColor(infoP,p)==FALSE) { + if ( FindNegColor(infoP,p)==FALSE) { + infoP->ngColor[idx] = p; + idx++; + } + } + } + infoP->ngColorMax = idx; + return err; +} +//########################################################################### +static ParamInfo16 + infoTo16 (ParamInfo *infoP) +{ + ParamInfo16 ret; + ret.lineOnly = infoP->lineOnly; + ret.colorMax = infoP->colorMax; + if (infoP->colorMax>0){ + for (int i=0;icolorMax;i++){ + ret.color[i] = infoP->color[i]; + } + } + + + ret.level = infoP->level; + ret.igColor = CONV8TO16(infoP->igColor); + ret.blur = infoP->blur; + ret.minmax1 = infoP->minmax1; + ret.minmax2 = infoP->minmax2; + ret.hue = infoP->hue; + ret.sat = infoP->sat; + ret.light = infoP->light; + ret.red = infoP->red; + ret.green = infoP->green; + ret.blue = infoP->blue; + + ret.ngColorMax = infoP->ngColorMax; + if (infoP->ngColorMax>0){ + for (int i=0;ingColorMax;i++){ + ret.ngColor[i] = infoP->ngColor[i]; + } + } + + return ret; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->colorMax<=0) + { + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + //ParamInfo32 info32; + + //info32 = infoTo32(infoP); + //ERR(irotoreExec32(ae,&info32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + + info16 = infoTo16(infoP); + ERR(irotoreExec16(ae,&info16)); + break; + case PF_PixelFormat_ARGB32: + ERR(irotoreExec8(ae,infoP)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/IroTore/IroTore.h b/IroTore/IroTore.h new file mode 100644 index 0000000..1649ad8 --- /dev/null +++ b/IroTore/IroTore.h @@ -0,0 +1,229 @@ +//----------------------------------------------------------------------------------- +/* + IroTore for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef IroTore_H +#define IroTore_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsDebug.h" +#include "../FsLibrary/FsHLS.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + //境界線のみ + ID_LINE_ONLY, + //主線の色 + ID_COLOR1_ON, + ID_COLOR1, + ID_COLOR2_ON, + ID_COLOR2, + ID_COLOR3_ON, + ID_COLOR3, + ID_COLOR4_ON, + ID_COLOR4, + ID_COLOR5_ON, + ID_COLOR5, + ID_COLOR6_ON, + ID_COLOR6, + + //主線検出レベル + ID_LEVEL, + + //マッチしなかった時の色 + ID_IG_COLOR, + + //主線部分最大最小 + ID_LINE_MINMAX1, + ID_LINE_MINMAX2, + + //主線部分にブラー + ID_LINE_BLUR, + + //主線部分の色変え + ID_LINE_H, + ID_LINE_S, + ID_LINE_L, + ID_LINE_RED, + ID_LINE_GREEN, + ID_LINE_BLUE, + + ID_NEG_COLOR1_ON, + ID_NEG_COLOR1, + ID_NEG_COLOR2_ON, + ID_NEG_COLOR2, + ID_NEG_COLOR3_ON, + ID_NEG_COLOR3, + ID_NEG_COLOR4_ON, + ID_NEG_COLOR4, + + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_LINE_ONLY "LineOnly" +#define STR_ON "on" +#define STR_COLOR1_ON "EnabledColor1" +#define STR_COLOR2_ON "EnabledColor2" +#define STR_COLOR3_ON "EnabledColor3" +#define STR_COLOR4_ON "EnabledColor4" +#define STR_COLOR5_ON "EnabledColor5" +#define STR_COLOR6_ON "EnabledColor6" + +#define STR_COLOR1 "Color1" +#define STR_COLOR2 "Color2" +#define STR_COLOR3 "Color3" +#define STR_COLOR4 "Color4" +#define STR_COLOR5 "Color5" +#define STR_COLOR6 "Color6" + +#define STR_LEVEL "level" +#define STR_IG_COLOR "あきらめ色" + +#define STR_LINE_MINMAX1 "Min/Max1" +#define STR_LINE_MINMAX2 "Min/Max2" +#define STR_LINE_BLUR "LineBlur" +#define STR_LINE_H "LineH" +#define STR_LINE_S "LineS" +#define STR_LINE_L "LineL" +#define STR_LINE_R "LineRed" +#define STR_LINE_G "LineGreen" +#define STR_LINE_B "LineBlue" + +#define STR_NEG_COLOR1_ON "EnabledN1" +#define STR_NEG_COLOR2_ON "EnabledN2" +#define STR_NEG_COLOR3_ON "EnabledN3" +#define STR_NEG_COLOR4_ON "EnabledN4" + +#define STR_NEG_COLOR1 "NegColor1" +#define STR_NEG_COLOR2 "NegColor2" +#define STR_NEG_COLOR3 "NegColor3" +#define STR_NEG_COLOR4 "NegColor4" + +#define PF_HALF_CHAN32 (0.5) +#define PF_MAX_CHAN32 (1.0) + +#define COLOR_MAX 6 +#define NEG_COLOR_MAX 4 +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean lineOnly; + A_long colorMax; + PF_Pixel color[COLOR_MAX]; + A_long ngColorMax; + PF_Pixel ngColor[NEG_COLOR_MAX]; + A_long level; + + PF_Pixel igColor; + + A_long blur; + A_long minmax1; + A_long minmax2; + PF_FpLong hue; + PF_FpLong sat; + PF_FpLong light; + PF_FpLong red; + PF_FpLong green; + PF_FpLong blue; + + PF_Handle scanlineH; + PF_Pixel *scanline; + PF_Pixel *data; + A_long targetCount; + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + A_long nowX; + A_long nowY; + + +} ParamInfo; +typedef struct ParamInfo16 { + PF_Boolean lineOnly; + A_long colorMax; + PF_Pixel color[COLOR_MAX]; + A_long ngColorMax; + PF_Pixel ngColor[NEG_COLOR_MAX]; + A_long level; + + PF_Pixel16 igColor; + + A_long blur; + A_long minmax1; + A_long minmax2; + PF_FpLong hue; + PF_FpLong sat; + PF_FpLong light; + PF_FpLong red; + PF_FpLong green; + PF_FpLong blue; + + PF_Handle scanlineH; + PF_Pixel16 *scanline; + PF_Pixel16 *data; + A_long targetCount; + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + A_long nowX; + A_long nowY; + + +} ParamInfo16; +//------------------------------------------------------- +//--------------------------------------------------------------------xFF-------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + + +PF_Err irotoreExec8(CFsAE *ae , ParamInfo *infoP); +PF_Err irotoreExec16(CFsAE *ae , ParamInfo16 *infoP); +#endif // IroTore_H diff --git a/IroTore/IroTorePiPL.r b/IroTore/IroTorePiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/IroTore/IroTorePiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/IroTore/IroToreSub16.cpp b/IroTore/IroToreSub16.cpp new file mode 100644 index 0000000..235b716 --- /dev/null +++ b/IroTore/IroToreSub16.cpp @@ -0,0 +1,782 @@ +#include "IroTore.h" + +/* +コピー +まず主線部分の抽出検出はinDataで alpha Maxが主線としてコピー + +主線を消す。 + +残ったら適当な色で塗る + + +色変え・線のみがOFFなら終了 + +まず主線部分の抽出 をもう一回やる + +色変えがOFFなら終了 + +色変え + +ブラーがONならブラー + +線のみがONなら終了 + +アルファーを元の状態へ修正 + +終了 + +*/ +//################################################################################ +inline A_long pixelValue(PF_Pixel16 p) +{ + return (A_long)( ( 0.29891 * (PF_FpLong)p.red) + ( 0.58661 * (PF_FpLong)p.green) + ( 0.11448 * (PF_FpLong)p.blue) +0.5); +} +//################################################################################ +inline void scanlineCopy3(ParamInfo16 *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt2] = infoP->data[i + infoP->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->scanline[i + infoP->wt ]; + infoP->scanline[i + infoP->wt ] = infoP->scanline[i + infoP->wt2]; + } + if (yh-1 ){ + v = (y+1)*infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i + infoP->wt2] = infoP->data[i + v]; + } + } + } +} +//################################################################################ +inline void scanlineCopyH(ParamInfo16 *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = y * infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i + v]; + } +} +//################################################################################ +inline void scanlineCopyV(ParamInfo16 *infoP, A_long x) +{ + //スキャンラインへコピー + A_long v = x; + for ( int i=0; ih; i++ ){ + infoP->scanline[i ] = infoP->data[v]; + v += infoP->wt; + } +} +//################################################################################ +inline PF_Pixel16 getScanLine(ParamInfo16 *infoP, A_long offsetX, A_long offsetY) +{ + A_long xx = infoP->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=infoP->w) { + xx = infoP->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return infoP->scanline[ xx + yy*infoP->wt]; +} +//################################################################################ +inline PF_Boolean isTarget(ParamInfo16 *infoP, PF_Pixel16 p) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp = CONV16TO8(p); + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)infoP->color[i].red - (A_long)pp.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].green - (A_long)pp.green) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].blue - (A_long)pp.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +inline PF_Boolean isNeg(ParamInfo16 *infoP, PF_Pixel16 p) +{ + PF_Boolean ret = FALSE; + if (infoP->ngColorMax<=0) return ret; + PF_Pixel pp = CONV16TO8(p); + for (A_long i=0; ingColorMax; i++){ + if ( ( F_ABS((A_long)infoP->ngColor[i].red - (A_long)pp.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->ngColor[i].green - (A_long)pp.green) <= infoP->level) + &&( F_ABS((A_long)infoP->ngColor[i].blue - (A_long)pp.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +static PF_Err +targetSelect ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN16; + + }else if (isNeg(niP,*inP)==TRUE){ + outP->alpha = 0; + }else if ( + (inP->alpha==0) + || ( (inP->blue==PF_MAX_CHAN8)&&(inP->green==PF_MAX_CHAN8)&&(inP->red==PF_MAX_CHAN8))){ + outP->alpha = 0; + }else{ + outP->alpha = PF_HALF_CHAN16; + } + + + return err; +} +//################################################################################ +static PF_Err +targetAlphaRedo ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = inP->alpha; + + return err; +} +//################################################################################ +static PF_Err +targetLineOnly ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN16; + }else{ + outP->alpha = 0; + } + + return err; +} +//################################################################################ +static PF_Err +targetColor ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + if (outP->alpha != PF_MAX_CHAN16 ) return err; + + ParamInfo16 * niP = reinterpret_cast(refcon); + + PF_PixelFloat p = CONV16TO32(*outP); + + HLSA hls = RGBtoHLS(p); + + if (niP->hue>0) { + hls.H = hls.H + niP->hue; + if (hls.H>1.0) hls.H -= 1.0; + else if (hls.H<0.0) hls.H += 1.0; + } + if (niP->sat>0) { + hls.S += (1.0 - hls.S) * niP->sat; + }else if (niP->sat<0){ + hls.S += hls.S * niP->sat; + } + if (niP->light>0) { + hls.L += (PF_FpShort)( (1.0 - hls.L) * niP->light); + }else if (niP->light<0){ + hls.L += (PF_FpShort)(hls.L * niP->light); + } + p = HLStoRGB(hls); + + if (niP->red>0) { + p.red += (PF_FpShort)((1.0 - p.red) * niP->red); + }else if (niP->red<0) { + p.red += (PF_FpShort)(p.red * niP->red); + } + if (niP->green>0) { + p.green += (PF_FpShort)((1.0 - p.green) * niP->green); + }else if (niP->green<0) { + p.green += (PF_FpShort)(p.green * niP->green); + } + if (niP->blue>0) { + p.blue += (PF_FpShort)((1.0 - p.blue) * niP->blue); + }else if (niP->blue<0) { + p.blue += (PF_FpShort)(p.blue * niP->blue); + } + p.alpha = 1.0; + *outP = CONV32TO16(p); + + return err; +} +//################################################################################ +//minMax +static PF_Err + targetMinMax (CFsAE *ae,ParamInfo16 *infoP,A_long value) +{ + + PF_Err err = PF_Err_NONE; + if (value==0) return err; + + PF_Boolean maxF = (value>0); + A_long value2 = F_ABS(value); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + PF_Pixel16 target = infoP->data[now]; + A_long v = pixelValue(target); + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + PF_Pixel16 p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN16)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + PF_Pixel16 p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN16)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok) { + infoP->data[now] = target; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + PF_Pixel16 target = infoP->data[now]; + A_long v = pixelValue(target); + PF_Boolean ok = FALSE; + //上 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + PF_Pixel16 p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN16)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //下 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + PF_Pixel16 p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN16)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok==TRUE) { + infoP->data[now] = target; + } + + + } + now+= infoP->wt; + } + } + return err; + +} + +//################################################################################ +static A_long +targetCount (CFsAE *ae) +{ + A_long ret = 0; + PF_Pixel16 *data; + data = (PF_Pixel16 *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long os = ae->out->offsetWidth(); + + A_long now = 0; + for ( A_long y=0; y0) { \ + subpx = getScanLine(infoP,X,Y); \ + if (subpx.alpha == PF_HALF_CHAN16){ \ + A_long v2 = (A_long)( ( 0.29891 * (PF_FpLong)subpx.red) + ( 0.58661 * (PF_FpLong)subpx.green) + ( 0.11448 * (PF_FpLong)subpx.blue) +0.5); \ + if (v>v2) { \ + v = v2; \ + target = subpx; \ + cnt++; \ + } \ + } \ +} \ +} while (0) + + +//################################################################################ +//上下左右をチェック +static PF_Err + targetRemove (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + PF_Pixel16 subpx,target; + A_long v = PF_MAX_CHAN16; + A_long cnt=0; + CHK_PX16( 0,-1); + CHK_PX16( 1, 0); + CHK_PX16( 0, 1); + CHK_PX16(-1,0); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN16; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//斜め方向をチェック +static PF_Err + targetRemove2nd (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + PF_Pixel16 subpx,target; + A_long v=PF_MAX_CHAN16; + A_long cnt=0; + CHK_PX16(-1,-1); + CHK_PX16( 1,-1); + CHK_PX16(-1, 1); + CHK_PX16( 1, 1); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN16; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//問答無用で塗りつぶす +static PF_Err + targetRemoveMax (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + A_long now = 0; + for ( A_long y=0; yh;y++){ + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + infoP->data[now] = infoP->igColor; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//主線だけぼかす +static PF_Err + targetBlur (CFsAE *ae,ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long v = infoP->blur; + if (v<=0) return err; + PF_Pixel16 p; + + A_long now = 0; + //まず横方向 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN16)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN16) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN16; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + //次は縦方向 + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[y].red; + g = (A_long)infoP->scanline[y].green; + b = (A_long)infoP->scanline[y].blue; + cnt = 1; + //まず上 + for ( A_long i=1; i<=v;i++){ + A_long yy = y-i; + if (yy<0) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN16) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は下 + for ( A_long i=1; i<=v;i++){ + A_long yy = y+i; + if (yy>=infoP->h) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN16) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN16; + infoP->data[now] = p; + } + } + now+= infoP->wt; + } + } + //また横方向。数値は半分 + v = v/2; + if (v<=0) return err; + now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN16) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN16)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN16) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN16; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//***************************************************************************** +PF_Err irotoreExec16(CFsAE *ae , ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + + //パラメータを作成 + infoP->data = (PF_Pixel16 *)ae->out->data(); + infoP->w = ae->out->width(); + infoP->wt = ae->out->widthTrue(); + infoP->wt2 = ae->out->widthTrue() *2; + infoP->h = ae->out->height(); + infoP->offset = ae->out->offsetWidth(); + + //主線を抽出 + ERR(ae->iterate16((refconType)infoP,targetSelect)); + + //主線のピクセル数を数える + infoP->targetCount = targetCount(ae); + //0なら終わる + if (infoP->targetCount<=0) { + if (infoP->lineOnly==TRUE){ + ae->out->clear(); + }else{ + ae->CopyInToOut(); + } + return err; + } + //主線を消す + //メモリの確保。念のため大きめにとる + A_long mm = infoP->wt; + if (mm < infoP->h) mm = infoP->h; + infoP->scanlineH = ae->NewHandle(mm * sizeof(PF_Pixel16) * 4);// 3Line分 と余裕 + if ( !infoP->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + infoP->scanline = *(PF_Pixel16**)infoP->scanlineH; ; + + //主線部分がなくなるまで繰り返す。 + while(infoP->targetCount>0) + { + A_long bk = infoP->targetCount; + targetRemove(ae,infoP); + //塗りつぶせなかったら斜め方向検出 + if (infoP->targetCount == bk) { + targetRemove2nd(ae,infoP); + if (infoP->targetCount == bk) { + //諦める + targetRemoveMax(ae,infoP); + } + } + } + //主線抜き出しやり直し + PF_Boolean loFlag = TRUE; + if ( (infoP->blur>0) + ||(infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0) + ||(infoP->minmax1!=0)||(infoP->minmax2!=0) + ) + { + ERR(ae->iterate16((refconType)infoP,targetLineOnly)); + loFlag = FALSE; + } + if (infoP->minmax1!=0){ + targetMinMax(ae,infoP,infoP->minmax1); + } + if (infoP->minmax2!=0){ + targetMinMax(ae,infoP,infoP->minmax2); + } + + //ブラーの処理 + if (infoP->blur>0) + { + targetBlur(ae,infoP); + } + //色変え + if ( (infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0)) + { + ERR(ae->iterate16((refconType)infoP,targetColor)); + } + + //主線部分を抜き出す + if (infoP->lineOnly){ + if (loFlag==TRUE){ + ERR(ae->iterate16((refconType)infoP,targetLineOnly)); + } + }else{ + ERR(ae->iterate16((refconType)infoP,targetAlphaRedo)); + } + + //メモリの開放 + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + return err; +} diff --git a/IroTore/IroToreSub32.cpp b/IroTore/IroToreSub32.cpp new file mode 100644 index 0000000..4b59a3b --- /dev/null +++ b/IroTore/IroToreSub32.cpp @@ -0,0 +1,766 @@ +#include "IroTore.h" + +/* +コピー +まず主線部分の抽出検出はinDataで alpha Maxが主線としてコピー + +主線を消す。 + +残ったら適当な色で塗る + + +色変え・線のみがOFFなら終了 + +まず主線部分の抽出 をもう一回やる + +色変えがOFFなら終了 + +色変え + +ブラーがONならブラー + +線のみがONなら終了 + +アルファーを元の状態へ修正 + +終了 + +*/ +//################################################################################ +inline PF_FpLong pixelValue(PF_PixelFloat p) +{ + return ( ( 0.29891 * (PF_FpLong)p.red) + ( 0.58661 * (PF_FpLong)p.green) + ( 0.11448 * (PF_FpLong)p.blue)); +} +//################################################################################ +inline void scanlineCopy3(ParamInfo32 *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt2] = infoP->data[i + infoP->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->scanline[i + infoP->wt ]; + infoP->scanline[i + infoP->wt ] = infoP->scanline[i + infoP->wt2]; + } + if (yh-1 ){ + v = (y+1)*infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i + infoP->wt2] = infoP->data[i + v]; + } + } + } +} +//################################################################################ +inline void scanlineCopyH(ParamInfo32 *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = y * infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i + v]; + } +} +//################################################################################ +inline void scanlineCopyV(ParamInfo32 *infoP, A_long x) +{ + //スキャンラインへコピー + A_long v = x; + for ( int i=0; ih; i++ ){ + infoP->scanline[i ] = infoP->data[v]; + v += infoP->wt; + } +} +//################################################################################ +inline PF_PixelFloat getScanLine(ParamInfo32 *infoP, A_long offsetX, A_long offsetY) +{ + A_long xx = infoP->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=infoP->w) { + xx = infoP->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return infoP->scanline[ xx + yy*infoP->wt]; +} +//################################################################################ +inline PF_Boolean isTarget(ParamInfo32 *infoP, PF_PixelFloat p) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp = CONV32TO8(p); + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)infoP->color[i].red - (A_long)pp.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].green - (A_long)pp.green) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].blue - (A_long)pp.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +static PF_Err +targetSelect ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN32; + }else{ + if ((inP->alpha==0) || ( (inP->blue>=PF_MAX_CHAN32)&&(inP->green>=PF_MAX_CHAN32)&&(inP->red>=PF_MAX_CHAN32))){ + outP->alpha = 0; + }else{ + outP->alpha = PF_HALF_CHAN32; + } + } + + + return err; +} +//################################################################################ +static PF_Err +targetAlphaRedo ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = inP->alpha; + + return err; +} +//################################################################################ +static PF_Err +targetLineOnly ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN32; + }else{ + outP->alpha = 0; + } + + return err; +} +//################################################################################ +static PF_Err +targetColor ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + if (outP->alpha != PF_MAX_CHAN32 ) return err; + + ParamInfo32 * niP = reinterpret_cast(refcon); + + PF_PixelFloat p =*outP; + if (p.red>1.0) p.red = 1.0; + if (p.green>1.0) p.green = 1.0; + if (p.blue>1.0) p.blue = 1.0; + + HLSA hls = RGBtoHLS(p); + + if (niP->hue>0) { + hls.H = hls.H + niP->hue; + if (hls.H>1.0) hls.H -= 1.0; + else if (hls.H<0.0) hls.H += 1.0; + } + if (niP->sat>0) { + hls.S += (1.0 - hls.S) * niP->sat; + }else if (niP->sat<0){ + hls.S += hls.S * niP->sat; + } + if (niP->light>0) { + hls.L += (PF_FpShort)( (1.0 - hls.L) * niP->light); + }else if (niP->light<0){ + hls.L += (PF_FpShort)(hls.L * niP->light); + } + p = HLStoRGB(hls); + + if (niP->red>0) { + p.red += (PF_FpShort)((1.0 - p.red) * niP->red); + }else if (niP->red<0) { + p.red += (PF_FpShort)(p.red * niP->red); + } + if (niP->green>0) { + p.green += (PF_FpShort)((1.0 - p.green) * niP->green); + }else if (niP->green<0) { + p.green += (PF_FpShort)(p.green * niP->green); + } + if (niP->blue>0) { + p.blue += (PF_FpShort)((1.0 - p.blue) * niP->blue); + }else if (niP->blue<0) { + p.blue += (PF_FpShort)(p.blue * niP->blue); + } + p.alpha = 1.0; + *outP = p; + + return err; +} +//################################################################################ +//minMax +static PF_Err + targetMinMax (CFsAE *ae,ParamInfo32 *infoP,A_long value) +{ + + PF_Err err = PF_Err_NONE; + if (value==0) return err; + + PF_Boolean maxF = (value>0); + A_long value2 = F_ABS(value); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha == PF_MAX_CHAN32) { + PF_PixelFloat target = infoP->data[now]; + double v = pixelValue(target); + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + PF_PixelFloat p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN32)break; + double v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + PF_PixelFloat p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN32)break; + double v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok) { + infoP->data[now] = target; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + PF_PixelFloat target = infoP->data[now]; + double v = pixelValue(target); + PF_Boolean ok = FALSE; + //上 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + PF_PixelFloat p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN32)break; + double v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //下 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + PF_PixelFloat p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN32)break; + double v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok==TRUE) { + infoP->data[now] = target; + } + + + } + now+= infoP->wt; + } + } + return err; + +} + +//################################################################################ +static A_long +targetCount (CFsAE *ae) +{ + A_long ret = 0; + PF_PixelFloat *data; + data = (PF_PixelFloat *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long os = ae->out->offsetWidth(); + + A_long now = 0; + for ( A_long y=0; y0) { \ + subpx = getScanLine(infoP,X,Y); \ + if (subpx.alpha == PF_HALF_CHAN32){ \ + double v2 = ( ( 0.29891 * (PF_FpLong)subpx.red) + ( 0.58661 * (PF_FpLong)subpx.green) + ( 0.11448 * (PF_FpLong)subpx.blue) +0.5); \ + if (v>v2) { \ + v = v2; \ + target = subpx; \ + cnt++; \ + } \ + } \ +} \ +} while (0) + + +//################################################################################ +//上下左右をチェック +static PF_Err + targetRemove (CFsAE *ae,ParamInfo32 *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + PF_PixelFloat subpx,target; + double v = PF_MAX_CHAN32; + A_long cnt=0; + CHK_PX32( 0,-1); + CHK_PX32( 1, 0); + CHK_PX32( 0, 1); + CHK_PX32(-1,0); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN32; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//斜め方向をチェック +static PF_Err + targetRemove2nd (CFsAE *ae,ParamInfo32 *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + PF_PixelFloat subpx,target; + double v=PF_MAX_CHAN32; + A_long cnt=0; + CHK_PX32(-1,-1); + CHK_PX32( 1,-1); + CHK_PX32(-1, 1); + CHK_PX32( 1, 1); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN32; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//問答無用で塗りつぶす +static PF_Err + targetRemoveMax (CFsAE *ae,ParamInfo32 *infoP) +{ + + PF_Err err = PF_Err_NONE; + A_long now = 0; + for ( A_long y=0; yh;y++){ + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + infoP->data[now] = infoP->igColor; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//主線だけぼかす +static PF_Err + targetBlur (CFsAE *ae,ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long v = infoP->blur; + if (v<=0) return err; + PF_PixelFloat p; + + A_long now = 0; + //まず横方向 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + double r = 0; + double g = 0; + double b = 0; + A_long cnt =0; + //中央 + r = (double)infoP->scanline[x].red; + g = (double)infoP->scanline[x].green; + b = (double)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN32)break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN32) break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundFpShortDouble(((double)r / (double)cnt)); + p.green = RoundFpShortDouble(((double)g / (double)cnt)); + p.blue = RoundFpShortDouble(((double)b / (double)cnt)); + p.alpha = PF_MAX_CHAN32; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + //次は縦方向 + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + double r = 0; + double g = 0; + double b = 0; + double cnt =0; + //中央 + r = (double)infoP->scanline[y].red; + g = (double)infoP->scanline[y].green; + b = (double)infoP->scanline[y].blue; + cnt = 1; + //まず上 + for ( A_long i=1; i<=v;i++){ + A_long yy = y-i; + if (yy<0) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN32) break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + //次は下 + for ( A_long i=1; i<=v;i++){ + A_long yy = y+i; + if (yy>=infoP->h) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN32) break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundFpShortDouble(((double)r / (double)cnt)); + p.green = RoundFpShortDouble(((double)g / (double)cnt)); + p.blue = RoundFpShortDouble(((double)b / (double)cnt)); + p.alpha = PF_MAX_CHAN32; + infoP->data[now] = p; + } + } + now+= infoP->wt; + } + } + //また横方向。数値は半分 + v = v/2; + if (v<=0) return err; + now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN32) { + double r = 0; + double g = 0; + double b = 0; + A_long cnt =0; + //中央 + r = (double)infoP->scanline[x].red; + g = (double)infoP->scanline[x].green; + b = (double)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN32)break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN32) break; + r += (double)p.red; + g += (double)p.green; + b += (double)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundFpShortDouble(((double)r / (double)cnt)); + p.green = RoundFpShortDouble(((double)g / (double)cnt)); + p.blue = RoundFpShortDouble(((double)b / (double)cnt)); + p.alpha = PF_MAX_CHAN32; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//***************************************************************************** +PF_Err irotoreExec32(CFsAE *ae , ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + + //パラメータを作成 + infoP->data = (PF_PixelFloat *)ae->out->data(); + infoP->w = ae->out->width(); + infoP->wt = ae->out->widthTrue(); + infoP->wt2 = ae->out->widthTrue() *2; + infoP->h = ae->out->height(); + infoP->offset = ae->out->offsetWidth(); + + //主線を抽出 + ERR(ae->iterate32((refconType)infoP,targetSelect)); + + //主線のピクセル数を数える + infoP->targetCount = targetCount(ae); + //0なら終わる + if (infoP->targetCount<=0) { + if (infoP->lineOnly==TRUE){ + ae->out->clear(); + }else{ + ae->CopyInToOut(); + } + return err; + } + //主線を消す + //メモリの確保。念のため大きめにとる + A_long mm = infoP->wt; + if (mm < infoP->h) mm = infoP->h; + infoP->scanlineH = ae->NewHandle(mm * sizeof(PF_PixelFloat) * 4);// 3Line分 と余裕 + if ( !infoP->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + infoP->scanline = *(PF_PixelFloat**)infoP->scanlineH; ; + + //主線部分がなくなるまで繰り返す。 + while(infoP->targetCount>0) + { + A_long bk = infoP->targetCount; + targetRemove(ae,infoP); + //塗りつぶせなかったら斜め方向検出 + if (infoP->targetCount == bk) { + targetRemove2nd(ae,infoP); + if (infoP->targetCount == bk) { + //諦める + targetRemoveMax(ae,infoP); + } + } + } + //主線抜き出しやり直し + PF_Boolean loFlag = TRUE; + if ( (infoP->blur>0) + ||(infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0) + ||(infoP->minmax1!=0)||(infoP->minmax2!=0) + ) + { + ERR(ae->iterate32((refconType)infoP,targetLineOnly)); + loFlag = FALSE; + } + if (infoP->minmax1!=0){ + targetMinMax(ae,infoP,infoP->minmax1); + } + if (infoP->minmax2!=0){ + targetMinMax(ae,infoP,infoP->minmax2); + } + + //ブラーの処理 + if (infoP->blur>0) + { + targetBlur(ae,infoP); + } + //色変え + if ( (infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0)) + { + ERR(ae->iterate32((refconType)infoP,targetColor)); + } + + //主線部分を抜き出す + if (infoP->lineOnly){ + if (loFlag==TRUE){ + ERR(ae->iterate32((refconType)infoP,targetLineOnly)); + } + }else{ + ERR(ae->iterate32((refconType)infoP,targetAlphaRedo)); + } + + //メモリの開放 + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + return err; +} diff --git a/IroTore/IroToreSub8.cpp b/IroTore/IroToreSub8.cpp new file mode 100644 index 0000000..1b83c80 --- /dev/null +++ b/IroTore/IroToreSub8.cpp @@ -0,0 +1,782 @@ +#include "IroTore.h" + +/* +コピー +まず主線部分の抽出検出はinDataで alpha Maxが主線としてコピー + +主線を消す。 + +残ったら適当な色で塗る + + +色変え・線のみがOFFなら終了 + +まず主線部分の抽出 をもう一回やる + +色変えがOFFなら終了 + +色変え + +ブラーがONならブラー + +線のみがONなら終了 + +アルファーを元の状態へ修正 + +終了 + +*/ +//################################################################################ +inline A_long pixelValue(PF_Pixel p) +{ + return (A_long)( ( 0.29891 * (PF_FpLong)p.red) + ( 0.58661 * (PF_FpLong)p.green) + ( 0.11448 * (PF_FpLong)p.blue) +0.5); +} +//################################################################################ +inline void scanlineCopy3(ParamInfo *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt ] = infoP->data[i ]; + infoP->scanline[i + infoP->wt2] = infoP->data[i + infoP->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->scanline[i + infoP->wt ]; + infoP->scanline[i + infoP->wt ] = infoP->scanline[i + infoP->wt2]; + } + if (yh-1 ){ + v = (y+1)*infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i + infoP->wt2] = infoP->data[i + v]; + } + } + } +} +//################################################################################ +inline void scanlineCopyH(ParamInfo *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = y * infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i + v]; + } +} +//################################################################################ +inline void scanlineCopyV(ParamInfo *infoP, A_long x) +{ + //スキャンラインへコピー + A_long v = x; + for ( int i=0; ih; i++ ){ + infoP->scanline[i ] = infoP->data[v]; + v += infoP->wt; + } +} +//################################################################################ +inline PF_Pixel getScanLine(ParamInfo *infoP, A_long offsetX, A_long offsetY) +{ + A_long xx = infoP->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=infoP->w) { + xx = infoP->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return infoP->scanline[ xx + yy*infoP->wt]; +} +//################################################################################ +inline PF_Boolean isTarget(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)infoP->color[i].red - (A_long)p.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].green - (A_long)p.green) <= infoP->level) + &&( F_ABS((A_long)infoP->color[i].blue - (A_long)p.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +inline PF_Boolean isNeg(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + if (infoP->ngColorMax<=0) return ret; + for (A_long i=0; ingColorMax; i++){ + if ( ( F_ABS((A_long)infoP->ngColor[i].red - (A_long)p.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->ngColor[i].green - (A_long)p.green) <= infoP->level) + &&( F_ABS((A_long)infoP->ngColor[i].blue - (A_long)p.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +static PF_Err +targetSelect ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN8; + + }else if (isNeg(niP,*inP)==TRUE){ + outP->alpha = 0; + }else if ( + (inP->alpha==0) + || ( (inP->blue==PF_MAX_CHAN8)&&(inP->green==PF_MAX_CHAN8)&&(inP->red==PF_MAX_CHAN8))){ + outP->alpha = 0; + }else{ + outP->alpha = PF_HALF_CHAN8; + } + + + return err; +} +//################################################################################ +static PF_Err +targetAlphaRedo ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + //ParamInfo * niP = reinterpret_cast(refcon); + + outP->alpha = inP->alpha; + + return err; +} +//################################################################################ +static PF_Err +targetLineOnly ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (isTarget(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN8; + }else{ + outP->alpha = 0; + } + + return err; +} +//################################################################################ +static PF_Err +targetColor ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + if (outP->alpha != PF_MAX_CHAN8 ) return err; + + ParamInfo * niP = reinterpret_cast(refcon); + + PF_PixelFloat p = CONV8TO32(*outP); + + HLSA hls = RGBtoHLS(p); + + if (niP->hue>0) { + hls.H = hls.H + niP->hue; + if (hls.H>1.0) hls.H -= 1.0; + else if (hls.H<0.0) hls.H += 1.0; + } + if (niP->sat>0) { + hls.S += (1.0 - hls.S) * niP->sat; + }else if (niP->sat<0){ + hls.S += hls.S * niP->sat; + } + if (niP->light>0) { + hls.L += (PF_FpShort)( (1.0 - hls.L) * niP->light); + }else if (niP->light<0){ + hls.L += (PF_FpShort)(hls.L * niP->light); + } + p = HLStoRGB(hls); + + if (niP->red>0) { + p.red += (PF_FpShort)((1.0 - p.red) * niP->red); + }else if (niP->red<0) { + p.red += (PF_FpShort)(p.red * niP->red); + } + if (niP->green>0) { + p.green += (PF_FpShort)((1.0 - p.green) * niP->green); + }else if (niP->green<0) { + p.green += (PF_FpShort)(p.green * niP->green); + } + if (niP->blue>0) { + p.blue += (PF_FpShort)((1.0 - p.blue) * niP->blue); + }else if (niP->blue<0) { + p.blue += (PF_FpShort)(p.blue * niP->blue); + } + p.alpha = 1.0; + *outP = CONV32TO8(p); + + return err; +} +//################################################################################ +//minMax +static PF_Err + targetMinMax (CFsAE *ae,ParamInfo *infoP,A_long value) +{ + + PF_Err err = PF_Err_NONE; + if (value==0) return err; + + PF_Boolean maxF = (value>0); + A_long value2 = F_ABS(value); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + PF_Pixel target = infoP->data[now]; + A_long v = pixelValue(target); + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + PF_Pixel p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN8)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + PF_Pixel p = infoP->scanline[xx]; + if (p.alpha!=PF_MAX_CHAN8)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok) { + infoP->data[now] = target; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + PF_Pixel target = infoP->data[now]; + A_long v = pixelValue(target); + PF_Boolean ok = FALSE; + //上 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + PF_Pixel p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN8)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + //下 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + PF_Pixel p = infoP->scanline[yy]; + if (p.alpha!=PF_MAX_CHAN8)break; + A_long v2 = pixelValue(p); + if (maxF) { + if (vv2) { + v = v2; + target = p; + ok = TRUE; + } + } + } + if (ok==TRUE) { + infoP->data[now] = target; + } + + + } + now+= infoP->wt; + } + } + return err; + +} + +//################################################################################ +static A_long +targetCount (CFsAE *ae) +{ + A_long ret = 0; + PF_Pixel *data; + data = (PF_Pixel *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long os = ae->out->offsetWidth(); + + A_long now = 0; + for ( A_long y=0; y0) { \ + subpx = getScanLine(infoP,X,Y); \ + if (subpx.alpha == PF_HALF_CHAN8){ \ + A_long v2 = (A_long)( ( 0.29891 * (PF_FpLong)subpx.red) + ( 0.58661 * (PF_FpLong)subpx.green) + ( 0.11448 * (PF_FpLong)subpx.blue) +0.5); \ + if (v>v2) { \ + v = v2; \ + target = subpx; \ + cnt++; \ + } \ + } \ +} \ +} while (0) + + +//################################################################################ +//上下左右をチェック +static PF_Err + targetRemove (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + PF_Pixel8 subpx,target; + A_long v=PF_MAX_CHAN8; + A_long cnt=0; + CHK_PX( 0,-1); + CHK_PX( 1, 0); + CHK_PX( 0, 1); + CHK_PX(-1,0); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN8; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//斜め方向をチェック +static PF_Err + targetRemove2nd (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + + A_long now = 0; + for ( A_long y=0; yh;y++){ + infoP->nowY = y; + scanlineCopy3(infoP,y); + for ( A_long x=0; xw;x++){ + infoP->nowX = x; + //ターゲットだ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + PF_Pixel8 subpx,target; + A_long v=PF_MAX_CHAN8; + A_long cnt=0; + CHK_PX(-1,-1); + CHK_PX( 1,-1); + CHK_PX(-1, 1); + CHK_PX( 1, 1); + if (cnt>0) { + infoP->data[now] = target; + infoP->data[now].alpha = PF_HALF_CHAN8; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//問答無用で塗りつぶす +static PF_Err + targetRemoveMax (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + A_long now = 0; + for ( A_long y=0; yh;y++){ + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + infoP->data[now] = infoP->igColor; + infoP->targetCount--; + if (infoP->targetCount<=0){ + return err; + } + + } + now++; + } + now += infoP->offset; + } + return err; + +} +//################################################################################ +//################################################################################ +//主線だけぼかす +static PF_Err + targetBlur (CFsAE *ae,ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long v = infoP->blur; + if (v<=0) return err; + PF_Pixel p; + + A_long now = 0; + //まず横方向 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN8)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN8; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + //次は縦方向 + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[y].red; + g = (A_long)infoP->scanline[y].green; + b = (A_long)infoP->scanline[y].blue; + cnt = 1; + //まず上 + for ( A_long i=1; i<=v;i++){ + A_long yy = y-i; + if (yy<0) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は下 + for ( A_long i=1; i<=v;i++){ + A_long yy = y+i; + if (yy>=infoP->h) break; + p = infoP->scanline[yy]; + if (p.alpha != PF_MAX_CHAN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN8; + infoP->data[now] = p; + } + } + now+= infoP->wt; + } + } + //股横方向 + v = v/2; + if (v<=0) return err; + + now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==PF_MAX_CHAN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN8)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != PF_MAX_CHAN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = PF_MAX_CHAN8; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + return err; + +} +//***************************************************************************** +PF_Err irotoreExec8(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //パラメータを作成 + infoP->data = (PF_Pixel *)ae->out->data(); + infoP->w = ae->out->width(); + infoP->wt = ae->out->widthTrue(); + infoP->wt2 = ae->out->widthTrue() *2; + infoP->h = ae->out->height(); + infoP->offset = ae->out->offsetWidth(); + + //主線を抽出 + ERR(ae->iterate8((refconType)infoP,targetSelect)); + + //主線のピクセル数を数える + infoP->targetCount = targetCount(ae); + //0なら終わる + if (infoP->targetCount<=0) { + if (infoP->lineOnly==TRUE){ + ae->out->clear(); + }else{ + ae->CopyInToOut(); + } + return err; + } + //主線を消す + //メモリの確保。念のため大きめにとる + A_long mm = infoP->wt; + if (mm < infoP->h) mm = infoP->h; + infoP->scanlineH = ae->NewHandle(mm * sizeof(PF_Pixel) * 4);// 3Line分 と余裕 + if ( !infoP->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + infoP->scanline = *(PF_Pixel8**)infoP->scanlineH; ; + + //主線部分がなくなるまで繰り返す。 + while(infoP->targetCount>0) + { + A_long bk = infoP->targetCount; + targetRemove(ae,infoP); + //塗りつぶせなかったら斜め方向検出 + if (infoP->targetCount == bk) { + targetRemove2nd(ae,infoP); + if (infoP->targetCount == bk) { + //諦める + targetRemoveMax(ae,infoP); + } + } + } + //主線抜き出しやり直し + PF_Boolean loFlag = TRUE; + if ( (infoP->blur>0) + ||(infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0) + ||(infoP->minmax1!=0)||(infoP->minmax2!=0) + ) + { + ERR(ae->iterate8((refconType)infoP,targetLineOnly)); + loFlag = FALSE; + } + if (infoP->minmax1!=0){ + targetMinMax(ae,infoP,infoP->minmax1); + } + if (infoP->minmax2!=0){ + targetMinMax(ae,infoP,infoP->minmax2); + } + + //ブラーの処理 + if (infoP->blur>0) + { + targetBlur(ae,infoP); + } + //色変え + if ( (infoP->hue!=0)||(infoP->sat!=0)||(infoP->light!=0)||(infoP->red!=0)||(infoP->green!=0)||(infoP->blue!=0)) + { + ERR(ae->iterate8((refconType)infoP,targetColor)); + } + + //主線部分を抜き出す + if (infoP->lineOnly){ + if (loFlag==TRUE){ + ERR(ae->iterate8((refconType)infoP,targetLineOnly)); + } + }else{ + ERR(ae->iterate8((refconType)infoP,targetAlphaRedo)); + } + + //メモリの開放 + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + return err; +} diff --git a/IroTore/Win/IroTore.sln b/IroTore/Win/IroTore.sln new file mode 100644 index 0000000..4487d88 --- /dev/null +++ b/IroTore/Win/IroTore.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 14 for Windows Desktop +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IroTore", "IroTore.vcxproj", "{E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Win32.ActiveCfg = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|Win32.Build.0 = Debug|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|x64.ActiveCfg = Debug|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Debug|x64.Build.0 = Debug|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Win32.ActiveCfg = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|Win32.Build.0 = Release|Win32 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|x64.ActiveCfg = Release|x64 + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/IroTore/Win/IroTore.vcxproj b/IroTore/Win/IroTore.vcxproj new file mode 100644 index 0000000..9d0e2d9 --- /dev/null +++ b/IroTore/Win/IroTore.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {E3EA288E-34E1-44C1-BE43-BB2F4F1F8344} + IroTore + IroTore + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroTore.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroTore.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroTore.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroTore.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroTore.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroTore.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/IroTore/Win/IroTore.vcxproj.filters b/IroTore/Win/IroTore.vcxproj.filters new file mode 100644 index 0000000..5b768aa --- /dev/null +++ b/IroTore/Win/IroTore.vcxproj.filters @@ -0,0 +1,189 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/IroTore/Win/IroTorePiPL.rc b/IroTore/Win/IroTorePiPL.rc new file mode 100644 index 0000000..44d07ba --- /dev/null +++ b/IroTore/Win/IroTorePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 12, 0x0, + "\x0BF's IroTore", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 1097L, + + "MIB8", + "ANMe", + 0, 0x0, + 12, 0x0, + "\x0BF's IroTore", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/IroToreAdjacent/Fs_Entry.h b/IroToreAdjacent/Fs_Entry.h new file mode 100644 index 0000000..7c54117 --- /dev/null +++ b/IroToreAdjacent/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + IroToreAdjacent for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/IroToreAdjacent/Fs_Target.h b/IroToreAdjacent/Fs_Target.h new file mode 100644 index 0000000..3df2f90 --- /dev/null +++ b/IroToreAdjacent/Fs_Target.h @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's IroToreAdjacent" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "指定した色に隣接した主線を無理やり色トレスにします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +//#define FS_OUT_FLAGS2 5193 +#define FS_OUT_FLAGS2 1097 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/IroToreAdjacent/IroToreAdjacent.cpp b/IroToreAdjacent/IroToreAdjacent.cpp new file mode 100644 index 0000000..8e33c2f --- /dev/null +++ b/IroToreAdjacent/IroToreAdjacent.cpp @@ -0,0 +1,539 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "IroToreAdjacent.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_LINE_ONLY, + STR_ON, + FALSE, + 0, + ID_LINE_ONLY + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NEW_COLOR, + 0x80, + 0x00, + 0x00, + ID_NEW_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 6, //デフォルトの値 + ID_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_MINMAX, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -10, //スライダーの最小値 + 10, //スライダーの最大値 + -2, //デフォルトの値 + ID_LINE_MINMAX + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_BLUR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 50, //数値入力する場合の最大値 + 00, //スライダーの最小値 + 10, //スライダーの最大値 + 10, //デフォルトの値 + ID_LINE_BLUR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_MN_COLOR1_ON, + STR_ON, + TRUE, + 0, + ID_MN_COLOR1_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_MN_COLOR1, + 0x0F, + 0x0F, + 0x0F, + ID_MN_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_MN_COLOR2_ON, + STR_ON, + TRUE, + 0, + ID_MN_COLOR2_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_MN_COLOR2, + 0x0A, + 0x0A, + 0x0A, + ID_MN_COLOR2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 10, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LEVEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR1_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR1_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR1, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR2_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR2_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR2, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR3_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR3_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR3, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR4_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR4_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR4, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR5_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR5_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR5, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AD_COLOR6_ON, + STR_ON, + FALSE, + 0, + ID_AD_COLOR6_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_AD_COLOR6, + 0xFF, + 0x00, + 0x00, + ID_AD_COLOR6 + ); + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Boolean FindMnColor(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + if (infoP->mnColorMax >0 ) { + for ( int i=0; imnColorMax; i++){ + if ( + (p.blue == infoP->mnColor[i].blue) + &&(p.green == infoP->mnColor[i].green) + &&(p.red == infoP->mnColor[i].red)){ + + ret = TRUE; + break; + } + + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Boolean FindAdColor(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + if (infoP->adColorMax >0 ) { + for ( int i=0; iadColorMax; i++){ + if ( + (p.blue == infoP->adColor[i].blue) + &&(p.green == infoP->adColor[i].green) + &&(p.red == infoP->adColor[i].red)){ + + ret = TRUE; + break; + } + + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + + + ERR(ae->GetCHECKBOX(ID_LINE_ONLY,&infoP->lineOnly)); + + ERR(ae->GetCOLOR(ID_NEW_COLOR,&infoP->newColor)); + infoP->newColor.alpha = TARGET_NEW8; + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + ERR(ae->GetADD(ID_LINE_MINMAX,&infoP->minmax)); + ERR(ae->GetADD(ID_LINE_BLUR,&infoP->blur)); + + + PF_Boolean on = FALSE; + int idx = 0; + PF_Pixel p = {0,0,0,0}; + infoP->mnColorMax = 0; + ERR(ae->GetCHECKBOX(ID_MN_COLOR1_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_MN_COLOR1,&p)); + infoP->mnColor[idx] = p; + idx++; + } + ERR(ae->GetCHECKBOX(ID_MN_COLOR2_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_MN_COLOR2,&p)); + if ( FindMnColor(infoP,p) == FALSE) { + infoP->mnColor[idx] = p; + idx++; + } + } + infoP->mnColorMax = idx; + + double lv = 0; + ERR(ae->GetFLOAT(ID_LEVEL,&lv)); + infoP->level = (A_long)((double)PF_MAX_CHAN8 * lv / 100.0 + 0.5); + + idx = 0; + infoP->adColorMax = 0; + + ERR(ae->GetCHECKBOX(ID_AD_COLOR1_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR1,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_AD_COLOR2_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR2,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + ERR(ae->GetCHECKBOX(ID_AD_COLOR3_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR3,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + if ( FindAdColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + } + ERR(ae->GetCHECKBOX(ID_AD_COLOR4_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR4,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + if ( FindAdColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + } + ERR(ae->GetCHECKBOX(ID_AD_COLOR5_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR5,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + if ( FindAdColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + } + ERR(ae->GetCHECKBOX(ID_AD_COLOR6_ON,&on)); + if (on==TRUE) { + ERR(ae->GetCOLOR(ID_AD_COLOR6,&p)); + if ( FindMnColor(infoP,p)==FALSE) { + if ( FindAdColor(infoP,p)==FALSE) { + infoP->adColor[idx] = p; + idx++; + } + } + } + infoP->adColorMax = idx; + return err; +} +//########################################################################### + +static ParamInfo16 + infoTo16 (ParamInfo *infoP) +{ + ParamInfo16 ret; + ret.lineOnly = infoP->lineOnly; + ret.newColor = CONV8TO16(infoP->newColor); + ret.newColor.alpha = TARGET_NEW16; + + ret.mnColorMax = infoP->mnColorMax; + if (infoP->mnColorMax>0){ + for (int i=0;imnColorMax;i++){ + ret.mnColor[i] = infoP->mnColor[i]; + } + } + ret.adColorMax = infoP->adColorMax; + if (infoP->adColorMax>0){ + for (int i=0;iadColorMax;i++){ + ret.adColor[i] = infoP->adColor[i]; + } + } + + + ret.value = infoP->value; + ret.level = infoP->level; + ret.minmax = infoP->minmax; + ret.blur = infoP->blur; + ret.mnColor16 = CONV8TO16(infoP->mnColor[0]); + ret.mnColor16.alpha = TARGET_MAIN8; + return ret; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if ((infoP->mnColorMax<=0)||(infoP->adColorMax<=0)||(infoP->value<=0)) + { + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + //ParamInfo32 info32; + + //info32 = infoTo32(infoP); + //ERR(irotoreExec32(ae,&info32)); + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + + info16 = infoTo16(infoP); + ERR(irotoreExec16(ae,&info16)); + break; + case PF_PixelFormat_ARGB32: + ERR(irotoreExec8(ae,infoP)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/IroToreAdjacent/IroToreAdjacent.h b/IroToreAdjacent/IroToreAdjacent.h new file mode 100644 index 0000000..ad0634c --- /dev/null +++ b/IroToreAdjacent/IroToreAdjacent.h @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------------- +/* + IroToreAdjacent for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef IroToreAdjacent_H +#define IroToreAdjacent_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsDebug.h" +#include "../FsLibrary/FsHLS.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + //境界線のみ + ID_LINE_ONLY, + + //変更後の色 + ID_NEW_COLOR, + + //幅 + ID_VALUE, + + //主線部分最大最小 + ID_LINE_MINMAX, + + //主線部分のぼかし + ID_LINE_BLUR, + + //主線の色 + ID_MN_COLOR1_ON, + ID_MN_COLOR1, + ID_MN_COLOR2_ON, + ID_MN_COLOR2, + + //主線検出レベル + ID_LEVEL, + + //隣接色 + ID_AD_COLOR1_ON, + ID_AD_COLOR1, + ID_AD_COLOR2_ON, + ID_AD_COLOR2, + ID_AD_COLOR3_ON, + ID_AD_COLOR3, + ID_AD_COLOR4_ON, + ID_AD_COLOR4, + ID_AD_COLOR5_ON, + ID_AD_COLOR5, + ID_AD_COLOR6_ON, + ID_AD_COLOR6, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_LINE_ONLY "LineOnly" + +#define STR_NEW_COLOR "NewColor" + +#define STR_VALUE "Value" + +#define STR_LINE_MINMAX "Min/Max" + +#define STR_LINE_BLUR "Blur" + + +#define STR_ON "on" +#define STR_MN_COLOR1_ON "EnabledMain1" +#define STR_MN_COLOR2_ON "EnabledMain2" + +#define STR_MN_COLOR1 "MainColor1" +#define STR_MN_COLOR2 "MainColor2" + +#define STR_AD_COLOR1_ON "EnabledAdjacent1" +#define STR_AD_COLOR2_ON "EnabledAdjacent2" +#define STR_AD_COLOR3_ON "EnabledAdjacent3" +#define STR_AD_COLOR4_ON "EnabledAdjacent4" +#define STR_AD_COLOR5_ON "EnabledAdjacent5" +#define STR_AD_COLOR6_ON "EnabledAdjacent6" + +#define STR_AD_COLOR1 "AdjacentColor1" +#define STR_AD_COLOR2 "AdjacentColor2" +#define STR_AD_COLOR3 "AdjacentColor3" +#define STR_AD_COLOR4 "AdjacentColor4" +#define STR_AD_COLOR5 "AdjacentColor5" +#define STR_AD_COLOR6 "AdjacentColor6" + +#define STR_LEVEL "level" + + +#define TARGET_MAIN8 255 +#define TARGET_ADJ8 128 +#define TARGET_NEW8 64 + +#define TARGET_MAIN16 32768 +#define TARGET_ADJ16 16384 +#define TARGET_NEW16 8192 + + + +#define MN_COLOR_MAX 2 +#define AD_COLOR_MAX 6 +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean lineOnly; + + PF_Pixel newColor; + + + A_long mnColorMax; + PF_Pixel mnColor[MN_COLOR_MAX]; + A_long adColorMax; + PF_Pixel adColor[AD_COLOR_MAX]; + A_long level; + + A_long value; + A_long minmax; + A_long blur; + + PF_Handle scanlineH; + PF_Pixel *scanline; + PF_Pixel *data; + A_long targetCount; + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + A_long nowX; + A_long nowY; + +} ParamInfo; +typedef struct ParamInfo16 { + PF_Boolean lineOnly; + + PF_Pixel16 newColor; + + + A_long mnColorMax; + PF_Pixel mnColor[MN_COLOR_MAX]; + A_long adColorMax; + PF_Pixel adColor[AD_COLOR_MAX]; + A_long level; + + PF_Pixel16 mnColor16; + + A_long value; + A_long minmax; + A_long blur; + + PF_Handle scanlineH; + PF_Pixel16 *scanline; + PF_Pixel16 *data; + A_long targetCount; + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + A_long nowX; + A_long nowY; + +} ParamInfo16; +//------------------------------------------------------- +//--------------------------------------------------------------------xFF-------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + + +PF_Err irotoreExec8(CFsAE *ae , ParamInfo *infoP); +PF_Err irotoreExec16(CFsAE *ae , ParamInfo16 *infoP); +#endif // IroToreAdjacent_H diff --git a/IroToreAdjacent/IroToreAdjacentPiPL.r b/IroToreAdjacent/IroToreAdjacentPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/IroToreAdjacent/IroToreAdjacentPiPL.r @@ -0,0 +1,79 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/IroToreAdjacent/IroToreAdjacentSub16.cpp b/IroToreAdjacent/IroToreAdjacentSub16.cpp new file mode 100644 index 0000000..7fd5af0 --- /dev/null +++ b/IroToreAdjacent/IroToreAdjacentSub16.cpp @@ -0,0 +1,636 @@ +#include "IroToreAdjacent.h" + +/* +コピー +まず主線部分の抽出検出はinDataで alpha Maxが主線としてコピー + +主線を消す。 + +残ったら適当な色で塗る + + +色変え・線のみがOFFなら終了 + +まず主線部分の抽出 をもう一回やる + +色変えがOFFなら終了 + +色変え + +ブラーがONならブラー + +線のみがONなら終了 + +アルファーを元の状態へ修正 + +終了 + +*/ +//################################################################################ +inline void scanlineCopyH(ParamInfo16 *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = y * infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i + v]; + } +} +//################################################################################ +inline void scanlineCopyV(ParamInfo16 *infoP, A_long x) +{ + //スキャンラインへコピー + A_long v = x; + for ( int i=0; ih; i++ ){ + infoP->scanline[i ] = infoP->data[v]; + v += infoP->wt; + } +} +//################################################################################ +inline PF_Boolean isMain(ParamInfo16 *infoP, PF_Pixel16 p) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp = CONV16TO8(p); + for (A_long i=0; imnColorMax; i++){ + if ( ( F_ABS((A_long)infoP->mnColor[i].red - (A_long)pp.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->mnColor[i].green - (A_long)pp.green) <= infoP->level) + &&( F_ABS((A_long)infoP->mnColor[i].blue - (A_long)pp.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +inline PF_Boolean isAdj(ParamInfo16 *infoP, PF_Pixel16 p) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp = CONV16TO8(p); + for (A_long i=0; iadColorMax; i++){ + if ( ( F_ABS((A_long)infoP->adColor[i].red - (A_long)pp.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->adColor[i].green - (A_long)pp.green) <= infoP->level) + &&( F_ABS((A_long)infoP->adColor[i].blue - (A_long)pp.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +static PF_Err +targetSelect ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (isMain(niP,*inP)==TRUE){ + outP->alpha = TARGET_MAIN16; + + }else if (isAdj(niP,*inP)==TRUE){ + outP->alpha = TARGET_ADJ16; + }else{ + outP->alpha = 0; + } + + + return err; +} +//################################################################################ +static PF_Err +targetAlphaRedo ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + //ParamInfo * niP = reinterpret_cast(refcon); + + outP->alpha = inP->alpha; + + return err; +} +//################################################################################ +static PF_Err +targetLineOnly ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * niP = reinterpret_cast(refcon); + + if (isMain(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN16; + }else{ + outP->alpha = 0; + } + + return err; +} +//################################################################################ +//minMax +static PF_Err + targetMax (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + if (infoP->minmax==0) return err; + + A_long value2 = F_ABS(infoP->minmax); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_MAIN16) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_NEW16) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN16){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_NEW16) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN16){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->newColor; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_MAIN16) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_NEW16) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN16){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_NEW16) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN16){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->newColor; + } + + + } + now+= infoP->wt; + } + } + return err; + +} +//################################################################################ +//minMax +static PF_Err + targetMin (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + if (infoP->minmax==0) return err; + + A_long value2 = F_ABS(infoP->minmax); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_NEW16) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_MAIN16) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW16){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_MAIN16) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW16){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->mnColor16; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_NEW16) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_MAIN16) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW16){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_MAIN16) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW16){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->mnColor16; + } + + + } + now+= infoP->wt; + } + } + return err; + +} + + +//################################################################################ +//上下左右をチェック +static PF_Err + targetRemove (CFsAE *ae,ParamInfo16 *infoP) +{ + + PF_Err err = PF_Err_NONE; + A_long now = 0; + //まず左右 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha == TARGET_MAIN16) + { + PF_Boolean on = FALSE; + A_long a = 0; + if (x>0){ + a = infoP->scanline[x-1].alpha; + if ( ( a == TARGET_ADJ16)||(a==TARGET_NEW16)){ + on =TRUE; + } + } + if (on==FALSE) { + if (xw-1){ + a = infoP->scanline[x+1].alpha; + if ( ( a == TARGET_ADJ16)||(a==TARGET_NEW16)){ + on =TRUE; + } + } + } + if (on==TRUE){ + infoP->data[now] = infoP->newColor; + } + } + now++; + } + now += infoP->offset; + } + //次は上下 + for ( A_long x=0; xw;x++){ + now = x; + scanlineCopyV(infoP,x); + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha == TARGET_MAIN16) + { + PF_Boolean on = FALSE; + A_long a = 0; + if (y>0){ + a = infoP->scanline[y-1].alpha; + if ( ( a == TARGET_ADJ16)||(a==TARGET_NEW16)){ + on =TRUE; + } + } + if (on==FALSE) { + if (yh-1){ + a = infoP->scanline[y+1].alpha; + if ( ( a == TARGET_ADJ16)||(a==TARGET_NEW16)){ + on =TRUE; + } + } + } + if (on==TRUE){ + infoP->data[now] = infoP->newColor; + } + } + now += infoP->wt; + } + } + return err; + +} +//################################################################################ +//################################################################################ +//主線だけぼかす +static PF_Err + targetBlur (CFsAE *ae,ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long v = infoP->blur; + if (v<=0) return err; + PF_Pixel16 p; + + A_long now = 0; + //まず横方向 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==TARGET_MAIN16) { + A_u_long r = 0; + A_u_long g = 0; + A_u_long b = 0; + A_u_long cnt =0; + //中央 + r = (A_u_long)infoP->scanline[x].red; + g = (A_u_long)infoP->scanline[x].green; + b = (A_u_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN16)break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN16) break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN16; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + //次は縦方向 + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha ==TARGET_MAIN16) { + A_u_long r = 0; + A_u_long g = 0; + A_u_long b = 0; + A_u_long cnt =0; + //中央 + r = (A_u_long)infoP->scanline[y].red; + g = (A_u_long)infoP->scanline[y].green; + b = (A_u_long)infoP->scanline[y].blue; + cnt = 1; + //まず上 + for ( A_long i=1; i<=v;i++){ + A_long yy = y-i; + if (yy<0) break; + p = infoP->scanline[yy]; + if (p.alpha != TARGET_MAIN16) break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + //次は下 + for ( A_long i=1; i<=v;i++){ + A_long yy = y+i; + if (yy>=infoP->h) break; + p = infoP->scanline[yy]; + if (p.alpha != TARGET_MAIN16) break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN16; + infoP->data[now] = p; + } + } + now+= infoP->wt; + } + } + //股横方向 + v = v/2; + if (v<=0) return err; + + now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==TARGET_MAIN16) { + A_u_long r = 0; + A_u_long g = 0; + A_u_long b = 0; + A_u_long cnt =0; + //中央 + r = (A_u_long)infoP->scanline[x].red; + g = (A_u_long)infoP->scanline[x].green; + b = (A_u_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN16)break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN16) break; + r += (A_u_long)p.red; + g += (A_u_long)p.green; + b += (A_u_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundShortFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundShortFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundShortFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN16; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + return err; +} +//***************************************************************************** +PF_Err irotoreExec16(CFsAE *ae , ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + if (infoP->value<=0) return err; + + //パラメータを作成 + infoP->data = (PF_Pixel16 *)ae->out->data(); + infoP->w = ae->out->width(); + infoP->wt = ae->out->widthTrue(); + infoP->wt2 = ae->out->widthTrue() *2; + infoP->h = ae->out->height(); + infoP->offset = ae->out->offsetWidth(); + + //主線を抽出 + ERR(ae->iterate16((refconType)infoP,targetSelect)); + + //主線を消す + //メモリの確保。念のため大きめにとる + A_long mm = infoP->wt; + if (mm < infoP->h) mm = infoP->h; + infoP->scanlineH = ae->NewHandle(mm * sizeof(PF_Pixel16) * 2);// 1Line分 と余裕 + if ( !infoP->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + infoP->scanline = *(PF_Pixel16**)infoP->scanlineH; ; + + for ( A_long i=0; ivalue; i++){ + targetRemove(ae,infoP); + } + + if (infoP->minmax>0){ + targetMax(ae,infoP); + + }else if (infoP->minmax<0){ + targetMin(ae,infoP); + } + if (infoP->blur>0) + { + ERR(ae->iterate16((refconType)infoP,targetLineOnly)); + targetBlur(ae,infoP); + } + + //主線部分を抜き出す + if (infoP->lineOnly){ + //if (loFlag==TRUE){ + ERR(ae->iterate16((refconType)infoP,targetLineOnly)); + //} + }else{ + ERR(ae->iterate16((refconType)infoP,targetAlphaRedo)); + } + //メモリの開放 + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + return err; +} diff --git a/IroToreAdjacent/IroToreAdjacentSub8.cpp b/IroToreAdjacent/IroToreAdjacentSub8.cpp new file mode 100644 index 0000000..771ae81 --- /dev/null +++ b/IroToreAdjacent/IroToreAdjacentSub8.cpp @@ -0,0 +1,649 @@ +#include "IroToreAdjacent.h" + +/* +コピー +まず主線部分の抽出検出はinDataで alpha Maxが主線としてコピー + +主線を消す。 + +残ったら適当な色で塗る + + +色変え・線のみがOFFなら終了 + +まず主線部分の抽出 をもう一回やる + +色変えがOFFなら終了 + +色変え + +ブラーがONならブラー + +線のみがONなら終了 + +アルファーを元の状態へ修正 + +終了 + +*/ +//################################################################################ +inline void scanlineCopyH(ParamInfo *infoP, A_long y) +{ + //スキャンラインへコピー + A_long v = y * infoP->wt; + for ( int i=0; iw; i++ ){ + infoP->scanline[i ] = infoP->data[i + v]; + } +} +//################################################################################ +inline void scanlineCopyV(ParamInfo *infoP, A_long x) +{ + //スキャンラインへコピー + A_long v = x; + for ( int i=0; ih; i++ ){ + infoP->scanline[i ] = infoP->data[v]; + v += infoP->wt; + } +} +//################################################################################ +inline PF_Boolean isMain(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + for (A_long i=0; imnColorMax; i++){ + if ( ( F_ABS((A_long)infoP->mnColor[i].red - (A_long)p.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->mnColor[i].green - (A_long)p.green) <= infoP->level) + &&( F_ABS((A_long)infoP->mnColor[i].blue - (A_long)p.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +inline PF_Boolean isAdj(ParamInfo *infoP, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + for (A_long i=0; iadColorMax; i++){ + if ( ( F_ABS((A_long)infoP->adColor[i].red - (A_long)p.red ) <= infoP->level) + &&( F_ABS((A_long)infoP->adColor[i].green - (A_long)p.green) <= infoP->level) + &&( F_ABS((A_long)infoP->adColor[i].blue - (A_long)p.blue ) <= infoP->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//################################################################################ +static PF_Err +targetSelect ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (isMain(niP,*inP)==TRUE){ + outP->alpha = TARGET_MAIN8; + + }else if (isAdj(niP,*inP)==TRUE){ + outP->alpha = TARGET_ADJ8; + }else{ + outP->alpha = 0; + } + + + return err; +} +//################################################################################ +static PF_Err +targetAlphaRedo ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + //ParamInfo * niP = reinterpret_cast(refcon); + + outP->alpha = inP->alpha; + + return err; +} +//################################################################################ +static PF_Err +targetLineOnly ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (isMain(niP,*inP)==TRUE){ + outP->alpha = PF_MAX_CHAN8; + }else{ + outP->alpha = 0; + } + + return err; +} +//################################################################################ +//minMax +static PF_Err + targetMax (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + if (infoP->minmax==0) return err; + + A_long value2 = F_ABS(infoP->minmax); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_MAIN8) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_NEW8) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN8){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_NEW8) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN8){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->newColor; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_MAIN8) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_NEW8) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN8){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_NEW8) { + ok = TRUE; + break; + }else if (p!=TARGET_MAIN8){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->newColor; + } + + + } + now+= infoP->wt; + } + } + return err; + +} +//################################################################################ +//minMax +static PF_Err + targetMin (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + if (infoP->minmax==0) return err; + + A_long value2 = F_ABS(infoP->minmax); + + //まず横方向 + A_long now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_NEW8) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long xx = x - i; + if (xx<0) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_MAIN8) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW8){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long xx = x + i; + if (xx>=infoP->w) break; + A_long p = infoP->scanline[xx].alpha; + if (p==TARGET_MAIN8) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW8){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->mnColor[0]; + } + + + } + now++; + } + now += infoP->offset; + } + //まず縦方向 + now = 0; + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + //ターゲットだ + if (infoP->data[now].alpha ==TARGET_NEW8) { + PF_Boolean ok = FALSE; + //左 + for (A_long i =1; i<=value2;i++){ + A_long yy = y - i; + if (yy<0) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_MAIN8) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW8){ + break; + } + + } + if (ok==FALSE){ + //右 + for (A_long i =1; i<=value2;i++){ + A_long yy = y + i; + if (yy>=infoP->h) break; + A_long p = infoP->scanline[yy].alpha; + if (p==TARGET_MAIN8) { + ok = TRUE; + break; + }else if (p!=TARGET_NEW8){ + break; + } + } + } + if (ok) { + infoP->data[now] = infoP->mnColor[0]; + } + + + } + now+= infoP->wt; + } + } + return err; + +} + + +//################################################################################ +//上下左右をチェック +static PF_Err + targetRemove (CFsAE *ae,ParamInfo *infoP) +{ + + PF_Err err = PF_Err_NONE; + A_long now = 0; + //まず左右 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha == TARGET_MAIN8) + { + PF_Boolean on = FALSE; + A_long a = 0; + if (x>0){ + a = infoP->scanline[x-1].alpha; + if ( ( a == TARGET_ADJ8)||(a==TARGET_NEW8)){ + on =TRUE; + } + } + if (on==FALSE) { + if (xw-1){ + a = infoP->scanline[x+1].alpha; + if ( ( a == TARGET_ADJ8)||(a==TARGET_NEW8)){ + on =TRUE; + } + } + } + if (on==TRUE){ + infoP->data[now] = infoP->newColor; + } + } + now++; + } + now += infoP->offset; + } + //次は上下 + for ( A_long x=0; xw;x++){ + now = x; + scanlineCopyV(infoP,x); + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha == TARGET_MAIN8) + { + PF_Boolean on = FALSE; + A_long a = 0; + if (y>0){ + a = infoP->scanline[y-1].alpha; + if ( ( a == TARGET_ADJ8)||(a==TARGET_NEW8)){ + on =TRUE; + } + } + if (on==FALSE) { + if (yh-1){ + a = infoP->scanline[y+1].alpha; + if ( ( a == TARGET_ADJ8)||(a==TARGET_NEW8)){ + on =TRUE; + } + } + } + if (on==TRUE){ + infoP->data[now] = infoP->newColor; + } + } + now += infoP->wt; + } + } + return err; + +} +//################################################################################ +//################################################################################ +//主線だけぼかす +static PF_Err + targetBlur (CFsAE *ae,ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long v = infoP->blur; + if (v<=0) return err; + PF_Pixel p; + + A_long now = 0; + //まず横方向 + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==TARGET_MAIN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN8)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN8; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + //次は縦方向 + for ( A_long x=0; xw;x++){ + scanlineCopyV(infoP,x); + now = x; + for ( A_long y=0; yh;y++){ + if (infoP->data[now].alpha ==TARGET_MAIN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[y].red; + g = (A_long)infoP->scanline[y].green; + b = (A_long)infoP->scanline[y].blue; + cnt = 1; + //まず上 + for ( A_long i=1; i<=v;i++){ + A_long yy = y-i; + if (yy<0) break; + p = infoP->scanline[yy]; + if (p.alpha != TARGET_MAIN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は下 + for ( A_long i=1; i<=v;i++){ + A_long yy = y+i; + if (yy>=infoP->h) break; + p = infoP->scanline[yy]; + if (p.alpha != TARGET_MAIN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN8; + infoP->data[now] = p; + } + } + now+= infoP->wt; + } + } + //股横方向 + v = v/2; + if (v<=0) return err; + + now = 0; + for ( A_long y=0; yh;y++){ + scanlineCopyH(infoP,y); + for ( A_long x=0; xw;x++){ + if (infoP->data[now].alpha ==TARGET_MAIN8) { + A_long r = 0; + A_long g = 0; + A_long b = 0; + A_long cnt =0; + //中央 + r = (A_long)infoP->scanline[x].red; + g = (A_long)infoP->scanline[x].green; + b = (A_long)infoP->scanline[x].blue; + cnt = 1; + //まず右 + for ( A_long i=1; i<=v;i++){ + A_long xx = x-i; + if (xx<0) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN8)break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + //次は左 + for ( A_long i=1; i<=v;i++){ + A_long xx = x+i; + if (xx>=infoP->w) break; + p = infoP->scanline[xx]; + if (p.alpha != TARGET_MAIN8) break; + r += (A_long)p.red; + g += (A_long)p.green; + b += (A_long)p.blue; + cnt++; + } + if (cnt>1){ + p.red = RoundByteFpLong(((double)r / (double)cnt)+0.5); + p.green = RoundByteFpLong(((double)g / (double)cnt)+0.5); + p.blue = RoundByteFpLong(((double)b / (double)cnt)+0.5); + p.alpha = TARGET_MAIN8; + infoP->data[now] = p; + } + } + now++; + } + now += infoP->offset; + } + return err; +} +//***************************************************************************** +PF_Err irotoreExec8(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if (infoP->value<=0) return err; + + //パラメータを作成 + infoP->data = (PF_Pixel *)ae->out->data(); + infoP->w = ae->out->width(); + infoP->wt = ae->out->widthTrue(); + infoP->wt2 = ae->out->widthTrue() *2; + infoP->h = ae->out->height(); + infoP->offset = ae->out->offsetWidth(); + + //主線を抽出 + ERR(ae->iterate8((refconType)infoP,targetSelect)); + + //主線を消す + //メモリの確保。念のため大きめにとる + A_long mm = infoP->wt; + if (mm < infoP->h) mm = infoP->h; + infoP->scanlineH = ae->NewHandle(mm * sizeof(PF_Pixel) * 2);// 1Line分 と余裕 + if ( !infoP->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + infoP->scanline = *(PF_Pixel8**)infoP->scanlineH; ; + + for ( A_long i=0; ivalue; i++){ + targetRemove(ae,infoP); + } + + if (infoP->minmax>0){ + targetMax(ae,infoP); + + }else if (infoP->minmax<0){ + targetMin(ae,infoP); + } + if (infoP->blur>0) + { + ERR(ae->iterate8((refconType)infoP,targetLineOnly)); + targetBlur(ae,infoP); + } + + //主線部分を抜き出す + if (infoP->lineOnly){ + //if (loFlag==TRUE){ + ERR(ae->iterate8((refconType)infoP,targetLineOnly)); + //} + }else{ + ERR(ae->iterate8((refconType)infoP,targetAlphaRedo)); + } + /* + //主線抜き出しやり直し + PF_Boolean loFlag = TRUE; + if ( (infoP->blur>0) + ||(infoP->minmax!=0) + ) + { + loFlag = FALSE; + } + if (infoP->minmax!=0){ + targetMinMax(ae,infoP); + } + + //ブラーの処理 + */ + //メモリの開放 + if (infoP->scanlineH != NULL){ + ae->DisposeHandle(infoP->scanlineH); + infoP->scanlineH = NULL; + } + return err; +} diff --git a/IroToreAdjacent/Win/IroToreAdjacent.sln b/IroToreAdjacent/Win/IroToreAdjacent.sln new file mode 100644 index 0000000..83627a8 --- /dev/null +++ b/IroToreAdjacent/Win/IroToreAdjacent.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 14 for Windows Desktop +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IroToreAdjacent", "IroToreAdjacent.vcxproj", "{A03946F0-46CA-4B50-967F-95B8ADC6402F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Win32.ActiveCfg = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|Win32.Build.0 = Debug|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|x64.ActiveCfg = Debug|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Debug|x64.Build.0 = Debug|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Win32.ActiveCfg = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|Win32.Build.0 = Release|Win32 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|x64.ActiveCfg = Release|x64 + {A03946F0-46CA-4B50-967F-95B8ADC6402F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/IroToreAdjacent/Win/IroToreAdjacent.vcxproj b/IroToreAdjacent/Win/IroToreAdjacent.vcxproj new file mode 100644 index 0000000..3515ff9 --- /dev/null +++ b/IroToreAdjacent/Win/IroToreAdjacent.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {A03946F0-46CA-4B50-967F-95B8ADC6402F} + IroToreAdjacent + IroToreAdjacent + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroToreAdjacent.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroToreAdjacent.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroToreAdjacent.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/IroToreAdjacent.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroToreAdjacent.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/IroToreAdjacent.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/IroToreAdjacent/Win/IroToreAdjacent.vcxproj.filters b/IroToreAdjacent/Win/IroToreAdjacent.vcxproj.filters new file mode 100644 index 0000000..e89fdbf --- /dev/null +++ b/IroToreAdjacent/Win/IroToreAdjacent.vcxproj.filters @@ -0,0 +1,189 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + Header Files\Fs + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/IroToreAdjacent/Win/IroToreAdjacentPiPL.rc b/IroToreAdjacent/Win/IroToreAdjacentPiPL.rc new file mode 100644 index 0000000..6e17289 --- /dev/null +++ b/IroToreAdjacent/Win/IroToreAdjacentPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x13F's IroToreAdjacent", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 1097L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x13F's IroToreAdjacent", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/LineDetection/Fs_Entry.h b/LineDetection/Fs_Entry.h new file mode 100644 index 0000000..fe53faa --- /dev/null +++ b/LineDetection/Fs_Entry.h @@ -0,0 +1,200 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/LineDetection/Fs_Target.h b/LineDetection/Fs_Target.h new file mode 100644 index 0000000..6000d65 --- /dev/null +++ b/LineDetection/Fs_Target.h @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef FS_TARGET_H +#define FS_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's LineDetection" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "輪郭線検出" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/LineDetection/LineDetect16.cpp b/LineDetection/LineDetect16.cpp new file mode 100644 index 0000000..084e04e --- /dev/null +++ b/LineDetection/LineDetect16.cpp @@ -0,0 +1,267 @@ +#include "LineDetection.h" + +//------------------------------------------------------------------------------- +//RGBの最大値とアルファーの値を適当に8Bitに割り振る +inline A_u_short rgbMax16(PF_Pixel16 c) +{ + A_u_short m0,m1; + if ( c.alpha ==0 ) return 0; + + m0 = MAX( MAX(c.red,c.green),c.blue); + m1 = MIN( MIN(c.red,c.green),c.blue); + + A_long mp = (m0+m1) >> 1; + mp = mp * c.alpha / PF_MAX_CHAN16; + if (mp<0) { mp = 0; } + else if(mp>PF_MAX_CHAN16) { mp = PF_MAX_CHAN16; } + return (A_u_short)mp; + +} +//------------------------------------------------------------------------------- +inline A_u_short pixDelta16(PointPrm *pp) +{ + PF_Pixel16 *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + A_long h1 = pp->height -1; + oD = (PF_Pixel16 *)pp->data; + A_u_short pv = rgbMax16(oD[pp->adr]); + A_u_short v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_Pixel16 p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if (xadr +1 ]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if ( (yadr +wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(rgbMax16(p)-pv,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +inline A_u_short pixDeltaAlpha16(PointPrm *pp) +{ + PF_Pixel16 *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + A_long h1 = pp->height -1; + oD = (PF_Pixel16 *)pp->data; + A_u_short pv = oD[pp->adr].alpha; + A_u_short v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_Pixel16 p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if (xadr +1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (yadr +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +void FindTargetDelta16(CFsAE *ae,ParamInfo *prm) +{ + PF_Pixel16 *iD; + PF_Pixel16 *oD; + iD = (PF_Pixel16 *)ae->in->data(); + oD = (PF_Pixel16 *)ae->out->data(); + A_long w = ae->in->width(); + A_long h = ae->in->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + + //long targetIn =0; + A_long targetOut =0; + A_long i,j; + + PointPrm pp; + pp.data = ae->in->data(); + pp.height = ae->in->height(); + pp.width = ae->in->width(); + pp.widthOffset = ae->in->offsetWidth(); + pp.widthTrue = ae->in->widthTrue(); + PF_Pixel16 c; + c = CONV8TO16(prm->line_color); + c.alpha = PF_MAX_CHAN16; + PF_Fixed lv_d = prm->delta_opacity >> 4; + PF_Fixed lv_a = prm->alpha_opacity >> 4; + //まず、ターゲットの場所を得る。 + //redへフラグを建てる + pp.adr =0; + if ( (prm->delta_flg==TRUE)&&(prm->alpha_flg==TRUE)){ + for (j=0;j>12; + long p1 = pixDeltaAlpha16(&pp) * lv_a >>12; + c.alpha= RoundShort(p0 + p1 - (p0 * p1 >>15)); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + }else if (prm->delta_flg==TRUE) { + for (j=0;j>12); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + }else if (prm->alpha_flg==TRUE) { + for (j=0;j>12); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + } +} + +//------------------------------------------------------------------------------- +inline PF_Boolean cmparePix16(PF_Pixel16 s,PF_Pixel16 d,A_long rng) +{ + if (s.alpha !=PF_MAX_CHAN16) return FALSE; + if (rng>0){ + A_long r = ABS(s.red - d.red); + A_long g = ABS(s.green - d.green); + A_long b = ABS(s.blue - d.blue); + return ( (r<=rng)&&(g<=rng)&&(b<=rng) ); + }else{ + return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue) ); + } +} +//------------------------------------------------------------------------------- +inline PF_Boolean cmpareTable16(PF_Pixel16 s,PF_Pixel16 *color_tbl, A_long *level_tbl,A_long cnt) +{ + if (cnt<=0) return FALSE; + long i; + for(i=0; iin->data(); + oD = (PF_Pixel16 *)ae->out->data(); + A_long w = ae->in->width(); + A_long h = ae->in->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + //long iwt = aprm->inWidth; + //long owt = aprm->outWidth; + + A_long targetIn =0; + A_long targetOut =0; + A_long i,j; + PF_Pixel16 color_tbl[COLOR_COUNT]; + A_long level_tbl[COLOR_COUNT]; + A_long count = prm->tbl_count; + if (count<=0) return; + + PF_Pixel16 c; + for (i=0;icolor_tbl[i]); + c.alpha = PF_MAX_CHAN16; + color_tbl[i] = c; + level_tbl[i] = PF_MAX_CHAN16 * prm->level_tbl[i] >> 16; + } + long lv = PF_MAX_CHAN16 * prm->color_opacity >> 16; + + //まず、ターゲットの場所を得る。 + for (j=0;j>16)); + + } + targetIn++; + targetOut++; + } + targetIn += iw; + targetOut += ow; + } +} +*/ +//------------------------------------------------------------------------------- diff --git a/LineDetection/LineDetect32.cpp b/LineDetection/LineDetect32.cpp new file mode 100644 index 0000000..909ba13 --- /dev/null +++ b/LineDetection/LineDetect32.cpp @@ -0,0 +1,265 @@ +#include "LineDetection.h" + +//------------------------------------------------------------------------------- +//RGBの最大値とアルファーの値を適当に8Bitに割り振る +inline PF_FpShort rgbMax32(PF_PixelFloat c) +{ + PF_FpShort m0,m1; + if ( c.alpha ==0 ) return 0; + + m0 = MAX( MAX(c.red,c.green),c.blue); + m1 = MIN( MIN(c.red,c.green),c.blue); + + PF_FpShort mp = (m0+m1) / 2; + mp = mp * c.alpha; + if (mp<0) { mp = 0; } + return (PF_FpShort)mp; +} +//------------------------------------------------------------------------------- +inline PF_FpShort pixDelta32(PointPrm *pp) +{ + PF_Pixel32 *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + A_long h1 = pp->height -1; + oD = (PF_Pixel32 *)pp->data; + PF_FpShort pv = rgbMax32(oD[pp->adr]); + PF_FpShort v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_PixelFloat p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if (xadr +1 ]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if ( (yadr +wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(rgbMax32(p)-pv,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +inline PF_FpShort pixDeltaAlpha32(PointPrm *pp) +{ + PF_Pixel32 *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + A_long h1 = pp->height -1; + oD = (PF_Pixel32 *)pp->data; + PF_FpShort pv = oD[pp->adr].alpha; + PF_FpShort v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_Pixel32 p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if (xadr +1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (yadr +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +void FindTargetDelta32(CFsAE *ae,ParamInfo *prm) +{ + PF_Pixel32 *iD; + PF_Pixel32 *oD; + iD = (PF_Pixel32 *)ae->in->data(); + oD = (PF_Pixel32 *)ae->out->data(); + A_long w = ae->in->width(); + A_long h = ae->in->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + + //long targetIn =0; + A_long targetOut =0; + A_long i,j; + + PointPrm pp; + pp.data = ae->in->data(); + pp.height = ae->in->height(); + pp.width = ae->in->width(); + pp.widthOffset = ae->in->offsetWidth(); + pp.widthTrue = ae->in->widthTrue(); + PF_Pixel32 c; + c = CONV8TO32(prm->line_color); + c.alpha = PF_MAX_CHAN16; + PF_FpShort lv_d = (PF_FpShort)prm->delta_opacity /65536; + PF_FpShort lv_a = (PF_FpShort)prm->alpha_opacity /65536; + //まず、ターゲットの場所を得る。 + //redへフラグを建てる + pp.adr =0; + if ( (prm->delta_flg==TRUE)&&(prm->alpha_flg==TRUE)){ + for (j=0;jdelta_flg==TRUE) { + for (j=0;jalpha_flg==TRUE) { + for (j=0;j0){ + PF_FpShort r = ABS(s.red - d.red); + PF_FpShort g = ABS(s.green - d.green); + PF_FpShort b = ABS(s.blue - d.blue); + return ( (r<=rng)&&(g<=rng)&&(b<=rng) ); + }else{ + return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue) ); + } +} +//------------------------------------------------------------------------------- +inline PF_Boolean cmpareTable32(PF_Pixel32 s,PF_Pixel32 *color_tbl, PF_FpShort *level_tbl,A_long cnt) +{ + if (cnt<=0) return FALSE; + A_long i; + for(i=0; iin->data(); + oD = (PF_Pixel32 *)ae->out->data(); + A_long w = ae->in->width(); + A_long h = ae->in->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + //long iwt = aprm->inWidth; + //long owt = aprm->outWidth; + + A_long targetIn =0; + A_long targetOut =0; + A_long i,j; + PF_Pixel32 color_tbl[COLOR_COUNT]; + PF_FpShort level_tbl[COLOR_COUNT]; + A_long count = prm->tbl_count; + if (count<=0) return; + + PF_Pixel32 c; + for (i=0;icolor_tbl[i]); + c.alpha = 1; + color_tbl[i] = c; + level_tbl[i] = (PF_FpShort)prm->level_tbl[i]/65536; + } + PF_FpShort lv = (PF_FpShort)prm->color_opacity/65536; + + //まず、ターゲットの場所を得る。 + for (j=0;j> 9; + +} +//------------------------------------------------------------------------------- +inline A_u_char pixDelta8(PointPrm *pp) +{ + PF_Pixel *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + A_long h1 = pp->height -1; + oD = pp->data; + A_u_char pv = rgbMax8(oD[pp->adr]); + A_u_char v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_Pixel p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if (xadr +1 ]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if ( (yadr +wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(rgbMax8(p)-pv,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +inline A_u_char pixDeltaAlpha8(PointPrm *pp) +{ + PF_Pixel *oD; + A_long wt = pp->widthTrue; + //long w = pp->width; + A_long w1 = pp->width -1; + long h1 = pp->height -1; + oD = pp->data; + A_u_char pv = oD[pp->adr].alpha; + A_u_char v1 = 0; + + A_long x = pp->x; + A_long y = pp->y; + PF_Pixel p; + if ( (x>0)&&(y>0) ){ + p = oD[pp->adr -1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (y>0){ + p = oD[pp->adr -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x0) ){ + p = oD[pp->adr +1 -wt]; + v1 = MAX(pv - p.alpha,v1); + } + if (x>0){ + p = oD[pp->adr -1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if (xadr +1 ]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (x>0)&&(yadr -1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (yadr +wt]; + v1 = MAX(pv - p.alpha,v1); + } + if ( (xadr +1 +wt]; + v1 = MAX(pv - p.alpha,v1); + } + + return v1; +} +//------------------------------------------------------------------------------- +void FindTargetDelta8(CFsAE *ae,ParamInfo *prm) +{ + PF_Pixel *iD; + PF_Pixel *oD; + iD = (PF_Pixel *)ae->in->data(); + oD = (PF_Pixel *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + + A_long targetOut =0; + A_long i,j; + + PointPrm pp; + pp.data = ae->in->data(); + pp.height = ae->in->height(); + pp.width = ae->in->width(); + pp.widthOffset = ae->in->offsetWidth(); + pp.widthTrue = ae->in->widthTrue(); + PF_Pixel c = prm->line_color; + PF_Fixed lv_d = prm->delta_opacity; + PF_Fixed lv_a = prm->alpha_opacity; + //まず、ターゲットの場所を得る。 + //redへフラグを建てる + pp.adr =0; + if ( (prm->delta_flg==TRUE)&&(prm->alpha_flg==TRUE)){ + for (j=0;j>16; + long p1 = pixDeltaAlpha8(&pp) * lv_a >>16; + c.alpha= RoundByteLong(p0 + p1 - (p0 * p1 >>8)); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + }else if (prm->delta_flg==TRUE) { + for (j=0;j>16); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + }else if (prm->alpha_flg==TRUE) { + for (j=0;j>16); + oD[targetOut] = c; + pp.adr++; + targetOut++; + } + pp.adr += iw; + targetOut += ow; + } + } +} + +//------------------------------------------------------------------------------- +inline PF_Boolean cmparePix8(PF_Pixel s,PF_Pixel d,A_long rng) +{ + if (s.alpha !=PF_MAX_CHAN8) return FALSE; + if (rng>0){ + long r = ABS(s.red - d.red); + long g = ABS(s.green - d.green); + long b = ABS(s.blue - d.blue); + return ( (r<=rng)&&(g<=rng)&&(b<=rng) ); + }else{ + return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue) ); + } +} +//------------------------------------------------------------------------------- +inline PF_Boolean cmpareTable8(PF_Pixel s,PF_Pixel *color_tbl, A_long *level_tbl,A_long cnt) +{ + if (cnt<=0) return FALSE; + long i; + for(i=0; iin->data(); + oD = (PF_Pixel *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long iw = ae->in->offsetWidth(); + A_long ow = ae->out->offsetWidth(); + + A_long targetIn =0; + A_long targetOut =0; + A_long i,j; + PF_Pixel color_tbl[COLOR_COUNT]; + A_long level_tbl[COLOR_COUNT]; + A_long count = prm->tbl_count; + if (count<=0) return; + for (i=0;icolor_tbl[i]; + level_tbl[i] = PF_MAX_CHAN8 * prm->level_tbl[i] >> 16; + } + A_long lv = PF_MAX_CHAN8 * prm->color_opacity >> 16; + + //まず、ターゲットの場所を得る。 + for (j=0;j>8)); + + } + targetIn++; + targetOut++; + } + targetIn += iw; + targetOut += ow; + } +} +//------------------------------------------------------------------------------- +*/ \ No newline at end of file diff --git a/LineDetection/LineDetection.cpp b/LineDetection/LineDetection.cpp new file mode 100644 index 0000000..836850a --- /dev/null +++ b/LineDetection/LineDetection.cpp @@ -0,0 +1,550 @@ + +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "LineDetection.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_DELTA_CB, + STR_CB, + TRUE, + 0, + ID_DELTA_CB + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_DELTA_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 300, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_DELTA_OPACITY + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ALPHA_CB, + STR_CB, + FALSE, + 0, + ID_ALPHA_CB + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_ALPHA_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 300, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_ALPHA_OPACITY + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_LINE_COLOR, + 0x0, + 0x0, + 0x0, + ID_LINE_COLOR + ); + /* + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_TOPIC, ID_TOPIC); + //**************************************************************** + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_OPACITY + ); + //**************************************************************** + //0 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR0_CB, + STR_CB, + FALSE, + 0, + ID_COLOR0_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR0, + 0x10, + 0x10, + 0x10, + ID_COLOR0 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR0_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR0_LEVEL + ); + //**************************************************************** + //1 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR1_CB, + STR_CB, + FALSE, + 0, + ID_COLOR1_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR1, + 0xFF, + 0x0, + 0x0, + ID_COLOR1 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR1_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR1_LEVEL + ); + //**************************************************************** + //2 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR2_CB, + STR_CB, + FALSE, + 0, + ID_COLOR2_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR2, + 0x0, + 0xFF, + 0x0, + ID_COLOR2 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR2_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR2_LEVEL + ); + //**************************************************************** + //3 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR3_CB, + STR_CB, + FALSE, + 0, + ID_COLOR3_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR3, + 0x0, + 0x0, + 0xFF, + ID_COLOR1 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR3_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR3_LEVEL + ); + //**************************************************************** + //4 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR4_CB, + STR_CB, + FALSE, + 0, + ID_COLOR4_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR4, + 0xFF, + 0xFF, + 0x0, + ID_COLOR4 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR4_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR4_LEVEL + ); + //**************************************************************** + //5 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR5_CB, + STR_CB, + FALSE, + 0, + ID_COLOR5_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR5, + 0xFF, + 0x0, + 0xFF, + ID_COLOR6 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR5_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR5_LEVEL + ); + //**************************************************************** + //6 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR6_CB, + STR_CB, + FALSE, + 0, + ID_COLOR6_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR6, + 0x0, + 0xFF, + 0xFF, + ID_COLOR6 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR6_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR6_LEVEL + ); + //**************************************************************** + //7 + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR7_CB, + STR_CB, + FALSE, + 0, + ID_COLOR7_CB + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR7, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR7 + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR7_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR7_LEVEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_END); + //---------------------------------------------------------------- + //---------------------------------------------------------------- + */ + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + ERR(ae->GetCHECKBOX(ID_DELTA_CB,&infoP->delta_flg)); + ERR(ae->GetFIXED_PER2ONE(ID_DELTA_OPACITY,&infoP->delta_opacity)); + + ERR(ae->GetCHECKBOX(ID_ALPHA_CB,&infoP->alpha_flg)); + ERR(ae->GetFIXED_PER2ONE(ID_ALPHA_OPACITY,&infoP->alpha_opacity)); + + ERR(ae->GetCOLOR(ID_LINE_COLOR,&infoP->line_color)); + + /* + ERR(ae->GetFIXED_PER2ONE(ID_COLOR_OPACITY,&infoP->color_opacity)); + + //----------------------- + infoP->tbl_count =0; + for (A_long i=0; i<7; i++){ + PF_Pixel c; + PF_Fixed f; + PF_Boolean b; + A_long idx = ID_COLOR0_CB +i*3; + ERR(ae->GetCHECKBOX(idx + 0,&b)); + if (!err){ + if ( b==TRUE){ + ERR(ae->GetCOLOR(idx + 1,&c)); + ERR(ae->GetFIXED_PER2ONE(idx + 2,&f)); + if ( !err){ + infoP->color_tbl[infoP->tbl_count] = c; + infoP->level_tbl[infoP->tbl_count] = f; + infoP->tbl_count++; + } + } + } + } + */ + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->delta_flg==FALSE)&&(infoP->alpha_flg==FALSE) ){ + ERR(ae->CopyInToOut()); + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + FindTargetDelta32(ae,infoP); + //FindTarget32(ae,infoP); + break; + case PF_PixelFormat_ARGB64: + FindTargetDelta16(ae,infoP); + //FindTarget16(ae,infoP); + break; + case PF_PixelFormat_ARGB32: + FindTargetDelta8(ae,infoP); + //FindTarget8(ae,infoP); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/LineDetection/LineDetection.h b/LineDetection/LineDetection.h new file mode 100644 index 0000000..6567c86 --- /dev/null +++ b/LineDetection/LineDetection.h @@ -0,0 +1,265 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef LineDetection_H +#define LineDetection_H + +#include "Fs_Target.h" +#include "AEConfig.h" +#include "entry.h" + + + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + + +#define STR_CB "ON" + +#define STR_DELTA_CB "RGB差分検出" +#define STR_DELTA_OPACITY "RGB差分検出の濃度" + +#define STR_ALPHA_CB "Alpha差分検出" +#define STR_ALPHA_OPACITY "Alpha差分検出の濃度" + +#define STR_LINE_COLOR "検出した線の色" + +/* +#define STR_TOPIC "Extra Colors" +#define STR_COLOR_OPACITY "カラー検出の濃度" +#define STR_COLOR0_CB "Color0_Enabled" +#define STR_COLOR0 "Color0" +#define STR_COLOR0_LEVEL "Color0_Range" +#define STR_COLOR1_CB "Color1_Enable" +#define STR_COLOR1 "Color1" +#define STR_COLOR1_LEVEL "Color1_Range" +#define STR_COLOR2_CB "Color2_Enable" +#define STR_COLOR2 "Color2" +#define STR_COLOR2_LEVEL "Color2_Range" +#define STR_COLOR3_CB "Color3_Enable" +#define STR_COLOR3 "Color3" +#define STR_COLOR3_LEVEL "Color3_Range" +#define STR_COLOR4_CB "Color4_Enable" +#define STR_COLOR4 "Color4" +#define STR_COLOR4_LEVEL "Color4_Range" +#define STR_COLOR5_CB "Color5_Enable" +#define STR_COLOR5 "Color5" +#define STR_COLOR5_LEVEL "Color5_Range" +#define STR_COLOR6_CB "Color6_Enable" +#define STR_COLOR6 "Color6" +#define STR_COLOR6_LEVEL "Color6_Range" +#define STR_COLOR7_CB "Color7_Enable" +#define STR_COLOR7 "Color7" +#define STR_COLOR7_LEVEL "Color7_Range" +*/ + + + +//AfterEffectsの情報をまとめた構造体 +typedef struct{ + PF_InData *in_data; + PF_OutData *out_data; + + PF_EffectWorld *input; + PF_EffectWorld *output; + PF_PixelPtr inData; //入力画像のアドレス + PF_PixelPtr outData; //出力画像のアドレス + long width; //対象画像の横幅(pixel) + long height; //対象画像の縦 幅(pixel) + + long inWidth; //入力画像の横幅の実サイズpixel) + long outWidth; //出力画像の横幅の実サイズpixel) + long offsetInWidth; // inWidth - width 補正サイズ + long offsetOutWidth; // outWidth - width + long Frame; //描画中のフレーム(0スタート) + PF_Boolean is16Bit; //モードが16BitならTRUE + unsigned char reserve1; + unsigned short reserve2; + long reserve3; + long reserve4; + /* 無理やり64byteにする*/ +} FsAEParams; + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_DELTA_CB, + ID_DELTA_OPACITY, + + ID_ALPHA_CB, + ID_ALPHA_OPACITY, + + + ID_LINE_COLOR, + + /* + ID_TOPIC, + + ID_COLOR_OPACITY, + + ID_COLOR0_CB, + ID_COLOR0, //ターゲットの色 + ID_COLOR0_LEVEL, //ターゲットの色 + + ID_COLOR1_CB, + ID_COLOR1, //ターゲットの色 + ID_COLOR1_LEVEL, //ターゲットの色 + + ID_COLOR2_CB, + ID_COLOR2, //ターゲットの色 + ID_COLOR2_LEVEL, //ターゲットの色 + + ID_COLOR3_CB, + ID_COLOR3, //ターゲットの色 + ID_COLOR3_LEVEL, //ターゲットの色 + + ID_COLOR4_CB, + ID_COLOR4, //ターゲットの色 + ID_COLOR4_LEVEL, //ターゲットの色 + + ID_COLOR5_CB, + ID_COLOR5, //ターゲットの色 + ID_COLOR5_LEVEL, //ターゲットの色 + + ID_COLOR6_CB, + ID_COLOR6, //ターゲットの色 + ID_COLOR6_LEVEL, //ターゲットの色 + + ID_COLOR7_CB, + ID_COLOR7, //ターゲットの色 + ID_COLOR7_LEVEL, //ターゲットの色 + + ID_TOPIC_END, + */ + ID_NUM_PARAMS + }; + +#define COLOR_COUNT 8 +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + PF_Boolean delta_flg; + PF_Fixed delta_opacity; + PF_Boolean alpha_flg; + PF_Fixed alpha_opacity; + //PF_Fixed color_opacity; + PF_Pixel line_color; + /* + long tbl_count; + PF_Pixel color_tbl[COLOR_COUNT]; + PF_Fixed level_tbl[COLOR_COUNT]; + */ +} ParamInfo; + +typedef struct { + PF_PixelPtr data; + long width; + long height; + long widthTrue; + long widthOffset; + PF_FixedPoint pos; + PF_Fixed opacity; +} PsetPrm; + +typedef struct { + PF_PixelPtr data; + long width; + long height; + long widthTrue; + long widthOffset; + long x; + long y; + long w; + long h; +} BlockPrm; + +typedef struct { + PsetPrm pp; + PF_FixedPoint start; + PF_FixedPoint center; + PF_Fixed length_i; + PF_Fixed length_o; + PF_Fixed opacity; +} LineDetectionInfo; + +typedef struct { + PF_PixelPtr data; + long width; + long height; + long widthTrue; + long widthOffset; + long x; + long y; + long adr; +} PointPrm; + + + +//------------------------------------------------------- +extern "C" { +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP); +} +//------------------------------------------------------- +// FsAEParams構造体を作成する +PF_Err getFsAEParams ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + FsAEParams *aeprm + ); +//------------------------------------------------------- +PF_Err getParams ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + ParamInfo *prm + ); + + +void FindTarget8(CFsAE *ae , ParamInfo *infoP); +void FindTargetDelta8(CFsAE *ae , ParamInfo *infoP); + +void FindTarget16(CFsAE *ae , ParamInfo *infoP); +void FindTargetDelta16(CFsAE *ae , ParamInfo *infoP); + +void FindTarget32(CFsAE *ae , ParamInfo *infoP); +void FindTargetDelta32(CFsAE *ae , ParamInfo *infoP); + + +#endif // LineDetection_H diff --git a/LineDetection/LineDetectionPiPL.r b/LineDetection/LineDetectionPiPL.r new file mode 100644 index 0000000..686c630 --- /dev/null +++ b/LineDetection/LineDetectionPiPL.r @@ -0,0 +1,76 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; + diff --git a/LineDetection/Win/LineDetection.vcxproj b/LineDetection/Win/LineDetection.vcxproj new file mode 100644 index 0000000..00d8bcd --- /dev/null +++ b/LineDetection/Win/LineDetection.vcxproj @@ -0,0 +1,598 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {52CB21FD-EB41-484F-B74F-0780D6EA017C} + LineDetection + LineDetection + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + .aex + + + F's $(ProjectName)_CC2018_MD + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineDetection.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX\F%27s $(ProjectName)_CS4_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineDetection.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineDetection.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineDetection.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineDetection.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineDetection.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + MSWindows;WIN32;_DEBUG;_WINDOWS + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + + \ No newline at end of file diff --git a/LineDetection/Win/LineDetection.vcxproj.filters b/LineDetection/Win/LineDetection.vcxproj.filters new file mode 100644 index 0000000..a4fb96c --- /dev/null +++ b/LineDetection/Win/LineDetection.vcxproj.filters @@ -0,0 +1,187 @@ +サソ + + + + {ec065898-bce2-426f-b2b7-6efef936f9e8} + h;hpp;hxx;hm;inl;fi;fd + + + {67d60e51-45a1-44be-9d16-3dc7f6d4e676} + + + {69cd1033-00b8-4425-8757-dfcb72b83fdc} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {9f5778e5-6568-459a-ae8c-430ccc8240d2} + + + {563ca79e-a601-4bc8-b9ea-6d6416e7933e} + + + {88fa8ece-1494-4ace-908f-ad98ffcede93} + + + {0b66c14e-fa44-4c46-8156-4da2488ac7d8} + + + {71778df8-fc76-4c10-8197-27181620fb6f} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + + + Resource Files + + + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + + Resource Files + + + \ No newline at end of file diff --git a/LineDetection/Win/LineDetectionPiPL.rc b/LineDetection/Win/LineDetectionPiPL.rc new file mode 100644 index 0000000..218595b --- /dev/null +++ b/LineDetection/Win/LineDetectionPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x11F's LineDetection\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x11F's LineDetection\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/LineTrace/Fs_Entry.h b/LineTrace/Fs_Entry.h new file mode 100644 index 0000000..fb78431 --- /dev/null +++ b/LineTrace/Fs_Entry.h @@ -0,0 +1,226 @@ +//----------------------------------------------------------------------------------- +/* + ColorKey for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/LineTrace/Fs_Target.h b/LineTrace/Fs_Target.h new file mode 100644 index 0000000..88a676e --- /dev/null +++ b/LineTrace/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TARGET_H +#define FS_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's LineTrace" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "2値化" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/LineTrace/LineTrace.cpp b/LineTrace/LineTrace.cpp new file mode 100644 index 0000000..a4bcdf4 --- /dev/null +++ b/LineTrace/LineTrace.cpp @@ -0,0 +1,672 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "LineTrace.h" +#include + + +static PF_Pixel WHT8 = {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; +static PF_Pixel BLK8 = {PF_MAX_CHAN8,0,0,0}; +static PF_Pixel16 WHT16 = {PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; +static PF_Pixel16 BLK16 = {PF_MAX_CHAN16,0,0,0}; +static PF_PixelFloat WHT32 = {1,1,1,1}; +static PF_PixelFloat BLK32 = {1,0,0,0}; +//----------------------------------------------------------------------------- +static PF_Err +ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_BLACK, + UI_ENABLED2, + TRUE, + 0, + enabled_black + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_BLACK, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_black + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_BLACK, + 0x00, + 0x00, + 0x00, + color_black + ); + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_RED, + UI_ENABLED2, + TRUE, + 0, + enabled_red + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_RED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_red + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_RED, + PF_MAX_CHAN8, + 0x00, + 0x00, + color_red + ); + + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_GREEN, + UI_ENABLED2, + TRUE, + 0, + enabled_green + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_GREEN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_green + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_GREEN, + 0x00, + PF_MAX_CHAN8, + 0x00, + color_green + ); + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_BLUE, + UI_ENABLED2, + TRUE, + 0, + enabled_blue + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_BLUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_blue + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_BLUE, + 0x00, + 0x00, + PF_MAX_CHAN8, + color_blue + ); + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_YELLOW, + UI_ENABLED2, + TRUE, + 0, + enabled_yellow + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_YELLOW, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_yellow + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_YELLOW, + PF_MAX_CHAN8, + PF_MAX_CHAN8, + 0x00, + color_yellow + ); + //----------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED_VIOLET, + UI_ENABLED2, + TRUE, + 0, + enabled_violet + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_BORDER_VIOLET, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + border_violet + ); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_DRAW_VIOLET, + PF_MAX_CHAN8, + 0x00, + PF_MAX_CHAN8, + color_violet + ); + + + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo8 * infoP = reinterpret_cast(refcon); + if (infoP){ + PF_Pixel p = *outP; + PF_FpShort op = (PF_FpShort)p.alpha/PF_MAX_CHAN8; + if(op>1) op=1; + + if (op<=0){ + p = WHT8; + }else{ + if ( op<1) { + PF_FpShort op1 = 1- op; + p.blue = RoundByteFpShort(p.blue * op + PF_MAX_CHAN8*op1); + p.green = RoundByteFpShort(p.green* op + PF_MAX_CHAN8*op1); + p.blue = RoundByteFpShort(p.blue * op + PF_MAX_CHAN8*op1); + } + PF_HLS_Pixel hls; + ERR(infoP->cs->RGBtoHLS(infoP->effect_ref,&p,hls)); + + if ( hls[HLS_L] >=TARGET_WHITE){ + p = WHT8; + }else if ( hls[HLS_L] < TARGET_BLACK){ + if ( infoP->ParamTable[LT_BLACK].enabled == TRUE){ + p = BLK8; + }else{ + p = WHT8; + } + }else if ( hls[HLS_S] < TARGET_GRAY){ + if ( (infoP->ParamTable[LT_BLACK].border > hls[HLS_L])&&( infoP->ParamTable[LT_BLACK].enabled == TRUE)){ + p = BLK8; + }else{ + p = WHT8; + } + }else{ + A_long H = (A_long)( (hls[HLS_H]) >>16); + //赤 + if ( (H>=RANGE_RED2)||((H>=RANGE_RED0)&&(HParamTable[LT_RED].border > hls[HLS_L])&&( infoP->ParamTable[LT_RED].enabled == TRUE)){ + p = infoP->ParamTable[LT_RED].color; + }else{ + p = WHT8; + } + }else if ( (H>=TARGET_YELLOW0)&&(HParamTable[LT_YELLOW].border > hls[HLS_L])&&( infoP->ParamTable[LT_YELLOW].enabled == TRUE)){ + p = infoP->ParamTable[LT_YELLOW].color; + }else{ + p = WHT8; + } + }else if ( (H>=TARGET_GREEN0)&&(HParamTable[LT_GREEN].border > hls[HLS_L])&&(infoP->ParamTable[LT_GREEN].enabled == TRUE)){ + p = infoP->ParamTable[LT_GREEN].color; + }else{ + p = WHT8; + } + }else if ( (H>=TARGET_BLUE0)&&(HParamTable[LT_BLUE].border > hls[HLS_L])&&(infoP->ParamTable[LT_BLUE].enabled == TRUE)){ + p = infoP->ParamTable[LT_BLUE].color;; + }else{ + p = WHT8; + } + }else if ( (H>=TARGET_VIOLET0)&&(HParamTable[LT_VIOLET].border > hls[HLS_L])&&( infoP->ParamTable[LT_VIOLET].enabled == TRUE)){ + p = infoP->ParamTable[LT_VIOLET].color;; + }else{ + p = WHT8; + } + }else{ + p = WHT8; + } + } + + } + *outP = p; + + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo16 * infoP = reinterpret_cast(refcon); + if (infoP){ + PF_Pixel16 p = *outP; + PF_FpShort op = (PF_FpShort)p.alpha/PF_MAX_CHAN16; + if(op>1) op=1; + + if (op<=0){ + p = WHT16; + }else{ + if ( op<1) { + PF_FpShort op1 = 1- op; + p.blue = RoundShortFpLong(p.blue * op + PF_MAX_CHAN16*op1); + p.green = RoundShortFpLong(p.green* op + PF_MAX_CHAN16*op1); + p.blue = RoundShortFpLong(p.blue * op + PF_MAX_CHAN16*op1); + } + PF_HLS_Pixel hls; + ERR(infoP->cs->RGBtoHLS(infoP->effect_ref,&p,hls)); + + if ( hls[HLS_L] >=TARGET_WHITE){ + p = WHT16; + }else if ( hls[HLS_L] < TARGET_BLACK){ + if ( infoP->ParamTable[LT_BLACK].enabled == TRUE){ + p = BLK16; + }else{ + p = WHT16; + } + }else if ( hls[HLS_S] < TARGET_GRAY){ + if ( (infoP->ParamTable[LT_BLACK].border > hls[HLS_L])&&( infoP->ParamTable[LT_BLACK].enabled == TRUE)){ + p = BLK16; + }else{ + p = WHT16; + } + }else{ + A_long H = (A_long)( (hls[HLS_H]) >>16); + //赤 + if ( (H>=RANGE_RED2)||((H>=RANGE_RED0)&&(HParamTable[LT_RED].border > hls[HLS_L])&&( infoP->ParamTable[LT_RED].enabled == TRUE)){ + p = infoP->ParamTable[LT_RED].color; + }else{ + p = WHT16; + } + }else if ( (H>=TARGET_YELLOW0)&&(HParamTable[LT_YELLOW].border > hls[HLS_L])&&( infoP->ParamTable[LT_YELLOW].enabled == TRUE)){ + p = infoP->ParamTable[LT_YELLOW].color; + }else{ + p = WHT16; + } + }else if ( (H>=TARGET_GREEN0)&&(HParamTable[LT_GREEN].border > hls[HLS_L])&&(infoP->ParamTable[LT_GREEN].enabled == TRUE)){ + p = infoP->ParamTable[LT_GREEN].color; + }else{ + p = WHT16; + } + }else if ( (H>=TARGET_BLUE0)&&(HParamTable[LT_BLUE].border > hls[HLS_L])&&(infoP->ParamTable[LT_BLUE].enabled == TRUE)){ + p = infoP->ParamTable[LT_BLUE].color;; + }else{ + p = WHT16; + } + }else if ( (H>=TARGET_VIOLET0)&&(HParamTable[LT_VIOLET].border > hls[HLS_L])&&( infoP->ParamTable[LT_VIOLET].enabled == TRUE)){ + p = infoP->ParamTable[LT_VIOLET].color;; + }else{ + p = WHT16; + } + }else{ + p = WHT16; + } + } + + } + *outP = p; + + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FilterImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * infoP = reinterpret_cast(refcon); + if (infoP){ + PF_PixelFloat p = *outP; + PF_FpShort op = (PF_FpShort)p.alpha; + if(op>1) op=1; + + if (op<=0){ + p = WHT32; + }else{ + if ( op<1) { + PF_FpShort op1 = 1- op; + p.blue = RoundFpShortDouble(p.blue * op + op1); + p.green = RoundFpShortDouble(p.green* op + op1); + p.blue = RoundFpShortDouble(p.blue * op + op1); + } + PF_HLS_Pixel hls; + ERR(infoP->cs->RGBtoHLS(infoP->effect_ref,&p,hls)); + + if ( hls[HLS_L] >=TARGET_WHITE){ + p = WHT32; + }else if ( hls[HLS_L] < TARGET_BLACK){ + if ( infoP->ParamTable[LT_BLACK].enabled == TRUE){ + p = BLK32; + }else{ + p = WHT32; + } + }else if ( hls[HLS_S] < TARGET_GRAY){ + if ( (infoP->ParamTable[LT_BLACK].border > hls[HLS_L])&&( infoP->ParamTable[LT_BLACK].enabled == TRUE)){ + p = BLK32; + }else{ + p = WHT32; + } + }else{ + A_long H = (A_long)( (hls[HLS_H]) >>16); + //赤 + if ( (H>=RANGE_RED2)||((H>=RANGE_RED0)&&(HParamTable[LT_RED].border > hls[HLS_L])&&( infoP->ParamTable[LT_RED].enabled == TRUE)){ + p = infoP->ParamTable[LT_RED].color; + }else{ + p = WHT32; + } + }else if ( (H>=TARGET_YELLOW0)&&(HParamTable[LT_YELLOW].border > hls[HLS_L])&&( infoP->ParamTable[LT_YELLOW].enabled == TRUE)){ + p = infoP->ParamTable[LT_YELLOW].color; + }else{ + p = WHT32; + } + }else if ( (H>=TARGET_GREEN0)&&(HParamTable[LT_GREEN].border > hls[HLS_L])&&(infoP->ParamTable[LT_GREEN].enabled == TRUE)){ + p = infoP->ParamTable[LT_GREEN].color; + }else{ + p = WHT32; + } + }else if ( (H>=TARGET_BLUE0)&&(HParamTable[LT_BLUE].border > hls[HLS_L])&&(infoP->ParamTable[LT_BLUE].enabled == TRUE)){ + p = infoP->ParamTable[LT_BLUE].color;; + }else{ + p = WHT32; + } + }else if ( (H>=TARGET_VIOLET0)&&(HParamTable[LT_VIOLET].border > hls[HLS_L])&&( infoP->ParamTable[LT_VIOLET].enabled == TRUE)){ + p = infoP->ParamTable[LT_VIOLET].color;; + }else{ + p = WHT32; + } + }else{ + p = WHT32; + } + } + + } + *outP = p; + + + } + return err; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + for ( A_long i=0; i<6; i++){ + A_long idx = enabled_black + i*3; + + PF_Boolean b; + PF_Fixed f; + PF_Pixel p; + ERR(ae->GetCHECKBOX(idx+0,&b)); + ERR(ae->GetFIXED_PER2ONE(idx+1,&f)); + ERR(ae->GetCOLOR(idx+2,&p)); + if (!err){ + infoP->ParamTable[i].enabled = b; + infoP->ParamTable[i].border = f; + infoP->ParamTable[i].color = p; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Err err2 = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ParamInfo32 info32; + for (A_long i=0; iParamTable[i].enabled; + info32.ParamTable[i].border = infoP->ParamTable[i].border; + info32.ParamTable[i].color = CONV8TO32( infoP->ParamTable[i].color); + } + info32.cs = NULL; + info32.effect_ref = ae->in_data->effect_ref; + + ERR(AEFX_AcquireSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacksFloatSuite, + kPFColorCallbacksFloatSuiteVersion1, + "Couldn't load suite.", + (void**)&(info32.cs))); + if (!err){ + if (info32.cs != NULL){ + ERR(ae->iterate32((refconType)&info32,FilterImage32)); + + ERR2(AEFX_ReleaseSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacksFloatSuite, + kPFColorCallbacksFloatSuiteVersion1, + "Couldn't release suite.")); + } + } + break; + case PF_PixelFormat_ARGB64: + ParamInfo16 info16; + for (A_long i=0; iParamTable[i].enabled; + info16.ParamTable[i].border = infoP->ParamTable[i].border; + info16.ParamTable[i].color = CONV8TO16( infoP->ParamTable[i].color); + } + info16.cs = NULL; + info16.effect_ref = ae->in_data->effect_ref; + + ERR(AEFX_AcquireSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacks16Suite, + kPFColorCallbacks16SuiteVersion1, + "Couldn't load suite.", + (void**)&(info16.cs))); + if (!err){ + if (info16.cs != NULL){ + ERR(ae->iterate16((refconType)&info16,FilterImage16)); + + ERR2(AEFX_ReleaseSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacks16Suite, + kPFColorCallbacks16SuiteVersion1, + "Couldn't release suite.")); + } + } + break; + case PF_PixelFormat_ARGB32: + ParamInfo8 info8; + for (A_long i=0; iParamTable[i].enabled; + info8.ParamTable[i].border = infoP->ParamTable[i].border; + info8.ParamTable[i].color = infoP->ParamTable[i].color; + } + info8.cs = NULL; + info8.effect_ref = ae->in_data->effect_ref; + + ERR(AEFX_AcquireSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacksSuite, + kPFColorCallbacksSuiteVersion1, + "Couldn't load suite.", + (void**)&(info8.cs))); + if (!err){ + if (info8.cs != NULL){ + ERR(ae->iterate8((refconType)&info8,FilterImage8)); + + ERR2(AEFX_ReleaseSuite( + ae->in_data, + ae->out_data, + kPFColorCallbacksSuite, + kPFColorCallbacksSuiteVersion1, + "Couldn't release suite.")); + } + } + break; + } + return err; +} + +//----------------------------------------------------------------------------- + +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +//----------------------------------------------------------------------------- +#include "Fs_Entry.h" \ No newline at end of file diff --git a/LineTrace/LineTrace.h b/LineTrace/LineTrace.h new file mode 100644 index 0000000..87a4854 --- /dev/null +++ b/LineTrace/LineTrace.h @@ -0,0 +1,210 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef LineTrace_H +#define LineTrace_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* + +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +#define PR_PRM_COUNT 24 +enum { + ID_INPUT = 0, + + enabled_black, + border_black, + color_black, + + enabled_red, + border_red, + color_red, + + enabled_green, + border_green, + color_green, + + enabled_blue, + border_blue, + color_blue, + + enabled_yellow, + border_yellow, + color_yellow, + + enabled_violet, + border_violet, + color_violet, + + + ID_NUM_PARAMS +}; +enum{ + mode_trace=1, + mode_simple +}; +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 + + +#define UI_ENABLED_BLACK "Black" +#define UI_ENABLED_RED "Red" +#define UI_ENABLED_GREEN "Green" +#define UI_ENABLED_BLUE "Blue" +#define UI_ENABLED_YELLOW "Yellow" +#define UI_ENABLED_VIOLET "Violet" +#define UI_ENABLED2 "ON" + +#define UI_DRAW_BLACK "DrawBlack" +#define UI_DRAW_RED "DrawRed" +#define UI_DRAW_GREEN "DrawGreen" +#define UI_DRAW_BLUE "DrawBlue" +#define UI_DRAW_YELLOW "DrawYellow" +#define UI_DRAW_VIOLET "DrawViolet" + + +#define UI_BORDER_BLACK "BlackBorder" +#define UI_BORDER_RED "RedBorder" +#define UI_BORDER_GREEN "GreenBorder" +#define UI_BORDER_BLUE "BlueBorder" +#define UI_BORDER_YELLOW "YellowBorder" +#define UI_BORDER_VIOLET "VioletBorder" + + + +#define ERR_GET_AEPRM "すみませんエラーです。\nAfterEffects_Params error!" +#define ERR_GET_PRM "すみませんエラーです。\nLineTrace_Params error!" +//----------------------------------------------------------------------------- +#define RANGE_RED2 330 +#define RANGE_RED3 360 +#define RANGE_RED0 0 +#define RANGE_RED1 60 + +#define TARGET_YELLOW0 RANGE_RED1 +#define TARGET_YELLOW1 70 + +#define TARGET_GREEN0 TARGET_YELLOW1 +#define TARGET_GREEN1 175 + +#define TARGET_BLUE0 TARGET_GREEN1 +#define TARGET_BLUE1 280 + +#define TARGET_VIOLET0 TARGET_BLUE1 +#define TARGET_VIOLET1 RANGE_RED2 + +#define TARGET_BLACK ((1L <<16) * 3 / 10) +#define TARGET_WHITE ((1L <<16) * 9 / 10) +#define TARGET_GRAY ((1L <<16) * 5 / 10) +typedef struct +{ + PF_Boolean enabled; + PF_Fixed border; + PF_Pixel color; +} TracePrm; + +enum +{ + LT_BLACK=0, + LT_RED, + LT_GREEN, + LT_BLUE, + LT_YELLOW, + LT_VIOLET, + LT_COUNT +}; +enum +{ + HLS_H =0, + HLS_L, + HLS_S, +}; +typedef struct +{ + PF_Boolean enabled; + PF_Fixed border; + PF_Pixel color; +} TracePrm8; +typedef struct +{ + PF_Boolean enabled; + PF_Fixed border; + PF_Pixel16 color; +} TracePrm16; +typedef struct +{ + PF_Boolean enabled; + PF_Fixed border; + PF_PixelFloat color; +} TracePrm32; +typedef struct +{ + TracePrm8 ParamTable[LT_COUNT]; +} ParamInfo; +typedef struct +{ + TracePrm8 ParamTable[LT_COUNT]; + PF_ColorCallbacksSuite1 *cs; + PF_ProgPtr effect_ref; + PF_InData *in_data; +} ParamInfo8; +typedef struct +{ + TracePrm16 ParamTable[LT_COUNT]; + PF_ColorCallbacks16Suite1 *cs; + PF_ProgPtr effect_ref; +} ParamInfo16; +typedef struct +{ + TracePrm32 ParamTable[LT_COUNT]; + PF_ColorCallbacksFloatSuite1 *cs; + PF_ProgPtr effect_ref; +} ParamInfo32; + +//----------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +//----------------------------------------------------------------------------- + +#endif // LineTrace_H diff --git a/LineTrace/LineTracePiPL.r b/LineTrace/LineTracePiPL.r new file mode 100644 index 0000000..9d919a7 --- /dev/null +++ b/LineTrace/LineTracePiPL.r @@ -0,0 +1,73 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + FS_NAME + }, + /* [3] */ + Category { + FS_CATEGORY + }, +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/LineTrace/LineTrace_def.h b/LineTrace/LineTrace_def.h new file mode 100644 index 0000000..0386562 --- /dev/null +++ b/LineTrace/LineTrace_def.h @@ -0,0 +1,137 @@ +#pragma once +#ifndef COLOR_DEF_H +#define COLOR_DEF_H + +#define COLOR_DEF_SIZE 16 + +A_u_char pr_colorDef[COLOR_DEF_SIZE][6]={ + { //00 + PF_MAX_CHAN8,//R1 + 0,//G1 + 0,//B1 + PF_MAX_CHAN8,//R1 + 0,//G1 + 0//B1 + }, + { //01 + 0,//R1 + PF_MAX_CHAN8,//G1 + 0,//B1 + 0,//R1 + PF_MAX_CHAN8,//G1 + 0//B1 + }, + { //02 + 0,//R1 + 0,//G1 + PF_MAX_CHAN8,//B1 + 0,//R1 + 0,//G1 + PF_MAX_CHAN8//B1 + }, + { //03 + PF_MAX_CHAN8,//R1 + PF_MAX_CHAN8,//G1 + 0,//B1 + PF_MAX_CHAN8,//R1 + PF_MAX_CHAN8,//G1 + 0//B1 + }, + { //04 + PF_MAX_CHAN8,//R1 + 0,//G1 + PF_MAX_CHAN8,//B1 + PF_MAX_CHAN8,//R1 + 0,//G1 + PF_MAX_CHAN8//B1 + }, + { //05 + 0,//R1 + PF_MAX_CHAN8,//G1 + PF_MAX_CHAN8,//B1 + 0,//R1 + PF_MAX_CHAN8,//G1 + PF_MAX_CHAN8//B1 + }, + { //06 + PF_MAX_CHAN8,//R1 + PF_MAX_CHAN8,//G1 + PF_MAX_CHAN8,//B1 + PF_MAX_CHAN8,//R1 + PF_MAX_CHAN8,//G1 + PF_MAX_CHAN8//B1 + }, + { //07 + 0,//R1 + 0,//G1 + 0,//B1 + 0,//R1 + 0,//G1 + 0//B1 + }, + { //08 + PF_HALF_CHAN8,//R1 + 0,//G1 + 0,//B1 + PF_HALF_CHAN8,//R1 + 0,//G1 + 0//B1 + }, + { //09 + 0,//R1 + PF_HALF_CHAN8,//G1 + 0,//B1 + 0,//R1 + PF_HALF_CHAN8,//G1 + 0//B1 + }, + { //10 + 0,//R1 + 0,//G1 + PF_HALF_CHAN8,//B1 + 0,//R1 + 0,//G1 + PF_HALF_CHAN8//B1 + }, + { //11 + PF_HALF_CHAN8,//R1 + PF_HALF_CHAN8,//G1 + 0,//B1 + PF_HALF_CHAN8,//R1 + PF_HALF_CHAN8,//G1 + 0//B1 + }, + { //12 + PF_HALF_CHAN8,//R1 + 0,//G1 + PF_HALF_CHAN8,//B1 + PF_HALF_CHAN8,//R1 + 0,//G1 + PF_HALF_CHAN8//B1 + }, + { //13 + 0,//R1 + PF_HALF_CHAN8,//G1 + PF_HALF_CHAN8,//B1 + 0,//R1 + PF_HALF_CHAN8,//G1 + PF_HALF_CHAN8//B1 + }, + { //14 + PF_HALF_CHAN8,//R1 + PF_HALF_CHAN8,//G1 + PF_HALF_CHAN8,//B1 + PF_HALF_CHAN8,//R1 + PF_HALF_CHAN8,//G1 + PF_HALF_CHAN8//B1 + }, + { //15 + PF_HALF_CHAN8/2,//R1 + PF_HALF_CHAN8/2,//G1 + PF_HALF_CHAN8/2,//B1 + PF_HALF_CHAN8/2,//R1 + PF_HALF_CHAN8/2,//G1 + PF_HALF_CHAN8/2//B1 + }, +}; +#endif diff --git a/LineTrace/Win/LineTrace.vcxproj b/LineTrace/Win/LineTrace.vcxproj new file mode 100644 index 0000000..f93f89c --- /dev/null +++ b/LineTrace/Win/LineTrace.vcxproj @@ -0,0 +1,587 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {97918B48-8322-43BF-92D6-ECCA9621EE76} + LineTrace + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + .aex + F's $(ProjectName)_CC2018 + + + .aex + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineTrace.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX\F%27s $(ProjectName)_CS4_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineTrace.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineTrace.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/LineTrace.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + LinkVerbose + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineTrace.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/LineTrace.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + MSWindows;WIN32;_DEBUG;_WINDOWS + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/LineTrace/Win/LineTrace.vcxproj.filters b/LineTrace/Win/LineTrace.vcxproj.filters new file mode 100644 index 0000000..8269446 --- /dev/null +++ b/LineTrace/Win/LineTrace.vcxproj.filters @@ -0,0 +1,163 @@ + + + + + {4abc2191-8daf-4923-a991-3a7e9a3867ca} + h;hpp;hxx;hm;inl;fi;fd + + + {5aed4e6e-f0b8-44e3-a3e2-c4a55e46864d} + + + {519f8e7b-8134-41ac-8015-57470b324724} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {65529215-4ed8-4831-b8c9-0aaa66471157} + + + {65251d7d-bfdf-4769-8549-28ff1c5ed448} + + + {a72a24fd-ade6-4f55-b42c-f0eaa5b85826} + + + {083219df-5917-4a2f-b246-b6de53a7a375} + + + {1680d619-702b-4e56-ba5f-960795bdd1d2} + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/LineTrace/Win/LineTracePiPL.rc b/LineTrace/Win/LineTracePiPL.rc new file mode 100644 index 0000000..8841cc5 --- /dev/null +++ b/LineTrace/Win/LineTracePiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0DF's LineTrace\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 1600L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0DF's LineTrace\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/MainLineRepaint/Fs_Entry.h b/MainLineRepaint/Fs_Entry.h new file mode 100644 index 0000000..dd86ec6 --- /dev/null +++ b/MainLineRepaint/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + MainLineRepaint for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/MainLineRepaint/Fs_Target.h b/MainLineRepaint/Fs_Target.h new file mode 100644 index 0000000..41dfe10 --- /dev/null +++ b/MainLineRepaint/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's MainLineRepaint" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "セル画の主線を無くします" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/MainLineRepaint/MainLineRepaint.cpp b/MainLineRepaint/MainLineRepaint.cpp new file mode 100644 index 0000000..164833a --- /dev/null +++ b/MainLineRepaint/MainLineRepaint.cpp @@ -0,0 +1,521 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "MainLineRepaint.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_Main_Color, + 0x00, + 0x00, + 0x00, + ID_Main_Color + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_level, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 20, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_level + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec8(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel *scanline; + scanline = (PF_Pixel *)infoP->scanline; + A_long w = ae->out->width(); + A_long wt = ae->out->widthTrue(); + A_long h = ae->out->height(); + + PF_Pixel *data; + data = (PF_Pixel *)ae->out->data(); + //水平方向 + A_long cnt = 0; + for ( A_long j=0; jMain_Color,scanline[i],infoP->lv)==TRUE){ + PF_Pixel d = scanline[i]; + A_long dv = PF_MAX_CHAN16; + + if (compPix8Lv(infoP->Main_Color,scanline[i-1],infoP->lv)==FALSE){ + d = scanline[i-1]; + dv = pxV8(d); + } + + if (compPix8Lv(infoP->Main_Color,scanline[i+1],infoP->lv)==FALSE){ + if ( dv > pxV8(scanline[i+1])){ + d = scanline[i+1]; + } + } + if (compPix8Lv(infoP->Main_Color,d,infoP->lv)==FALSE){ + data[adrY + i] = d; + }else{ + cnt++; + } + } + } + if (compPix8Lv(infoP->Main_Color,data[adrY],infoP->lv)==TRUE){ + if (compPix8Lv(infoP->Main_Color,data[adrY+1],infoP->lv)==FALSE){ + data[adrY] = data[adrY+1]; + }else{ + cnt++; + } + } + if (compPix8Lv(infoP->Main_Color,data[adrY+ w-1],infoP->lv)==TRUE){ + if (compPix8Lv(infoP->Main_Color,data[adrY+w -2],infoP->lv)==FALSE){ + data[adrY+ w-1] = data[adrY+ w-2]; + }else{ + cnt++; + } + } + } + if ( cnt == 0) return err; + cnt = 0; + for ( A_long i=0; iMain_Color,scanline[j],infoP->lv)==TRUE){ + PF_Pixel d = scanline[j]; + A_long dv = PF_MAX_CHAN16; + + if (compPix8Lv(infoP->Main_Color,scanline[j-1],infoP->lv)==FALSE){ + d = scanline[j-1]; + dv = pxV8(d); + } + + if (compPix8Lv(infoP->Main_Color,scanline[j+1],infoP->lv)==FALSE){ + if ( dv > pxV8(scanline[j+1])){ + d = scanline[j+1]; + } + } + if (compPix8Lv(infoP->Main_Color,d,infoP->lv)==FALSE){ + data[j* wt + i] = d; + }else{ + cnt++; + } + } + } + A_long ay = wt * (h-1); + if (compPix8Lv(infoP->Main_Color,data[i],infoP->lv)==TRUE){ + if (compPix8Lv(infoP->Main_Color,data[i+ wt],infoP->lv)==FALSE){ + data[i] = data[i + wt]; + }else{ + cnt++; + } + } + if (compPix8Lv(infoP->Main_Color,data[i + ay],infoP->lv)==TRUE){ + if (compPix8Lv(infoP->Main_Color,data[i + ay - wt],infoP->lv)==FALSE){ + data[i + ay] = data[i + ay - wt]; + }else{ + cnt++; + } + } + } + infoP->count = cnt; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel16 *scanline; + scanline = (PF_Pixel16 *)infoP->scanline; + A_long w = ae->out->width(); + A_long wt = ae->out->widthTrue(); + A_long h = ae->out->height(); + + PF_Pixel16 *data; + data = (PF_Pixel16 *)ae->out->data(); + //水平方向 + A_long cnt = 0; + for ( A_long j=0; jMain_Color,infoP->lv)==TRUE){ + PF_Pixel16 d = scanline[i]; + A_long dv = PF_MAX_CHAN16; + + if (compPix16_8Lv(scanline[i-1],infoP->Main_Color,infoP->lv)==FALSE){ + d = scanline[i-1]; + dv = pxV16(d); + } + + if (compPix16_8Lv(scanline[i+1],infoP->Main_Color,infoP->lv)==FALSE){ + if ( dv > pxV16(scanline[i+1])){ + d = scanline[i+1]; + } + } + if (compPix16_8Lv(d,infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY + i] = d; + }else{ + cnt++; + } + } + } + if (compPix16_8Lv(data[adrY],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix16_8Lv(data[adrY+1],infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY] = data[adrY+1]; + }else{ + cnt++; + } + } + if (compPix16_8Lv(data[adrY+ w-1],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix16_8Lv(data[adrY+w -2],infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY+ w-1] = data[adrY+ w-2]; + }else{ + cnt++; + } + } + } + if ( cnt == 0) return err; + cnt = 0; + for ( A_long i=0; iMain_Color,infoP->lv)==TRUE){ + PF_Pixel16 d = scanline[j]; + A_long dv = PF_MAX_CHAN16; + + if (compPix16_8Lv(scanline[j-1],infoP->Main_Color,infoP->lv)==FALSE){ + d = scanline[j-1]; + dv = pxV16(d); + } + + if (compPix16_8Lv(scanline[j+1],infoP->Main_Color,infoP->lv)==FALSE){ + if ( dv > pxV16(scanline[j+1])){ + d = scanline[j+1]; + } + } + if (compPix16_8Lv(d,infoP->Main_Color,infoP->lv)==FALSE){ + data[j* wt + i] = d; + }else{ + cnt++; + } + } + } + A_long ay = wt * (h-1); + if (compPix16_8Lv(data[i],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix16_8Lv(data[i+ wt],infoP->Main_Color,infoP->lv)==FALSE){ + data[i] = data[i + wt]; + }else{ + cnt++; + } + } + if (compPix16_8Lv(data[i + ay],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix16_8Lv(data[i + ay - wt],infoP->Main_Color,infoP->lv)==FALSE){ + data[i + ay] = data[i + ay - wt]; + }else{ + cnt++; + } + } + } + infoP->count = cnt; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_PixelFloat *scanline; + scanline = (PF_PixelFloat *)infoP->scanline; + A_long w = ae->out->width(); + A_long wt = ae->out->widthTrue(); + A_long h = ae->out->height(); + + PF_PixelFloat *data; + data = (PF_PixelFloat *)ae->out->data(); + //水平方向 + A_long cnt = 0; + for ( A_long j=0; jMain_Color,infoP->lv)==TRUE){ + PF_PixelFloat d = scanline[i]; + A_long dv = PF_MAX_CHAN16; + + if (compPix32_8Lv(scanline[i-1],infoP->Main_Color,infoP->lv)==FALSE){ + d = scanline[i-1]; + dv = pxV32(d); + } + + if (compPix32_8Lv(scanline[i+1],infoP->Main_Color,infoP->lv)==FALSE){ + if ( dv > pxV32(scanline[i+1])){ + d = scanline[i+1]; + } + } + if (compPix32_8Lv(d,infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY + i] = d; + }else{ + cnt++; + } + } + } + if (compPix32_8Lv(data[adrY],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix32_8Lv(data[adrY+1],infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY] = data[adrY+1]; + }else{ + cnt++; + } + } + if (compPix32_8Lv(data[adrY+ w-1],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix32_8Lv(data[adrY+w -2],infoP->Main_Color,infoP->lv)==FALSE){ + data[adrY+ w-1] = data[adrY+ w-2]; + }else{ + cnt++; + } + } + } + if ( cnt == 0) return err; + cnt = 0; + for ( A_long i=0; iMain_Color,infoP->lv)==TRUE){ + PF_PixelFloat d = scanline[j]; + A_long dv = PF_MAX_CHAN16; + + if (compPix32_8Lv(scanline[j-1],infoP->Main_Color,infoP->lv)==FALSE){ + d = scanline[j-1]; + dv = pxV32(d); + } + + if (compPix32_8Lv(scanline[j+1],infoP->Main_Color,infoP->lv)==FALSE){ + if ( dv > pxV32(scanline[j+1])){ + d = scanline[j+1]; + } + } + if (compPix32_8Lv(d,infoP->Main_Color,infoP->lv)==FALSE){ + data[j* wt + i] = d; + }else{ + cnt++; + } + } + } + A_long ay = wt * (h-1); + if (compPix32_8Lv(data[i],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix32_8Lv(data[i+ wt],infoP->Main_Color,infoP->lv)==FALSE){ + data[i] = data[i + wt]; + }else{ + cnt++; + } + } + if (compPix32_8Lv(data[i + ay],infoP->Main_Color,infoP->lv)==TRUE){ + if (compPix32_8Lv(data[i + ay - wt],infoP->Main_Color,infoP->lv)==FALSE){ + data[i + ay] = data[i + ay - wt]; + }else{ + cnt++; + } + } + } + infoP->count = cnt; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCOLOR(ID_Main_Color,&infoP->Main_Color)); + PF_FpLong d; + ERR(ae->GetFLOAT(ID_level,&d)); + infoP->lv = (A_u_char)(PF_MAX_CHAN8 * d/100); + infoP->count = 0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_InData *in_data; + in_data = ae->in_data; + PF_Err err = PF_Err_NONE; + + + A_long w = ae->out->width(); + if ( w < ae->out->height() ) w = ae->out->height(); + w *=2; + + //画面をコピー + ERR(ae->CopyInToOut()); + + + PF_Handle lH; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + lH = PF_NEW_HANDLE(w * sizeof(PF_PixelFloat)); + if (!lH) return PF_Err_OUT_OF_MEMORY; + for ( int i=0; i<20; i++){ + Exec32(ae,infoP); + if (infoP->count<=0) break; + } + break; + case PF_PixelFormat_ARGB64: + lH = PF_NEW_HANDLE(w * sizeof(PF_Pixel16)); + if (!lH) return PF_Err_OUT_OF_MEMORY; + + infoP->scanline = *(PF_PixelPtr *)lH; + for ( int i=0; i<20; i++){ + Exec16(ae,infoP); + if (infoP->count<=0) break; + } + break; + case PF_PixelFormat_ARGB32: + lH = PF_NEW_HANDLE(w * sizeof(PF_Pixel)); + if (!lH) return PF_Err_OUT_OF_MEMORY; + + infoP->scanline = *(PF_PixelPtr *)lH; + for ( int i=0; i<20; i++){ + Exec8(ae,infoP); + if (infoP->count<=0) break; + } + break; + } + PF_DISPOSE_HANDLE(lH); + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/MainLineRepaint/MainLineRepaint.h b/MainLineRepaint/MainLineRepaint.h new file mode 100644 index 0000000..1530899 --- /dev/null +++ b/MainLineRepaint/MainLineRepaint.h @@ -0,0 +1,118 @@ +//----------------------------------------------------------------------------------- +/* + MainLineRepaint for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef MainLineRepaint_H +#define MainLineRepaint_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_Main_Color, + ID_level, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_Main_Color "主線の色" +#define STR_level "許容値(%)" + +//UIのパラメータ +typedef struct ParamInfo { + PF_Pixel Main_Color; + A_u_char lv; + A_long count; + PF_PixelPtr scanline; +} ParamInfo, *ParamInfoP, **ParamInfoH; + + + + +//------------------------------------------------------- +inline A_long pxV8(PF_Pixel p) +{ + if (p.alpha == 0) return PF_MAX_CHAN16; + PF_PixelFloat pp = CONV8TO32(p); + if (pp.alpha>1) pp.alpha = 1.0; + if ( pp.alpha <1.0){ + pp.red = (PF_FpShort)(pp.red * pp.alpha + 1.0 *(1.0- pp.alpha)); + pp.green = (PF_FpShort)(pp.green * pp.alpha + 1.0 *(1.0- pp.alpha)); + pp.blue = (PF_FpShort)(pp.blue * pp.alpha + 1.0 *(1.0- pp.alpha)); + } + return (A_long)((( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)) * PF_MAX_CHAN16); +} +//------------------------------------------------------- +inline A_long pxV16(PF_Pixel16 p) +{ + if (p.alpha == 0) return PF_MAX_CHAN16; + PF_PixelFloat pp = CONV16TO32(p); + if (pp.alpha>1) pp.alpha = 1.0; + if ( pp.alpha <1.0){ + pp.red = pp.red * pp.alpha + 1- pp.alpha; + pp.green = pp.green * pp.alpha + 1- pp.alpha; + pp.blue = pp.blue * pp.alpha + 1- pp.alpha; + } + return (A_long)((( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)) * PF_MAX_CHAN16); +} +//------------------------------------------------------- +inline A_long pxV32(PF_PixelFloat p) +{ + if (p.alpha == 0) return PF_MAX_CHAN16; + if (p.alpha>1) p.alpha = 1.0; + if ( p.alpha <1.0){ + p.red = p.red * p.alpha + 1- p.alpha; + p.green = p.green * p.alpha + 1- p.alpha; + p.blue = p.blue * p.alpha + 1- p.alpha; + } + return (A_long)((( 0.29891 * p.red) + ( 0.58661 * p.green) + ( 0.11448 * p.blue)) * PF_MAX_CHAN16); +} +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // MainLineRepaint_H diff --git a/MainLineRepaint/MainLineRepaintPiPL.r b/MainLineRepaint/MainLineRepaintPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/MainLineRepaint/MainLineRepaintPiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/MainLineRepaint/Win/MainLineRepaint.sln b/MainLineRepaint/Win/MainLineRepaint.sln new file mode 100644 index 0000000..d67b8f4 --- /dev/null +++ b/MainLineRepaint/Win/MainLineRepaint.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MainLineRepaint", "MainLineRepaint.vcxproj", "{D083FA16-AF6A-409F-8A7B-43B782BFFB0F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.ActiveCfg = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.Build.0 = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.ActiveCfg = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.Build.0 = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.ActiveCfg = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.Build.0 = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.ActiveCfg = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MainLineRepaint/Win/MainLineRepaint.vcxproj b/MainLineRepaint/Win/MainLineRepaint.vcxproj new file mode 100644 index 0000000..9a16f41 --- /dev/null +++ b/MainLineRepaint/Win/MainLineRepaint.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F} + MainLineRepaint + MainLineRepaint + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/MainLineRepaint/Win/MainLineRepaint.vcxproj.filters b/MainLineRepaint/Win/MainLineRepaint.vcxproj.filters new file mode 100644 index 0000000..6ab51e3 --- /dev/null +++ b/MainLineRepaint/Win/MainLineRepaint.vcxproj.filters @@ -0,0 +1,184 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/MainLineRepaint/Win/MainLineRepaintPiPL.rc b/MainLineRepaint/Win/MainLineRepaintPiPL.rc new file mode 100644 index 0000000..0212431 --- /dev/null +++ b/MainLineRepaint/Win/MainLineRepaintPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x13F's MainLineRepaint", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x13F's MainLineRepaint", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/MainLineRepaint/a b/MainLineRepaint/a new file mode 100644 index 0000000..0a8fa74 --- /dev/null +++ b/MainLineRepaint/a @@ -0,0 +1,11 @@ +a +Fs_Entry.h +Fs_Target.h +MacCS4_xcode3 +MacCS6_xcode3 +PluginSkeleton.cpp +PluginSkeleton.h +PluginSkeletonPiPL.r +WinCS4_vs2010 +WinCS6_vs2010 +WinCS6_vs2012 diff --git a/MainLineRepaint_old/FsAE.h b/MainLineRepaint_old/FsAE.h new file mode 100644 index 0000000..8ed1f77 --- /dev/null +++ b/MainLineRepaint_old/FsAE.h @@ -0,0 +1,94 @@ +//FsAE +#ifndef FsAE_H +#define FsAE_H + +#pragma once + +#include "AEConfig.h" + +#include "entry.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_Macros.h" +#include "Param_Utils.h" +#include "FsGraphics.h" + + +#ifdef AE_OS_WIN + #include +#endif + +//****************************************************************************** +// +//****************************************************************************** +class CFsAE{ +//private: +protected: + PF_Boolean m_is16Bit; + PF_Boolean m_Enabled; + long m_Frame; +public: + CFsAE( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) + { + //とりあえず初期化 + m_Enabled = FALSE; + m_is16Bit = FALSE; + if ( (params==NULL)||(output==NULL) ) return; + + CFsAE::in_data = in_data; + CFsAE::out_data = out_data; + CFsAE::input = ¶ms[0]->u.ld; //入力画像のアドレス + CFsAE::output = output; + m_is16Bit = PF_WORLD_IS_DEEP( CFsAE::input ); + + if ( input==NULL ) return; + + //カレントフレームを求める画頭は0 + if ( (in_data->current_time>=0)&&(in_data->time_step>0) ) { + m_Frame =(in_data->current_time/in_data->time_step); + }else{ + m_Frame = 0; + } + in = new CFsGraph(CFsAE::input,in_data); + out = new CFsGraph(CFsAE::output,in_data); + + m_Enabled = TRUE; + } + + + ~CFsAE(){ + delete in; + delete out; + } // ←デストラクタ + + PF_InData *in_data; + PF_OutData *out_data; + PF_EffectWorld *input; + PF_EffectWorld *output; + CFsGraph* in; + CFsGraph* out; + + PF_Boolean Enabled(){ return m_Enabled;} + PF_Boolean is16Bit(){ return m_is16Bit;} + long frame(){ return m_Frame; } + + PF_Err Copy(){ return PF_COPY(input, output, NULL, NULL);} + PF_Err Blend(PF_Fixed per){ + if (m_Enabled==FALSE) return 0xFF; + if (m_is16Bit==TRUE){ + FsBlend16(input,output,per); + }else{ + FsBlend8(input,output,per); + } + } +}; +//****************************************************************************** +// +//****************************************************************************** +//****************************************************************************** + +#endif diff --git a/MainLineRepaint_old/FsGraphics.cpp b/MainLineRepaint_old/FsGraphics.cpp new file mode 100644 index 0000000..2abc548 --- /dev/null +++ b/MainLineRepaint_old/FsGraphics.cpp @@ -0,0 +1,635 @@ +#include "FsGraphics.h" + + +inline void swapLong(long *s,long *d) +{ + long temp = *s; + *d = *s; + *s = temp; +} +//****************************************************************************** +/* + CFsGraph + 描画用のクラス +*/ +//****************************************************************************** +CFsGraph::CFsGraph( + PF_EffectWorld *world, + PF_InData *in_data) +{ + //メンバの初期化 + m_Enabled = FALSE; + m_in_data = NULL; + m_world = NULL; + m_data = NULL; + m_is16Bit = FALSE; + + m_width = 0; + m_widthTrue = 0; + m_height = 0; + m_offsetWidth = 0; + + lineHeiht = 1; + + if ( (world==NULL)||(in_data==NULL) ) return; + m_in_data = in_data; + m_world = world; + m_data = world->data; + m_is16Bit = PF_WORLD_IS_DEEP( m_world ); + m_width = m_world->width; + m_height = m_world->height; + if (m_is16Bit==TRUE){ + m_widthTrue = m_world->rowbytes / sizeof(PF_Pixel16); + }else{ + m_widthTrue = m_world->rowbytes / sizeof(PF_Pixel); + } + m_offsetWidth = m_widthTrue - m_width; + + m_Enabled = TRUE; +} +//****************************************************************************** +void CFsGraph::XLine8(long x0,long x1,long y,PF_Pixel col) +{ + PF_Pixel *data = (PF_Pixel *)m_data; + long w = m_width; + long wt = m_widthTrue; + long h = m_height; + long xx0 = x0; + long xx1 = x1; + long yy = y; + long target,i,j; + long hh = lineHeiht-1; + if (hh<0) return; + PF_Pixel c = col; + + //クリッピング + if ( ((yy+hh)<0)||((yy-hh)>=h) ) return; + + //起点と終点の確認 + if (xx0>xx1) swapLong(&xx0,&xx1); + if ( (xx0>=w) || (xx1<0) ) return; + if (xx0<0) xx0=0; + if (xx1>=w) xx1=w-1; + for (j=0;j<=hh;j++) { + yy = y+j; + if ( (yy>=0)&&(yy=h) ) return; + + //起点と終点の確認 + if (xx0>xx1) swapLong(&xx0,&xx1); + if ( (xx0>=w) || (xx1<0) ) return; + if (xx0<0) xx0=0; + if (xx1>=w) xx1=w-1; + for (j=0;j<=hh;j++) { + yy = y+j; + if ( (yy>=0)&&(yy=w) ) return; + + //起点と終点の確認 + if (yy0>yy1) swapLong(&yy0,&yy1); + if ( (yy0>=h) || (yy1<0) ) return; + if (yy0<0) yy0=0; + if (yy1>=h) yy1=h-1; + + for (j=0;j<=hh;j++){ + xx = x+j; + if ( (xx>=0)&&(xx=w) ) return; + + //起点と終点の確認 + if (yy0>yy1) swapLong(&yy0,&yy1); + if ( (yy0>=h) || (yy1<0) ) return; + if (yy0<0) yy0=0; + if (yy1>=h) yy1=h-1; + + for (j=0;j<=hh;j++){ + xx = x+j; + if ( (xx>=0)&&(xx x0 ) ? 1 : -1; + dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1; + sy = ( y1 > y0 ) ? 1 : -1; + dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1; + + long x = x0; + long y = y0; + /* 傾きが1以下の場合 */ + if( dx >= dy ) { + E = -dx; + for( i = 0; i <= dx; i++ ) { + setPixelBlend8(x,y,c); + x += sx; + E += 2 * dy; + if( E >= 0 ) { + y += sy; + E -= 2 * dx; + } + } + /* 傾きが1より大きい場合 */ + } else { + E = -dy; + for( i = 0; i <= dy; i++ ) { + setPixelBlend8(x,y,c); + y += sy; + E += 2 * dx; + if( E >= 0 ) { + x += sx; + E -= 2 * dy; + } + } + } +} + +//****************************************************************************** +void CFsGraph::Line16(long x0,long y0,long x1,long y1,PF_Pixel16 col) +{ + long E; + long dx,dy,sx,sy,i; + + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + long w = m_width; + long h = m_height; + PF_Pixel16 c = col; + + sx = ( x1 > x0 ) ? 1 : -1; + dx = ( x1 > x0 ) ? x1 - x0 : x0 - x1; + sy = ( y1 > y0 ) ? 1 : -1; + dy = ( y1 > y0 ) ? y1 - y0 : y0 - y1; + + long x = x0; + long y = y0; + /* 傾きが1以下の場合 */ + if( dx >= dy ) { + E = -dx; + for( i = 0; i <= dx; i++ ) { + setPixelBlend16(x,y,c); + x += sx; + E += 2 * dy; + if( E >= 0 ) { + y += sy; + E -= 2 * dx; + } + } + /* 傾きが1より大きい場合 */ + } else { + E = -dy; + for( i = 0; i <= dy; i++ ) { + setPixelBlend16(x,y,c); + y += sy; + E += 2 * dx; + if( E >= 0 ) { + x += sx; + E -= 2 * dy; + } + } + } +} +//****************************************************************************** +void CFsGraph::boxFill8(long x0,long y0,long x1,long y1,PF_Pixel col) +{ + PF_Pixel *data = (PF_Pixel *)m_data; + long w = m_width; + long wt = m_widthTrue; + long wo; + long h = m_height; + long xx0 = x0; + long xx1 = x1; + long yy0 = y0; + long yy1 = y1; + long target,i,j; + PF_Pixel c = col; + // + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx0>=w) || (yy0>=h) || (xx1<0) || (yy1<0) ) return; + + if (xx0<0) xx0=0; + if (yy0<0) yy0=0; + if (xx1>=w) xx1=w-1; + if (yy1>=h) yy1=h-1; + + wo = wt -(xx1-xx0+1); + target = xx0 + yy0 * wt; + for (j=yy0; j<=yy1; j++){ + for (i=xx0; i<=xx1; i++){ + data[target]= PixelBlend8(data[target],c); + target++; + } + target += wo; + } + +} +//****************************************************************************** +void CFsGraph::boxFill16(long x0,long y0,long x1,long y1,PF_Pixel16 col) +{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + long w = m_width; + long wt = m_widthTrue; + long wo; + long h = m_height; + long xx0 = x0; + long xx1 = x1; + long yy0 = y0; + long yy1 = y1; + long target,i,j; + PF_Pixel16 c = col; + // + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx0>=w) || (yy0>=h) || (xx1<0) || (yy1<0) ) return; + + if (xx0<0) xx0=0; + if (yy0<0) yy0=0; + if (xx1>=w) xx1=w-1; + if (yy1>=h) yy1=h-1; + + target = xx0 + yy0 * wt; + wo = wt -(xx1-xx0+1); + for (j=yy0; j<=yy1; j++){ + for (i=xx0; i<=xx1; i++){ + data[target]= PixelBlend16(data[target],c); + target++; + } + target += wo; + } + +} +//****************************************************************************** +void CFsGraph::circle8(long x ,long y, long r,PF_Pixel col) +{ + //void circle(FsGrfPrm *prm, long cx ,long cy, long r) + PF_Pixel c = col; + long ix,iy,px,py,F; + long xx = x; + long yy = y; + if (r<=0) return; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix >= iy ) { + px = xx + ix; py = yy + iy; setPixelBlend8(px,py,c); + px = xx - ix; py = yy + iy; setPixelBlend8(px,py,c); + px = xx + ix; py = yy - iy; setPixelBlend8(px,py,c); + px = xx - ix; py = yy - iy; setPixelBlend8(px,py,c); + px = xx + iy; py = yy + ix; setPixelBlend8(px,py,c); + px = xx - iy; py = yy + ix; setPixelBlend8(px,py,c); + px = xx + iy; py = yy - ix; setPixelBlend8(px,py,c); + px = xx - iy; py = yy - ix; setPixelBlend8(px,py,c); + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + +} +//****************************************************************************** +void CFsGraph::circle16(long x ,long y, long r,PF_Pixel16 col) +{ + //void circle(FsGrfPrm *prm, long cx ,long cy, long r) + PF_Pixel16 c = col; + long ix,iy,px,py,F; + long xx = x; + long yy = y; + if (r<=0) return; + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix >= iy ) { + px = xx + ix; py = yy + iy; setPixelBlend16(px,py,c); + px = xx - ix; py = yy + iy; setPixelBlend16(px,py,c); + px = xx + ix; py = yy - iy; setPixelBlend16(px,py,c); + px = xx - ix; py = yy - iy; setPixelBlend16(px,py,c); + px = xx + iy; py = yy + ix; setPixelBlend16(px,py,c); + px = xx - iy; py = yy + ix; setPixelBlend16(px,py,c); + px = xx + iy; py = yy - ix; setPixelBlend16(px,py,c); + px = xx - iy; py = yy - ix; setPixelBlend16(px,py,c); + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + +} +//****************************************************************************** +void CFsGraph::circleFill8(long x ,long y, long r,PF_Pixel col) +{ + PF_Pixel c = col; + long bak = lineHeiht; + lineHeiht =1; + long xx = x; + long yy = y; + + long ix,iy,F; + long px0,px1,py0,py1; + + if (r>0) { + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + ix; + px1 =xx - ix; + py0 =yy + iy; + XLine8(px0,px1,py0,c); + + if ( iy>0){ + px0 =xx + ix; + px1 =xx - ix; + py0 =yy - iy; + XLine8(px0,px1,py0,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + long k = iy; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + iy; + py0 =yy - ix; + py1 =yy - k; + YLine8(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine8(px0,py0,py1,c); + + if (iy>0){ + px0 =xx - iy; + py0 =yy - ix; + py1 =yy - k; + YLine8(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine8(px0,py0,py1,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + + } + lineHeiht =bak; +} +//****************************************************************************** +void CFsGraph::circleFill16(long x ,long y, long r,PF_Pixel16 col) +{ + PF_Pixel16 c = col; + long bak = lineHeiht; + lineHeiht =1; + long xx = x; + long yy = y; + + long ix,iy,F; + long px0,px1,py0,py1; + + if (r>0){ + + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + ix; + px1 =xx - ix; + py0 =yy + iy; + XLine16(px0,px1,py0,c); + if (iy>0){ + px0 =xx + ix; + px1 =xx - ix; + py0 =yy - iy; + XLine16(px0,px1,py0,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + long k = iy; + ix = r; + iy = 0; + F = -2 * r + 3; + while ( ix > iy ) { + px0 =xx + iy; + py0 =yy - ix; + py1 =yy - k; + YLine16(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine16(px0,py0,py1,c); + if (iy>0) { + px0 =xx - iy; + py0 =yy - ix; + py1 =yy - k; + YLine16(px0,py0,py1,c); + py0 =yy + ix; + py1 =yy + k; + YLine16(px0,py0,py1,c); + } + if ( F >= 0 ) { + ix--; + F -= 4 * ix; + } + iy++; + F += 4 * iy + 2; + } + + } + lineHeiht = bak; +} +//****************************************************************************** +void CFsGraph::box8(long x0,long y0,long x1,long y1,PF_Pixel colu,PF_Pixel cold) +{ + long bak = lineHeiht; + lineHeiht = 1; + long hh = bak; + long xx0 = x0; + long yy0 = y0; + long xx1 = x1; + long yy1 = y1; + long i; + + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx1-xx0) < (hh*2) ){ + hh = (xx1-xx0) / 2; + } + + if ( (yy1-yy0) < (hh*2) ){ + hh = (yy1-yy0) / 2; + } + hh = hh -1; + + if (hh>=0) { + for (i=0; i<=hh;i++){ + //上 + XLine8(xx0,xx1,yy0,colu); + //左 + YLine8(xx0,yy0+1,yy1-1,colu); + + //下 + XLine8(xx0,xx1,yy1,cold); + //右 + YLine8(xx1,yy0+1,yy1-1,cold); + xx0++; + yy0++; + xx1--; + yy1--; + } + } + lineHeiht = bak; + +} +//****************************************************************************** +void CFsGraph::box16(long x0,long y0,long x1,long y1,PF_Pixel16 colu,PF_Pixel16 cold) +{ + long bak = lineHeiht; + lineHeiht = 1; + long hh = bak; + long xx0 = x0; + long yy0 = y0; + long xx1 = x1; + long yy1 = y1; + long i; + + if (xx0>xx1) swapLong(&xx0,&xx1); + if (yy0>yy1) swapLong(&yy0,&yy1); + + if ( (xx1-xx0) < (hh*2) ){ + hh = (xx1-xx0) / 2; + } + + if ( (yy1-yy0) < (hh*2) ){ + hh = (yy1-yy0) / 2; + } + hh = hh -1; + + if (hh>=0) { + for (i=0; i<=hh;i++){ + //上 + XLine16(xx0,xx1,yy0,colu); + //左 + YLine16(xx0,yy0+1,yy1-1,colu); + + //下 + XLine16(xx0,xx1,yy1,cold); + //右 + YLine16(xx1,yy0+1,yy1-1,cold); + xx0++; + yy0++; + xx1--; + yy1--; + } + } + lineHeiht = bak; + + +} +//****************************************************************************** diff --git a/MainLineRepaint_old/FsGraphics.h b/MainLineRepaint_old/FsGraphics.h new file mode 100644 index 0000000..ffdde3a --- /dev/null +++ b/MainLineRepaint_old/FsGraphics.h @@ -0,0 +1,349 @@ +#ifndef FsGraphics_H +#define FsGraphics_H + +#pragma once + +#include "AEConfig.h" + +#include "entry.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_Macros.h" +#include "Param_Utils.h" + +#ifdef AE_OS_WIN + #include +#endif +//******************************************************************************************* +/* + 描画用のクラス + EffectWorldとin_dataから作成 +*/ +//******************************************************************************************* +class CFsGraph{ +private: + PF_Boolean m_Enabled; + PF_InData *m_in_data; + PF_EffectWorld *m_world; + PF_PixelPtr m_data; + PF_Boolean m_is16Bit; + + long m_width; + long m_height; + long m_widthTrue; + long m_offsetWidth; + //-------------------------------------------------------------------- + // paint start + typedef struct { + long Xleft; /* 領域左端のX座標 */ + long Xright; /* 領域右端のX座標 */ + long Y; /* 領域のY座標 */ + long Yparent; /* 親ラインのY座標 */ + } paintQue; + + typedef struct { + PF_Pixel targetCol; + PF_Pixel16 targetCol16; + long max; + long start; + long last; + paintQue now; + paintQue *buf; + }paintPrm; + + PF_Boolean paint_cmp8(PF_Pixel s,PF_Pixel d){ return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue) );} + PF_Boolean paint_cmp16(PF_Pixel16 s,PF_Pixel16 d){return ( (s.red==d.red)&&(s.green==d.green)&&(s.blue==d.blue));} + PF_Pixel paint_getPix8(long x,long y){ PF_Pixel *data =(PF_Pixel *)m_data; return data[x + y * m_widthTrue];}; + PF_Pixel16 paint_getPix16(long x,long y){ PF_Pixel16 *data =(PF_Pixel16 *)m_data; return data[x + y * m_widthTrue];}; + void paint_scan_line8(paintPrm *prm); + void paint_scan_line16(paintPrm *prm); + // paint end + //-------------------------------------------------------------------- +//protected: + +public: + //PF_Err paint16(long x, long y,PF_Pixel col); + PF_Err paint16(long x, long y,PF_Pixel16 col); + PF_Err paint8(long x, long y,PF_Pixel col); + //----------------------- + CFsGraph( PF_EffectWorld *world, PF_InData *in_data); + //~CFsGraph(); + //----------------------- + PF_Boolean Enabled(){ return m_Enabled;} + PF_Boolean is16Bit(){ return m_is16Bit;} + long width(){ return m_width;} + long height(){ return m_height;} + long widthTrue(){ return m_widthTrue;} + long offsetWidth(){ return m_offsetWidth;} + PF_PixelPtr data() {return m_data;} + //----------------------- + //塗りつぶし + //PF_Err paint(long x, long y,PF_Pixel col); + //----------------------- + //AlphaBlend + inline PF_Pixel PixelBlend8(PF_Pixel src,PF_Pixel dst) + { + PF_Pixel rr = {0,0,0,0}; + PF_Pixel ss = src; + PF_Pixel dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN8) ) return dd; + if (dd.alpha == 0) return ss; + + long as2 = ( (PF_MAX_CHAN8+1) - dd.alpha) * ss.alpha >> 8; + long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN8) ad2 = PF_MAX_CHAN8; + + if (ad2<=0) { + //0の除算を防ぐ + return rr; + }else{ + long r = ( dd.red * dd.alpha + ss.red * as2 ); + long g = ( dd.green * dd.alpha + ss.green * as2 ); + long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + //除算をなるべく早くする。無駄かな? + switch(ad2){ + case 1:break; + case 2: r = r >>1;g = g >>1;b = b >>1;break; + case 4: r = r >>2;g = g >>2;b = b >>2;break; + case 8: r = r >>3;g = g >>3;b = b >>3;break; + case 16: r = r >>4;g = g >>4;b = b >>4;break; + case 32: r = r >>5;g = g >>5;b = b >>5;break; + case 64: r = r >>6;g = g >>6;b = b >>6;break; + case 128:r = r >>7;g = g >>7;b = b >>7;break; + default: + r/=ad2; g/=ad2; b/=ad2; + } + + if (r>PF_MAX_CHAN8) r = PF_MAX_CHAN8; + if (g>PF_MAX_CHAN8) g = PF_MAX_CHAN8; + if (b>PF_MAX_CHAN8) b = PF_MAX_CHAN8; + + rr.alpha = (unsigned char)ad2; + rr.red = (unsigned char)r; + rr.green = (unsigned char)g; + rr.blue = (unsigned char)b; + return rr; + } + } + inline PF_Pixel16 PixelBlend16(PF_Pixel16 src,PF_Pixel16 dst) + { + PF_Pixel16 rr = {0,0,0,0}; + PF_Pixel16 ss = src; + PF_Pixel16 dd = dst; + + if ( (ss.alpha == 0)||(dd.alpha==PF_MAX_CHAN8) ) return dd; + if (dd.alpha == 0) return ss; + long as2 = ( PF_MAX_CHAN16 - dd.alpha) * ss.alpha >> 15; + long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN16) ad2 = PF_MAX_CHAN16; + + if (ad2<=0) { + return rr; + }else{ + long r = ( dd.red * dd.alpha + ss.red * as2 ); + long g = ( dd.green * dd.alpha + ss.green * as2 ); + long b = ( dd.blue * dd.alpha + ss.blue * as2 ); + //除算をなるべく早くする。無駄かな? + switch(ad2){ + case 1:break; + case 2: r = r >>1;g = g >>1;b = b >>1;break; + case 4: r = r >>2;g = g >>2;b = b >>2;break; + case 8: r = r >>3;g = g >>3;b = b >>3;break; + case 16: r = r >>4;g = g >>4;b = b >>4;break; + case 32: r = r >>5;g = g >>5;b = b >>5;break; + case 64: r = r >>6;g = g >>6;b = b >>6;break; + case 128:r = r >>7;g = g >>7;b = b >>7;break; + case 256:r = r >>8;g = g >>8;b = b >>8;break; + case 512:r = r >>9;g = g >>9;b = b >>9;break; + case 1024:r= r >>10;g = g >>10;b = b >>10;break; + case 2048:r= r >>11;g = g >>11;b = b >>11;break; + case 4096:r= r >>12;g = g >>12;b = b >>12;break; + case 8192:r= r >>13;g = g >>13;b = b >>13;break; + case 16384:r=r >>14;g = g >>14;b = b >>14;break; + case 32768:r=r >>15;g = g >>15;b = b >>15;break; + default: + r/=ad2; g/=ad2; b/=ad2; + } + + if (r>PF_MAX_CHAN16) r = PF_MAX_CHAN16; + if (g>PF_MAX_CHAN16) g = PF_MAX_CHAN16; + if (b>PF_MAX_CHAN16) b = PF_MAX_CHAN16; + + rr.alpha = (unsigned short)ad2; + rr.red = (unsigned short)r; + rr.green = (unsigned short)g; + rr.blue = (unsigned short)b; + return rr; + } + } + //----------------------- + //point/pset + inline PF_Pixel getPixel8_F(long x, long y){ + long xx = x; + if (xx<0) { xx=0; }else if (xx>=m_width) {xx = m_width -1;} + long yy = y; + if (yy<0) { yy=0; }else if (yy>=m_height) {yy = m_height -1;} + + PF_Pixel *data = (PF_Pixel *)m_data; + return data[xx + yy * m_widthTrue]; + } + + inline PF_Pixel getPixel8(long x, long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel r ={0,0,0,0}; + return r; + }else{ + PF_Pixel *data = (PF_Pixel *)m_data; + return data[x + y * m_widthTrue]; + } + } + inline PF_Pixel getPixel8_W(long x, long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel r ={PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + return r; + }else{ + PF_Pixel *data = (PF_Pixel *)m_data; + return data[x + y * m_widthTrue]; + } + } + inline PF_Pixel16 getPixel16_F(long x, long y){ + long xx = x; + if (xx<0) { xx=0; }else if (xx>=m_width) {xx = m_width -1;} + long yy = y; + if (yy<0) { yy=0; }else if (yy>=m_height) {yy = m_height -1;} + + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + + return data[xx + yy * m_widthTrue]; + } + inline PF_Pixel16 getPixel16(long x, long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel16 r ={0,0,0,0}; + return r; + }else{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + return data[x + y * m_widthTrue]; + } + } + inline PF_Pixel16 getPixel16_W(long x, long y){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) { + PF_Pixel16 r ={PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; + return r; + }else{ + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + return data[x + y * m_widthTrue]; + } + } + inline void setPixel8(long x, long y,PF_Pixel col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel *data = (PF_Pixel *)m_data; + data[x + y * m_widthTrue] = col; + } + + inline void setPixel16(long x, long y,PF_Pixel16 col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + data[x + y * m_widthTrue] = col; + } + inline void setPixelBlend8(long x, long y,PF_Pixel col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel *data = (PF_Pixel *)m_data; + PF_Pixel s; + long adr = x + y * m_widthTrue; + s =data[adr]; + data[adr] = PixelBlend8(s,col); + } + inline void setPixelBlend16(long x, long y,PF_Pixel16 col){ + if ( (x<0) || (y<0) || (x>=m_width) || (y>=m_height) ) return; + PF_Pixel16 *data = (PF_Pixel16 *)m_data; + PF_Pixel16 s; + long adr = x + y * m_widthTrue; + s = data[adr]; + data[adr] = PixelBlend16(s,col); + } + //----------------------- + // Line幅 + //これが影響するのは今のところ + // XLine YLine Boxのみ + long lineHeiht; + //----------------------- + //Line + void XLine8(long x0,long x1,long y,PF_Pixel col); + void XLine16(long x0,long x1,long y,PF_Pixel16 col); + void YLine8(long x0,long y0,long y1,PF_Pixel col); + void YLine16(long x0,long y0,long y1,PF_Pixel16 col); + void Line8(long x0,long y0,long x1,long y1,PF_Pixel col); + void Line16(long x0,long y0,long x1,long y1,PF_Pixel16 col); + //----------------------- + //Box + void boxFill8(long x0,long y0,long x1,long y1,PF_Pixel col); + void boxFill16(long x0,long y0,long x1,long y1,PF_Pixel16 col); + void box8(long x0,long y0,long x1,long y1,PF_Pixel colu,PF_Pixel cold); + void box8(long x0,long y0,long x1,long y1,PF_Pixel col){box8(x0,y0,x1,y1,col,col);} + void box16(long x0,long y0,long x1,long y1,PF_Pixel16 colu,PF_Pixel16 cold); + void box16(long x0,long y0,long x1,long y1,PF_Pixel16 col){box16(x0,y0,x1,y1,col,col);} + //----------------------- + //circle + void circle8(long x ,long y, long r,PF_Pixel col); + void circle16(long x ,long y, long r,PF_Pixel16 col); + void circleFill8(long x ,long y, long r,PF_Pixel col); + void circleFill16(long x ,long y, long r,PF_Pixel16 col); + //----------------------- + //画面消去 + PF_Err clear(){ PF_InData *in_data = m_in_data; return PF_FILL(NULL, NULL, m_world);} + PF_Err clear(PF_Pixel col){ PF_InData *in_data = m_in_data; return PF_FILL(&col, NULL, m_world);} + //----------------------- + void swapLong(long *s, long *d){ + long temp; + temp = *s; + *s =*d; + *d = temp; + } +}; +//****************************************************************************** +// FsGraphicsBlend.cpp +// Blend関数 +// perは(0L<<16)から(1L<<16)の間 +//****************************************************************************** +PF_Err FsBlend8(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per); +PF_Err FsBlend16(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per); + +//****************************************************************************** + +//****************************************************************************** +/* +アルファーブレンド関数 +以下の記事をそのまま流用。 + +参考元 +悟茶辞苑ッ -ごちゃたんファンクラブくらぶ- +http://d.hatena.ne.jp/GOCHA/20071027/alphablend + +の2007-10-27 土曜日「RGBAのアルファブレンドに感激 -続・レイヤー処理- 」の記事 + +A(s): 合成元(下のレイヤー)の不透明度 +A(d): 合成先(上のレイヤー)の不透明度 +A(s'): 合成元(下のレイヤー)の合成量 +A(d'): 合成結果の不透明度 + +A(s') = (1.0 - A(d)) * A(s); +A(d') = A(d) + A(s'); + +A(d') = A(d) + (1.0 - A(d)) * A(s) + +c(s): 合成元(下のレイヤー)の輝度(RGBそれぞれの値に対応) +c(d): 合成先(上のレイヤー)の輝度(RGBそれぞれの値に対応) +c(d'): 合成結果の輝度(RGBそれぞれの値に対応) +c(d') = c(d) * (A(d) / A(d')) + c(s) * (A(s') / A(d')) + +A(d')による除算部分をくくって変形すると、 + +c(d') = (c(d) * A(d) + c(s) * A(s')) / A(d'); + + +*/ +//****************************************************************************** +#endif diff --git a/MainLineRepaint_old/FsGraphicsBlend.cpp b/MainLineRepaint_old/FsGraphicsBlend.cpp new file mode 100644 index 0000000..3bdf15a --- /dev/null +++ b/MainLineRepaint_old/FsGraphicsBlend.cpp @@ -0,0 +1,161 @@ +#include "FsGraphics.h" + +//********************************************************************************************** +PF_Err FsBlend8(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per) +{ + PF_Err err = PF_Err_NONE; + PF_Fixed p = per; + PF_Fixed p2; + + PF_Pixel *inData; + PF_Pixel *outData; + + inData = input->data; + outData = output->data; + long width = input->width; + long height = input->height; + long inWidth = input->rowbytes/sizeof(PF_Pixel); + long outWidth = output->rowbytes/sizeof(PF_Pixel); + long offsetInWidth = inWidth - width; + long offsetOutWidth = outWidth - width; + + long i,j,targetIn,targetOut,temp; + PF_Pixel pin,pout; + if ((input==NULL)||(output==NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + //p = p / 100; + if (p<(0L<<16)) p = 0L<<16; + if (p>(1L<<16)) p = 1L<<16; + p2 = (1L<<16) - p; + + if (p==0){ + //何もしない。 + return err; + }else if (p == (1L<<16)) { + targetIn = targetOut =0; + for (j=0;j> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.alpha = (unsigned char)temp; + + temp = ( pin.red * p + pout.red * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.red = (unsigned char)temp; + + temp = ( pin.green * p + pout.green * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.green = (unsigned char)temp; + + temp = ( pin.blue * p + pout.blue * p2) >> 16; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN8) { temp=PF_MAX_CHAN8;} + pout.blue = (unsigned char)temp; + + outData[targetOut] = pout; + + targetIn++; + targetOut++; + } + targetIn += offsetInWidth; + targetOut+= offsetOutWidth; + } + } + + return err; +} +//********************************************************************************************** +PF_Err FsBlend16(PF_EffectWorld *input,PF_EffectWorld *output,PF_Fixed per) +{ + PF_Err err = PF_Err_NONE; + PF_Fixed p = per; + PF_Fixed p2; + + PF_Pixel16 *inData; + PF_Pixel16 *outData; + + inData = (PF_Pixel16 *)input->data; + outData = (PF_Pixel16 *)output->data; + long width = input->width; + long height = input->height; + long inWidth = input->rowbytes/sizeof(PF_Pixel16); + long outWidth = output->rowbytes/sizeof(PF_Pixel16); + long offsetInWidth = inWidth - width; + long offsetOutWidth = outWidth - width; + + long i,j,targetIn,targetOut,temp; + PF_Pixel16 pin,pout; + + if ((input==NULL)||(output==NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + p = p >>2; + if (p<(0L<<14)) p = 0L<<14; + if (p>(1L<<14)) p = 1L<<14; + p2 = (1L<<14) - p; + + if (p==0){ + //何もしない。 + return err; + }else if (p == (1L<<14)) { + targetIn = targetOut =0; + for (j=0;j> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.alpha = (unsigned short)temp; + + temp = ( pin.red * p + pout.red * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.red = (unsigned short)temp; + + temp = ( pin.green * p + pout.green * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.green = (unsigned short)temp; + + temp = ( pin.blue * p + pout.blue * p2) >> 14; + if (temp<0) { temp=0; } else if (temp>PF_MAX_CHAN16) { temp=PF_MAX_CHAN16;} + pout.blue = (unsigned short)temp; + + outData[targetOut] = pout; + + targetIn++; + targetOut++; + } + targetIn += offsetInWidth; + targetOut+= offsetOutWidth; + } + } + + return err; +} +//********************************************************************************************** + diff --git a/MainLineRepaint_old/FsGraphicsPaint.cpp b/MainLineRepaint_old/FsGraphicsPaint.cpp new file mode 100644 index 0000000..5da273c --- /dev/null +++ b/MainLineRepaint_old/FsGraphicsPaint.cpp @@ -0,0 +1,330 @@ +#include "FsGraphics.h" + +//------------------------------------------------------------------------------ +void CFsGraph::paint_scan_line8(paintPrm *prm) +{ + paintPrm *p = prm; + long xl = prm->now.Xleft; + long xr = prm->now.Xright; + long y = prm->now.Y; + long oy = prm->now.Yparent; + PF_Pixel col = prm->targetCol; + + while(xl <= xr){ + while(xl < xr){ + if ( paint_cmp8( paint_getPix8(xl,y),col)==TRUE ) break; + xl++; + } + if (paint_cmp8( paint_getPix8(xl,y),col)==FALSE) break; + p->buf[p->last].Xleft = xl; + + while (xl <= xr) { + if (paint_cmp8( paint_getPix8(xl,y),col)==FALSE) break; + xl++; + } + p->buf[p->last].Xright = xl -1; + p->buf[p->last].Y = y; + p->buf[p->last].Yparent = oy; + p->last+=1; + if (p->last==p->max) p->last = 0; + } +} +//------------------------------------------------------------------------------ +void CFsGraph::paint_scan_line16(paintPrm *prm) +{ + paintPrm *p = prm; + long xl = prm->now.Xleft; + long xr = prm->now.Xright; + long y = prm->now.Y; + long oy = prm->now.Yparent; + PF_Pixel16 col = prm->targetCol16; + + while(xl <= xr){ + while(xl < xr){ + if ( paint_cmp16( paint_getPix16(xl,y),col)==TRUE ) break; + xl++; + } + if (paint_cmp16( paint_getPix16(xl,y),col)==FALSE) break; + p->buf[p->last].Xleft = xl; + + while (xl <= xr) { + if (paint_cmp16( paint_getPix16(xl,y),col)==FALSE) break; + xl++; + } + p->buf[p->last].Xright = xl -1; + p->buf[p->last].Y = y; + p->buf[p->last].Yparent = oy; + p->last+=1; + if (p->last==p->max) p->last = 0; + } +} +//------------------------------------------------------------------------------ +PF_Err CFsGraph::paint8(long x, long y, PF_Pixel col) +{ + PF_Err err = PF_Err_NONE; + paintPrm prm; + PF_Handle queTable = NULL; + PF_InData *in_data = m_in_data; + PF_Pixel *data = (PF_Pixel *)m_data; + long wt = m_widthTrue; + long i,target; + long lx,rx,uy,dy,oy; + long lxsav,rxsav; + PF_Pixel paintCol = col; + + if ( (x<0)||(y<0)||(x>=m_width)||(y>=m_height) ) { + return err; + } + + //バッファーの作成。初期値を代入 + queTable = PF_NEW_HANDLE(m_width * sizeof(paintQue)); + if (!queTable) { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + prm.buf = *(paintQue**)queTable; + + prm.max = m_width; + prm.start = 0; + prm.last = 1; + prm.buf[prm.start].Xleft = x; + prm.buf[prm.start].Xright = x; + prm.buf[prm.start].Y = y; + prm.buf[prm.start].Yparent = y; + prm.targetCol = paint_getPix8(x,y); + do { + lx = prm.buf[prm.start].Xleft; + rx = prm.buf[prm.start].Xright; + uy = prm.buf[prm.start].Y; + dy = prm.buf[prm.start].Y; + oy = prm.buf[prm.start].Yparent; + + lxsav = lx - 1; + rxsav = rx + 1; + + prm.start+=1; + if (prm.start == prm.max) prm.start =0; + + // 処理済のシードなら無視 + if (paint_cmp8(paint_getPix8(lx,uy),paintCol)==TRUE) continue; + + //右方向の境界を探す + while (rx < (m_width -1) ) { + if (paint_cmp8(paint_getPix8(rx+1,uy),prm.targetCol)==FALSE) break; + rx++; + } + + //左方向の境界を探す + while(lx>0) { + if (paint_cmp8(paint_getPix8(lx-1,uy),prm.targetCol)==FALSE) break; + lx--; + } + + //lx-rxの線分を描画 + target = lx + uy * wt; + for (i=lx;i<=rx;i++) { + data[target] = col; + target++; + } + + //真上のスキャンラインを走査する + uy--; + if (uy>=0) { + if (uy==oy) { + prm.now.Xleft = lx; + prm.now.Xright = lxsav; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + prm.now.Xleft = rxsav; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + }else{ + prm.now.Xleft = lx; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line8(&prm); + } + } + //真下のスキャンラインを走査する + dy++; + if (dy=m_width)||(y>=m_height) ) { + return err; + } + + paintCol = col; + /* + paintCol.alpha = (unsigned short)CONVERT8TO16(col.alpha); + paintCol.red = (unsigned short)CONVERT8TO16(col.red); + paintCol.green = (unsigned short)CONVERT8TO16(col.green); + paintCol.blue = (unsigned short)CONVERT8TO16(col.blue); + */ + //バッファーの作成。初期値を代入 + queTable = PF_NEW_HANDLE(m_width * sizeof(paintQue)); + if (!queTable) { + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + prm.buf = *(paintQue**)queTable; + + prm.max = m_width; + prm.start = 0; + prm.last = 1; + prm.buf[prm.start].Xleft = x; + prm.buf[prm.start].Xright = x; + prm.buf[prm.start].Y = y; + prm.buf[prm.start].Yparent = y; + prm.targetCol16 = paint_getPix16(x,y); + do { + lx = prm.buf[prm.start].Xleft; + rx = prm.buf[prm.start].Xright; + uy = prm.buf[prm.start].Y; + dy = prm.buf[prm.start].Y; + oy = prm.buf[prm.start].Yparent; + + lxsav = lx - 1; + rxsav = rx + 1; + + prm.start+=1; + if (prm.start == prm.max) prm.start =0; + + // 処理済のシードなら無視 + if (paint_cmp16(paint_getPix16(lx,uy),paintCol)==TRUE) continue; + + //右方向の境界を探す + while (rx < (m_width -1) ) { + if (paint_cmp16(paint_getPix16(rx+1,uy),prm.targetCol16)==FALSE) break; + rx++; + } + + //左方向の境界を探す + while(lx>0) { + if (paint_cmp16(paint_getPix16(lx-1,uy),prm.targetCol16)==FALSE) break; + lx--; + } + + //lx-rxの線分を描画 + target = lx + uy * wt; + for (i=lx;i<=rx;i++) { + data[target] = paintCol; + target++; + } + + //真上のスキャンラインを走査する + uy--; + if (uy>=0) { + if (uy==oy) { + prm.now.Xleft = lx; + prm.now.Xright = lxsav; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + prm.now.Xleft = rxsav; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + }else{ + prm.now.Xleft = lx; + prm.now.Xright = rx; + prm.now.Y = uy; + prm.now.Yparent = uy+1; + paint_scan_line16(&prm); + } + } + //真下のスキャンラインを走査する + dy++; + if (dyreturn_msg, + "%s, v%d.%d%d\r%s", + STR(StrID_Name), + MAJOR_VERSION, + MINOR_VERSION, + BUG_VERSION, + STR(StrID_Description) + ); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + + //AE_Effect.hで定義されるPF_VERSIONマクロで求められる値をリソースファイルのAE_Effect_Versionと一致させる事 + out_data->my_version = PF_VERSION( MAJOR_VERSION, + MINOR_VERSION, + BUG_VERSION, + STAGE_VERSION, + BUILD_VERSION); + + //Output Flags + //AE_Effect.hのOutput Flagsを参照 + //16Bit対応させる為wにはPF_OutFlag_DEEP_COLOR_AWAREを追加する + // + //------------------------------- + //必要なフレームはレンダリングしない。通常はこれ。 + //リソースファイルのAE_Effect_Global_OutFlagsの値は33555520 + /* +out_data->out_flags |= + PF_OutFlag_USE_OUTPUT_EXTENT | + PF_OutFlag_PIX_INDEPENDENT | + PF_OutFlag_DEEP_COLOR_AWARE; + */ + //------------------------------- + //ノイズ等で全フレーム描画する場合はこれ + //リソースファイルのAE_Effect_Global_OutFlagsの値は33559620 + /* +out_data->out_flags |= + PF_OutFlag_NON_PARAM_VARY | + PF_OutFlag_USE_OUTPUT_EXTENT | + PF_OutFlag_PIX_INDEPENDENT | + PF_OutFlag_I_SHRINK_BUFFER | + PF_OutFlag_DEEP_COLOR_AWARE; + */ +out_data->out_flags |= + PF_OutFlag_USE_OUTPUT_EXTENT | + PF_OutFlag_PIX_INDEPENDENT | + PF_OutFlag_DEEP_COLOR_AWARE; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR(StrID_MY_Main_Color), + 0x00, + 0x00, + 0x00, + MY_Main_Color + ); + + //---------------------------------------------------------------- + out_data->num_params = MY_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- + +PF_Err CMainLineRepaint::getParams( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + if ( (params==NULL)||(output==NULL) ) { + return 0xFF; + } + + Main_Color = params[MY_Main_Color]->u.cd.value; + + + + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +static PF_Err Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + + CMainLineRepaint exe(in_data,out_data,params,output); + + if ( exe.Enabled() == FALSE ) { + PF_SPRINTF( out_data->return_msg, + "[%s] %s", + STR(StrID_Name), + STR(StrID_ERR_getParams) + ); + return err; + } + + //画像を複写する + exe.Copy(); + + if (exe.is16Bit()==FALSE){ + exe.exec8(); + }else{ + exe.exec16(); + } + return err; +} +//------------------------------------------------------------------------------------------------- +DllExport PF_Err EntryPointFunc( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra) +{ + PF_Err err = PF_Err_NONE; + + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup(in_data,out_data,params,output); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; + } + return err; +} +//------------------------------------------------------------------------------------------------- diff --git a/MainLineRepaint_old/MainLineRepaint_old.h b/MainLineRepaint_old/MainLineRepaint_old.h new file mode 100644 index 0000000..1ef5095 --- /dev/null +++ b/MainLineRepaint_old/MainLineRepaint_old.h @@ -0,0 +1,580 @@ +/* + F's Plugins AfterEffects 7.0 SDK + MainLineRepaint +*/ + +#ifndef MainLineRepaint_H +#define MainLineRepaint_H + +#pragma once + +#include "AEConfig.h" + +#include "entry.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_Macros.h" +#include "Param_Utils.h" +#include "String_Utils.h" + +#include "MainLineRepaint_old_Strings.h" +#include "FsAE.h" +#include "FsGraphics.h" + + +#ifdef AE_OS_WIN + #include +#endif + +//バージョンを買えたMainLineRepaintPiPL.rのAE_Effect_Versionも変えること +#define MAJOR_VERSION 1 +#define MINOR_VERSION 0 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION PF_Stage_RELEASE +#define BUILD_VERSION 0 + + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + MY_INPUT = 0, // default input layer + + MY_Main_Color, + + MY_NUM_PARAMS + }; + + + +class CMainLineRepaint : public CFsAE{ +public: + CMainLineRepaint( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ):CFsAE(in_data,out_data,params,output){ + getParams(in_data,out_data,params,output); + } + + typedef struct { + long X; + long Y; + long Adr; + long len; + PF_Pixel mc8; + PF_Pixel16 mc16; + PF_Pixel fc8; + PF_Pixel16 fc16; + }findColorPrm; + + //パラメータを獲得する関数 + PF_Err getParams( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ); + //以下固有のパラメータ + PF_Pixel Main_Color; + + //------------------------------------------------------ + inline PF_Boolean cmpPx8(PF_Pixel c0,PF_Pixel c1){ + return ( (c0.blue == c1.blue)&&(c0.green == c1.green)&&(c0.red == c1.red) ); + } + //------------------------------------------------------ + inline PF_Boolean cmpPx16(PF_Pixel16 c0,PF_Pixel16 c1){ + return ( (c0.blue == c1.blue)&&(c0.green == c1.green)&&(c0.red == c1.red) ); + } + //------------------------------------------------------ + void alphaOn8() + { + int w = out->width(); + int h = out->height(); + int ow = out->offsetWidth(); + int i,j,target =0; + PF_Pixel c ; + PF_Pixel tc = {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + PF_Pixel* data = (PF_Pixel *)out->data(); + + for (j=0;jwidth(); + int h = out->height(); + int ow = out->offsetWidth(); + int i,j,target =0; + PF_Pixel16 c ; + PF_Pixel16 tc = {PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; + PF_Pixel16* data = (PF_Pixel16 *)out->data(); + + for (j=0;jwidth(); + int h = out->height(); + int ow = out->offsetWidth(); + int i,j,target =0; + PF_Pixel p = Main_Color; + PF_Pixel c ; + PF_Pixel tc = {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + PF_Pixel* data = (PF_Pixel *)out->data(); + + for (j=0;jgetPixel8_W(i-1,j-1),tc))&& + (cmpPx8(out->getPixel8_W(i ,j-1),tc))&& + (cmpPx8(out->getPixel8_W(i+1,j-1),tc))&& + (cmpPx8(out->getPixel8_W(i-1,j ),tc))&& + (cmpPx8(out->getPixel8_W(i+1,j ),tc))&& + (cmpPx8(out->getPixel8_W(i-1,j+1),tc))&& + (cmpPx8(out->getPixel8_W(i ,j+1),tc))&& + (cmpPx8(out->getPixel8_W(i+1,j+1),tc)) + ) + { + data[target] = tc; + } + } + target++; + } + target+= ow; + } + } + //------------------------------------------------------ + inline PF_Pixel16 change16(PF_Pixel c) + { + PF_Pixel16 p; + p.alpha = (unsigned short)CONVERT8TO16(c.alpha); + p.blue = (unsigned short)CONVERT8TO16(c.blue); + p.green = (unsigned short)CONVERT8TO16(c.green); + p.red = (unsigned short)CONVERT8TO16(c.red); + return p; + } + //------------------------------------------------------ + void onePointChk16() + { + int w = out->width(); + int h = out->height(); + int ow = out->offsetWidth(); + int i,j,target =0; + PF_Pixel16 p = change16(Main_Color); + PF_Pixel16 c ; + PF_Pixel16 tc = {PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; + PF_Pixel16* data = (PF_Pixel16 *)out->data(); + + for (j=0;jgetPixel16_W(i-1,j-1),tc))&& + (cmpPx16(out->getPixel16_W(i ,j-1),tc))&& + (cmpPx16(out->getPixel16_W(i+1,j-1),tc))&& + (cmpPx16(out->getPixel16_W(i-1,j ),tc))&& + (cmpPx16(out->getPixel16_W(i+1,j ),tc))&& + (cmpPx16(out->getPixel16_W(i-1,j+1),tc))&& + (cmpPx16(out->getPixel16_W(i ,j+1),tc))&& + (cmpPx16(out->getPixel16_W(i+1,j+1),tc)) + ) + { + data[target] = tc; + } + } + target++; + } + target+= ow; + } + } + //------------------------------------------------------ + PF_Boolean findColor8(findColorPrm *prm) + { + long x = prm->X; + long y = prm->Y; + long adr = prm->Adr; + PF_Pixel mc = prm->mc8; + PF_Pixel p = prm->mc8; + PF_Pixel W = {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + long l = prm->len; + + if (l<=0) { + return FALSE; + }else if (l==1){ + p = out->getPixel8_W(x-1,y-1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x ,y-1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x+1,y-1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x-1,y ); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + //p = out->getPixel8_W(x ,y ); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x+1,y ); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x-1,y+1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x ,y+1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + p = out->getPixel8_W(x+1,y+1); if ( ( cmpPx8(p,W)==FALSE)&&( cmpPx8(p,mc)==FALSE) ) {prm->fc8 = p; return TRUE; } + } + } + //------------------------------------------------------ + void mainColor8() + { + int w = out->width(); + int h = out->height(); + int ow = out->offsetWidth(); + PF_Pixel* data = (PF_Pixel *)out->data(); + PF_Pixel W = {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + + long i,j,ii,target =0; + //long jj; + long lp = 100; + PF_Pixel mc = Main_Color; + PF_Pixel tc,p; + long nv = 1000; + long pv = 1000; + + PF_Pixel nc = {0,0,0,PF_MAX_CHAN8}; + PF_Pixel BL = {0,0,0,PF_MAX_CHAN8}; + + //---------------------- + target =0; + for (j=0;jgetPixel8_W(i,j-ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i+ii,j-ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i+ii,j); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i+ii,j+ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i,j+ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i-ii,j+ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i-ii,j); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i-ii,j-ii); + if (cmpPx8(p,W)) { nv=-1;break; } + if (cmpPx8(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel8_W(i-1,j-1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i ,j-1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i+1,j-1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i-1,j );if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + //if (op==FALSE) { p = out->getPixel8_W(i ,j );if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i+1,j );if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i-1,j+1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i ,j+1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel8_W(i+1,j+1);if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + + if (op==TRUE) {out->paint8(i,j,p);} + } + target++; + + } + target += ow; + } + //------------------------------------------------------------- + target =0; + for (j=0;jwidth(); + int h = out->height(); + int ow = out->offsetWidth(); + PF_Pixel16* data = (PF_Pixel16 *)out->data(); + + long i,j,ii,target =0; + //long jj; + long lp = 100; + PF_Pixel16 mc = change16( Main_Color); + PF_Pixel16 tc,p; + long nv = 1000; + long pv = 1000; + + PF_Pixel16 nc = {0,0,0,PF_MAX_CHAN16}; + PF_Pixel16 BL = {0,0,0,PF_MAX_CHAN16}; + PF_Pixel16 W = {PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; + + + target =0; + for (j=0;jgetPixel16_W(i,j-ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i+ii,j-ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i+ii,j); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i+ii,j+ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i,j+ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i-ii,j+ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i-ii,j); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i-ii,j-ii); + if (cmpPx16(p,W)) { nv=-1;break; } + if (cmpPx16(p,mc)==FALSE) { nv=ii;break;} + } + if ( (nv>0)&&(nvgetPixel16_W(i-1,j-1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i ,j-1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i+1,j-1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i-1,j );if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + //if (op==FALSE) { p = out->getPixel8_W(i ,j );if ( (cmpPx8(p,mc)==FALSE)&&(cmpPx8(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i+1,j );if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i-1,j+1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i ,j+1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + if (op==FALSE) { p = out->getPixel16_W(i+1,j+1);if ( (cmpPx16(p,mc)==FALSE)&&(cmpPx16(p,W)==FALSE) ) op = TRUE;} + + if (op==TRUE) {out->paint16(i,j,p);} + } + target++; + } + target += ow; + } + //------------------------------------------------------------- + target =0; + for (j=0;jPF_MAX_CHAN8) temp=PF_MAX_CHAN8; + return (unsigned char)temp; +} +//----------------------------------------------------------------------------------- +inline unsigned short RoundShort(long x) +{ + long temp=x; + if (temp<0) temp=0; + if (temp>PF_MAX_CHAN16) temp=PF_MAX_CHAN16; + return (unsigned short)temp; +} +//----------------------------------------------------------------------------------- +inline PF_Pixel16 toPixel16(PF_Pixel s){ + PF_Pixel16 r; + r.alpha = (unsigned short)CONVERT8TO16(s.alpha); + r.red = (unsigned short)CONVERT8TO16(s.red); + r.green = (unsigned short)CONVERT8TO16(s.green); + r.blue = (unsigned short)CONVERT8TO16(s.blue); + return r; + } + +#endif // MainLineRepaint_H diff --git a/MainLineRepaint_old/MainLineRepaint_oldPiPL.r b/MainLineRepaint_old/MainLineRepaint_oldPiPL.r new file mode 100644 index 0000000..33ddccf --- /dev/null +++ b/MainLineRepaint_old/MainLineRepaint_oldPiPL.r @@ -0,0 +1,77 @@ +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + "F's MainLineRepaint_old" + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + "F's Plugins-Paint" + /*"F's Plugins"*/ + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + 525824 + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + 33555520 + }, + AE_Effect_Global_OutFlags_2 { + 0 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + "F's MainLineRepaint_old" + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; + diff --git a/MainLineRepaint_old/MainLineRepaint_old_Strings.cpp b/MainLineRepaint_old/MainLineRepaint_old_Strings.cpp new file mode 100644 index 0000000..844a64c --- /dev/null +++ b/MainLineRepaint_old/MainLineRepaint_old_Strings.cpp @@ -0,0 +1,27 @@ +/* MainLineRepaint_Strings.cpp */ + +#include "MainLineRepaint_old.h" + +typedef struct { + unsigned long index; + char str[256]; +} TableString; + +TableString g_strs[StrID_NUMTYPES] = { + StrID_NONE, "", + StrID_Name, "F's MainLineRepaint", + StrID_Description, "セル画の主線を無くします", + StrID_MADEBY, "bry-ful", + + StrID_MY_Main_Color, "主線の色", + + StrID_ERR_getFsAEParams, "画像バッファーサイズエラーです。御免なさい。", + StrID_ERR_getParams, "パラメータエラーです。御免なさい。", +}; + + +char *GetStringPtr(int strNum) +{ + return g_strs[strNum].str; +} + diff --git a/MainLineRepaint_old/MainLineRepaint_old_Strings.h b/MainLineRepaint_old/MainLineRepaint_old_Strings.h new file mode 100644 index 0000000..a9dfc8a --- /dev/null +++ b/MainLineRepaint_old/MainLineRepaint_old_Strings.h @@ -0,0 +1,16 @@ +/* MainLineRepaint_Strings.h */ + +#pragma once + +typedef enum { + StrID_NONE, + StrID_Name, + StrID_Description, + StrID_MADEBY, + StrID_MY_Main_Color, + + + StrID_ERR_getFsAEParams, + StrID_ERR_getParams, + StrID_NUMTYPES +} StrIDType; diff --git a/MainLineRepaint_old/Win/MainLineRepaint_old.sln b/MainLineRepaint_old/Win/MainLineRepaint_old.sln new file mode 100644 index 0000000..447165d --- /dev/null +++ b/MainLineRepaint_old/Win/MainLineRepaint_old.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MainLineRepaint_old", "MainLineRepaint_old.vcxproj", "{D083FA16-AF6A-409F-8A7B-43B782BFFB0F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.ActiveCfg = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|Win32.Build.0 = Debug|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.ActiveCfg = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Debug|x64.Build.0 = Debug|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.ActiveCfg = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|Win32.Build.0 = Release|Win32 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.ActiveCfg = Release|x64 + {D083FA16-AF6A-409F-8A7B-43B782BFFB0F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj b/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj new file mode 100644 index 0000000..bb8eefa --- /dev/null +++ b/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj @@ -0,0 +1,583 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {AA6B61AB-FE84-4800-B04E-7470C9773B86} + MainLineRepaint_old + MainLineRepaint_old + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint_old.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint_old.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint_old.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MainLineRepaint_old.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint_old.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MainLineRepaint_old.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj.filters b/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj.filters new file mode 100644 index 0000000..f1ff8a4 --- /dev/null +++ b/MainLineRepaint_old/Win/MainLineRepaint_old.vcxproj.filters @@ -0,0 +1,146 @@ +サソ + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/MainLineRepaint_old/Win/MainLineRepaint_oldPiPL.rc b/MainLineRepaint_old/Win/MainLineRepaint_oldPiPL.rc new file mode 100644 index 0000000..3e57eae --- /dev/null +++ b/MainLineRepaint_old/Win/MainLineRepaint_oldPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 24, 0x0, + "\x17F's MainLineRepaint_old", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x11F's Plugins-Paint\0\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 525824L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33555520L, + + "MIB8", + "2LGe", + 0L, + 4L, + 0L, + + "MIB8", + "ANMe", + 0, 0x0, + 24, 0x0, + "\x17F's MainLineRepaint_old", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/MaskFromRGB/Fs_Entry.h b/MaskFromRGB/Fs_Entry.h new file mode 100644 index 0000000..04f2999 --- /dev/null +++ b/MaskFromRGB/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + MaskFromRGB for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/MaskFromRGB/Fs_Target.h b/MaskFromRGB/Fs_Target.h new file mode 100644 index 0000000..3cd6558 --- /dev/null +++ b/MaskFromRGB/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's MaskFromRGB" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "RGBAの値からマスク作成" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/MaskFromRGB/MaskFromRGB.cpp b/MaskFromRGB/MaskFromRGB.cpp new file mode 100644 index 0000000..b0c0bd4 --- /dev/null +++ b/MaskFromRGB/MaskFromRGB.cpp @@ -0,0 +1,395 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "MaskFromRGB.h" + +static PF_Err (*func8)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP); + +static PF_Err (*func16)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); + +static PF_Err (*func32)( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_POPUP( STR_POPUP, + STR_POPUP_COUNT, //メニューの数 + STR_POPUP_DFLT, //デフォルト + STR_POPUP_ITEMS, + ID_POPUP + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 5000, //VALID_MAX + 50, //SLIDER_MIN + 300, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LEVEL + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_Pixel col = *outP; + A_u_char v = 0; + if (col.alpha == 0){ + v = 0; + }else{ + if ((niP->mode >= M_MODE::YELLOW)&&(niP->mode < M_MODE::MAX)){ + col.blue = RoundByteFpLong(PF_MAX_CHAN8 - col.blue); + col.green = RoundByteFpLong(PF_MAX_CHAN8 - col.green); + col.red = RoundByteFpLong(PF_MAX_CHAN8 - col.red); + } + if (col.alpha mode){ + case M_MODE::RED: + case M_MODE::CYAN: + v = RoundByteFpLong( (A_long)col.red - MAX((A_long)col.green,(A_long)col.blue)); + break; + case M_MODE::GREEN: + case M_MODE::MAGENTA: + v = RoundByteFpLong( (A_long)col.green - MAX((A_long)col.blue,(A_long)col.red)); + break; + case M_MODE::BLUE: + case M_MODE::YELLOW: + v = RoundByteFpLong( (A_long)col.blue - MAX((A_long)col.red,(A_long)col.green)); + break; + case M_MODE::MAX: + v = MAX((A_long)col.blue,MAX((A_long)col.red,(A_long)col.green)); + break; + } + v = RoundByteFpLong((double)v * niP->col_level); + } + + col.alpha = v; + col.red = PF_MAX_CHAN8; + col.green = PF_MAX_CHAN8; + col.blue = PF_MAX_CHAN8; + + *outP = col; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_Pixel16 col = *outP; + A_u_short v = 0; + if (col.alpha == 0){ + v = 0; + }else{ + if ((niP->mode >= M_MODE::YELLOW)&&(niP->mode < M_MODE::MAX)){ + col.blue = RoundShortFpLong(PF_MAX_CHAN16 - col.blue); + col.green = RoundShortFpLong(PF_MAX_CHAN16 - col.green); + col.red = RoundShortFpLong(PF_MAX_CHAN16 - col.red); + } + if (col.alpha mode){ + case M_MODE::RED: + case M_MODE::CYAN: + v = RoundShortFpLong( (A_long)col.red - MAX((A_long)col.green,(A_long)col.blue)); + break; + case M_MODE::GREEN: + case M_MODE::MAGENTA: + v = RoundShortFpLong( (A_long)col.green - MAX((A_long)col.red,(A_long)col.blue)); + break; + case M_MODE::BLUE: + case M_MODE::YELLOW: + v = RoundShortFpLong( (A_long)col.blue - MAX((A_long)col.red,(A_long)col.green)); + break; + case M_MODE::MAX: + v = MAX((A_long)col.blue,MAX((A_long)col.red,(A_long)col.green)); + break; + } + v = RoundShortFpLong((double)v * niP->col_level); + } + + col.alpha = v; + col.red = PF_MAX_CHAN16; + col.green = PF_MAX_CHAN16; + col.blue = PF_MAX_CHAN16; + + *outP = col; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_PixelFloat col = *outP; + PF_FpShort v = 0; + if (col.alpha == 0){ + v = 0; + }else{ + if (col.blue>1.0) col.blue = 1.0; + if (col.green>1.0) col.green = 1.0; + if (col.red>1.0) col.red = 1.0; + + if ((niP->mode >= M_MODE::YELLOW)&&(niP->mode < M_MODE::MAX)){ + col.blue = RoundFpShortDouble(1.0 - col.blue); + col.green = RoundFpShortDouble(1.0 - col.green); + col.red = RoundFpShortDouble(1.0 - col.red); + } + if (col.alpha <1.0){ + double a = (double)col.alpha; + col.red = RoundFpShortDouble( (double)col.red * a); + col.green = RoundFpShortDouble( (double)col.green * a); + col.blue = RoundFpShortDouble( (double)col.blue * a); + } + switch(niP->mode){ + case M_MODE::RED: + case M_MODE::CYAN: + v = RoundFpShortDouble( col.red - MAX(col.blue , col.green)); + break; + case M_MODE::GREEN: + case M_MODE::MAGENTA: + v = RoundFpShortDouble( col.green - MAX(col.blue , col.red)); + break; + case M_MODE::BLUE: + case M_MODE::YELLOW: + v = RoundFpShortDouble( col.blue - MAX(col.green , col.red)); + break; + case M_MODE::MAX: + v = MAX(col.blue,MAX(col.red,col.green)); + break; + } + v = RoundFpShortDouble((double)v * niP->col_level); + } + + col.alpha = v; + col.red = 1; + col.green = 1; + col.blue = 1; + + *outP = col; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + + ERR(ae->GetPOPUP(ID_POPUP,&infoP->mode)); + PF_FpLong d = 100; + ERR(ae->GetFLOAT(ID_LEVEL,&d)); + if(!err){ + infoP->col_level = d/100; + }else{ + infoP->col_level = 1.0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,Mask32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,Mask16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,Mask8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/MaskFromRGB/MaskFromRGB.h b/MaskFromRGB/MaskFromRGB.h new file mode 100644 index 0000000..a60863e --- /dev/null +++ b/MaskFromRGB/MaskFromRGB.h @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------------------- +/* + MaskFromRGB for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef MaskFromRGB_H +#define MaskFromRGB_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_POPUP, + ID_LEVEL, + ID_NUM_PARAMS +}; + +namespace M_MODE +{ + enum{ + NONE = 0, + RED = 1, + GREEN, + BLUE, + YELLOW, + MAGENTA, + CYAN, + MAX + }; +}; +//UIの表示文字列 + +#define STR_POPUP "Mask" +#define STR_POPUP_ITEMS "Red|Green|Blue|Yellow|Magenta|Cyan|Max" +#define STR_POPUP_COUNT 6 +#define STR_POPUP_DFLT 1 +#define STR_LEVEL "Level" + + +#define BD_HI 192 +#define BD_LO 192 + +//UIのパラメータ +typedef struct ParamInfo { + A_long mode; + PF_FpLong col_level; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // MaskFromRGB_H diff --git a/MaskFromRGB/MaskFromRGBPiPL.r b/MaskFromRGB/MaskFromRGBPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/MaskFromRGB/MaskFromRGBPiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/MaskFromRGB/Win/MaskFromRGB.sln b/MaskFromRGB/Win/MaskFromRGB.sln new file mode 100644 index 0000000..d01497c --- /dev/null +++ b/MaskFromRGB/Win/MaskFromRGB.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaskFromRGB", "MaskFromRGB.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MaskFromRGB/Win/MaskFromRGB.vcxproj b/MaskFromRGB/Win/MaskFromRGB.vcxproj new file mode 100644 index 0000000..018585f --- /dev/null +++ b/MaskFromRGB/Win/MaskFromRGB.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {5FFF4BF4-9036-4470-A0E0-90990F4D7A69} + MaskFromRGB + MaskFromRGB + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/MaskFromRGB/Win/MaskFromRGB.vcxproj.filters b/MaskFromRGB/Win/MaskFromRGB.vcxproj.filters new file mode 100644 index 0000000..ee4c219 --- /dev/null +++ b/MaskFromRGB/Win/MaskFromRGB.vcxproj.filters @@ -0,0 +1,184 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/MaskFromRGB/Win/MaskFromRGBAPiPL.rc b/MaskFromRGB/Win/MaskFromRGBAPiPL.rc new file mode 100644 index 0000000..92db035 --- /dev/null +++ b/MaskFromRGB/Win/MaskFromRGBAPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 20, 0x0, + "\x10F's MaskFromRGBA\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 2, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x10F's MaskFromRGBA\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/MaskFromRGB/Win/MaskFromRGBPiPL.rc b/MaskFromRGB/Win/MaskFromRGBPiPL.rc new file mode 100644 index 0000000..76667a0 --- /dev/null +++ b/MaskFromRGB/Win/MaskFromRGBPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 16, 0x0, + "\x0FF's MaskFromRGB", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0FF's MaskFromRGB", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/MaskFromRGB/sample.png b/MaskFromRGB/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..e98cbf075b70da43446aef2a3869d6376eb69856 GIT binary patch literal 55218 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 literal 0 HcmV?d00001 diff --git a/MaskFromRGB_Multi/Fs_Entry.h b/MaskFromRGB_Multi/Fs_Entry.h new file mode 100644 index 0000000..eebbcc7 --- /dev/null +++ b/MaskFromRGB_Multi/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + MaskFromRGB_Multi for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} +/* +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +/* +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +*/ +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/MaskFromRGB_Multi/Fs_Target.h b/MaskFromRGB_Multi/Fs_Target.h new file mode 100644 index 0000000..d7432e4 --- /dev/null +++ b/MaskFromRGB_Multi/Fs_Target.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's MaskFromRGB_Multi" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "RGBAの値からマスク作成" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#define FS_CATEGORY "F's Plugins-Fx" +#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 1 +#define BUG_VERSION 0 +//#define STAGE_VERSION 0 //PF_Stage_DEVELOP +//#define STAGE_VERSION 1 //PF_Stage_ALPHA +//#define STAGE_VERSION 2 //PF_Stage_BETA +#define STAGE_VERSION 3 //PF_Stage_RELEASE +#define BUILD_VERSION 0 + +//上の値を計算した結果 +#define FS_VERSION 558592 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +//#define FS_OUT_FLAGS 33556032 //通常はこちら +#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/MaskFromRGB_Multi/MaskFromRGB_Multi.cpp b/MaskFromRGB_Multi/MaskFromRGB_Multi.cpp new file mode 100644 index 0000000..3242aa1 --- /dev/null +++ b/MaskFromRGB_Multi/MaskFromRGB_Multi.cpp @@ -0,0 +1,539 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "MaskFromRGB_Multi.h" + +static PF_Err (*func8)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP); + +static PF_Err (*func16)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); + +static PF_Err (*func32)( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 5000, //VALID_MAX + 50, //SLIDER_MIN + 300, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LEVEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_R, + STR_ON, + TRUE, + 0, + ID_R + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_G, + STR_ON, + FALSE, + 0, + ID_G + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_B, + STR_ON, + FALSE, + 0, + ID_B + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_Y, + STR_ON, + FALSE, + 0, + ID_Y + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_M, + STR_ON, + FALSE, + 0, + ID_M + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_C, + STR_ON, + FALSE, + 0, + ID_C + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_Pixel col = *outP; + PF_Pixel revc = col; + A_u_long v = 0; + + if (col.alpha == 0){ + v = 0; + }else{ + if ( (niP->colFlag[M_COL::Y])||(niP->colFlag[M_COL::M])||(niP->colFlag[M_COL::C])) + { + revc.blue = RoundByteFpLong(PF_MAX_CHAN8 - col.blue); + revc.green = RoundByteFpLong(PF_MAX_CHAN8 - col.green); + revc.red = RoundByteFpLong(PF_MAX_CHAN8 - col.red); + if (col.alpha colFlag[M_COL::R]){ + //ax = (A_long)col.blue + (A_long)col.green - (A_long)col.blue * (A_long)col.green / PF_MAX_CHAN8; + ax = MAX((A_long)col.blue , (A_long)col.green); + bx = (A_long)col.red; + v += RoundByteFpLong((double)(bx - ax)*niP->col_level); + } + if ((niP->colFlag[M_COL::G])&&(vcol_level); + } + if ((niP->colFlag[M_COL::B])&&(vcol_level); + } + if ((niP->colFlag[M_COL::Y])&&(vcol_level); + } + if ((niP->colFlag[M_COL::M])&&(vcol_level); + } + if ((niP->colFlag[M_COL::C])&&(vcol_level); + } + if (v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + + } + + outP->alpha = (A_u_char)v; + outP->red = PF_MAX_CHAN8; + outP->green = PF_MAX_CHAN8; + outP->blue = PF_MAX_CHAN8; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_Pixel16 col = *outP; + PF_Pixel16 revc = col; + A_u_long v = 0; + + if (col.alpha == 0){ + v = 0; + }else{ + if ( (niP->colFlag[M_COL::Y])||(niP->colFlag[M_COL::M])||(niP->colFlag[M_COL::C])) + { + revc.blue = RoundShortFpLong(PF_MAX_CHAN16 - col.blue); + revc.green = RoundShortFpLong(PF_MAX_CHAN16 - col.green); + revc.red = RoundShortFpLong(PF_MAX_CHAN16 - col.red); + if (col.alpha colFlag[M_COL::R]){ + //ax = (A_long)col.blue + (A_long)col.green - (A_long)col.blue * (A_long)col.green / PF_MAX_CHAN8; + ax = MAX((A_long)col.blue , (A_long)col.green); + bx = (A_long)col.red; + v += RoundShortFpLong((double)(bx - ax)*niP->col_level); + } + if ((niP->colFlag[M_COL::G])&&(vcol_level); + } + if ((niP->colFlag[M_COL::B])&&(vcol_level); + } + if ((niP->colFlag[M_COL::Y])&&(vcol_level); + } + if ((niP->colFlag[M_COL::M])&&(vcol_level); + } + if ((niP->colFlag[M_COL::C])&&(vcol_level); + } + if (v>PF_MAX_CHAN16) v = PF_MAX_CHAN16; + + } + + outP->alpha = (A_u_short)v; + outP->red = PF_MAX_CHAN16; + outP->green = PF_MAX_CHAN16; + outP->blue = PF_MAX_CHAN16; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Mask32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + PF_PixelFloat col = *outP; + PF_PixelFloat revc = col; + double v = 0; + + if (col.alpha == 0){ + v = 0; + }else{ + if (col.red>1.0) col.red =1.0; + if (col.green>1.0) col.green =1.0; + if (col.blue>1.0) col.blue =1.0; + revc = col; + if ( (niP->colFlag[M_COL::Y])||(niP->colFlag[M_COL::M])||(niP->colFlag[M_COL::C])) + { + revc.blue = RoundFpShortDouble(1.0 - col.blue); + revc.green = RoundFpShortDouble(1.0 - col.green); + revc.red = RoundFpShortDouble(1.0 - col.red); + if (col.alpha <1.0){ + double a = (double)col.alpha; + revc.red = RoundFpShortDouble( (double)revc.red * a); + revc.green = RoundFpShortDouble( (double)revc.green * a); + revc.blue = RoundFpShortDouble( (double)revc.blue * a); + } + }else{ + if (col.alpha <1.0){ + double a = (double)col.alpha; + col.red = RoundFpShortDouble( (double)col.red * a); + col.green = RoundFpShortDouble( (double)col.green * a); + col.blue = RoundFpShortDouble( (double)col.blue * a); + } + } + double ax = 0; + double bx = 0; + v = 0; + if (niP->colFlag[M_COL::R]){ + ax = MAX(col.blue , col.green); + bx = col.red; + v += (bx - ax)*niP->col_level; + } + if ((niP->colFlag[M_COL::G])&&(v<1.0)){ + ax = MAX(col.blue , col.red); + bx = col.green; + v += (bx - ax)*niP->col_level; + } + if ((niP->colFlag[M_COL::B])&&(v<1.0)){ + ax = MAX(col.green , col.red); + bx = col.blue; + v += (bx - ax)*niP->col_level; + } + if ((niP->colFlag[M_COL::Y])&&(v<1.0)){ + ax = MAX(revc.green , revc.red); + bx = revc.blue; + v += (bx - ax)*niP->col_level; + } + if ((niP->colFlag[M_COL::M])&&(v<1.0)){ + ax = MAX(revc.blue , revc.red); + bx = revc.green; + v += (bx - ax)*niP->col_level; + } + if ((niP->colFlag[M_COL::C])&&(v<1.0)){ + ax = MAX(revc.blue , revc.green); + bx = revc.red; + v += (bx - ax)*niP->col_level; + } + if (v>1.0) v = 1.0; + + } + + outP->alpha = (PF_FpShort)v; + outP->red = 1.0; + outP->green = 1.0; + outP->blue = 1.0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpLong d = 100; + ERR(ae->GetFLOAT(ID_LEVEL,&d)); + if(!err){ + infoP->col_level = d/100; + }else{ + infoP->col_level = 1.0; + } + PF_Boolean b; + for (int i= ID_R; i<= ID_C; i++ ){ + ERR(ae->GetCHECKBOX(i,&b)); + if (err) b = false; + infoP->colFlag[i - ID_R] = b; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,Mask32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,Mask16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,Mask8)); + break; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//レンダリングのメイン +/* + SmartFXに対応していないホスト(After Effects7以前のもの)はこの関数が呼び出されて描画する + この関数を書いておけば一応v6.5対応になる +*/ +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + +#include "Fs_Entry.h" diff --git a/MaskFromRGB_Multi/MaskFromRGB_Multi.h b/MaskFromRGB_Multi/MaskFromRGB_Multi.h new file mode 100644 index 0000000..3db26a8 --- /dev/null +++ b/MaskFromRGB_Multi/MaskFromRGB_Multi.h @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------------- +/* + MaskFromRGB_Multi for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef MaskFromRGB_Multi_H +#define MaskFromRGB_Multi_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +namespace M_COL{ + enum{ + R =0, + G, + B, + Y, + M, + C, + Count + }; +}; +enum { + ID_INPUT = 0, // default input layer + ID_LEVEL, + ID_R, + ID_G, + ID_B, + ID_Y, + ID_M, + ID_C, + ID_NUM_PARAMS +}; + +//UIの表示文字列 + +#define STR_LEVEL "Level" +#define STR_R "Red" +#define STR_G "Green" +#define STR_B "Blue" +#define STR_Y "Yellow" +#define STR_M "Magenta" +#define STR_C "Cyan" +#define STR_ON "on" + + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean colFlag[M_COL::Count]; + PF_FpLong col_level; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} +#endif // MaskFromRGB_Multi_H diff --git a/MaskFromRGB_Multi/MaskFromRGB_MultiPiPL.r b/MaskFromRGB_Multi/MaskFromRGB_MultiPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/MaskFromRGB_Multi/MaskFromRGB_MultiPiPL.r @@ -0,0 +1,82 @@ +/* 定義はFs_Target.hで行なっている。このファイルは編集する必要なし */ +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + + + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.sln b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.sln new file mode 100644 index 0000000..bcea6fe --- /dev/null +++ b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MaskFromRGB_Multi", "MaskFromRGB_Multi.vcxproj", "{44650EE4-5B04-43C2-9D1C-B96240D4AE80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.ActiveCfg = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|Win32.Build.0 = Debug|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.ActiveCfg = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Debug|x64.Build.0 = Debug|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.ActiveCfg = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|Win32.Build.0 = Release|Win32 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.ActiveCfg = Release|x64 + {44650EE4-5B04-43C2-9D1C-B96240D4AE80}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj new file mode 100644 index 0000000..8389b85 --- /dev/null +++ b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {EB192493-9742-464D-A0AD-C1EF56EE122F} + MaskFromRGB_Multi + MaskFromRGB_Multi + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pgc%3b*.pgd%3b*.meta%3b*.asm%3b*.rr%3b*.rrc%3b$(TargetPath) + true + true + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + .aex + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB_Multi.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Headers\Win;..\..\..\Resources;..\..\..\Util;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + EditAndContinue + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + ..\..\outAEX64\$(ProjectName)_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB_Multi.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB_Multi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/MaskFromRGB_Multi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\..\..\Headers\Win;%(AdditionalIncludeDirectories) + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + ..\..\outAEX64\$(ProjectName).aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB_Multi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/MaskFromRGB_Multi.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj.filters b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj.filters new file mode 100644 index 0000000..aa3a0ba --- /dev/null +++ b/MaskFromRGB_Multi/Win/MaskFromRGB_Multi.vcxproj.filters @@ -0,0 +1,184 @@ + + + + + {9c807ac7-eee1-440c-a435-f3dd08df9a38} + h;hpp;hxx;hm;inl;fi;fd + + + {d956666e-d0e4-4eb9-915c-4cfe0675b7a1} + + + {1390eeb2-455f-4b8d-9919-d9e4fd266ae9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e7e134d-7989-4cef-add4-c77ff0d22597} + + + {28a0c1c7-fd78-4a7d-b62b-5ec8e776b504} + + + {3213c4f6-38e1-47f1-b5b4-578cb2bdc3cf} + + + {703a9abf-315c-4cd9-bfb9-98dd961cc7e9} + + + {a5fe17df-932d-4cbb-98ff-0e85562d909b} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Supporting code\AE + + + Header Files + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + Resource Files + + + \ No newline at end of file diff --git a/MaskFromRGB_Multi/Win/MaskFromRGB_MultiPiPL.rc b/MaskFromRGB_Multi/Win/MaskFromRGB_MultiPiPL.rc new file mode 100644 index 0000000..cfc617a --- /dev/null +++ b/MaskFromRGB_Multi/Win/MaskFromRGB_MultiPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 24, 0x0, + "\x15F's MaskFromRGB_Multi\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x13F's Plugins-Channel", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 558592L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 24, 0x0, + "\x15F's MaskFromRGB_Multi\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/MaskFromRGB_Multi/sample.png b/MaskFromRGB_Multi/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..e98cbf075b70da43446aef2a3869d6376eb69856 GIT binary patch literal 55218 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 literal 0 HcmV?d00001 diff --git a/Max/Fs_Entry.h b/Max/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/Max/Fs_Entry.h @@ -0,0 +1,224 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FSENRTY_H +#define FSENRTY_H + +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif + +#ifdef AE_OS_WIN + #include +#endif + +//----------------------------------------------------------------------------------- +static PF_Err +About ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.About(in_data,out_data,params,output); + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GlobalSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetup(in_data,out_data,params,output); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GlobalSetdown( + PF_InData *in_data) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae; + err = ae.GlobalSetdown(in_data); + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + return PF_Err_NONE; +} +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceSetdown ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err SequenceResetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + return PF_Err_NONE; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +HandleChangedParam( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *outputP, + PF_UserChangedParamExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +QueryDynamicFlags( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + void *extra) +{ + PF_Err err = PF_Err_NONE; + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extraP) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extraP)); + + return err; +} +//----------------------------------------------------------------------------------- +DllExport PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extraP) +{ + PF_Err err = PF_Err_NONE; + + try + { + CFsAE ae; + switch (cmd) { + case PF_Cmd_ABOUT: + err = About(in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETUP: + err = GlobalSetup( in_data,out_data,params,output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + err = GlobalSetdown(in_data); + break; + case PF_Cmd_PARAMS_SETUP: + err = ParamsSetup( in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETUP: + err = SequenceSetup(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + err = SequenceSetdown(in_data,out_data,params,output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + err = SequenceResetup(in_data,out_data,params,output); + break; + case PF_Cmd_RENDER: + err = Render(in_data,out_data,params,output); + break; +#if defined(SUPPORT_SMARTFX) + case PF_Cmd_SMART_PRE_RENDER: + err = PreRender(in_data,out_data,reinterpret_cast(extraP)); + break; + case PF_Cmd_SMART_RENDER: + err = SmartRender( in_data,out_data,reinterpret_cast(extraP)); + break; +#endif + case PF_Cmd_COMPLETELY_GENERAL: + err = RespondtoAEGP(in_data,out_data,params,output,extraP); + break; + case PF_Cmd_DO_DIALOG: + //err = PopDialog(in_data,out_data,params,output); + break; + case PF_Cmd_USER_CHANGED_PARAM: + err = HandleChangedParam( in_data, + out_data, + params, + output, + reinterpret_cast(extraP)); + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + err = QueryDynamicFlags(in_data, + out_data, + params, + reinterpret_cast(extraP)); + break; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Max/Fs_Target.h b/Max/Fs_Target.h new file mode 100644 index 0000000..f4de153 --- /dev/null +++ b/Max/Fs_Target.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Max" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "最大/最小です" + + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#define FS_CATEGORY "F's Plugins-Fx" +//#define FS_CATEGORY "F's Plugins-Channel" +//#define FS_CATEGORY "F's Plugins-Paint" +//#define FS_CATEGORY "F's Plugins-Script" +//#define FS_CATEGORY "F's Plugins-Draw" + + +//----------------------------------------------------------- +#define SUPPORT_SMARTFX //これを有効にするとSmartFX+Float_Colorに対応する +//#define NO_USE_FSGRAPHICS //これを有効にするとFsGraphics関係がインクルードされない + +//----------------------------------------------------------------------------------- +//プラグインのバージョン +#define MAJOR_VERSION 1 +#define MINOR_VERSION 0 +#define BUG_VERSION 0 +//#define STAGE_VERSION PF_Stage_DEVELOP +//#define STAGE_VERSION PF_Stage_ALPHA +//#define STAGE_VERSION PF_Stage_BETA +#define STAGE_VERSION 4 +#define BUILD_VERSION 0 + + +//上の値を計算した結果 +#define FS_VERSION 525824 + +//----------------------------------------------------------------------------------- +//out_flags +/* +out_data->out_flags + PF_OutFlag_PIX_INDEPENDENT 1024 + PF_OutFlag_NON_PARAM_VARY 4 + PF_OutFlag_DEEP_COLOR_AWARE 33554432 + PF_OutFlag_USE_OUTPUT_EXTENT 64 + PF_OutFlag_I_EXPAND_BUFFER 512 + PF_OutFlag_I_DO_DIALOG 32 +*/ + +#define FS_OUT_FLAGS 33556032 //通常はこちら +//#define FS_OUT_FLAGS 33556036 //こっちを有効にすると毎フレームごとに描画する。NON_PARAM_VARYを動作中に切り替えるときもこちらに +//#define FS_OUT_FLAGS 1600 //8bitのみ + +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/Max/Max.cpp b/Max/Max.cpp new file mode 100644 index 0000000..859bdd6 --- /dev/null +++ b/Max/Max.cpp @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Max.h" + + +//------------------------------------------------------------------------------------------------- +//AfterEffextsにパラメータを通達する +//Param_Utils.hを参照のこと +static PF_Err ParamsSetup ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_MAX, //パラメータの名前 + -512, //数値入力する場合の最小値 + 512, //数値入力する場合の最大値 + -50, //スライダーの最小値 + 50, //スライダーの最大値 + 0, //デフォルトの値 + ID_MAX + ); + + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_DIR1, + 3, //メニューの数 + 1, //デフォルト + STR_DIR2, + ID_DIR + ); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_CH1, + 3, //メニューの数 + 1, //デフォルト + STR_CH2, + ID_CHANNEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_OUT, + "on", + FALSE, + 0, + ID_OUT + ); + + + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +InOut8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP->isOutOnly){ + A_long a = (A_long)outP->alpha - (A_long)inP->alpha; + outP->alpha = RoundByteFpLong(a); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +InOut16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP->isOutOnly){ + A_long a = (A_long)outP->alpha - (A_long)inP->alpha; + outP->alpha = RoundShort(a); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +InOut32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP->isOutOnly){ + double a = outP->alpha - inP->alpha; + outP->alpha = RoundFpShortDouble(a); + } + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_MAX,&infoP->max)); + if (!err) infoP->max = ae->downScaleNoClip(infoP->max); + ERR(ae->GetPOPUP(ID_DIR,&infoP->dir)); + ERR(ae->GetPOPUP(ID_CHANNEL,&infoP->ch)); + ERR(ae->GetCHECKBOX(ID_OUT,&infoP->isOutOnly)); + + return err; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->CopyInToOut()); + if (infoP->max !=0){ + ERR(ae->out->Minimax(infoP->max,infoP->dir,infoP->ch)); + if (infoP->isOutOnly){ + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,InOut32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,InOut16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,InOut8)); + break; + } + } + } + return err; +} +//----------------------------------------------------------------------------- +static PF_Err +Render ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ParamInfo info; + ERR(GetParams(&ae,&info)); + ERR(Exec(&ae,&info)); + } + return err; +} +//----------------------------------------------------------------------------------- +/* + SmartFX対応の場合、まずこの関数が呼ばれてパラメータの獲得を行う +*/ +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extraP,sizeof(ParamInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ae.SetHostPreRenderData(); + ERR(GetParams(&ae,infoP)); + ERR(ae.UnSetPreRenderData()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +SmartRender( + PF_InData *in_data, + PF_OutData *out_data, + PF_SmartRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE, + err2 = PF_Err_NONE; + + CFsAE ae(in_data,out_data,extraP,ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + ParamInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(Exec(&ae,infoP)); + ERR2(ae.UnsetSmartRender()); + ae.UnlockPreRenderData(); + }else{ + err = PF_Err_OUT_OF_MEMORY; + } + } + return err; +} +#endif + + +#include "Fs_Entry.h" \ No newline at end of file diff --git a/Max/Max.h b/Max/Max.h new file mode 100644 index 0000000..8385f26 --- /dev/null +++ b/Max/Max.h @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Max_H +#define Max_H + +#include "Fs_Target.h" + + +#include "AEConfig.h" +#include "entry.h" + +//#include "PrSDKAESupport.h" +#include "AE_Effect.h" +#include "AE_EffectCB.h" +#include "AE_EffectCBSuites.h" +#include "AE_Macros.h" +#include "AEGP_SuiteHandler.h" +#include "String_Utils.h" +#include "Param_Utils.h" +#include "Smart_Utils.h" + +#if defined(PF_AE100_PLUG_IN_VERSION) + #include "AEFX_SuiteHelper.h" + #define refconType void* +#else + #include "PF_Suite_Helper.h" + #define refconType A_long +#endif +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_MAX, + ID_DIR, + ID_CHANNEL, + ID_OUT, + ID_NUM_PARAMS +}; + +#define STR_MAX "value" +#define STR_DIR1 "ScanLine" +#define STR_DIR2 "Horizon+Vurtual|Horizon|Vurtual" +#define STR_CH1 "Channel" +#define STR_CH2 "RGB+Alpha|RGB|alpha" +#define STR_OUT "OutOnly" + +typedef struct ParamInfo{ + A_long max; + A_long dir; + A_long ch; + PF_Boolean isOutOnly; +} ParamInfo; + + +//------------------------------------------------------- +extern "C" { + +DllExport +PF_Err +EntryPointFunc ( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); +} + +#endif // Max_H diff --git a/Max/MaxPiPL.r b/Max/MaxPiPL.r new file mode 100644 index 0000000..a708cf2 --- /dev/null +++ b/Max/MaxPiPL.r @@ -0,0 +1,76 @@ +#include "Fs_Target.h" + +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include "AE_General.r" +#endif +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + /*AEのメニューに使われる */ + FS_NAME + }, + /* [3] */ + Category { + /*AEのメニューに使われる */ + FS_CATEGORY + }, + +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + /* v1.00 */ + FS_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + FS_OUT_FLAGS + }, + AE_Effect_Global_OutFlags_2 { + FS_OUT_FLAGS2 + }, + /* [11] */ + AE_Effect_Match_Name { + /*プラグインの識別に使われる */ + FS_NAME + }, + /* [12] */ + AE_Reserved_Info { + 0 + } + } +}; + diff --git a/Max/Win/Max.sln b/Max/Win/Max.sln new file mode 100644 index 0000000..0b4bdd4 --- /dev/null +++ b/Max/Win/Max.sln @@ -0,0 +1,20 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Max", "Max.vcxproj", "{BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|x64.ActiveCfg = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Debug|x64.Build.0 = Debug|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|x64.ActiveCfg = Release|x64 + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Max/Win/Max.vcxproj b/Max/Win/Max.vcxproj new file mode 100644 index 0000000..33dcdc7 --- /dev/null +++ b/Max/Win/Max.vcxproj @@ -0,0 +1,335 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {BE97B289-BDA5-4B21-B384-ACCF38CF1BE2} + Max + Max + 8.1 + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\..\outAEX64\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + ..\..\outAEX64\ + ..\..\outAEX64_MD\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + *.tlog;*.asm;*.exp;*.sbr;*.rr;*.rrc;*.res;*.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.manifest;*.pch;*.idb;*.lib;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.xml;*.metagen;*.bi + true + true + false + false + .aex + .aex + F's $(ProjectName)_CC2018 + F's $(ProjectName)_CC2018_MD + F's $(ProjectName)_CC_dbg + .aex + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Max.tlb + + + + + Disabled + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyAndSourceCode + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Max.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Max.tlb + + + + + MaxSpeed + AnySuitable + true + Speed + ..\..\..\Headers;..\..\..\Headers\SP;..\..\..\Resources;..\..\..\Util;..\F's PluginsProjects_2013\FsLibrary + MSWindows;WIN32;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + 4Bytes + + + AE_Effect.h + $(IntDir)$(ProjectName).pch + AssemblyCode + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + true + + + Default + + + 0x0411 + + + LinkVerbose + $(TargetPath) + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + + + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + Compiling the PiPL + Compiling the PiPL + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + cl /I "$(ProjectDir)..\..\..\Headers" /EP ".."\\"%(Filename).r" > "$(IntDir)"\\"%(Filename).rr" +"$(ProjectDir)..\..\..\Resources\PiPLTool" "$(IntDir)%(Filename).rr" "$(IntDir)%(Filename).rrc" +cl /D "MSWindows" /EP $(IntDir)%(Filename).rrc > "$(ProjectDir)"\\"%(Filename)".rc + + $(ProjectDir)%(Filename).rc;%(Outputs) + $(ProjectDir)%(Filename).rc;%(Outputs) + + + + + + + + + + + + + + + + + Disabled + %(AdditionalIncludeDirectories) + MSWindows;WIN32;_DEBUG;_WINDOWS + true + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + \ No newline at end of file diff --git a/Max/Win/Max.vcxproj.filters b/Max/Win/Max.vcxproj.filters new file mode 100644 index 0000000..da741df --- /dev/null +++ b/Max/Win/Max.vcxproj.filters @@ -0,0 +1,169 @@ +サソ + + + + {81421071-0470-4ef4-84ab-ea4c7eb03562} + h;hpp;hxx;hm;inl;fi;fd + + + {44029e0f-ee24-46de-b3f3-c467e64d7b82} + + + {a53205ca-9c43-4c66-a27e-d5be89249755} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {5db72353-2780-4edc-9c4d-42c05f1b732c} + + + {8729a2d6-d811-417c-bcca-c269a8a33fca} + + + {f1ffb5ca-8d75-4f26-9761-45796fc0fd49} + + + {a2954585-55a1-4d56-880f-fa45f33b57ca} + + + {a3ea7e97-dad7-4ffd-8d4b-3b01f8a9fe03} + + + + + Header Files + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\Fs + + + Header Files\Fs + + + Header Files\Fs + + + Header Files + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/Max/Win/MaxPiPL.rc b/Max/Win/MaxPiPL.rc new file mode 100644 index 0000000..8bb7896 --- /dev/null +++ b/Max/Win/MaxPiPL.rc @@ -0,0 +1,84 @@ + + + + +16000 PiPL DISCARDABLE +BEGIN + 0x0001, + 0, 0x0, + 12, 0x0, + "MIB8", + "dnik", + 0, 0x0, + 4, 0x0, + "TKFe", + + "MIB8", + "eman", + 0, 0x0, + 8, 0x0, + "\x07F's Max", + + "MIB8", + "gtac", + 0, 0x0, + 16, 0x0, + "\x0EF's Plugins-Fx\0", + + "MIB8", + "4668", + 0, 0x0, + 16, 0x0, + "EntryPointFunc\0\0", + + "MIB8", + "RVPe", + 0, 0x0, + 4, 0x0, + 2, 0, + + "MIB8", + "RVSe", + 0, 0x0, + 4, 0x0, + 13, 15, + + "MIB8", + 0x65564552L, + 0L, + 4L + 525824L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 8, 0x0, + "\x07F's Max", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Max_Kasumi/02_00001.png b/Max_Kasumi/02_00001.png new file mode 100644 index 0000000000000000000000000000000000000000..83fbb99a52f2b2373948fbfe40bef93a415d9537 GIT binary patch literal 561647 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

%>`4Hb!qsJ1hzj;g9I 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Μg+4w0Qh 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�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 <>cAY_ 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%0DM+~cSWorEe`R# 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%0Ay`L|Fo^#QKI{URm`HWMCzi zsrkkinNM^!;)NkELRQzl41`&Yq#iE7+=oN4ic_Zi(mizx8L6HU;OpY{G-viQP^z>Wjt(HcG{CPaaC0x*Yp^qF5XJ+ z_97vU19KAd9iL8X_I+e`@KtYj=aH)1va4vt)Z1JH@*oAa=l*Kt-VL6%srN6!zydr@ zPb0f#)mB_bb)!f#z-`Yh)}1`$=a8&bO@X>Uc2P~^2#ft#zo{m`MEnstgBWKpGhJ`e zpUG3MIO_C@a$4&mVVTg*mE+ql(k+C}D~kKPsa5Ak0n1ryud>kg*am2uXQdo-;<1=k ze3e4XfM#CPmq2S?IzKX%-oNip?b*XFsK@;2N7x|hMgCSHt~_>u&SkSW zINnb4RWE_;w;3E94jq?ugB?TyCr4{L7Gbuz^I*nO)-**lCnNd<1Q|2V&8WiU(JAd9 z!L>Nut~<4+YPju)tLay3$-WP#SRs!?ESJN+``Ei>%uI@GLMbkBPS|$Jm%`FMr&nmK zf(8W<%u|X+Ffx-!6q!Lg{@2&9kK%RT;d7={)dv7owN&>@RAJqbSNINwfO2YC#bo

(=@>z7tAZv|!Nc*MC$M@8{*{ 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%0AyQ86AuVNOT(e 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

PP;#n;cm^(e8II?7!NHa;=f?O;7|8wND#BX+d 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 #JTDlDb4CYq2LGwl{@pDXp%gaq_r!$L97e->OV5 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

>wzcaAMR(T~~D6Bpvo;^@oQZ{6h-&kYKd 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≫)^No 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�J=t$C4`kU4e>+=#bGm%FzQfi`5f11?I zH(Yp1qoD2KJE3S8f0IcwFM1%I%}81S9j{d z<(JN%I(O;p@#Cy4y)-{huxM(}-u<&nr*FP|VPUu_k)TF8*ND_^Zl=`KZ7iVPw9ZMA zvlAiGf$%Q>wN`-X3LHg0Fs-}xBPdp>q7jlcQR`l&^D;5&ao;byg+0y z7w^+ur2qqw5Vv^d>us}r6w>lDy%0kMlbU7~4gv8@!W{7PXTg2Qs?vo)I70>9C z-#qO0Eq5>%h1v#X7+Q&2H?fF7M<)*|?jIf-ALak()RFb`*KgmveEFrzx8AsYZe`)v znYD!jQzKIgqb*%~XLtAa4tMvCG=*an#WS0Mk=~<5mC6v-#6X8Iojay141L2e$pR13 z9`v$J*H9>*jVkjh^J~IUlQR3TO80${hF|6b+MsJ$M1LwzD7cxwkwj5lNvJ>`J9W_( zLBQP+>#Wp8nbMI+){;D(!gZi@qeDmr{XOGR} zG%ihz?w(y)I=piHRtTBNTspLHd-88HK$%BMX1^gW*M)Tp5hmL)Z$lHi-ncO+EC%C z`I%B3N^lWFwIRvOpLjBy3h_SY{#AD@F{<>6;_X@LF)~JivVJi+SFhcLeDH&oga!pM z7xxLJLK%WO1xJ-(!cnwb{*aGvpeqyE43ucu0cb@cL*;1H`amXHekVe3P-_qg%)nFG z4Y=4ZuQDf6j-(ZnQr*N%KRdnrM$invV{w~*WzhCFNNV_@dJ3R6*NCYg5Y#q0(5u-} zO${ozY;1N~CzVrdXJL7&od$+S_Us{LvATZh+_l@UT)lejmDk_Ad+r!ZcCH>?+&^;g z$exz=$)%~D!M^VCfkr0P)sd+}ZFouMimHkY6)Sa(?2yK{00#gja<$o$SyPo8RNLKD2>`O(syhVe9>x)ar=MT(}_sy-0)wj+pj&=^P&dWd(#4A^o&=5Ze4+B-J z^WcZZB+OfVYYZ$-GPhs3GFfesI`(DP^`ot306&_LfqlU2(28D zrt=ggsU`w3ow1~(89{X?oOaeNDrjx!m7oy8N+N4otH3L%pz6}?J^>q6xqZO5orN>x9$E{qJqv1COk)>w z9NZtQqow*|#&1B5BB6c>T&j!-GPWh<*a&tl^-9eaduSM9%@t^~7*AiUYNfSC!V00O zeOO}88cM7SeLZ6)_H$sYf>N(lfr-w(j?VGX&Ugr;0<;RSkYw>m77PR71T)m>Q*zcd zYHWNv@XFxH5J)b8<;yHVW(|`ciewRXnpq*#d2(3Hoc(tyO0=;FBcyAz)Eoc9v@eQS zDp`#PRm-vCBNyxU!qe3Wf(xlcLs$QvgR=)_7v~mEtSqe@JAdKwou{w8_WHwDZoYc^ z)f)^WH(tJZ_2TK{%hJCydVtlQnM3>c%`Tr>pYQKzaq9y}tZb9loNKPo!deO#`D`m* z#EskFrZfkeOp0WYYV+~u4ZkcvWkCyN$3?Zwh}3FuwqlWz-Z^RjfH8x=O00l&5pUTQ zq*SX8NM2oT(=E0!+zsODLIp@tP^=kdwi2Yu|3V=maR$m5cqLX5g;u@r4mPohkqD2g z=EsJrI-f&qJGl>w-9mPnA1crq*(we~I~vdXxUGh1S;j*SiG`V^9M~r-V~J#u)y$mW zU|0vUgOossu)w4a?{hBpz+hnTWm!&as$B62cF^F+Pf9YFXyBO2QMo=FbusesgkbVT z8_{DdLYRysJG#2NS}1{JS+jI~b304AD^JJ_6lSn?4NWcZ)TYBrYiCcNK6CoQ^_R|E zy>;{Ez1QCR-q&uQKXUx|(&7C*9b;2{jh#%a>hEJtK!fBA!R5F#Z=zgl7`y;-oK{p( zir*3@+5oTyJ=FjcGJ;uhcywwi0BsQ@3tr*@W8#hi%Z5%khrbn8mX$O8PYR0}f7&cy zi**HBBO>3mGcVkY)WusGs1Z%Ea{V;FfTs(XG$r~U1k@r1*c<<#am)&c1 zH?H5fdg0uK3ujO9c-o^2(=&$`7Y-hn8r?H@{Nkk(`+Ax)jk#vG$!T_*tEu8(&{Ag$ z7F<#-fUC$_tc;8yRnScQS9vHQ7?9~!;gSJsw`wQb*&qrAu-to%qRtAjkx3!t!VkdD z=kk{X4)#GcU=wW7L0F;Cvd>fr)F@@nQN+H=G^uh`Saw4R8pPZw;Y?;P^cuE=FSy2y zJVPCj|v;z%|w)miRt;(b60QTkS{N;o;iE&#w(XEUcdFq zE4SYBp?~)1#yV@wpE*9!**Ls!prL(qsJ~}?th$+#bhFl4XzXhnl0@JEn1>E6tzUigLqGDt_rK@St(!NlU%P(u=C#Y` zFI_r+?!rqiT|9T@E`+Au0{&7OyD+4UbT8HCGy}1A*URQ zL&SCj)2wjFUmn(jOO@6}{|c9SVW7sfzC%XOgITGkN}*ETnxqpm4ADw7#=-S<$>KGd88X50x%jg0U$@I<)zYq@0Pew%$c0j^d5qBQE zsA)NJyuHdDkP%%d5o~>iOJKG9Dt@EgXeufna74tZkg7sSTINJxc9|OJr#p}fjDdK@ zwvRk;C-hDjd8j<{dM#zCM4Tf{@lb0A%VxDqt}f3^OwTPIJ#+2Bd*1xv55D)w-B+$% zxqR{BOP4QSI(zEO`SWK^pF4ME?FdiBJ;Kb#nf=3kgvXaJ-oCy%-a#d-MP?|{0?2tS zPID1BCVoh1U<}7aCHpQ5TKMCNR=@B~)mISDHdU}GVn2?iS!H=z`GwevN8e%_V~la<{YwO(0A;Ar_@jg(ik?QviMVX35@*h#lmk($S_b zq)h#)35Kv}Ii*Qt?=*c=-pWRzT!RX2D)BV4AXy7BHd*yKifwHH%p1T^T(DizH;Z% zg$EyaaN+#9Q%6s%5mrdGbSFbyyL(iu)EJ6LzQh9*Ff#>1v*(;tF__h5DT0z!Oov{8 zcO`r2GWjP83yFB2)B2m07SkP6wY3GEz;EHys^xsbl`z;K%f|F5MifaQ z8~?wjstFiZd1%ytRD#j0W!EZIx~&1nCW6AWHlZ0=ySeCNu3DinTsGgLl|$gBZ61xL zEXnxgu!0Hl@kCWOXVc-gntO&2Pz3}nt`AHVFkdpn!0l1)%|37zFjo4)CNF_j>dRTj z+!jmGa&2*oaPbvW)#Ti2{|QP3=s^sF4uPco@=}EqI7e1imwW}vi zo>}L4HjDeaQq9dZ$&r3)jC$H|%vgCjLR5oPMXt_Pp@)8K0dj7UT(UVI6un5vDGn;g zve*t-bpYG<*#f(j>!Ib(7>HDKzB==6buM=#!acy*?^2|u8{nRNwPoK~lGE4T%?b?O7) zf$=cDS5v6z!JaRutz0n44wPAxVk0OmWW|j%?hPY7{68zWngF8?F^i(1I$eo)Ql z^O3?FGV#VNR#rEPglp3+jjbI`EaN<}!~+3OuD^8a-YZuwoxgB_AoZ2Icdwj2{nE9o zS1z4fUpwipXHH+Ze1$((cvRuxg_%7gyMgf1$*Xs6EcSKxbhZ*2Yi(R9$3c5!Vz9rI3u5bo|?e=64D!3#m zg5eF554q?rSqrD<#9?AmP)uUOG>oPZQf#L&KvG6|Lg35PSgk^!N=ij}C3m;BpS^gb zK?Dxuzstv`C8!h4J-r<*ZS7rM^mI#o9XL*<8<^M74}9>= z_rB)?KlJ3*t*7sQ{qD6ZkKgy6H}9M{a(wm3`q|~d?#}w==I-9krk0+OiNQ=bUdN*N zte%|CBw1sQH527TDoG&Y<<^0z=vYZ65X>rRw&>sU>Ks*SI|N;GT*0m!J5`%ApG}+j zO994bylkqNsMnvQs(6FHRGf4%Gq-8g0oI*H`&H~>(qEDlz8aG0-m%GLvTEmFx^d^$ zxnoC9oVj%Q;*EPxp4`2D?d3;L9^Scm`P`|~?wO`@7q48qbmjyPNL!qq-VcxuOpWiI zJ9X{au~AB+05WqDv>0zonU7|zq~#{djkO>xgC_1MQ}@KTAX6?I`NawXzEO)kV8sS? zZjj1VH3OhWtBh8RcM8i&I%DM;O!w!(mV10(F>S!>=5*O)YUFZ1h zv12Po*RK%Sy>#N}8o`uTZoU5Idmi4t`|#0Y;$^R1yKwr1dwlze^)qKrpE%0101qFS znw)kIR_q@co;h*p^2vQXzNc@fUjvuhme=aFdTll0Vl5A6kzcM0o09{&VL`K90v43SP*aU1%BWqkDeh6L}W;86>sy0#?FU;69hgpYAL5`sx zm<7iXhANskujUyO9~q%&EeT)ia&e&ka-_h5JP}Bgt4~yoDTpeEq2{>KtG3r^%j* z9cfXBfFwp->(QecxMOlBkP+S_a)P-Gn(h8vxi%Xpnf;)2lEP;)mz+JS39=z1!J4U* z6osXU-B>kyfl1*~|7CMxSVh=0*F+_vx`7vHPYCoUa@7=q5``VQ&=g*wE{_yeb z%h&Hdc;mfy&mLJicK+(+rM<&lnfBh+#)kIk!(+Y4+C+?&PU8Bc>Jn5BS%Ijc9~y{Y z8{cIK%CnZq@{M{&zI*QfW$HbGhCA|0EdzY|@g!kTi z?=1;{009tmpl8vP?Vg^V){I88(n7x> zS7$dJjJu=wx4X5P$W(VVvGw&mgOf9zWt2v*f>Svd_oiQF_`)`@t+AJ#Ls+VwQb1&7 z5UvGqIp!Fx$Oj;1+g>SqJPr(gPsu~^4fwMPWy$1#4uPRqMhQ_+O@c91W&kT)fNYK; zu1twEMrKR7DKftaZr3>QamLwc_JMe9pv2jZ@eGBKxx&u@oWnq}VGeVvpbV@XkEXyc zKnlFVlS2!y5LuX%eE4fTxK`$j>Blq-lm&5pz8s^R2Ot~O zJd(mb(gV+xNMgVj_?@b8R-IYba)V;qN}v!W8kw1$nQU^ol0V2o7r~jYO@P&zD8$U% zyqqjanu~byB#2)iJS{7)ARpqJO=p|pvg+2s)xFyr3-cTM`)z$a zn-5R-Cc4|Zrngo{n#>kWo!+UOdZza#(~`K*|wIhvrAg z_dtJNqFc;HdJzQCU}>DS(V?_V)hK1t`Yc`riJXlhao(9vtq`9CUSg zWo2oB^e;x-O&|N_X1tUbG3u-9>MAQr^YhAT+b8Dw>pa!vh1uTBi;QcTmzf_Ux4kJ} zWAVYQgK3j*=k}=mP1J&j#YG^+P#7^oQKTiY1xi`v1>hONtCHT*AGlUAoANaCl=iL- zT{bR7sfw&={DErNAj_J9{P+yXd})f(3MDqo;PxT-y*ZgNB}nDhz89SaA*2i-W{Cv1FpyrrCuk+J^{d?ni2%5-#}+C+tvb z01@Ib*Wzeq)ez$X_UC3>mW)wq#_adva&)c3$Nn6RbwtF@T*9ti7(^l)52~+k4)FtfS+- z?X8u$DbD7h zo#jId^uO@?n!@k&DquYTI!iA)XkA|vsNy&`ze3_j!DrbBf)Rao3Z+p~0BfD~iczv_ zXb5&?6-$QMn81cZUxdwqdA3ntXkC;XGeGcx;U6-KNu`l){-Hza43!Av~|5OBn2_O=JlZg7UL1${=KoNV*1AALM z+K?;}u0+&J3T7B%W@q!Ch1h6ol(2bhK-%cCZFr@CS(d1HX?l0j?vnx2}T7#W?K9-ZDgd2+HjJB3AHb!o7=tT-<|JT2c<>8{F*ioby?+srDW zWz3Bx#(FY1q2E9kN$mCe(m}2%?oLra^^zfI9HeUc(bS#PM+*C(Z4f16?kz{6>$Jr? z&E95q2riIbel;H~Vdw%vz=~prghj>2C1u1@U94CEmaQ!<9sProlM@s3YnwNZpS*bU z=Gomn+Bxs+?%z4sSzlhBnIKJZaG;MS^Ide+?j+2ovb2zD(IxJIxw-yQHNuqs$F9%J z_!vuuH|;Vt1j9RezH}3#0;15yjj?C2HxaRjObKO^y8mHzWvd_H@G505@{(TG5B2B3 zF8or_&ZUZ9gaqMmlDwBoRaBncV|T~b|F04ft9ssgyk{7iqoYl>a~?8Vd`=6?2Fx zg*Z0zfL7D--d%EzVHOg_)7m)Ehwc!*JS33Pfml{(#G03tp6}`GYVy=Ilan++oZ8yP z*8b_UXK!BJ-#<9Mdvf~p+0)beM|;~V^D~oUBSYSS_`dFr_V%`x#>%p)^0Kn3(%O-^ z#qnxQP?mliIA>*f(?3_XHE@<$^y|NpAx6gbl$L9qa1fkMzfy7KAo%g+RShC2gykr~ zCkO^o7aD^#|NP2=Az93Th_fk*%J!rbhO$DCyyjSQqB>QwNLV$S{0Eqa;!af3hBg*| zjY-v--1z@P8q8R#0TU=OEoR{03lqIG<%)iOnt`V2wjCk%}wW&Bz|3!d6BmrIV|2(b>}puE@w%lbq_# znOi4!?;PSzSl`~>T$vmg7$4{vU){U8wy=D2tG}joxI8I3D>FK=sHnK2wm6N7A%bV9)b7&Qbp1pkY_S>fq?;RiPt}Rj}VSIFWbab$%17Y4=Tj6f3FLPD9n}+7r z<{R^XvKqQcJZA+7)SPm%G^Gd%f0(R|Lx-Etd*qFBFE! zyG(-1=%z4t&?>R6ddi|+QW$0SaY7-gtdO8#>UWkKytYn^rKItO=G|je8k#&1*ab|iEJKgByNJr23`p(My_WERFT~AvXbVMEZsk)fQS@Sa`LnYc#Wy(MnoSfCFLv z_R_FUvPeJBvruALSSIEPam1fzVQx-Ps?|hAhQy>$^#D_YtEs!KmH_^yo{^!^#m)8I zyU*Xedj0*oS1(??{PtV#3(V)o`#U#pF3nB@;34l|{6KGKYg1zrS<)RXl~vWA=KksR zh1Non%1KPj$|TJt`yxAvf=yDI6N#w6xU74SK;@R%b{4PqYu1WtwpiO;Cq9!DBO}Sy zu1SHI&Nek8v`k&s*{RZSwbVMv&>j%GRClo|K(b;g(i7bm-2fa2y8QeHB3LCTfFox$ z*a*Z(U`}RK(4A44wAF)xc%N67T1<|)S7 z)xV1yL|8fYLw+MtI4?O=i5pOjJ5dgvCDw&M$Vib;GvJEZqoA_SD9^*QB)#Y7#u1&w z4XIq30>?$R6@6d}8-9+}*|>-tlrnjYMa5uAPyde;I1gj zNKVV9fK*yqN=89NL)Xa6%FVsK!~NySiSfzFfuZrCj*ju0w-=^o7w0-WjWsz@(P_zf zHI*f0Ep=aHMoSfyA|W!P-LC*b$>I-zU&-u-EJh;xfn5?2WV}FLc}d|>@nJhY&9KBG z64m%iz}G;X&f==9jokS)NSt}ZF~AajUFU!k`#MwL)j+m_>e6E>I6I$3y;wm z+#+o)xlmdj1Xwl-Uj9IzNgE~7m)hTFrr>@YtnG@1ARR&4EuHVgNMy+qbU{OC2;wR% z^xueS4GsG@>r5kP%FiIw%GBjmI0cIlr3_K62hOvIGnxm9(c77+a2#xGMA^vT68ByX zJuP3jnHS7vdgk=Bv;r+?ijMpRZHN#&jIbLvlGh4($ZW`|0k$1?ts)R)Lixg>Thf3& z=!jsca2JHp#YG@x5HcN7t$;nKfL!fGCwxJ4-;M_&N7#RSq3B4&Xl!7Nj~~i6O85bptViN@p!%_(Ha1 zowa6a^{0>tqQ}A&{9%<`MZm2;a+=n+tRYC(!OQZ>mW3q1ABOxaDw{j~_kx?)N`FfA;M3?%vI9wkqzv z`Nies#hHq0G9<&WoV}xlC6Dh9Uv2JO9cIY>x1SB4Bbbp3JUgFB6twF&Y8B`XkWUx;nCpgcd=iO3+zBTVx`cR^+JGpo%-sQ3rBNAF z1$pjXIsaN4$dD6EZhshVd8_#{SyL{Qvq#~2;@#TD$Y#bO&##gM@U?}7`|v@QtSZ~O zHU!*+jXP>e#nZX6J~`GsvN-7R7JnWWo93y>PR(!px-ng3EhjZK zg{zQqQhX#Gl;Hkn?eeg7>{n8v@e+`h5fYE#CMh|qsJ6YcuF}&`<7ppTTv}S)K791_ z>FKkd{^7s*;rZ#KdxwC0XJ>PHj%ppNi_@b+{hiH?tsRuCZEb3x=3`M#VR?RPc126i z1je{LvSkp~NbTIb$b39c=+ug)w-hEs9cw7T$}OL9haybiP;&YPe*%7CQi58Qh$NBu zxhi;Y?i6FT>5zd^4pK8FW3fO<#9~3YaI55`4MG+tUqZ!ORkNj1uPR2U-~oUz`?c{A z5{;BLBlQkJEmNP5ht{%G4SG-l=3JXpM@s!ejQAX^wP!w!OeN!82D_eK&pFVs3>gD(U_)ouk_2}V)GzLZmlm(4fS=mx8NJ; zq`XpdQ+{WJ&CTr%h~27+s+wwdb;m&e(A3JxOkdB??CR>${CH1CXW!gnr>k;& zdvn;+H`C+J&rOa^$<3u2;#UnVS)mcJ(HJcvBhM&6sN3Pk#13#o-d@9^%)fpg`(j%T z@Wqh9DrhYwkyz08CX%ePhjD5b#76}O zL)#-l6VhT5QnQQ7YMPsBYa1GopsTlb_mA&CxPSlA%eTM#hd;c2eE;ZR_txIQ;oW2J z(HD32wpL|{8|=C04DV=dZfb6>DJ>~0uc~qtmNj*atlyexF3QQn(BsYdD6b%$G)6d? zG(Tdx)z1OpB$5HLL@n%owQizMO7Z4N))0WIl#uW$1%Q=R@En$O&@ON~-XS=n#OVi4 zZ>$mcIV7O0))GO>@D~Qn=2c9bS>Dd^5?S^a@Wgm54IixXA8|1H7xOZQp#tXhw5fZ# z=T!yflHIAUjp7nlS?V!YQ5q)TZL;ML2c9qh6?bQWh26gx9Ux#p2O{QeS)jD| zj1V+R7iPc=RkX(oOU&S z-Ysl{Vxm!G8wiU?E22K3M28qpcu3fJWCO$}Ih!7mWbv0(Rd{-E!L~JeDvFCrii#>4 zn`@g#*O$k7+nd{m=C;hcq!B2qF_^S%W8d6;ey^AL7< zGdXU=nYb;=-XMe}js;?`-)Hb)MxdAkZVw;srRod&UpK0OdG0*mJy)qH1MU-qn7Yo$ z!pua8AwrTiwWQ2qSX63K1fd@2cga{}aQ76{wY4@?S2fG~v3cikZ)17;=+Ud6{_uA{ zJbU!u-ralmA3S;W`rB6|=A9fJ+}^*vIXf~mJT^4Y+tJ)mTU}LAl3zsMmEyYY!GY1m z`F0-WqvPQoQdD27U?=zo$o;S0iIaWzT)dWrSJ?i*mOe6IwsR>mX`zZn46I31u= zn_i2is39o`(B7eP^a)|7d zo*%){0GQvaOT7pKxIM=(CmMT>3w18L7Q3_3%=wDTkZ@s0 zTtKiAaP4pBeq>`2B~ala{i^_~3!)y+_)#j1QouD0)bxiJ%7$}gJlCz0oDlFaF9CPj zWXec$!@(<4#GCjAFH&0)Ud0i^!qW-`Ufg+Dj6RACJr8dbmq?%k9j@2xJeRw!sc(LH zW@NPAQ(S<5qq(iEwRwDLX?CQytD|FhW?^QyduVZ{F~4@<_TKz(e@9y-1vew;6#AR8 z5?6U#0IW;q6>%#QmI`B`gADr$qwzVEz%jl-Cj6W~2~d`G^@0jG7Iv?liYn&^?*Px& z{4RVy_|Y{?FIxL@TW>T&W|1W$-BH`bwA{sxvqq!=A``$m zjR+wDV|;}^3^;2?^S{iVUl)CN_tQpesT>3cqEE%6KQ#E1_SJ zlWJ*BZ=@L2k;3>49hT9L+2{M5J*Rb$Rq;!iyahNNtmy8lPoVL61OM!_SovCy_;LQ% z+RDvi%t^^KqDpGVLUt{~4dhzs^bD2HBk)ghT;>`bzu1*Sg2N-yy#<3=$?8q3>{I4m zJBwK81T|SF9W5oT(B05Evaq(fvpGLpTU1=t)J4cl&-mQT=M(8GdNarW^WiRyNl4pE;KtKQZ^1nGzu8P6id4-i##u+8}F-&jprdBc{AvQQ9 zK1PM85@S+x3#!{1E6Qu?+efD-rWP0HrsucrK7aSq-~9I7_g zN3VBo-r3n$nk8LkW|Y#JZ7mHo6-5O_1%;R=8>t{PGB?>$l${TV6;f4D7+P3FD{ocy zP{($HSmDOZs!S{X1R$GH*$z>OB889uU=p|L}V$f7t-HDNtRYUc7XrXT;L$Y@6BWHAJ=MV94?!@He^&>N9(jXjwYxCO0Qcw&WKDW1PLc!)0?0H9B$)=_jv`KC3F%TrRjosl z^V|E|Te~acZIu-*1A{$%{X^puV;_bDzB@j zWY+`<(i2n5TSqT{`1$7_-hBJyj28_nq%A#TyFfXoxhqn*UFAP-TA1%n^7ssDqPU~-|bZV07Y?6$O@sazI^daZK za!R$-MkkeTD$}#Lw9aEmV6!K(%XRQNGRx9MELcu3XA*%T>N_@CY>EJYX0v^_!&CDvIOiY7@ff-V`9IYyDUYH7nF3!O%-O?G3;MKi=d9QGgBFvwt)gF-H3 zytnG4poTi6R$qYZ-v}stoLq9)@O5yA51WJ)lAU{yey2=w6%u7oGDX>b7l54t9Zbp> zEI13Vr_hzu^w1^%2$*W2iL(l?kd#Y=i z`o`vOEp)Yw&5W+jj}G)UW+kO3CHiC*6qJ=0#9{_yJy0Xg$!HYo(n2E|xK_xo5`zZB@}7~% zBuGm^JR@BdNoFsJTf;@jw4(b9WQC4$FzfSZ+TLK5LraWCvs9cI-$G!LzU!}8mMzUG z4T`GIP-U0-n8@@q|6mSVJ;M*!MJ(CMvEHx}fc$4rtA2+nd;SS9fV&CX*a0+e*Q7FQ zLJY&&{&M68P7%r;7DK)ItTceiIZ3Y%jum->$oRmGNpc<~E;8~?DWjS{QSanrz<5r4}XcLb$D)lWu$j_a(r@muCKi|CoL)VV-@;#eV)c3 zWe-F|s_3PKCCVP5u1U@~EWyvu;nu*HRpkX=h_(m`rVoDGctEr7rH|Lw&m_6ejT`z` z&MUD z{qVp1@cp|V-aI`$eQ^Kb>9bd_Uq88fw7<15)_?N9{p+9p^}qgcb!23CWU#BHq0Zy3 zD50)Jj?2^B+TJ}pGQG9fKv{%bl6#9wii?9?rNvm65zTbVR>>?(IfnKIB1>|!d4qtWzua=5&2+HD|9IrQgd~R^Q>M7@V zHkOH@l{bK0OaPbuh&GUY$uTX)t>YSviXV=%086}KLO-?bA$k5Ga84#&;2oJ-Qi4ww zX_6SD$aT!aVpq88vC@!3ZFwf?xh{8O&&2Zf?*7T~;qlYA&kuKQ-(FtYSiiNuInj`p znqE*-U0GW{zPUQyJvZJmxH!{Wo0pXp_fLKkwj-NKkQlB zz8A=0_9Z7Uw|^;nhD0%5J;p6jtiAdPk9^O3g!K!4f9C9Q9oU!#%;PD&*i3dN$RLy6 z(BSC!_{gZZ)VPqagxvD7viy8kMQu}amv^9TbYf<8=kAMlKmYjSyEiYf+C6x9|ADCW zv(uxSH&(`M#;u!g3H8#HPZHDM&=Fpl6940#NZJzrY=G|5VOz@NClvlK50;vR;a)_ zRH-XKc!{%z9Ruu-lnzLPWu5X?ODy;oM7KU%nAT=dKUbN`xSARHnqvVzYb`q=94v&x zEXdV>bVQhy`J8}wKZLiLKukKA8=4>?xVI{-MPmkmbKw7zDF=&~MH=bjITDdr+J$0H zj#mh&%7O`ys-gsyxbP1VUL7zasTmbE0uxOFCN3}_`>O=g@}K)#`lN(*z%M`n5Hmi} zaExE5Ts+!mVnyTTLSWJ`jp(d07wLXTl@z6yNJ#|CI$TtW$g&71GLVp(kzY~YHMM<}Hg(rcJ-nWkibRT}FRmmppaVGWv%J<=E2k1+ye+4Md}G5oWy*XPprO9Qqh zLFCDT$Yey4(F2&EzX`N%Hk0pBtJS99(gHBnkp`vmI#`^dqhiQg z&B`xt=$_a-K7IONfBWFYw~w*U-g|KW@Ye0a?V*;&7W}%6&0TX#6Js47ckg(cJ2x-S zFQ=j?Gpo2Fhx|v;FAg8gry>M&RBCgb`+orf4TSzM-)sJV(Luo=FQCQp>~Y#$gJ^J; zK%!-qz6N+d*IPs^M46@fn-(n_K7QJ*V65mI!jUo27`cNZ<5JSHi;MH~imGZGJNpMm zCkFecsQC5j+n@jT=O14^KHlHmJ9_x+#kX%?zj=AGv%au*`h2Nn@_+c#KmV_P`rqd} z`}+I(d)pg4RTbr=q*8u}-ka{merh5w&omX6;L|TG@w%>+B7MtTQuxS2Po+dO_3oHY z#f!+sDurDV1o0{|Z-FHuwP#ly&a{QG<;m#g7@K99RrC=s)*CRc8aulxkj>^~B2DVi ze?fFazC-*+3TLqROEdHGz>2al@zNG8DelbaJ%(e9dU8e_zJe5p{b_wdKLFkjVZOou zwq<}o2oB_sB%1DsLMOJ7Pl7Rcc!L6B(h7l$nK=q&LMhSh>*s_2*BX(2WN722!6i5S zsWzwYxgY2R!RUT43&?^fGKUMW{nYHz(tYISW#-7|I{~WF9N8OKDRdlTbc|&3!{XBt z6Z495^62&2+}S@srgZ1P^5NqbFW>z1>= zuG}SZ`jG`mD=m5a?6`C8)4?r7(I1-vvXV{gbpL?zDcIE@YKOmsi>yyl==8r}OQ@gz zVS9cEc7kaXDa-i5?4_)3ydI3mmHkE=KyE@~7r#h?$_IUhbd^S@7)2=!SW7R%P+4@u zaHeVMMs0}CBYCRd9R@Urc3=ZV};y8%} zVk5Vlq*u~c7n+$^68MZ)MFA9`P7GLJK~;=+GdUQ)vR#AnImhdHz!%}_?U9=l8ykkI z%s1+jqEo4BoJHR_68Vk#exQ~;?rJKXaRgH1p(KNtjP$guqOwX_kWFqrc=h7(gS&V3 zb`N%!Hg4`79NxRT+FMgqS;K-)&JOkV4SL)))t>U4#N7Oh-1Mxf=F(__mDt%fqncqx ztu4#<3!q{&;k0>Lt2pv&^>8IU;hco?Covkg+O;jyvsP$A=x-=&#Ny)H^jO;S9XlgpgW@p;H<=0&xp3g1~ zFDox|U12{Xl@7u<3AN!R;G`Cjsmrme$-n`Ml0-I%Bp>_K;m6F6MDYbd9an-}uY46? z@YQx!DP)KQ62#O#bC;kwLbu>umZ_=&A~+s(1PK4ipK|OR_6$Z22nLon6XV(e%IKF7 zgN+1*#y#joq$5S}#z?d)ciXXQ;89^kvBG*uI8`59K_RlfoDkDtG{Q589MB zfaOZ(@j2r8((iKvv!PY09&78pioL-W#~G~y3lM+Iu0Ztj$T2a0;U8KvIy#n4%>cO; z1bAC}eS^7@g?i3)G;5NLf`TIHaHHH)Z)^f-o|2w7{G#aYoRf$2Gx083O%#HBLoozo zf1R9`mR(d{;VLXDE6MlLVVKTjH4SwwBda^dk55V3-rZRoZ1100Ub}hs{?5z*73WCp zXsD>^uBof5s3?deh&U@Xt)#WBEJ*}TW+nucW}KP8V}ibS3BA@f)@DYw`yvT>%zm)Z z@Z0P68_fxz|BIiGzt0VnW8WL*HN^gGP8RVPu9qlasFy*de2e@kQVm&yNcse4=Vg$7 zPU?SpQ5kM*{Gq*F-Q$bvw+`<=efQJ%&rc4I4v+6Y`QH26e|WUNIk)|ffB&Mt zr@yvA8Z;BB{#1-CGks2E0PmN*77C8X7-IxD_F}t}Gxt+-6_bG~c$4$33Ht@e zpCjaDql5CnYe@LFeozvMvKc5$+HqUiHk%?1o-&Jrsd@-B`8g`YT1i%?z(h2N~7Wl7gNdQw0w6fk)kd-jnFU$gH%yj zRZVlx@XXrY5rtomcV~KN;V?0~w0pF-I6F0=pvr1jYkx;?bzzQgc50$}>QuKhW`b#e zCR3DCvj^=$=T?kJH}@?}0$}+*0VlemJ;gO={whtt>k7e>5b*s{0^C>VCcWGDnve8M zX&mBi+VLlf%R*k_0%gfDw1YBPoSJ#H!D37kv(z1%ms>`a-O4tiQOSz;AiiFEo%$gmFmoyu_Nc4Om>rHJnNCZ2xP0 z-q9OGlIKO+h-?;=$MY+?`9o1#U|D~}rzIPB>YEQQ*F`~spgib>$~ruA7Hf|#hB zw$4Hl2RU@`;j6GBjj^j*>2=^ivEtY*Dag$$DlK={b<$vTb%$W#{jJ&F_P+6vnGLcx zR%fOrNBdh!8m1>kTQf3z^D=3xo}E-sU0)D~+JX!8D%VO46&dzl{Vito`3l!I$Y!X_ zf)1NYGgW`;i(3WV;|sRBadV0n5WnR0`-VMWv%^p%I1tvoGWh7E=D)aT{46o)>BQ5g zW^>zRWtgG~eI6R0-`HN=Jvn{x=KJqnJ$?N2@w2x-{PfdzFHWfwIXfux$MSZ2OA}4N zYdvm{r`lWfRb_>{vJ_Zn5Gd+R2}#W^uBd8g>!!fy=6F49gt@7xbXP}JyWQpHY{|{x zN~+XF%PN9JnETXmf|O$Q5jDU-gdyn9Yws!8ddnA8o(}w^troeJ+<9ah7!&!yQup*HjTqc$T84dWl>@ z)pm%8U2C)jjuOw5>Z=Xi3dyom7ts~=8e>$9)dz;A_#?&5{?+LxggY|I!M6yh{D=;| z$;J`Bg?r)K;H{)|a&f>yz%Qs|AC-)GM?W4Ph;d?>E(piH3X8#AieD<|lPJnRcw-hL zf@9)Bq}IYtaI{cBPA!|UsYb`8rKpQ41>{gQK{Y9H+4-e4EuCF$N(JQ#D42 z9~c;#-q^qU;PHc-vy%w9k;V1xjaed^x;kpz!&K0(NcBrgPl}1lP0Dmtmt{ra&qFxq zAVG^pE{Ta;ze2Hz-AiA!3FaB~fR?&V2DecX(=KH$kzd9aRr8vU6M_me_X_O_3Xw-f zW-;a`D5wPqMwJeuBf$|weFO9K_-IP`W@Hha;cjT6aP!FI+{)Ve&b`OaUcP?&_SV5Rhg>@Ck#&U6q{VsG1D*&tQ@B>?q7?}1qS^k82dDL4*ymR z{H5Y}1bur91{_nN*~57HBG|{VYiI`pW2CTRl_a`}Zy~+X2~q~#rnV}ui|Bt{c|jBi z!kf1V7?jN0_3woQTw~LJLak$HoWZ zrKRgCIa-z9fHYG@Ylg%moCR%!#>EGP#l{Bvg@u_}DmXGRpTd}`ou3RT#Nv*kK&+8G z$_mI~eaI~;C@!sN>Fp%>$X!_mJ&_JoT2<3JG&485aq#f*y?t7RO%9I^PfU+Z4|lgU z)p;8GmsZA#gDA|Gn2?cPSc!EdF))Nv4f&xXDM$(fZYEOyIJGPp(B!ZnuXR+@IwnX; zCQc>{+P)YH0|F7)q09!f1u<{@MB?1p`V80!xV;R{7rt4);Gl@uq{P_Jh?K0@C^}T9 zXE7A~+g;r1{PO0l-NT1ZU%kbX`1JLU-oMHG;nDu#(d~`No>poUG}fa_{^uG`O>G@% zgC!BE#jXnaZL2q7No_0`dXG7N*@OawR_{HSQ&fkg%nIQ;cSvz{;4a^cTJbPs1Fdj%8G;{CqFX37 zHy(;KoDIuyd z@VNvr&!eJZXw~0HYJO`^=$FA-AE`|x_WP+s3yT+k2$C@7RF&wF3BZZha5PF?poAj; z?$lZZ;ZD^c1hvMDPC)s2)owFm61s+3?FNKajn^_|PWl>nCX7Hdl!EPYX5su7?1RGN ze1hZS!-XmYcu-J897+}`%a=(X(PJjIEgB(1*AtSZ^ITQBk7kfxKt}Y7 z8DYM=B%RcxjIh&`goya8^oZ~Tii+gt5yRBj(LXW0w7I=^cuX^?Z{NIr_43t^zyHHe zFCQEn9^PCS?dxc+uc04WePeTDEvb|QeN?)|`+}*APpQjLc%NxrUxml# z%p!L~8>vdwr5JwcEYaA}PSQt>r=lPuHJz64MdhBBfywdV(b=s7Vt~f!ywKm#+Bw+U zRNK&2=V_l>@~I3AiAzb%FU(3SuXUwG!$>%IuOQ7Gp!dn+WIo69fUhL1*=n}q|3i3I z%(b2Y(30=hm69kJdws9-5As@?xgxhL35dy;7IGP|6`4u@thB_8^w?nh<=Hufh2@^Q z)}Dc>)va6mhbN~mzkT@>XXAIj`|XcEy?uOg=U{bmpu0mVBh3w)kk$(l3$%lND@mDG!}NGbOAw*OH5p|#t!BMWeIaKBBVZ8nK*H5JACzwq$Lp~%Auv_ zhSd*7?6U`8Vvao<+lZW$wr}*LtSE9rICcJh4Pz8xk-<+@Mgg`rgoIbqRJqdBNkuk& ziH@pMLS)9P$XCEs1(OpTm6(&0f)<%dF=O@mZHuJ{5s;@)YEp7$5q^zs+WqvjP$;&vvZkr6 zwXw#7tuHq%DVZ(~`6ac(vy)woy~{h4zndBv85(G9@1y8JySu*H)4k;1mm3?MnwFCu z6HC6XD>aO}5vgLps1L9*g*C~~1J;qm7W~9xCk00K&vXAGDb^Czwi~$6mr!h;fUbym zd*;MPX)gyi=hgB0jT% z=AZ3dV{{|#hP{x93`41o_0-m~4-n)E8j&c8Q)L`hz_zqjh?Sw(nbuP9<{9DF;zdm$ z*vbQFNQ?#NVFyAOv!;&d!{vz?N>*^}C@f|G+=LWX0aCf;0<{ue4FqrjHj7k66v{Bp z0A-hJ+gwE|8Cg-`TSSGyo0dtm?a)I$g!(IDCVYTHQ=AlZRjHSG5!gw~<1US&Ae&?i zRPK^R+xdRN0%_vP6h-=r(~tYlM`jjK*A+Up)o}fCmx?b zp{>I5n#T6Nk`&_`u!OiJbqKBxi;PXl&PdOrE?s1JYF<%sK}Jq# zT}#*S*!a?|z1ZXX&%S+ja{twjzx&-!-@PGY@y^yve|JY)Ypb{Avh_xrYIbz;)7Dh$ zE-UqxeC2|cVL?H#$5HN(r0m4Z61SST4NWaA_ElF_p?y|R75%d2vN{+GVlfJ)D#z%sSZF>T8S1B_&TiwCFEF9DUM2}QS6`P$zPG0^H6qzR+`KB zCp5%ILw3Ziv$)i{N^@Nou{>_XgP!vkq z5l&{r8_T)e|G-<(-IAtGuD2riFHs*@CKEsWmK~6ocq}HWwqk1}y6oJBtg)luUn+__qp1QXFQ7qg29ZjtRlhdNB z%}s7sagH}5GCilNZ)U8A9y`NJ=$c~#t)8l?+P3bNs#14L{BW-)JEJHkDLycoI&hK zO+yFfla zE+&?NTX7)cxcxkJSz1s@I&5d)5}p9})DIT`U$#6wZ+E{VeIOtoC)1b6W_;ZpR-tZk&IP;X@az)IL%}fBJ^6ir4vzr5+bAa=gb?k z1#-<3X@6?CjO`+5pG``Wt1!@;o=lEa0>jHJ$jr#eFCtugq_1;ee&hC?yQeQ-K7I7! z?f2imINm!txx2qM-qq6D+TPXE)!x?G-P2E4Di+Qmc4}iyg{vqpH?N?iyd0-H(?rpG zrYJ5sqoAzXQ{UM?I=wQ}0(z^iReL>2HMKR>6r#d7l1o~%90rP2MUZMq7#K+4UbRwA za8 zIk)g;!Pm(oAY)SJHsr#wh{&HV@?iz$#J(>nhG`NW5hp3fH#pu)Xo*#F(rsSZB#3mo zs>~ws0c`zKKdDNUG(r5rB{Af(kVtDuBM7w#BP)y`xQbh_L#Rq4&!Vz#m1KFTA7GF`m*wh%%(O*sD%7XZ)B!W1q+&S^&>QnQCB}R0RTF2oeOy7V83z1qA z=EC2i!W9dsBibB|GIPt}_>~#3eSQ8qWlBy)JSc`nwLh4bDy=%DccK%BY)m6}FoB9_ zc^TOym7cn$uFl5JiIv@>lY5W9{r36ucW+-k+*;b)y}h?K+|t~p;&)x%ZvURXfuWJn zk)gqnvGK8ic2wvhZ*F2?u?sh31`%1*Dw=rK;L&khDPcFE=&oUTH(n1tAaH$-vRKp#9K?5(ot2V%Fqp;*O@pW0=-48|d> z{0jxqMsXO8Bm@vTvyfOmUjmyjS&UQ`FD?H33%uFiKlJ0&XtP{7fvZ-}!qV}0i#G3H z@Hq+5CU_mb>|j~7c`yM2RY6^C$pr;TU1h5)T}YyU_T&OHW8uz(7I7b5W&RlMMet-$ zNDK;7Ds^k(<7vc}lK8tGrEe%%(P%|dYDOOZm=Y=_)RdRHih*d?0LAVa8=AZN$qpIl zZmEP)Qp>Y_XkvbDY;1aJdS<+-(o91GnmuJD+Mb1QZDcWy!`K*za$IT_NyM(AVt4oC+(>g>tsB_ZUaJYM z#oO+#Fi#Awb_KEmT=C?qqEI3V3T)8PA&2mVYMV<4o466YaVu$2q}gaGl@6fd|6HJ@ zlK=)`yj#`A^e_f1DOd$-l3NIU$tI(YTuI1MxI-(%IYk|atX6eJ`xLni!8hJ=%+&sR z$~J_QE`6bDa5}ePwsauGv#b%i-i1{e^0f+Y;>jG25<09EKd8J4R5kdD39HWaIhMK) zB=6{R*=76~Qmw{2AByQ3OP;3-j>$_T4DCFrihhDc`MJ5YmZ+=q5XMO+S4ZFAU{8BTOFND^noV}L z)Ymq3scG!YG)cFUv-2y1Wo7u8o7$SHf{W`1@~M`e7?++9laN(Wm7^Lcxa^}phrQr| zVbKU-#oTNYB)VWGd!|C-855?RQx;KRo*0$()Guc2Rt6u`A3 z;?mRNq7t)nGm=uW^0G4XODoE&J*8EhqXe>Glm7P2%hUUhPj=>}Zk`-$uZ(wjTWZ^S zdVBl&`Ui*TNjHS}otRi8!ezL-SsgY=3(wCl%+I3D0qL9MB1gm~rsh@DRhJZ%w~Q=K zw`0d}SJ%i3d089i0m|esDkxjwAdU<^BP$W02@Vp*n5n_)hoCTf#4)L}kz zdC=t_CZ|(^)a+}lBrjp#qA58WM3xK*Y~^0-lTGoLlUs!mbbNbNwaam^Cq z5mw-b*#nF~7=ss=8bhJX=X65u&CTBxbQehD(g%t&fXpYqJ zVXLUzp5rnV+lpW~ng%mOqpmS?hEv<-WTG+Zt56xqf-CxU0S&RjAhJywZ@LUQ4h|*E zkm&1}1P&C!Z__X^x+>|i=Bn$RTqn@<@l)#P9vmEPFHKDE-{0M!gkKw$itg^-{sAyd z+wrlfnT4gLHM(>Ub~d{4DCOqmgJa4OCxKxic_|DLpGaFns!6wYOsvf`S9?Uh}@V6S%r3IrBHS`z!OS>iNrG~5!fj^}nl`@vB;7yZA>Kqki;v^*_QTd3`D({9$m{wHZJ3hNitC0zc#P!m_th;}BmXa>h z8)m2?kP}SC1pHx=d*qWIT70cNh z5u096R-A_Yk7EG@;*W?3WcfBK#1PcXf7w^1gu)?^w*_+|ugC*4EnM{PbXZeN_pi!}9V93W0fQ5Eto8&oNSlXQWwz43OL3 z{K5K2+(Ksg1I&LCXv9OX#>#5s;~dA5^reen%8N-^6EX}QY@pCk?6olCD=NWGu|j0} zWV2C_7p5v@dY3kl{y107Z7_cw@eE^DD7H))N&@FdP_ame$W;#)*%v;DBb%uNZedGf zr!3YbuucMqA7zq#Sd~wtk)M(0#Wm~&7@-nfWQXH+xgl1FxLe6y-3G%`?3PS6susp( zH5llZP|V9r%em9AWhNoa*A@2DYJvR4%(DA zuH4bMM7+QC-D8VeJI8kqc6WBRR%fQC#>a+xI(rBD+w0u!y4t3WuI`?J@s*qO$eJJN zZR;CsY#yDPpI=$%Z|mxIB_?K9dy+~kD|;#v$%@R#Bqo-aP?`P^esRP-%gPnVW>x$a zQ|d5I*adMb$OXY0%^CQTRdh~_wdTs8p_!GgAhOAPzvmDmMI8$6rjT1mTv9T@8L^QB z3}RiNp>s(^xvRPf1#tV|{*&jAj&ASWIoe&C9$!7!-`yDP?0`eVpC=|bi@b9ci_0r( z6y4okTV9wR?rf}f73Akz-6cxmaqBU-5@X?LDOjCb+9?@0wld#c3tJ})yP+Y3pE`~` z>XH=_*Tm70fNcXKq{N>puQ*&$kwl#JR(nlSNlK3u@7KBu?gn`l)#*jy$j__5ABi+m z%_Ptrt_wvrFNb!=W#H#B9m!m*vdp%HAf5l8#@=Y>cUfPI-^6MyrV$F+0}}#?-*WKp@i4K;CMUzz{y)(n`x=(?aqsi%_>jK$uI5f$WDrl%qmQzfp|u7 zX?kpA7%@``i7B#w+027ugDC`yd67E+iejln{ANZ~48?f3&M=d6OcI0VnABWJ%xTy1 z&d&luaM`K?NN_k`kPs`19g~omk&#NcUO}-3kILfO)*+p+?%ditx_7WLHokIeb7gsU zltS;LlXLU43oEO1P2Q$U;l>tqr8j{1{CIzReOY0Ceqk{bB|BYdXHinYINy@UdF<@( zZEGJ{UGA?dD-}1XZ@AXrtq(+QSC*9&7h&!O;H2wCitqX+=TMeh}AkhVzPn zQkU3j`70>x1DLmLYr;PSxCHH5NivMpe3yJl)amTPcbYLV|*y*xk8q7tP`H6 z%NUYjggap>Z4;cs#qE)dDYA>0>l}pWgEcD`fip}J#kn#Iv*?tquJcGIoZ`eX5D$`^ zf&)QGVXfVLLzAn?Na%OpTW~i&Hm9pyX{j>8^qgeaO zYJ10)H^!=K`|7jf!t!DZ(rKezniU_KR+to@l%7^lo)wD~T)n!IAgEDz0AvQ0NmNO! zM&bMeVI^v+h5DjkK1Dx?rpN&&yPW~sDdEi2+h{m-nZ6Iy-3W=A2?>ZwOiPUok4=q< zOrl>F`H8s&d3lv>{X=83OSkSldU)^F`mMW1YZK$kw>M^2mg)CK|L>WF#ks}hRk|GB zx_NVF@7Ct#t=s#1ThvhR!UjY-dqF{dUUmj$F(V0F#{Co-l}z2I;fem%_KEeSzD5dl z<6^06h#^P{DlXedF{YFZqOj#c#4GIxXzpLeEyu5bh0cJig<HQu>TJ{1g`A;6OXU(2ZWHI<&wX$SVe$ zS~lYLX4JbtIZ$GwC2Fehj*2L2F?_`kwK5j{E?p87;v2JS0V0V!G)2==v%#}slHxTm z_9v2!F-l5_oe1$)f}6t{yOzT?Infp1qw1)3ZZl&>QA|P@cv)|%EO3pQnL4TpV`H9V zjCUk;j;;pR=D*ZW|yRm#sj*X6z53{^_>;o$ zX?1vbduw@SYJ6^Lpu4lVWoTn}ak!(pAh)chXJM_+Q`6pF7#bho%FHVnZY)ZTpr(0v zY)VpgMQ$9arV*DhpTmTl@`^+SQ~pL1dKC}C8k(g9c_AAJR7A&^<89@L1lXFZPo#Tl zcv?*|XBOAiH*W18?BCvJ``+5zpm_ZBSZ`}}Nr5*%u^=}y6~mp5 zescbz;%Nv3iyaxL;`4pbWB#MD=US(UGrJ25rCw7fJwIlHp9ymtG+qh~KJo?kvoeDvV>_Qv%1#P|rQj3j~0@9k`iHB}Vm z6;^jG%y!l^^tGi$B^MT?q_z!s3X|io_r@f}rd7F8ER=vcN)USo&?+_iwJd;I7v~t3 zdd&UnRuv$lp-{tz(rcOltA`>fr=_-Jy5Pv@lZY_fp(!zmISCQb3CYCz=N9K@WLEZ! zj*LvNQ6S>M$==Gw?)v=F_U_7v+(znLI7#!_sp-kdX}YqAiR|5f_W1br-fbYgx3w}o z*g{)mq;p=@6_8o`h?v;4;>LlYw)*yot&Iu#8j%;~5s)t%f=GMBq+f!WBtv=Yq9N=> zh1);_7z*|rosrstIMI}jD7ma8CY&W2+a~}VG)u3-f(K3{)flT;Zh4coJq!Y0ijH$` z#|ik5sZMb|yp3Rf#GKI*(Euh1nAu<8RmA#B;y94cnr~z@X}9`Rrv3xYO5~o%wGMw^ z3x=g6P+Q2)(v(bP{6)2fWFN7!13!#WMgz660^Xo+Oppgn1ckd2@kB85n}M>JddTxi z96&k|l8Jo98twQ`lrkhL#>bOV6q}zNj_ze$cy){k^*pUZiyQ(%x11*x*{TAB-{4h^ zN-uHA{eolMn~+W%1jK_Z#Jqf}GS?83hfQyOeQkbfibRs7g;nYt>i}Ulda|`pc z-kJ1iWcB`1bnv}1)29mFh) zbM7i2=vM_(5g}jMt2%kPnr1!*ZsA%cz+iMrh_r&C0VN?KMrsv6!dz2lmd&G&$L74 z!Tyu<#ip%ul_g}vA{)A6sBSQ6>e{;~6t>kYJt#;17Zgb^jI5M|1pFmR%eAH$u?e_nIIpvENyL_|k^bNRS#78fEG2AH`EtldiQ?ZS$kFiO7e1VhRE#mERk6 zu2L>?-&!SQRzOBGtr!P1Gm9+=$DN=Kzhck(ad1XnCS7J6Qn4{PH9jsC-+yvZWpQzN z^T_zfB;Hyr_=)4TBe0`OHBp-?o74{+mjNp06H$Quw{G{W6zMmkdC6W*Umfj^h*7Ljhy!WmbbJnM4S+13LpZJlQ&`^^t?5+8sD)L> z2*pf|LROe7>4Ux@+yC?b^WTs2yr#|pxv>@=BB+4{ zXFIW43gHLmTm??f0%x_8{DUIXi;FS|dXJ8xXe81bmJmw_NHS79jb@ewMI?okQb(0a zzqPG>RFb@N|Nimu>63fMCwEUyjwvVl04S_1&Wv`0bqezj*1HRf>btu;tEs~um6w*3 znd+Wv%1w-tQ$8*}zrH4(K4Q>7*Q1%(Agf09N`UvJ`mR0JNWjKsK1DuI+X z3`~rV&(keq_s;#>>zgMJDdT(V=I+Up$4_58eMHBtdw1{NfBf?4lb3IQ{P}PG@W;RZ zd%9`dJ9>C}!uaOs0n^itEij)390`ns%w`H^B_-xGkBqg~w+zp3+?;8zDRq(4NF0c_ zKDvQ4go@GCM2C`hK#vTTF3({0{*owS{_?PNh7CRJBksb6R#i@PV$$P zl?0X^2w*MZNj`E5(^L4v4dOQ0moFTatT$|t?_xlk^LIEzBx9qwc<35j-!Ao(X67ZJJF-ZoRX z5Q?B;kQ%Q3fVkk1lhxNT+Kaa-oRrs`0nX7GWfghJ-nh${e5`XsiqOf1d>U#;kr9)TTToC^R$7F6 zj+z-bC0hG|`K|4}hc6y;a^Jh_J&HWJcV}mNZDnO{Y;bUD2%j_)1ZK74q356X3T@5P&!&!16b^4oWB-@W_phaXtSacLhT0P_RO3rb2_qKQ%Fo|yMEq2tDxhfIr zjZMK#jSY?TltD@mi<(OvGz?IYw8aU8NlEIlq*^YNAy!6qJA#NsLZn)1D=Wd-UPIr4 zYdRX$bshe^EK?q{@R@i$ad3`}8(H=-Mj}~WBoJ9-2~cr(hxN;~Ei9kO{6~kjGgSxH z$DOHp8{zJ39>}0z2}VRXF8qF@Bt?J@e94?X1K?i+c@WK$65fh;qDq;>j5b7o?BW*~ z0L46{?pqgMvtUt7M4)G|La~?6M9j*t>4xeG$8(`ZeUMED5839$*fV&kxVC)DAU$0D7Uk_n?p zp?h;dQE>@4Zvn+Kt9KqfJS8ys;iHFl5ANLFySX$sH$6GhGc-2TgHNQJA{_4GY;o}9 z)HIHV&YrR)qU6J4!h_>n4TWf#oLf;cGNw?RElyt;cbOPv&{p&n=ZMY|;$%5a(9p=4 zPf7le_ywdY1(^tE@J7UvMNQcsmW5T8J(mNDITOe^d_#j{(@uyGO^ppxC&+}vsE8y? zcrH)J;NbB5t=qfXw~^Zq?jIlC-nmU(Sek%7phDW~*Kc3He8%>D{QBoV{=*-C``wfK z_wLe_?&jL^;^M;W_#hzfZmX*-BaI+2j!Yt`OJY)HL3wp`rH3?&rLCQrrpi)RISp~^ z8>6Y;038S9WiH~aRaN}2u1cZE$+ac{P|G5WTfAI=V@5IY$AFN&mJQ;>(&;x2E*;q% z=MWUxwL|e^aw?Gb!c^dN;cq)7LKO8XJiQN+X%2Ie{090<4v_cQzpXx$*NlXr@AXlH zdCC%@0-7Q@2JDY~Fl?(D9i=6e>~ZPyr6bn?w5nvNc8GyoqMnbpif%~r|BtNq`mHm~ z*8Ehty1OJX?#-QZ&YL?j=S(q)q)1U>6h(@nMCDke%AHR2=|0mwXM)dQFjv0th2aas z7#Ic&{{e>Wivb4kg)a=)H->?kc6U{YoBloT$Lg_Rl#1Nk@!Q|`yz5=zSds(|=Yje9hUh5*C9SC{V*BC~V8B~KH?x9Ty8yROKjxZ9bhzL|)Z=)wg!_?f3 z+XoLm{q~pN{`%Knzj^-n>B;`?=EmC6?A$e41rWs>L5#Eb3 zbA4r%o|!4=x<&coc;Ya5;a=slMa1CeS2pjS+`o>^u6EPDJ2KWmUfbZgr>m|irNJ}J z>DXfvUjD_Tdd_TUcNu$Sd6t+t^3f)*z-0u$!1EnD026J7UxF$t*zzQZ8pR-$Z>D?X zz*zrFJDB_1C;^ZrF;pjBr(B*Y1ge9o!3()}(-~tq;cA5i)51HzQKKyuPrX_yD^N+l zOkDX3N#@HmYuhn-SUt*{O8yCy%Eyqx>JR4CR;(eE^1-IR$&%Di7YGWJrbvUgblzga zHuZz4TB`2Y(7J7Jj}`i&yq@fmFl`2ZtA1}~m9#6!!ka06QoQGR(8~xcE7g<=>>~PM zqybZd@fv5rAwen)8$OJxAN^dpaxZEcc#=bXePi>>8~cym;G%x>#jEGf@7~;Gn&!d` z4J6lAr@BiuLM$?V@w_vH@8PmV7rLYNW}C;++Um>pju#YHIG8x1s?cfpZRnkF+ThxdAQ z_g4CmfuhZKXl%kQ6D^UQ9yAx|XCxu0bSID|)nm5k({sCI0L+y$*pwkMNw}X15P(%i zS4@7iM@)hcFI$n|Cu(~E({dohsklH!Of(SVqg)o&IVG}g#@EnmM8i_tr$n&yNN6M= zz5&-tv+zsWxKv1FtkpGd+K(=@e6Qh_lx5B?BYVM26U2axb0R9dWEAv{5-ZmZAj57l zC`Lu{2e}~%BIRGm7v>+X_m9kmlKIw-AZ*}r*XV{>(WW@2b+Wod*R9=(xtFp%*k zAd5KL>@#EG))t4yg$`4+Hd*y*`UPP0HUjS{Zf%4b;rAk>Y8s(D$d;kTyVgDdCy|u~ z!f`qNBeKnGWEy%Tl^!_tUO*qQ6_14!GTV;^{Gc@8h~|r9*<8rs@n{62-=FE}&L&fR z!}B+{5APrD96bH(v**XR_79I9zW$7q_v`26O+Nh^SL2Ic|NX!G*Z=CD{}b|m&ra^# z+TGqd-MoPEP<~AuF&grr5|%PhelgVob_lWM%GkoS4ccVxKe{vDU9Hx-m=-)b@y^6} zW7MT~8R0sgK|2n=33j%*OuD8_Avciw$yUpcmLsf0m-(&91j;Um&aAqtASciGR8nOa z2TR9HP!w$nHWM^$Kty|}CduMd*y)RrMZ<<#y%u=lYK>vm9IIclQ}`!X19|&u5Y?o} zGZ3uy@y6u~meXMZNt})gl+H2PB0WGNF>(e%Fo{>yM)?H&IBSLVFDol7^49XZWv6)^ zUXQ4}=KJd>H-GYyR37r51KMml3T27L-0$y&u zYSg&zEiE=@ptGKhh!SN;r~UwV!fb~kq_~UuOe5XM)(~Gs@u^g*)X3Ko@|Viht|1D? zgTvEH*S7XgUOr~Z^ZLrw`T42-k(rsHdOe*gG8;D+c%N6?sQL|Tk@!Nw8NZ&=U&}{QrS9RC-QB&zgWY?deF^XH zfGqdR&t5)xaD1N|U;OI3-+lMHzhzYJKmSjD_uF56_1SY=ko~>wt;S|)V|{J)>f*vY zjl1K6UF9O(5^5%=o=2Ip&@-{VdwXwZ|LFL^{uC_;LU%t&!LhT^))5QcawRiKhR@*pbU@P4FMpSP!X=$+wdC=aMdDI!T}2$3V&!E3v#}SbzWeWQaqA1!W9A#zJdXB?DzdgmcU1R;3K)D|g#H#qLg~ za>3kg1Y+{BWiz8n0p_z=v~VhQ#+W0NF{~b^p59&r1O^5h{o$d};chNxwNxLtvUPB9 z`}WP1t5;@cN9eg4=^sdA^}}vIZhF+~ZnNc9@~Ap+;7(5<)772oXzP#&g;IX=&(=lL30aXk>cjNi?(@RJx59>*k}2H)aDU8d;}ljNqCFu?N6 zMBWc2sfjmS7sI}2vRaNMI;(xFyL*kD4|i`r{``xl_Z!Edhfkh7I=Odz|M_QMk@@@M zAOGQ>{r%tl4GQs3p1pka;>ihI^xL-@du7x%uM;xP&rMBEj`r0kox@!;i5!0@QyHFH zKRmg+ef{R%oqJoOl`?%cy>Pil8q_F-Zk&>`^hHQ|TgF=$Fxo|b?Z#F{f=kUcRh|y> z$3>Q>!3{-3#B)Nh(j$P}0NoVOmB+(PRlBa*AuVzUoHI2^wSB1Cw()4B_tfD~7uY!` zR4~_K_=}lZr6xo4URC}!Q<~)Y$kT-BxcS8@d14@+|?eAN?%C$ zp5LIvygC-py=*x0b4>i$-u_PeC3v;G7vDnB1UE&+J+oFUy9na}a_9!c!}M?Y-a?=w zenS{NNetPE5@oGkuM{B$WlCjY%3`5J>q;h_Grh64G)Xv# zs?N|vDaKSppNrn~Fb2FMwAADFI9gihJoPhbA;AVuXxy*`o#Zd%k3cK|)np!_NDJpA z`xMeDHP{HePx3v44|5jGDQ}_BCxAS9iaPmS-dFCP~s&ryE$^H}va>`-+?T*U2-)LLfmT-pwM&=R3O?oG`z#G(Cw4qpmSs zk0IUQciYohpX7dBgQH=ey}5-D&=t*8GEPEX<)l79lf&&{ANi0EP%)_yZ8lywUJFy4 z@SY%lGXwKoxiBG{5`?r>DCUG1L*B*W#WW&kp$p;D&9d!gfBT!i{r&I%@W;RZ>eDOUA}d+HcHRN z&b@1cl~ReeUufQ=?~IQ%MjSN!8}0a_NZtgSE&yq0N2D02R~l%GQ$xxEFj~Hgsa$dW z)Og@F*cT#X;`l8iX{^2erl=!jSMxq{f-u&Gw_?IoE;vMD)&@b4`sO>%+B?jKAuO7F zxHyI#By<2;!-1v}R+YU(t4YTtY+0YE{I)QD`O@j-_p?*vw&i?S0jI`#0sMEV+&9GS zrUMPruYNz{oQXZd8)*Q#{0NgdF?RO?uDxj=v~W*g!1GjyQYfK33LI{}>#5oms(ZKg z_I9$y?Q*sTJI7~x;{lx!zMV8!WI8lj&796gYf9F@yq&&DQ6=-GvN$0 zsfQga3hWaM3F*uwkU~;#J3oVQX1s;ThBJdY8hIP@B~qCz+BE5G3Gz{OaFnihvIsq0 zV_nLoLu^gO9f+Bps$ipMQ&b<>?<5e*fDqo{3J#q-4sB9z5$GmzB#UEOXt}f^}*$gPHX_ zD}5;3@B*=mMCwy%TU|XQ`;}9~3*gEd`zWYV+Yrz(?92qzn!yBO<@B2!9Xm?Z|E>KO z+>i%hnR_;oGe&U$bK_fM$W@AYmlR>+@_WUYrMjSLSYoJHBi`slP*R1mKHp3uv((&9 z-N)$g%HDsZgV%wJCIktGtFHt(Z_I-V1vn-i=6_W?g;KdSbO-4RDw45ER3^l<2Ui+< zA8r-&ZCF3=bzkdqDj&+U*P?PdoVE`XQ1dGJY5ZY)C8jCZ5Jd^*3#kZ3)8jd1MkOG^ zQ;#PbDIeJk>MaaQCQ%36aVvZ-l%RPJcw)B*OLq} z71i%b25dG5J?!4;sspcuYv2kdt9h@TvvNv~Z{8Umj z@JjzonH4XEbVZaF7$imrUGZ{EU=jQw@Q%;(*8Q=|6Dt)Xk$`WUwc~SlxbSzvk!+=y zhv2)sw!X5ybNuYV-sY{lC(p>ReEXZ<{)Qoszx?{s$9ML2cXx1A?%q4OkD}Y=s>v3P zPd29BnVoCQUnI*iMf*JZe z%Cm@r$S53?aLERNIKjXghNtT*AK9WQi$X%1nEY2N9CBQgSvjZPD7FLCGSmjk__i{? zGWAD4TRz`c9zmjJ9l{^^s zJ0*YQyy!HEmTqm5kbr*jnl9P#oqc$>(EylYmaAtLP?J_J5lbWn~i}feM2K2mdFs^9U_3VMKBhGsMd?i4(J6BIWodL zMwLshAQ4b2InF2~Swg@JwYl}2`>fbgzByDQOgOee#@OT{L4}fwCT{^cjFnb$L)QKy zC`Gf)Ls{P0FEbjiB;C5=Z1tR---_vrbeBlFyo;iwM0M@`%HZe-2jv zgm{;6YjDgpERVZPrqL>S^0(O(cpuA(n^t(K=6R#Q$u9Rdb}z9*1}72FEwu@eYW=!>S8ho6VU>QOF9Xo?JbqbU@Mu;4hGQVs%dw-l2)7mGHD$& zKR9cs+bdKBwrV57JOf?oQn@7Hpg+v*RViPQDp0qIMwoUzsS$8u^X0}60Qi;v(*^6J#s)WYtAM@I+uNHoGG`(Ac2e*X9Y!RpDq zyM&~Bw~rn_B};Sn&LIWe>(^FS=(R?BzA^E0bu)B#Ce*gpaC$uu9a6=<@rel%^`*Xv zoA+;z639dFsde=Zjd%t30n}c*bZ#UNVZj{%BKg52f|Vav^BHG@0+8^o*+_z&%$@qx zWb$Ov&DPBiR)NfQC65`;CE{uJp&C|!6KLJHW& zrI9h!pFE@?7O^U?ZAD z6TM?#O~7Nz;;XU%!J;m{SrS?)2AM2&pb1}O+gpa&|Avo;j{53Lsk z9XM<%aPq%&n^dGS;y%3FX-TUfq zfA`xrzrGP=h98s23uyQB4bY7>GJsMq+Kydi+)(raL&0P`S;#~y-IY|b*fUV?$wtD3 zLNQYGwmF%fW^0SjCnY1>=I}+}uwdYIDs21S1(_^{*=*_%C;ZuY+Sp# zG(SC#M>5zLNI+CcQW|FQz*9jdu4i;=Yyi)x*fX(pveTc>6^f-=t&Y@{8;mnLgp{M1 ztRRe|$H79>l_#l8zRXHA18_)Mf+ij<-phINTs=D4)1@RYoXE>2@xYyu5m9no`h65F zaYBSuS#$mwyUd$m%#Ejh!O;YO4Y19NwTZmt$tDWL`!S!(6NGE(@{DI8iEd4-ke4ph zVyA_5Lm>ZYa+45BJ_cNBxFX0^cxcUQf>*{jG{@X-%&H*V%49ka%|9W}*js9(2L7AbEORLCk zZ)tTzOQnplF$g^29gu)Y0CU8n+@68&{+4MPf43OV6!ZCNA7R!gTI}#LM#qt`ZVY+* zd+U-7Nf6Bv#ipy>)l@j%iNI+w8X+J5rpUMudkbE=cdl%=yX~zVz9_v4URxXXoG&a} z!i98DH>dn#sD^AAiLl4V4$)bK1TIspDybZEL0U3!=00u;^in)CbVYnGs#Chyww8`) zmKXvy*O~ts`jkrD#A4}ewzJYVx7dda?X|-PaK@j}koVb35#jfDZ(h509jm>zxwnrk zzxVL|o!#Ao(3Ou>O7IVncG zmAsj@YntZeh#PLezX#v4->QD9M6YfKS#o2%fH4UG2c1UX+^e@%XN?78?5grB0=YTy z*hz|2!Z?cu!z?*bWz8=$irPvh0&fMSKc2%}MI@3jAokolZ#u6snS7&Wc!MyL{Ks`t zA&F9|wyuUqhvtg`L$%a%RG2yaL8FtRX&tBKl#^%0UJ3GiL5p52Pl^DRRie`-B%6Gc zZb(c-}z?dVABLAE|1*fOspO%&twp2ml;trFc|M1<_RJyZo zjB3yb>gO)co$?E>m-W0)MFjJ`3d-B0x0@__I87owK-p>%pN4BL*zb6PPdu~zHJh(9Xk^(nc? zk7dYNNXbaUe;NG-)wfg`^+J2VlWo~w2bYgzx#?I}-{hO$Y&o15E+uGRN-k~q( z;5GoiIww^&xR<4JJ|-d?blp%qU+d`~9(f-*J_cpp`SoCL%oOXk(+UeN>S_z8HfGB*suQn>39F)KfRAs@9fIW_4%>k z2^B#5x_bwQC#J_n`@1UDkx9VLV1`;QecrV7Iae7=9s&t z!h{0tBG9CwE{3U4P;N9Oq#J>{8lvuQdDvbbC8R<*;|+t3LLp7r)=Dr2=&5K|#ow1H zL4yjogJMr2=>j9z+i)nYqaBc7r>)HqD^;pVs!wkse#Wmt;eiR3$mPldQ%i&O@x^Pq zhj$MT?>>00V(7`e{TsxaGZPb&O=1*PlPFy|CW zi%e0;7Ynq_!~TUY8Ku=VU#Vt8UVoz6Gro0jwXO;qUJ@;TL+=a^A)-mGlxBO1rHHNI zXnAz30*g?<*XKG@_LR3mx=;gP)DIzhCElG9kDMV)0_Iw*F7X6OV`v%)P72TGMuQdy z5y?HW911E~P{z7rw{=4a7Hs<&qXR8x*$8XOOH%cnYd0(A?hERC_w!e zO_-(27cVKE5?omdKOkFUS#<6KY1~$RPyWOwdLiFUUyY~B2rKu&J5JHzOn?D}(#lrq@BHuGUJyosEuCDD;@V|Zh z_^J9m_IK77sDX}7Hl}|zx4OCa;N|OQ5AHWkhH=`7Nblm#Y;UYC@vX<;-ZF6kweAAF zZIUTq-gY{lOQmx8bi@}a_VtWx?l09-6xj0RvWU26LueuQx6wIKr6W$mN7TcN@6gtK zS?p@AG#BqjKyJ}b(3w;WC`=omtEj@o)gEr(u9)qu$Y7utA4R_az2JeqJlsVGWESJo z@SBbbtp=G!5-_3#L3YumA(ZG|)|J9sEc_>;s_6x^x*VxE|vC%I^+FgxpE~xmkxVfNceQLxBC~%tX+pv(wPwc2k2yfY{FM_ z(&7NvU0#QuDpjdcEcbOMiGqX7q>sC?&p=&8Ri)V*-Vgn~WBF_WP0tp;PX|op3-**U zZ){o2)WX_yzzRr1V2g%&6B)lffUAa(T_l$69+~Vd4MRKMy|cT0a1TD?_AYI1i<846 z8gY}R~dnT@Oy%_|7H zXaa?!=~88E?_i;pVih1oTj}cUKO5}m?}I%gz~j%bLPUqb-eTc@kxjBAe3$N4cB z5g|-e0i`aLY!}gh9vovO@x_}Up{e-K=KBE<=byq+mHiiVq+Ta!{%_p${9BR#GwalyxFtMYoE^D0;D#QxM8Qy$>_TqO{AeAxz|u+U%sd**0(?G+e+94WP8*yNRI=Kc)~jN;LZPnJ?N!)GOB87)pvWn%eY zxSpzyrWqGCnooJ$_GY_-IB0sv-EPB0is$oDq9sBy0v)QS9g^)dA*s^~d8^)C?-?5= zq|5k2*%TUdBvu;!3zSdK+^6(!c8~PdRfr|=NTQsCOg!L}!2;l?EuU}!92#GrBu(ny zj1*#|AKmUCJ^QHyRK`+u6kfpY?)K)beP;e_GD>#k%EaUXI<${oeD=jRzx>sgubw`7 z2>t8mVE@)06K4VV((Lri^yna?qtKhBV+!%vN|#}@G_oIR+!+UP>T6EammeHV6{1n{ zv(%O9J$+|PcWt-O4JSZUMx$y^a*+!IGeU$u0nS`Y`K4SrOE%Zys|fgtJ9R&j5Hi5* zf5z*8j0mo+f)U>ybf`E4k3@_RVE&f9UnZJ0!o%2lOUmOy+kg0Lk{TZXG=gPyEF*L* zI@d>RhyY3V!qS!U1ilBj=BG6n#|%2s9}E$ZTcSLN#-3Zwf*MSfQj&9_l>s7^QxW8K zOY0M}YkK1pWSgoLxMmsup!A`f4a=)JHGCO@8c-sf8fuMJ30uZr46fB-WZs@^kQxTf zhv3fdYV~xuWI>5?3CqE@FBlc|h}vT+m(JD(MyKblETH4ZOwx1=N+DC8;>ldLSRmOj zJUh}mFg7wgJwI4VRk~!$;*r$EQfD9@O80jb20FVckt^veRhkw!0QSrMvq8v`Zg;HM z8K=#WMTQw*T7`q1+udb_5KAT^sibc;lux+BK{S1QFm!^9yD8L$m#?Gy zynS@a-{$xJ{ih6@{rc-KK7H}@;oaM?TaNCb_4a`Flk!Wo$9Bf;3A)fJXV6%VWAcBouV+lduPAqz}6; z{n)DKn=U3%%4s9vRdmAgdR7!CK+UcSzA*hiHh&;djAk4X32!x;UA(nnEbxr;58@t- zHX6rFI9#TdkK`<)plEMNkpm`yGBh$gOa-KeDI*zXF(x!xX{e{WuVV3UWs7w9l7%dtX?Wz+ z{W(qTPI(uuNYv}}IB6=H9#=m$Nt7B0P+UTXwx_pHnW7cqCY8>u?d@B) z_YdyDT72>8r>~H{dWN3c-J?7E+gqDAQ9QqO`-ln=@&n8BFk6O6osJM{7qdDUG@K+G z@sIdzQYVdIJN$%DesKNnYMmSm!Y*jlLPbC8u`_a8ZV5h&0XR+C6lz(DW(F1k7oa7I z#JoamQFEBkX1e5z`=H#3bCz`h$~SoI%fCu%Ayc9}I`8Y(39t(-a*5#l*uP&khI z3Z`Ekh&+<-O-4gwPZ>I|kF>PMJ~aM@JZw27BocwOW_AH|(qY1P<1)=d{3H?ubmsqN z7`!4ds=HGucJ*T@^t9q3Sy?qRp8-f|(vm#9Xg&o~tfj3a6I?TWbAD)1GFOCMM*fn% zw9-fNZ=`mG?XoiE+6jzF#wd%JhBGQtu2nE<4yOfn@h75G;<_jwqob4i!dPO=N-K@? zz$lQ&m*M1A8Rs{SayW6=*bsG%Mt8k$czj}Pa+(QvD`*ETU0u1lw!U~}_4>lh?D+8f z=K2-l&%r{S9X#E+ILlH2YWlaS8pST7=JWWnLpSbTEk}5mk}zIYrFPb3W6jSPhkJ|Tz4*r^vSq34@I)mR$WMX6G0bHjux)2&5o3M>yQ!~ zkwHI7Ep#S%JmIj*36q59(fb&!b}cMb@N?)cb_XC3`=V|Qc_TM0o8H>u&UHq;ewQ~G zNQaXo*8^S~e!IgPix!6mDv=3?Y&KeT{ z0Q**B+p!6Ear@vHa@WdOHBBFrnDOupA~ZN5R-VnGqeoak1veay)vnySH=oxsfDu8- zxKi`iH44)>EuDp|8B;8;1@MXD$4?VInPwtEU9}KmLN4eJhIfnA(w(rMESziaR!-P> z9_p^JvVq1WhyCF|dc`M@t7Aic%Q@6pIm$b7FBujyEmk}Gx%9d(;`ebb@awP#a(=XfYo&2u`Xc-zg|9q%8%lSWRY?rU zUB{do8C`A}C2xJccGR|Qy$zq)3Il~thC%NNbyhn|^}hbzfgWPc&Pug23u%kct6b~W zsQIoEj(MW@D$~bSmzNpOw6(RnK0Y=&xwwD0c6G9Mc(@D=CY7#D^kl-RL8_{{=3WJjbzXya{7X)8@H|u6;l!FSZ9HhxB(HS z=lEk`w;i8`93;%wNN?ZtMA6r7mn-j!lR1z2H7=MaoYDr_Tt~7HWGC?YT!{_JmT<*7 zJa%THM8aMDef9a>?G+-@gWZkI&E2~%UO#*E;N;=MlLrq^jt>uR?`*>9-Mo(5b8G9y zjqBHzXx+!;Z*OdDt{>@G2+^a?Bx%Ge8P=*Df#tx=3O*WOa41?@%F*cm zp9|rFJZ=sCIvaqxGlXivU%tI`w&a-tWh$vyG_ZC?5G&M)7G_O({Fy-~@2|~EeI*y# zbkqQwwX7l4S_$7XkC7?ATx~n&=uvE3-S9 zcoX+Bp)wI55$v!H&IT_x+i+EgYH6rp!?U@fjA~;56z~ii)Z`0yLwjlHODx_!{NGw}cg^X=

*U=$ru!Shm*_FN-Ak~>=1N*iHg4Fe)#nl1;Ogr}`rfoKQgJd=?~F7L6Ef_DVUV?)JAhmB%?$Zv1=aX1miVV25xGQj{; z4}ZkzDl$(3(E`6SNG_A)PXtebKpAhUg_Nc%5R4~0bSTie9GIr28}yS*3BrI(clTFn zeQUSYm(ljUdvN&R;o&ah60cuhC%D~}Gk^EdvuCgf4(`xMeR!~sZu$P^wb?N`3wyh| ztBrD0sd9uTNtMPTV)u(d9}X$l@OVP0?&YHgTm3P3#-R`6q~0M9xGS`vS5#6$*hT3| zfDZr5$}E9&xVvUMw`L#fdJE!8dolP={w z!j5yV{e>rq1+&i-*ODVA$XD#WAt1amp;6V zzk?g2{tPq~32(9Xf<01QW^X`#%cM_;9n_CX=wiUDcLlY)7jdoJ9~Oe3szi>=J|Ayj z%NH^W-a@5zCnK1^muzS)X%W%K!Bd5LvrL*Cx+Uj@*Y^I`5BMOgDXH})si-5#Vf-P| zI&3@oMtmhc)glw5bk12<0M15lsKXsqY>QD0VZjpdkXKW35=>u!_)B4@8i=Oz86rh@ zacZQH@20(ayc$kaMtf_OiOHdxyK74`%M(3)^;|Ml8?C2#{k6$wDgZ3FPvy zeosBDA~HN(`CuU0Sqw4-iEzM^3P3`@qk#g%HM4sf!H?ZGrTXo5NyP+r{H?B_Cz#9* z_U5ZY>syRg*}Q%K=+2!RvlPr0uU_9eIKKb*+2eZ>ZATjB^|KdG4h|o~eth-d*7dm& zu@}2*RXVH@$EMW<@;<#FZ#4#LJ7oSyblq%3C z=g?Oo$0qE9bne3Ikppvy;86uDLM3@bj&pGf13)@qah2F~$^V#Srim)0nMf881Fm!q zxaVS>fEc;;R*;0ifx)J}^`FrcF=!_9DVFp@b4e!xZl^mrFqTgCkM~!{ zW^&=q{=s@6-#4_fwS0AMZLSAtLvr7}-C18@s8*O9s%1Y6BX{J8`Wvn%PKS4`pIJif z7<;cPng}oks4Wq;RSU7W&l{y?gtP{IQBg)YV>r=waih5FrgJ;$r|lGZ4~N}FQ7l<0 z4wh6S$V6Q3&ZN%~=uUSyMOyD@*Y?})^alOpN?blqdq?yJTwt1>94@~rQmPKs^4(J# zH?H5fzI7iU&oVG~?b_P*;ql`auRli|=Ecj`pMC+s{pA;5fAPhaFX0349UP*zH$NdY zm;_!s8(uD*Hi=x30f<6;X923gyol0&g|-Iu$#GWCar1mIYw#}VHpS98SntK6mlv}PdLf@pO@toJ6f^o`%O~p zk~dFr6+j!O<$XoDGN;^y|IfV`U4ahKIw^jcK@}#%Ri<3Qibl7a(gL4|Tc+2DwMdm8 z0bT%%N+kZ64xO+4gL$(0RX-pj!}(Db$b2MZLS9K4!|WACy7yEnG{xI~vjwPN z!!t;hhjYH%#6;h~!bB!not()hD`WFp^D_%8t3!n>B+GcQQjDbO&K&Enrkn6}Q5!%O z9U{JSaVpf&XdAM(JHwGu-scQDB0>7J(@`od(f?!L;UCO5d;qjh;H=6Jh&G7XBKT1fP3^p;RKU#JLh)q};OhYOT z4iqZGtJ|BqH`n(bA1)5o2F91RxAqvZ{OYsUFP}buE%WND-+uSio6k>w8T$Iw!+Upc z)5b(uc8?JigGEhQBpIJ$+#$3ad~>7_2rB3@gtqJpW>{Cp#|t?c2I#2@((DLrtfRmf z7n+uGfM1P|mOrnOoZ0BXyy1h%D9IrGR1p>2P5nvw_u2;(7a}5~zCJUm$RXaSB(h?&@<7 zp1eJ#UDG|;01VR&FCLtMLLp!N$7$0$7a;_hX6!S?ljZ@rB=RUYdPrmE&W1H0R3WgT z9>^2d^lUQ%L7v-R%o;J4n;tIS+n9F(YuG0WpxQY^ZO&jJ`oRI<9 zV)xicCQ=_C=^ef{n$8U`j8?nHuim^la%FvMp(}fu{snc&&UCuaHB>LA-h{xalZE85 zwL0u0OELB|x)vOnaL+)@6Z81oHg_x?a=4vs=gy})zz!3Jx~{|n3)4=%Bwa1R?U8%n zblanaMAEMWhAWozWs6<8$Y@_Y!floc?p>2J;OKBP@j5ShP@!ASAfnQ~fXkJx7KZA% zuIXF1Z{69rcIV{!SbxvR6~;*K-#K~sP_qq~c(Hx(04;)F{qEN<41faxQ9ts(Co}KmJ0(Wa zOv8zQ&x_RH0X)feqd|z%X@-O((TpU-)WMx1&DNiiE32gc62imBy z7A6wphjf)BjRb=ECle<GKSIgHt&jEL#>AKYs!^50YE}k_L#zSz(EA4~G3C zcp9hpoPr zz<(onwpG&o^Cb@%aXgwt(nagXX=?&)QMcV4jO602&Dg8(cR`=dxQwIV6wcX~qJb!Q+EWQ+28Yu$bQ=!PuZ zKRmd*zIt-!>MZ5B)qPSm_fC#(G4o=Lq0Ot;b|2C5@$FZSk0??dlFr=S+TA9|y(NnL z?9A-USdS*PpxqP=H3A<2a}~_o4W|u$U4450!AdO-y+_^-A_^qG-pl5TxzkLG<;-I+ zH2YaNS75~^uS6lK1mn$cl{AzHs9XG4?Zsp<4Mh1NKgSg0&v4zb*I-u!V(|_%DnRSR zH13^|zQper0gDwN$zD_P)U#~udUHb_R5XB)s8*2)FGUQqYE(Z0A5tY?QsI`MX{G

pcaMFFFw%60yAG#r;8_I$O)!ZloC%u^ab@_i-M%RL190*mj1i8 zOTN30;s=2w(zodfEg6{reb#avWJAe*yP@1(a3kvBsL}?6qE{gvEp+#;-59E`E{zRN z!W0~tTA%2hSYN)fJTSdKGc(S#^GLlbou%u(v(l4`{wx_2$)k8;L7yW6TQM6aQ046K{q25_jg2E4b`pAX9PY5(_E4!Z)s;t{(cvWNlE^1QE?wYO zH|aosCXpS@6nax3pN%(Z_b@r!)?%{-T^$g1y#5WBKjQ812V9Zr@MKr1dtmKk|6qS* z`(&TFVGApJJDWSZN07syA?)FPA3b{g#f!tEXOHebdU(8b?dtOS^|h7x`Q^>M?dxl# zWT&Pj9#SV}CGQf!fxqBAMK}pMDdW&bZ{9ncETt35mlE%j)=i||hZ3JfMDTrH5k}_k zqI9LT7-iMCY|14V^C!0)J5356(CIF&TLOj zY@ijW@5!0rhaxDl9Bu|3W>Ir2rO06eDo$!U8;i2@ztf}Ym--3hbA_5r{>ni)|LlHNcV)&#bULW&WQS8QI$-%1hJqi8p6H@Hu_vG z%^e+HZ@iM5?PF2onD80($q&8CxdXE8c{l&AR^|_hZD+^1ss7_4I zuh8+abY;A+UhCvNs<5Sdb@}ts2T9)!#&RXT}u?(m{t9Rzi zc8_YDS^g|)^^uXH@gzD4qcmtfPCWT{o!_iW2I@xz+`sVIH zdF$Sd>BZ%Rn`>8h7suE4RwuWYCb!1>hH4o!{&PJ;38LTS17A6JL45Uo0v_38FfebpR$69mg6iq27k5RMil2wgVp_G@J;7`~V zyw$;>ggXN+3=i>VKpL~o|4@T1eE%R3Qy40m31gx);6cM1*ib=K9o3Thx_tSE^8`E{ z*v8B<-N-SyxH#(qgsSLUDHuspn>5JfcB8ru3f=iDog5cS6I}DupS3P@x3&Eb+Bwvp zYIX{AKEo8Ev`DnM zytPVQS_+y|$etqls7Y0+S^degUrltzx(YskFE{(_A&Qja(ZHHe0K5b^77K`Xjwz($WrAbMk31|2nWMR z*7vNx{PJcEIUdxT8lDdz=}?RP1Z5IaveGty2F?eBDtICPaWJp|Ebl-CNTaS~To_fI zENseqH+dSX{XsbzCdUZ%7z)5miK*jfEFzq8tpRb%FW8!edLl-db^XNnOQ`yNR$GTd zpJt@~^+{&c85I5~GVnRUOhz1oOzD~=BIY-VR`+6285cPag5)`co!?k@$M26oRa@zcgDL%&6Cgq6>K$_g{$Rr#1}|H6WIkqj}9ueM1Z( zZy=6=lqj{}^tn0+Zo+#o!RdKJ6y7>7QK+NsPOb~*M}fN%Qi}cA%bMH$sUno9D$}?i zk5GcQzipXlv%9Ga5??y$4|RE>)PfL5b%)B`QAeO_a&u!KdF|20`r_iu(yimIl^dIL zv*RmUvnZdAbQj6C1v9n2-fAe>6)$=G=)zIJMVuz+pWV**f{qSfJ=NkVhxv>Schp5Z zMX~g>WwEJQrmrKIj7D5I>Q^W87M{Pe-omk*zQ{_Qtkefibbzx?%gfAih%zJ9p9dId(^{KEXg)z#Id zxvAlu6F-k~I2STJTZ0V#<3WWIOnvoDrX@pQt=2Fbxn@+tNnXpc9dXOZ{FzeBwI zz(*2Zg`iJVAQoti`+)C>>9(5Ch#t>ddBBQxW|%U@^<+qjkwxWI@Na*lvWn!J0F5_q z5Zz#kEO{(B_~s6-I+tFgOh!MSIxlpX#mR(isk9$3ztrt)KSAfu?;Y`Z%wmyg#z{SQIlN(!=fg*|EvFPK}n`&qm*j4gbOYI zm*r^Fl!McwSL40Nk#X^1pjp0*zN+#%@<`;#OW;FFse0TT5;d()u;lHb&U)UXr<1E- z^{7zybAxZzGysQ2O~O@u?Q#Ph;cUITyRQo}I<%;W7yVy_#qAvp*E@8=IQ!gwxapBZ zgs_p4XQY}&lDueM=Yk+STPbyAyv1x^ zGL$Sv@i-!|%K{?@HIgZ|wnEwANuyYUR}*x=k<}?xnWDMjJZqnhltSK2I^?!zyW>Hp z-4_X$dzUr_(hvvGj_jS9%8OsFnQw%nUUy4dxL(Zkj^r8JVXIZWF5LK#Hb>51X~8k3?LZgPsuZpT6^mPeN|MNikz z?Jr)<#1i?Gp?SI+{&xvf--lcri#8(f(Nu%b--m3Is;Y{p^%KBx4luA_+TdD1SEC1z z*CjNgVXQJ#0>iVo=k~+X26FZY&qjH^^Il-2DL9H1Kt*0x0BJ28b z==j<5hb8c;eMrdrxFzvr-N08Q1KD3o`mB|nX&L4pO;Sgl+HL9q2hS$o&b~$n*=YF$ zV1oKMEYg44>_&@uf{>Oiuck@}_tF=H&+ypC_jgYy`sZs1Ai%vefsA&-W zWmr$4SjYTOe{Fk;*n=sUV|ZFF{Ha^%YD+|<(6 z-G{r^8sn{F!6ISiM|26{+kGI+_U&+(mCFL|L>W z5ptlHuhgp&rEnabZksbv@;K5(pTnIfM&+I(#;duYEIG&ez7f!pY%YT2p(w%ER;5b~hJ^FgH$~ z97?qJ&fV9){hMEY`{~2S4CyySYJMi%7YbLLL`>Suic=hPc_6??z zjt=!!^AU6sAQd5G0|DmL-A?aEnm}jz?yKW*8f73rsLi+Gdlw`A0o7NSWKy6fl_eER z%6Ig9Sl5oAh-;{-p(;oGQjSc#FN+z8)Tl0?31YZrZOqxQtUTDKC!5~Wj*ILE0ySH- zuCtWwm=0y&t~<0ivTnHC|Z>7Km9zM%75*eXt!aLb#wd|Q%5`RKD*L4xn zl-l{dn`W5g-!G(f3>)$f}>sXpI}$>ZYvT7ja3FnCWTWK7mx*Y;B$F(0PUVP~-1 z@sE@@kcGrv3##z$_nP7%2Ra;nfQeN`PJ;dr51 zjQCxFL@0&goi{ymcYmceakXdY>Jqf6#XI+RrbniydkU$E`QB_UNx6{RWH6m|zscr( zp;Sj}I>CgzWFmiS)=Q|>+?1g=nqe=AD8$9fXbE$IlzwZm**y;OEB=mnmYv?mfFq9H zA1d{fC+m5ni9*rB^kBN2bFwNpq3qY_Zrj78%v1SrGHHvXT&aB4hmgt>OHTE-Vzug6j2+TnN1lxRiT`A_Of$$wRK79CEfI?a`9#rTs#ildKpS2{Vn> zz*`rK$Q58K-L4gJQP0ukR9YCP$Nq`ja_l+RjcW#TfNRTj=PvPP)HcFwFJzZGIvD$m z^%j!Ar+OqrdBNdTc2R*IaC?gn!t7{;e%N$**@{u+r&A97o(I2gzSxpxq=aUu@=j1D zDW!r;c~@k&Y3KvmysKWTh?<}B$CV5GfS{50{T|3_Fy5KUo_Z5qd$wgdInGDi3F+r^ zJZMzsi66KA?SKC7{`7zTmp9!CVab!)%q#{ast9OQC^F3Xw{5#BU^(J_W21wBhsWo1#p2;y;&nRG;Vt;=nPSWxfNQXIGe%zLauZ`gqmC9|cLp=kWOEwR zjTgoRMDDBF8|#Q9)#WCEFW6kZY_(ELXFJ2)ozd(>zdzX@RL!@wsU2C$*0$zwAz+WD z{pqql7!ji)Qng z9GN1Nut|7AU#N}V*k2!rg)*6h58DmgsZIof7nuEY8ftp7TP*FSy=|$^KHxbd7@szM2ox)i9sb%gmc+!{C>08wCD}s z+0r1w$?Z8e-;|#?aWV!!w*0)^Kl;tT`ES1Mhq$OWhwIGbC;4rR8!>BIX?(-0Z`sCB zM|#Fb>0?576nK#)@Dce@h<6}CNd4SFtX(fsV}wVPx8Xx0|TmMUl|ddPT$7*>>hQ!YANV_ti-6b}Y#ebFo1`L-sXV*g0U z*5vNaf%PW47d_=RdSou4o*sz>2PaZ)e+XbO-Z9`Ot>epec9vp^-b8IUpBxxX2D>tC z$j`R5a4FQVA4q$h@w7KuPeF++7F>aFu3kVehDMS%#rZ)*^78dyt(L?wPiHIR<2_?n zHja*VH`cD-dh*S$K7IC>c=OrQ2e+6naQx!w{dbF0ELQw9)P`uh@J<~< zc;|YkWTEt#ES{ji)zq{if!G*pr4*G`fv5NX!MvOSB`lQr#gy|uW*qAbxrIAS9`UWJ zpRAuI0IsFQLXb)4x7xS)n~@uM;TnmH){A0C%llANsS%^b69LlFD8(@mbd?xCl~9by zkP{n9HOAycSOn52_-lrnSi%U#7y>)@6WZajG+j`gU(m%Y1hvsA>uyS+h!mh!7&2^qQL za}rT&N4U-eBx%{!L{IWiw{bQc6E@o5Ad}M`>W;#lO{IGoWXQOPROd(m-Uvdq6FYbB z?<`##?wg(+>#Gdb`d62R`>I{F;`A&t)1y+)g;^MSlP%>KKhW;VgwW;csf}GPIom?P zwq|d}Yin_5yhM>r9Uj|dmy4c`OR<=PQH)~)&?&v14ibx$MA6IeXELce8K6{tqBGq+ zl8k1neq0@P|CS~q*EX-$=8K1&!AjN96sdOF0;yao6iv8VI^xr#lL<#KS}CS`%LTN& z3S@n1h&=8c-rYev=Giyjz~6oJ`1#|Lqn#V~9zTEe=IPT1Cnv`To0{Obd}Ehx4ulAx zwr{O1HRj$M@5)9R-bAR_RV(+8&s^JF8Obpm9%anpz(_Ujbw(<61)u7zmC(HR7h=4_ zB7!ZXc_!~kiPAJuu$L<_hV!6MjI1zF$FEi7X>q$$N>Sb4hz1xF#h47hFJBDR8NX~g&Batq}j zV$M~F#8a{SbR8$hYdrWLHAu#CIfy3B&=9LisWcxzwCprnR`W%$3SK!_IbxV!*>tUJ zR-56_s11tDe~R6Y^Z*M_X&42mf5vln4gdb%HU9MOzx{_@ z(+i;e?tB`9MzDUQ&{J`aDv;|6RdB(zM)+tlZFAH6Zx51Lbi*xA zb(M1Uq3-_vdZj!xSd7I(9$)9|&8?dYGfTt6a}#3&1C?TZa;mRfEf>o3BaPHYVP6s= zq`TuyESgW*8D9_zq~o6S;KVjb7Jtmu8V;i+8}>E30?jQ%5Y3?gEv(J)Xsf$g8R?8@ zngxgF^14EfRw|u-e|>zk5DX7?CTe5(YPk|Xt5W+=8}xf>Oiez@PTpMI-yAGuZJr2S zPm!>rHQ4)jsp9ek^Zi{YDpWe7DH=#SduNtz9NgaDSUvdkn=hW8JfR%Qys+b)yU0|( z!drj+oXJU>OAE8(L;Yh5t9$oP2v$!{j&3ea4EFVPQDvb0b+~VMZguzM-i_J8P8g1X zP&}2O)@6(LbS2T`dtWWJ=-a=?L>>f*&wTHKe&w&I-$;Rmw4Oc%upV+;zlEXNJJ?TDCBtuH-oHcHVJh93~Pinm$I|6KtCwdh=7!fk;6qcdz}$ zkhs`+Oq%9r;amUa-xG@divw&pq!%0JL6tQ;ILYWR#8vFL+rVE-puNqLAD$TQrV+J( zf~W^W42>k}Y-^#6=!upiPA?5+rS8E>XRU8?yr*k;a=f>HOO&5nA#JC~&4nvJ>D8+0WQxOR~QFHZFm+#=9df^{-ju(uFZ;iZ9r z);6!>vNz!;J}&ue;Y{3(8{G-Wo&K(o$72~!B-Az1+mHT5E`o4VXV3T&sz|ri*N#8` z_Or()j}W7NjE3*S2TW#t`sB%j2TbQZKD@cSd~I%OY+`8x7525&>$lMF-J0zyX7fe* zv(U*Kzp`}w@WK6~y_L}tZ6tm;3hk|z?3saT%ya7aP-He-o%fiGfJ7w{PmlwCK@?=Q z!D%m6O~&Ayq?bU>1^H2M__HzV&GO!5zp>g}EC7WUZ-#+_C#;X`t;=OVh=R*%WPCO^KA-Q7q8{9;KGqLfIt>#mfwu4rT`PDpLir zJ>7$-NqU+jDc;mX+MK$O{bEPV7ti#RyrEc_NElrwUn=ab%oN^~V!mJ+IfZT%>Ea2x z$%kg=#zvRd)~?_G?9H?LCr_TgeEsA;dZxFJk9PMTJv}+T&!qU}rKQEW@&3{Iwe6eB zOUv`)qx0*ub1aV)m|~OexiUXKjZ<@N_vqx=6Gq>mKk4;4APBek$^*HeMpW}3j7G2T zOsyMuD`(zcVAo0hko^F>&^Khzto{UL6Y()L8B8Wy?(6qTPGFcahT&px4%7uGuDz}v z`!UAf7;+Ug6_DbGtGN`tBGY?n+!c|Hk1{KT=q8s2Gx8(IX>AL;O`4y&Brf|!0Z$JLkG67S@{_15<+K7x-W$7rS@}eCeAx$7 zGd=IPZnso7G>4$M=`VUtlX8ckTTT*LM(dE|swnRwJ5CdeDGv$kECaR;v|M=!571Z< zaj=R$;w#Ek!(lT<95pDDXqDa{!JbZ;QZVg~XfM;j`>I)lopH+T4fnK)D#3PNI^jzU zmjlUsrqn+&Rxfr<%ufy#YFAfA`er7pseGw8e06bP>e_67DO0azvgLSTX1YLTt#fH4 zkqNqOo&5hST&`hjq5wNZ``>5 z^5o7P-0_K_$%QLu`eDy+t}HXSb!>Ecc4BJg$|RgIU#vVbHM4SKHUTLkKth%+~>H9o{o;J8MABg)WS_ij6kvAY4B|Prs0nVVh-~ z1f>sk9yRGA$%U~TPM%@V^ zNMwsRx9jKcA}e4@0NM(Kd5}!WRWebepU_>xPIxH_3?T+7whb;_s}{rh)m`B z-Qzp=kB%Nae|B=PiKxuxt=oskFPTJRyPvNT5ymbd}zFZ!5F1D$9Fs zx?Fqjy+e1w5snTVN~B0hlsJ-TWXR!+W+-Z^bkAA3&O z%s1Wp#uLwth#NN$&ZOs$1bby9O)ZyhMU)-rWWlfZwiD=NxL5#k#6l|y@sy!^LnLjk zn%obwOmR|TcF}&Xl!GEF!+XU$$++5+&@9bKa=fr&yi3OH>q0#tv$f`kss=MBKn%a;VppdF|0h<2S2G=T2oN;eK`uWv7H2KkCJdpi#sk3C(+LFK=?QGJl;9 zP9{YMcXoKBnny8)emTF(=8nUNjmI<97|rqw9U2;IjgFNn_0iEvsnu#MPBcc5l$c#w znVTI+CMQ112B2>`Gh+;G&z%^8GN&dghkF7#*~+eS_r8OaDv_D>F;qyLy>_(S14>{SW*<6)ZM={uHtnWKu=nVv!KYO@3=(TYr_NOd^%U6y@2L_TAF?F zOrkoJhm1#bHiqk)V(jNgb82z2IyO5oil*2EGjq3?O;n$mDuybH%ftEMp+YX~P7PLR zy$O_dTY)5_t-bdBc#vyh!vvgOdny`m4WCZ;$7?}u=nuGitR6=XHLHHCG}8OJJxaX` z36D@?%4b0>gWw{ZXyi+ocq3O!y5Vo3osmpr)+XT<76bOKh}$1^cH_f5t}a(K866(( zbwp4J4l?4ew>!64v}N`aeVKV?j@+)z+876_JO)7cr88zBuPF4fJLx~JLR)6a1#i$c?hpC z7Te9rIPx+9Be&0iJXRi`Uy2$uIooh1$k>|9tfBS`0aDw-t80+sI`sAOo3{h$AQ2er%S{%rTiiGNZO zToM?3*$m#krETNK#iZe6V;|8{jU8FTO)=>xdb*Khc5rgMSz=&BW3oQ7xyy)+8OC)^ zFR#yyjnA#F&*WpJ#`NBWz3Jv)r5N;Qo6S~p0M&AfCr93$u}m}5&%=L^2<}ikR3Vy4H5PIx z3soBtJYd(MK*SmuZHzIUZY}AL+X|&p29BDu*AjDgIDNUwA75D+s%E0` zSbwjlLQ#PBESOhc(R5LVq}PmKx^(-x#{}t3v7qk-R`u&G>Tx6oC~=OuQFNp7snaJEb_y z&?NQ#3mJ%~^$eummbJsK6lS7%hk1)n^<1fU6_eWJ7J8sw?F1?wbp9I&Mbp&KZN-eN z6*p!LX+v6^W+Uk0Bf{YlON+Nmb)OGQmmJb{fS8v&nhp|>W|$sCd|;g6P2$I&chSX% zi7QMX;8iq(NH*_)eL%r0->ML_wr zl+j+1fP|SD1cRn@AimV3VLlSscf|v6xI8vz4_Zp8a(Vp1U>NCj#Ciikwl)VdlroLk zCjCJSK((ZEZf9kvIhajax-unX#qz@o#c0}58;&D$YO^P!_8|H)jiHfaX)m(yIquA1Kuu2yb{SR4_l5N?hnMq%dwducf6K<5E>XsxXNMwz<4%N9?V5^Gv{{428Zec z^E)SY*O?1;`t-T;mv7#A^5hzx{Oqx{or~A6U))_kc@|~Ih24!N0m>QN~A0sGJ5##%|oYf933j%~~oBGuT@lM`Kb>1HRywNUgq!byF9`i&N}9uxS{& zqD14*4!T^%tr?r;y2!S%Vy+3-2;)@#Tc&L??_5R6V2Q~j%8atd&)~j*!+9+=OMivu z#e$jJD^IRX1mSjJdCJLpRrVAR4cN&d3o*iBUpnlQYe`OIL&Sd z6bUM*@ZT%PEPDk)@E3=4%$-^CA9VP1h%mmv(JJEd2svpEk;@mbIp|iSh2aBh`w{`C z6DTC|iy#cMuF3xJnepH}R?n@sAh4o0sEjb4dzQFhIXP2mo73eBbm(<>-CAvV+%v&;Yns}EbpAyS)5;* z8ypxMpIMn2Y|TtG1_v^!%F5QvL@hrxT}xzgLFNEEptt$Z{ABECWie}a$0GaT43f^C zfYWD-CS4Jj1y>tkDo|l)zoL~}U40#)@@S#o-*?1?2-1KzKDRL1subMaxq+#AtTMh@ zP1Rhvfe1vJeh>6r|M=2qvAJ@#?#(dAs1WOL(X!X)adr3RThZ9yh^?DxWZ`D2GM8}; z)YJC|nysX}mCer9oX%V&8Eu`|Y~&kLt?|v%$L8jCE}T1k?lke}!*_0=5ODj>waYj6 z@9j;@?A*R~esg%`;ymLECI^OAc6YW{hxw4~HX%46#qt}HUgrf~&=z8tZ&;I%jM<4^ELOo8}Sh!gxI+9GH z_5fj%BYaA;Hh3y65pl}fcXf8j{Y3y7z=;w4``HvU%OlE15ST z;=KOi-Lci#P5f%7_IJ6@4fULXq8_i`8_YJEMFdL9 z!_B1=dmCeoaoid%aBpsIeQBs#8*6IzMQdVwa-yC~)uu-3Bb9-v+2PtiJ|cyfeoFQ3 zkkb+KPtN*ao;ZBTU_TQ*-2VPx)af58gf7n%YG^&9DK(lK)m9M6$2R`8+1P43XE(o4>V6+X))^}iNrt`ZP5LFunu~o z1KDJ<=C``TA$LAEI~6S~ma_LIEBT0bFkhKW+HI&gO`lq-q_X1^qpQa@r>EB$zj5y3 znG+{2-Me}G?9F>O&Yr$;_2kmX?5R8VF6}PNUphavw6{=8kDWZXF|{zn5cYvWJV-}$ zr4*CeUte#3sMK1$^})O6S($D$49a79=AubX>&s*o?e;;CsL>ibID@?YTD zj+)&Cqt`|utJjgQ!2ppZkSz!C>f2b8Jf$2kRG7mD5CqIHUmy#&w)wiGBMB!>t1?C? z_sfF$T=MSS8$bT>=1X6zmJkwz#`G~%WzKmn&5z^&%Kn{1hQ{`dDuSLwOa6IRk6!!m zS6+QplO~Cc^#n@9s?hX|gJk;c094PUuLC&6+E`5fp5jy=O?OlqubHh85;$i7 z(y|)FrG=?Dl|Y;=i1Wa?F$#hzMr=8wsBMyNB)jd47e{8A%;y*$p4hx_YHf0IZf}7%<<_wt)7r$T`+@uE{dTj4)-L(J&tgEpqOrK>h5j5-1g?c*sQXy|@aCv>Pxp#TcT^)AY!U1~hnA2f%!3;0LzfA=!_CzueYORhW z2j??`k6KW1!|7x;73lY86Eo+Q3h6|p)tsh;G&-}gv330Px#PQME}h*ve&O^sDqt6O z%BAJ&4{n_~&J2%Bn=5Bd&Wy}oxO-}}I!346LpQ!sLcPcT;-3&8#YZ*L0wGDp5}OWKxEyTz7ZVJqrtqjv?M&uG09?iN(w2Zp8m zyPAr4t|5rDl7*4JEuY=B~t)HLqI!^d1NQb zMe-Rka9|Oq#iWtUP3<$qxfX8uicljGe|$=f_IM#>Z?n{N9{(NaShgHk1G3a%waw54 z+(Hj%9NzED?unhHiRt+zhJ)^GObyR3p@vc^##5zA5i>96vkA1U2dApZRHaeKRf|C< zNpFB_fYDzr``|)0kVP^eVs*!9nKnG9axQ%A!cLOOFd<(!?t}f<-_5)ln0%qC$6`s8 zQn~8#_He2&TI{Q|wl?OE-#Ix}Yv#j=a52)`(Ob-UvbE{WV}lzPTb_ZI+nx2hy>GY(P$3;~WfIg6vZ=<|xnd4Q(c;KRt=OCy8=qf4 zar)HpGnY+EQa=Vts8SPp@o9 z+Fn7gy_?XDY>uV%rWX+}* z!^*BMi)J3Atp8=ZJdTdt$9O$n;`1)UZB(8GLkHrt{W2H_n`iN%5FjTjl!Dxs2KaIS z@AC_$FBT6t5(qa`NYP)Y*@AjDUs?gG8+UR7PDuEk#Xa-J6`+ptFM3U z%Ws%&Csq+gFJ2CNgz3&OfqYwa!z@nnRWH>tL=;v8ELNH10N4v3_QrfNE|zI$wGng;m|9PILNi3LzC z)+!k$t;Cb1N+p>{`1&KIfm}FK!}}%~vgZNoQp$wV(jAyt$fWio4u8KIobCNq$cacI zEnGexbI0hjjAqh73sglc0Md)SR*$jC$~5RD8Z z`i^#28qwj2*3A0k#^q^mW+Fk4wI_gll0RU#cr%mb=17g6yvA^5cqvmUr95LJ%YJt{ z8}z0bA`{KEPA=sK2Ftlbq17zp21hG}!Od&ux3<%r z=Purc8Fu5&ldtdJy?FNG?&L%(PwFZaIPkp&F_bPBti8wPOEouc?LWP{(<;W|*$RQH z2rDnF&+K1SLS5MyV}h^up;IZ(uFhiP+?7leyO+ylA=#q&hz5d-W ztX27GN0Mp;BG-+dR|a0*79Os=Fb~00VI~@B08wzw_#_#)fj0t5hT5yl(2-3ml9BMWJy$75CtsKlK zX*=`Rq$|(I!yEMcYn$gN7p}aG)*!Q`Y))U|Ah#OVgn_Wn6^KN$Lo@S>bE9Jmi~wDl znO|C6SzTEgr{cnd+g!O;Kqe-fE;cH;d^TWnK}z)d<8*T}ip3jdGLkRk3q)v`_IC%v$?37FjbbEYBPYvaxDPKA7?C8i2*ETnYs_VOJXQw@$R-QIkN77?=!MW*=)y5Nz$&re; zyWR?|Oh(ICJ?bD3cSQ;Cf zWffm~xc~6d#ryBxzwq$A_uqZ`-lu=`oe!Qqymx87S{Rw07^}q@LrjlRzp`y~-8&=s z(T#K0?moD_J-9p=D8WSE2*^CiBU~uhx7_V)zu=-?uvzq^2c@HS{Zo~{Pw?T z^A(l1ZQ)E-YDcW-I)Lv4VlZ%140=PMsLDkq7y!Ft%m5hCwGDM0H>Or6eQP8KMoxkf zvo<~z6YC<~0xrRge+Ct$UFwm2qbp&s446ZCNEs-_PCfV*3piRu}=Xe zBRpUbld)=5T4~+rKDi9%i~xo`kBKFuvP>sA+nq!cOvZ~dCC`3})x&b&MwC!8rAj`N zE0t0KKkEMJq1lz`;j!7dm1Bq!lCr>?H*)#GYN3)zmDH7#N#*LzS~^qkT4<2>+nlV8 zhzAx3U8e}@)B5QMOfA;;>2K=mbfY>Qio1JkV^!b8t>al|B4BkSqd6}OTo!gW**Q;P zAy3y|a&d8bW2&6aM1o5vufKKu$+vE-%{R-LY%o1g@N@(kBRgBeiP;kq^J5WvF_vJ& zSSew*doopKK{dleGv#{JLOyVFFcnM0h8Hq-{mx=l1=&Qbv^hUg%jF8y5{l_bN=fm? z?EL1^?9S<(t?jj?se$3ey_35aAMZc7apB(kZ(X_b@wdPE(YHVS_DAo%d+Wr~*hp*g z*yhwg9!8_&Sy9C4KGJQsxfA*3+{*5ax8J=!pKyn2HHZ#kp}a!cQElfPxK=FFWVel# zLfsQ0S8OU~lmMmFN9AGVq>VR!VHg5fI=3m75_A{nfBcy_!s6MUarzJ|$*xQKUw-u~guNQ#$ckt$G>+Hy zV7gQ#f=42sH^jQj8%bL;PKE*AXKB6?Nj9YX$;uZICmFsHE2!A%RUQyEQs!MxxV;wlqChADLZQnVXoJ7_1FcYvo9^T+K5B5sB%6N+Fl7 z*U4uj6ZBZqIAQZ4UIGW03(w4HPsmM1B)u@dpQc};JLtD|^+&vx{^3?|@X>b4nn?D0 zQlX^1*JtO0cXioN$(U@U?A?*YowpFQiQR`yXwXg?MVZ;1J753k-clu*ZI;kD=pp72PC&2G zI9UaSCiU0$+Y&BmZ?^4*%flcMLpqT)%YZ?QSVvn2qpb~~AWFvh%uoY(aWg08nHr## zMgId-7_G0^UeKZ~SZ>kamA*s9wDqqbiD-tVFB3yF8qgRLwn}Yjs&Gl6!hkxm;BglNNv8~dY)@s!{VG^*AMmq_vM}R9t#*(p08B8GPje}Re z^fmL`x>|GPa5y zGa8B$NG}E#fg4R;U7GZozsApl&TWd$j!-%W4J2JG(_~!Cq*59Bh(;Urk?HC2=JGqBN z`xoDTXT4Qjt_&4jg}vRZySlizTpHViHQ!7G>YA@=p^ECNE)9+^Po#p?!LX|miAB*; zYS{hrTdBA+A9N)~DxPS0bG;l-CbRXaW;zq|MuVw(qf$Q@*&>U&ePV5PVf*x%vlp)1 zy?*A*rR#Uzdc6O^x4!e8Pu_k1?fciRT)2Gu?)k;(F^a;I17H%8BP+p(zF_di?*nc$MBo|EY23D8_cLannk7Ys@v9;Ruz#rH`l9!!b_bqO z={78%Koy(-sE{XDXh>p30KvqFlp|%#?P}#Ka;UHt~ zf-^c+A+C~;%G+pN*>fg0r6^pRA9r>4kdNg|iV3P>sX1jAW#}ffm+VIemXE}KI+GBe zgT~9@;cC4YuR{Q6433SKON|!8w~~o)JnD;=2FeV4WcQ}U$e(HqFtx>la1RX;{t!w5 zVCa6AAGsJv_&CVpfH#gJHfZygTfaN_7KG4w)W)%2( zOOuU|H8FAe%2EmHT(C}a;6<{7h zZ77}LqZNylxy|`;SS}3uJ$32Eg|j#AKYaWiu>8@Zciw$x|LTeB{NBGd+ZY>cu5Qd# zqFx`$eY69)d^TG!p3Ij9CiiZ?{lWWhKR}alxIjKtp2SEl;MEby#uCLSS1`!!+HxgA zp>gLz=Ts7nCnEdO`>$f<;lWM*S*$F)G&4cFjfESfH3C}IM`Z7>izci(G9+F&jPmNd z2G<_gLRwO&1xyYr!Pf3yRkn|=3COa>tdFW#DnkXKVEWAaLMjf&YD%Xdcg&6ZQ2C@7 zWbPol0)Q9d*1qt2WGsw%8mF(!3YC2Q4TJ&hbD!Ej+c4YYHyD0jw8R9Z!Cg zs;z*NOr0Ov4d~E@k)!|hugT#kfKX-<`ma<|W$o;VoJ|=wXUt%DNw%`SwYt%e$8+dH z$lGgu5Q*~CyB&wSC0ZUt{*BQ?zDOdLsWiujnbBUX3?fHZ%NGY~`AjwwXVe2TQ%i+( zl&RA`$cBkhqnx5f1kV@oXS#&@BgjTryg*h|pV`*?a{Ie=$5GV3pd-f1P-iDo)-#)F zX3jXgdB`qa8(jO2BmGQ>_GedzeSy~0>eYqq@wJKNEBm+4TzYWx(uG#3gmC-XTx0Oc zN;-G);ibV`p*#|ABt2dhDqTtgV}<1M;&{pLO*K;eu}UnmJQf{J9Ib2*6iT;!UCv;o z;hR0n$g*IfSj@HtB2j|nQoWdMwsL_~c6hqknA+G_UR++;J15oM2X8%n=keVe*B`$B z;n(lqxc|X>3`p8Qhje=TG(Aaqlq+S%;V|-hsaQN;ZcLrJxBuSzpS*K+wAv~Vn6$C< zf$bGM{0l{jM36`q;b|p(0R-U6;l)gDQQqj^^C$`*mHuiQJ)X+wN0TnG;j7HWQ%s6c zgwHAb`dLP&GDcwgsjDh1kuY@4Tgtd@Yg&}8P;}{ zP3KDKLKRQVX%nz{X4+JU{IzScSt?>RoO@F=c69XMeC$4w=m8%RMKlHZqvhd7v6M~~ z7y#TTr<33rTztgK*eg$}$ha`lAsszVJCj=W zTMND;U46ZoS~ONHGFv9oyLBvLV*qNf7(u?e2Ob-8yU45*QcDw_%*y)W$U(cp+o;uY^mK0Rt`A~Uq9D~;^TsbhHrkFo`Z zv?TMBx!_35(i)GY24D3Y@}v$%uI-H#DeU_5@$?|vwp27bQcISZ%$+I@PS(pK*!=kX z>cY;s%hwUHd;0L^wJTR{zxDPzPwzc^?}NAR-MPHIytI1x*0sxL7RavHXk)3BV=1~m z!iiFCaC+zRLn7JtuTD0G(;DVTX0e^hHb@5OF0?^G#~>99Re&9bh_W;CX?P@gp+B%7 zNhdXYlI0kvFwXhRgwN zfh`b<%BO<$+A9u@ew78J6=SfEfSZQ25R!t(MIJ+)PU(BodL#w{JDddT)Db1k3qzvh z0h$@ff}uZ24MvBR=E7UNj8RQ2L%a?znQx*Lf*x&{3W5%Lc1drsyzTBF3~No|M8d)s z2q$wna^GpH``H5Ra!gzIp^bq^9Ss@uB8B}98iG8&SSEpGdd*9nlIz^YQscG&-9~AxPs+-gjC(xrNo^3z=dr5slFb7%x_Gnb^QkI?6br`be=n z4lo-iG^bYP2WIw8UA=kj?!C+BFJHZM$B#$<3@VY_sz#B7Z6uOI<-X+)h8Z0hZ<#T$Cuve0bhTzo(Ddbr2t(cqG zDuzjjt3RZ5ARCrL#{5hZotjC0-6E^|CqVq zLK zc?eZF#W|0sOW9zdo^UwPTCw%H_Z`^@-%+dAUZ1J>liozLW}n!K_4fIEc8}8<^dNm< z>BEUQ!o^~3Gn!ag9a%cD(717N@0&mRlOI36bN9@8YhXCnnA|&d?yX06X2z$^f4G|Q zBvXz=#@Xw1;<`&SYh%UM_$ccz9In^g1Dl&^e{!zetW{E0_dU1QQ=Y%LK1d@;C={<0 z5{YUymySo7S6QfxP7fgMQ7z|_BXhH3h3f3~`J0!o+&FvY{Dmvm@4xfb?Hf1ly!Fn< zAH4ha)BSh8@r@6j-n({+wxW}3v{jD{l66W{E2VOCZs*EdAAaN8Uq3a_Xhi#!QzZ3w zV1di^B}z7mL-j9nTJSE|w@6Ip(#xFD{gmypq3TL;gRyZshB0w)r)hpSP}>M#aH+^B zzKMmSaYi+W%f;&$5W=?b0{*)SLGs{+*2v45nzKnP0#po#lk#Ym3A=!6RC^ zSaVy6?lt-^go)ef5TngvtXOS#vQHF`+Ta2+#S(F;UnEC_$e*cH4^0J6tm>$tGk`MS zz}hv_jP`UAo78*R5AY?7WoKr&hVjBbn(l)tj>LT`6$wOh374XSbgqPZ9JEqMh?Ma>9Y2?_dU+hIs`>eetFnM zhfy=rF|-};vnHT__4Wl_E^9|$Z|9-IJ>lFyZ8PT^9vd7#bAJBe{<&}e#b5mSdza2` z&X1L<>3H?{*2;UIJXxPuI=+9k9H?ci@w}U1leQjfb#GxZ8_Ty!h&M)>O=sc4YQUdh zvUaqPc4ya;u0VC?I8HYKYzop-QjU2lj9(gJ!;jy8@7;Gl_~<*|`uYPzNUvPGd2Z`qH8h$CCrcyrS`CdX zoxJwedmn!K!SSKtl9w>B9sUR&*hE{jTR*oPCEx)vw?T=_LSP)@`ApN6Ws#bb{G6d} zY8^E>;C8;C9Xz!mx~?0yDrb(Ug}PHsIhDUni3ox)iS)zTFhoMfzAW)*X|vPsJ2;HBl&+szxsPCI_bEwWiOcE5lmru&3NrqlAqzvm7O1p@Sf;3?+~ zLsnF+%7JE_aimIUl62y~c8K~}_m)5m7OLs7& z-O=1lT6<#wi5Nv}K6|H~0qb2y`!lu1O4Bh}K^p^fm9zI~mVAT5_el zp31$rH8_85rVw<}FXs)!0@<`D)Er8eCx(laskz4JP_kI|XNr-+P*%9z9+6c?4w^Gm3H^q zVx&F1%;ZGiAGtuN<1V)iO)Ovo1G*eEH_BT>)`en+qM;)^HIgHTQDKJ3k)vMMe#F*O zpYquv;b;M#m8)5_4xY@}dt;E;k!Q9A9i7xV?R`f&lcnl-Gh8S0e&*rsC!gN^{`dak z$3On=rG-M&o0%E%Ph4lx`THMkEpN>qo3D*VJDnCH11^@eur)uO>d#IWQBDcA8i9qI z(|y%?W-#hyIB*uZMSGSHa zmSXGpnX7m2-oJD6-h)T`PnjV7@aelBfBVxz3tSB1F!o?UQ98&&_wj7ho#gd;f-IIuj z%~Eu@wu&fS4)WF}t98(;5Rgl%bpRYO)lVF>WGifR3B7_iEd87^X0dw_CbBYOk+ak8 z#}jd-{Vu3xV!|>m)hER+H_12HR~WZ2FF$4Q_|e01xEf4nm{-`g%8g%@!RrY)>X|Zt z*j~F}q@^Os!{Y}Xhn3Hhqi^TW1=qE1(I`<0gyW5sn}=c1N;~SQDWvjn3aP*k5n`CR zD+HoZLk6yycP5Z8pu&@=-&OPaSa=GQ*@egqa(XyvJd1f7BYDDf^E)a9TX8Sf*AvMx!)u`GkDxPW?Y8$GJrqjD zi=}9_S{uIb^z`>Wz5T;a{_L-R_=CsmrI;(Ry);xhe(}V@@%^3o_2o*nG+WoKO4v=1 zw}aCYvspVzN>*2YW~d(Ays+-c43DHefm|czdEf}GL#gpPQo&3n?C!FY^votx^z6kO zljGHqvIQ1>snQy2)z@}5kF74uF0GxscK6D;%UA9`zIXTGlc)Pn-~IXr?>>F!?I%y3 zKDc)E*42|&?qA(qTR*rqmU4o%Ly z(p4yEVk1gdh$zQ~jx>ur^zXQA>U(>Ep=*Eb`CO4v`%m3NBdAu2kThW8x$Q7(Tvrkd zt;7pp9*?b2TY@=^BGU4*Kr)xZMvc(ew+tBU`=;@-SR)<8$^v%MOVNh46z*loSR!Kk zh8Onb4q3JV+(-Q~Sy_uxAsl2g)&nzot1*o;|OWcS7^BM7=BA2VU#9_P&k7pau zg}?CO~{#85tOonyWOOi7~+N@(SYyjgCp48 z#~p08u!y`~w2nBy7V!lOF$QUdVwC|;movH_3iNe1rkJ=D3&t&${#v#ta;(BAmP{dD zD8m{F^pdyh?LK_S?hZvGxrtn3;mniM-}~;(AARyifB)Bi_|8r}?T^ucHo1Q0;`Ge! z_}JV=Ar#2wXc6u~CYsS*uF;X{0e=AvQ@5v(E9Ebq*eQEjOCct!=Y6hwfyp_4snli9 zMswM?+tQy32jhWYF&9FRqZl8E+9J7XwK?7_wAOZ3=H|x7rWQ}0+XZ1?xqb86?I-WN z^B(ij_aEMS_~6c?{m1aZuikt5_`%h^-JMxFqvDBdCO0s;dhXG8zjJMEdaed22i)YwH@;4 zG)nNLP9m(9tTpxzd8>`{U$P9fUKCS*CT0MC3%Lue8A_rFDNPzsbOTb{$YO8~F=cAP z#=(o(h;b_dms8(sCgvC6j;qyq>ezcm8=B{<-OfbpS|0kewT??4#X3~t$4T9weQ2AeN*|M zHxjFOtj==Y;@%uWlqXuK3|EFr(G(|L70z{L%Nm`}cqM zrypIJtRxG^j#m~=UAlc{;rMW(GE*Xbdv|&(Wvv&jR`hH0Va7P7!jY7%znBUoQuIdGGH|m-2Zvj<=QA^Retxty zGJ_z??8Z5yimu&z`~A1ye(#;P9^41OJVF!w!PB>%eEiY^;9?%JxJK%`Qhp9 z%TK=b!AS%wvi;Ux`DgKjM9^15J%7nq(KDgm#P{_f>wj)YF6`Kkcr`)s_i5&bh)mw~}%jYTyNHc{& zJ?(rU2@ZL9W#E+YG%K5fjCdT+CtuwL+1+ZzQwox&k+POqRjAGx+cxv#bPkQhn+gxH zq|O7z+%|Cdz$%joltaQYo1sn_2VEu01d3seVd17?r6*_B5Qti{5;Yb_L$rV+6q+6V zZm*KKP`Ej5+=C_@#vEaqC?y@L)x?`njhtj)iDg5Kaz=y+wL=ezi0Puw@7#A;yDZk? z1d$$Pn;uVXpx?H{2t}JKIxr47HkeDse7vKsBS&o^FTI_uvF&U7Z~ggSKKSsP-~78@ z{p4F05IP!IIKMf%d;RjYoy)WSa5L|)x#)+s9Q9TrtTK0UurOFkg=2hGA_J%I&o!%q zT!M(>%9stkZe*4kmYnN`l^U((%zI}DRNhf&7>rZ5m^hj1F z*U#O4_oKT@qjQstprK4C^9G-Qg%JdKW_onQ3dI-8h2tRG^ksE7Xv-CBd~RkvbB%Z` zHyFiZ3eb`n;i@UZd`)Ex&Xnc~woUvwwtH9!bry(R7N*V!P=OPE8;ySjn@V>-x4mvI zFGs+MVRBX5&aw4&{SiQLO@ywr*o@_=0NwqU(1!bF*3KK)#i4zk@r2Fi!P~83q+PD5ZgA?~1Hdx^P z=>a@`DAnU07;^Pa&q1Pfha1xyI~(!BXdz6H+jsP^E$vNLhQ}vQ-~Hh0KmTv zda;~NmB&WWpF45;&gIMZ_8(urc7K2W(Zk2L@4ff!Z|>jR8-^zwjD!OISUQ=^RfiV# zE;D<>JK=EC2pe?g}k_>J#Y@Fb%rFQ9A*nQ!?T8N3=g zU$*}+q^P|LaNHO(00?tEWHKWLi$e;>MH_O;mz6GIF;J&(578oZgJuJ9SsQRLdQA|z z9XMiMAQa5dg7jNFp%SIB4{$1{DA7SV681Z!8Y zT`4`05S6i3rJrRWrD%=NQgXzs3oZB8C9)zPt0RQN4GuCmsof&dLkyucty3vBJvx)B zZ>iLdt#>1S(W^{TyCIOSPHxgWGg~C*5n*0#Q((d#_uMumypCBbW5TF0PzUWOta$uB zChf2zsgF9FkN(SE3&XbhEqzSAas=#sv0}uE#w)Fp@j}#-qGf&G-Pd)r&s~}(f9{Oi z9r@v4@5GF+-{VWv7HJwQmoS5FB>THNESXp&GcY%F@x5<+{I~!7y}J)S{K?<^^-pe1 z*QXl!^@q2Xj_oWgE$^l5#RQxRKB+(GnA(hV+tSO;%y=zNlYhjMZf;)K*{MXCo#jmV zZQ-Sx#~M~xf1Q1w>d&Lx3NIN4+i=eG89+d|b_we6ssI6{%O>M)Tb=hR$O1CHj#&@?$ z^SY|wn^&x#+3>}ttgpBpB}Ae~=qv#J&o$as?pc*1qY&2#6n;iN?{hr!s|p&QF*S%6 z5sFZ4QeX1N5}FX!mZ?&~RHm;Dv%dsBX?F*=ZMCf#_j01dGm!w5T>&-=Ug+Uw>RX%M zeMA$A05Rl21W%01Zvz>_Dd8qQ@9)_musxH=Gbs}-cll;)nB-?Sp9nMLgqSn+?=5`7 z##-?jYGd?R)WRugcx+dTewI1T^s3^n$&R|Eux^u13NqqWe6xdivd^D%12Y^!j2lG- zU%=hr4fJ(6o!$L`RJ7mjMpWF9E4stwR%JhC?|AdDD>_w;X1rjOWOSync>UIi`Hk7u z$ZFYDh>%k0?6Jj*fwc>1n=i9mO|3SPm9e~9#@xw>&e*FIa+mCNvIJG)AJ-@xZytzC*S{oReJ+^n|)}wnDPM%sQdaVj= z%vR4Pri^ks3kL>483Jefx+z?6p}^S2|460*do@uamleAfo>hl2#tbgTfCU`{oRu&U z%r@NGmsxEt7(&IQMFewX&uZUc?I@@+T@Z?6tzQ8(@@@>WFjj38g4!G?)%^_d+5~w* z+Ru-w9X-b>=#Knl(aE?QpOh@o<< zn8iwfaz=H6MZ*C)83R8=Jr)Oym3Q?@myEeSTq?T*|A4a*Z?m(nA664dLZ>wvLz2uN z^026Tyb)idyDMrx(&Oy3**qyHW58X#T~07>vO2O~&)UBBRa?9^kt-*<;b2YVyPH!1 zCsmuk|5VCk>^g+*%%9{OJ4N|K&gb<&(2t|I@$u#jn1#yD&aIxpwQ` z^`();RyNxR$2_)vhBG^Jjm-MR;drF9)y!@+D-#n4G{;---mF$LW0j!*vs;{t=SmOV z2=ezhV@y#*>6`&{McSdm_SnS2NGVfJ24czF=t#9#9UL8C1YM#+4L+M3TV9)=KX&f) z_WCkor%&CwbMMi^2P93XN?ts1Y;k;XbNk%+m8s!I4Y9MD0KD>5vbE+CNvKIe=->or3><*fuP6!Qydo8*YB*&uI_0ANrh3bWnfb-5_Aan;ND1MZXn zAikJE%h>bR+MB9&Pi16Oo#ZC8ikawXgtKfUy~z=ph{-DaAmo9qVYFt`2TN8N0up$2UXmbDCane_ zlSXH$827Ejpjjm^TiRIJLLfkBW751hn*c!sIla!V-w8KU6JYUTuqxiDveV9zLP+3L z>cQOPSI$Id?$mP)m{?y8SkfVCOJVe3UDff%>b3P|Zur#r;A*qEvYhG96z1N(kqOoYVhy(? z>?>Z}$-dV~OJEP_Ec&(9MzcL>t862%#-nf1L>e-WP^dQf#@2!obBk_1F+nAU;f9Ju?Q%fWH zupM@Ta#FHG+_*Nz0|GytTa)N!fR)l9a!gzWb1guU6an$^GJ2KnwB?HIEwsWAF$^4A zSGGfty|?cf`rd#Y`E7+mqGp-DRLn8951c12V|`UXRJi6aGa-2ZVI}gpuurg^H%%>4 zNo}m&n5OJkeF{eLfh>yLv&=$n-X!wi#~SeRe`{ox%tnq_rJ8IcQ z;1B=u=l}V)Kfb-UzA$m(^2N&xmfcE1YGE~0V$_@lW>$_}KCw1X-)>FJ)oar$Wml%M zcVjc`9Z!bqE>|&s;>2QcKh9{mUc|UU_D~|935OYnkw`H>hGC6SUnrYR#|q8n_-MWW z6EavC4EvJ#+W0^sGcZsp4x+9-zp%KrvA(*vcsbsPK0T~O1&OSF|JGK9EdSAL7fdOTf+ei}Y=W^)2 zb|UaKHc>4OVHWgP74+*$bM<%;Ju|O?1Mhv!RBvsz&jI&s%hzuxbJ`Thn)4)RbJ<=c z2WBxif$J`}jCIqkW)Swl5%e+Dc`S>=u|GrEP#L zU-oOJgOVF(uAJ6{Y@U0SsYW-VZLLtVFj}oAW=xpVanR{wpJ+pNTt06?07KCu=gRCP z?Ksoqz2&b(9+TU^EwHn3zV(lm^C39`{^u0)#Tn>i(z@(kWVEyG=OUfRIaIzylwtCO zUA+z~kVgp^)=m#S>sF{M-jKuA?+v2&zycBsS*EFr1;!ot)U4ub$Z*T)DJXi6R;i_L78m zFYRnyf9u0v{LBCLci;WaPk#B!|N5K1|LDTj#^m?-0A&dTDIPQ;i6Y>Z9>)}=hlQH?n_4qa>hpi@&U#FaFt=m>l( z`2h@-Z#|SmxpD8BI)MXFflObj(!fYT4T95SJh)1hvfu9ZhA5(rPI233yy!W{%a9|K zm*)k5Fx}mx{zPD4xDT_0OdO+Rlod7Y9;-V-=`fTGBGaz%A#fh(q!0Gvycvqp1#UtD zO4ABeW9vO~wBP3mBFIcNbl;bpnnt+R6D>?)33iKnED&Bv!#Q+TFPt8jTASE=c(xkq z?(B~y*+6>d&!4;V^qc?jAOGc7-~Z0f|M|cC_Mdfr)KZoTwUH=smH^Vf?Uq> zZq^r{U7FjucI*1&@appX%t&KlrQygPU!Sk}CTqcZ#1b31w_9G!-%8T!V6(YXuGl~( zYV8lEqk+`Ou+N6Xe<)m|<+|7$M8++Y&Wwyq57C|>QKV!k8!imihepT7r)MT6X^Y;w za_8pto0pm3yRx>nFjYy#LJY3;rv?{J-FoZMg{e|Z3UsO=v^xy6FXDb*jt0Wf;+#bj zl4EXPP|i8${h-^ev#-W0_GLhdaaG2{%U|&TO#CwwjdD#6XfBq;zrt8UmEvhn6HbzA z7giz$<+t()u;~O~VP|3M%94{L#QIEv8egtn`F8FPgZx}>oSzU)u_6qO@Q_Xiu)J1= z>1t5RCAVuaNUlv=eR!SHV6Docc1>iHXDu(|JY{%asD%1`` zMTnw7htIEw^Z;>Yb4vKo&{qs#(Wz=L2G+dUs``%V{IwCCF>rjg=|MAk$~I0%pUoOZgDqanc;S68ega)7yDLb6-r^6S z5!-F)v_ZHcH-n8k-6-_fE%r>7(INf&nZef7a5d@(hepd8W%q`XuIWO5u)jO9eQ9xY zb#?9b^=8)oraf79c3FETuh2m7$A9q;|M_o!^4(wjAHVtMfBD6aKDxZVICkN|$=R{> zx-a1B52bSPlMC_s-lf&`-5WQDhc?#B$RiK5%D(EE<=K2SMDD$IhI(c<1!`-o>-$H^)|w%~g_-gWwBypC^=WEgZk`;M&%3E*A8{U69AcfAF>#O%lNO9zI8%t11HV2S{GyD9B6J+AL}GEt1Yx9|7R#f8S1 zJPri_3&ulRu;(wC{7QQosCePz)&MjncWC&6UMO>PtuB}5fg9DL;l^WF~r|@9^(GPhhbF7{;^Bx`yeJ|!dQWPdVH{bW6?tQ zVzfBG3v$`UY7H9EGSVya&*xHK)*@F56(i^K$~!AHrE{k)1+q;#NmAP25zoMS+|y3C zwgtU_+Xao{=|96ft+ zeRXr?%HJ~o{g9F6zq^M%oyo599P<8D1= zb6MTx1PWdLUOTPtocb$Xov)B+00SSXVSMWX1)mdn!vG}MK%0G9%qZ-q*_SVW7n zIXSbqws&T4eqr_G+4XX5w3_fDddr{_Zzx$DUOIjK_Nj$NJ{k4FFKatnLxN>8vWC(~ z6IDVF2c`{HHjD}5e}JKQp0+K^l;y0se(G5;GK7YbV&Hds5S+Lu3RO`h`<+4BIBLt+ zj8W4sOkR@Fw}PSYWqA~)&C>zORmicy`agOI+cVHxR(kYbB@ZFGp1iVgtkhMoJwWyg z#*vu-RQzu4mb(@_!Ox4-*T&-l(8_%Sw zAL{H!_P*mtH>cI^K>sA*MTgQJ^z``mvr`*|v4x3rD3+S6r#+U=#DG7Vb@$ri(c;F{ zYbUq2PrZ9#wdCqePBmSfea-iNaQ*5Z{nf92_J=?Hi@*BKzx?*sKl|agKit?^T)441 zwYXfg+TFhX#6ouH*3#IfJTh9jzG(dZ!(R3n0n}0YnobtvK>A@kI>=I>~BI2dN z!9qNX@Z!SC?8N-Bo%5$>$A=Rr&04w~(RezMsSVE^zjFQ3`dE#1;c=o7A=oDp6}(iS zfXvQ_^62!+;~IXaf!7*Os76Uu)x_gA-(Zv9VUb2y4+@awGa$nY3=;h{_1lmY5x8J- z55Ph%h55F9SMM`wIa2o&`w#n*#VRTCJHW*646OJfEl0bp4A=}4HyJ`5F0(VgjCK{q z#XriR$hI}B3WILDQSLG|ARz@Z-C}7=4Nyv(FO6G?6tW^h3kU7`jImiQ1M-T9`e4`C zt{&gsr)ZFAgA4N*0Ws=Y{G@L~2CAPg>sftD20ll#QNSLqg z@4xxkpM3uZw{|WpU)`+Duh(JH2J_j)rOLVM zSDwE2-o29-A6=O(4+Q#s*(9%cd}lK=IFoXP8m&|BtVTmL!d>yXB8A*o-qGvs2N;p? z4o3Z!-cWX+;`Agv42q_U5>d}sCYr0}bLC=na=cM357hH%0gQs%Um2g7TU{JoI(zZT z^|Kq>BVlhC1+P>-gM8fZ-0tO@*N#us8H9zH3#9=RivA$T&mTXt!F$|r%G4=gBiC^MoQj7(gP*|ce5 z=9KY~kTt{+-V4NX4z<%j_2S6u!nm?=dTsQle69>nEDwe$tD}G=a6r?TrEO~5Vn76T z-S*EW147HB3>sUM#s5!bK7J3`Th^~{Q=3=0T=-g2C2d3{=xmCYCiKI>OYDl*mSB~6 zGL{No(gFa_0DRdrh$>|5hLeb=X6-X$%NV#^dJih2CK4y{bRc<6PM{%Onv-ZIj(*Of z$KNYVXRl&BDG5-88;qbmur#%wc>-?aUoAa$6dj7CI86$;3%keX50ee=WXD<_}aSQ$u01A)B9EybwCTWvLKtQ!X5* zBqe-an`MTD3-TzCgyW5`|C+H>U^3-IbV}$rc!>^3F@rC#aZ-ESD8#D-HvDU%JB5u$ zsil8m{*DaVXe1>#s!(o`mo3=2<#fl~o8S(kP?qb(GRqKU*vObJ%?c9M7<9sf@! za@ar)EhU3}1xC#BMi#akzpqeK>ir-n0zY(Fgq?+uSuxMq42cVSi~w6ZDiqH4nX|_k zfVs-lM_mIeqrk`z$Q5AO{C{96BNYXQt&;`>7#|*o&5Kn#*u5E^3C1Aih6#)GTFh^? z(XP$}CdicF|6b;H^t=1rsT{I{VPAMZR$AI<fQcB`j3PCB};5ba~&W-2>3w7j&7XbyhacTPw|8Z; zl$#$-u+_U4S2mVbZ$0?NC+}Y&Gfp20wf1hvxQV#EiZr+7+IgL54DCTriX@F^gqLA8LCEY zp~0bQt~|LgwQ=gqjk{MbUORi@_}pMAmt~%yKQ}bDe&W)_?NKHkMSYNfO~x6ABcr56 zq|M~kz#MI+gin$y;j(^CaHH!c?9nc>(d7=MPcDM1tG}==E@nGE0+bjHDopi&#v9a^ z*eAJiIArC_!PYQGzNQOlunCu45@eXZWRleePf4c(7l{JN5$W>aqY3yh_UF2_?TNWj zoDux6fb$Dlg^WuT_k_OT&-Fu@Yf+~3cpYu9w%GvMUYOOPW=h)D%#EOS?Nb!x>E&S= zs07Qxk!_pej$k;e;CZL=^#*~w{P^Y^kS%{*K%4tGM2=ahl4s!Smnl*`+e?4V$5s9w zM}Y~_yea05JpA*X87oSs)T>zc)UP09+R(a?Q&1I*LppRhjvndm5BlA-+(4Rwo#coF zJz*cnn>FELB#kG*)~wJTGA!wDab~Id0=0d)s=q6iOY9djW6LY`#ic0dC05D1Eq#eB zkL!yUXJ(Eao4@tx^}9d$=G8kxC~+UVl=l_x{?m8w|L`Av{gZG1{J;L)umABkzx~;# zPd@nJcdoCUyD*Sho=qYT;YqHqEzX?3`Q9hrcvxJ&zq&e-o-LOW!Ej=0X0ATJmU7w? z<+C@2P=T8sjNX_UO6FtnQq*Dd*wCVdB-7X59~d7DGxsl*2^T9#LQX1|{#0#{8MCkm zEA_0$fp~p67xa||3%O)%WQfZA*7I z3K-3tcg*}5W`5W>Z@g0b%TT7o$zp&c3xLPq`eC|q6f;yr-d6JsHV$chlpUvaUyx>dR_|1>r{gdDP_OE{M_y72xe*M4v z=D+>?lc%@;_{VpakKdTc%reE#7AXd&E?tBkTSsbE;xfoRIca>(7b`W~n=Z}Zz+xI#NEHVep z<`7!A`FP0hOEQ@voy|pK$z&p$C^jdin3lQ8c-dnMkIvEa+HM-dmPCM5VX1AI zGa>H)IoRw31cPSlvplnX8IQ~T-7U5=BR5BgLVZQvrSGW4Pu~n5*w)v{Xc3ay%=)!Z z(xVC=^wPCp?FNE`$nd%BJve?UyEt_&>l;EoKIS5$j3cu?&HwrzfBawm=|BDIH~;yU zzx>WeH{SmLn0n9mCa<*ZH&13VB?WNrmL*xuvMtHI_ud;e)dhEB(|fb&1VRD?(n%p5 zLV$!$s3FPBWHQgpe1AXeKVg4(-)AO(*}rqiv-ds@iY?!grFEa{TIbcy>z$pAi`I1e zvjR!6?##T>iitggRlTcsuV1}vytTTzuBkgSfv8U7!iLg@QjasF;keSxA(Rk*S@HN5r z(|P|T8GBW0DapvWC2At{!(Vte!Cby+;l#bv^Zp=WE~K;T&?sd0%j0|mlUE8T7!*`2 z5#az;PMO$0%VT)VOX0YW(s|H2NY1XxED5P{JWhHg6Cl(f;qyZx6Oxm{U!rA*5J{Xp z2~X2*k6{8wWQ+~!3f3bjrlPNm5rIk`NW(5Bj_F{ri8czPIy&kC(~dx6L)Y@w{Q5c< zv)Gthm>A}BMj}+%FtDV1=b^#XyT*JW%8)6$FEcf(rlqB$XK`0YbxDcelkRiH#geJFptL*1 zi;g(Ur=t@BZ5T9tl0u~h1;~bD+OgV#^sjR)gu7&pX9j>61_|+|DhO-D77)ahe^>h$ z*>y;Z0k;zFh?8*J1m-7nUGY1D{w1XQc^w(zoc!!pG```UVkySBN13KB7=W}G{=-fL zZ89#wE=D2R1UCL1l&)9d$o)J-*CGxB0|D8_aMOh;v;BCE%nR0By1)ca zcw9zX1Vx+J)U}#zD+dFI^syN<%h!UkV%WyvR`{FPiB>TzmOJnvSV;Ah6j6%OZBO9&$OnX{YRY_%IW7ERL3!5txNGZ%svBp5)65Tl!-6JbU z`?@Na1)HAgpsGxznV2KaHzFG{o&vR*NzYg2XQrXVz#8LZ&SY*NH&F!+LcCIsOugfw z|M;Cu+kt+VQEUo)iDxpLUN3HXBH`OuZWB@0_fP5Yk;Vj@NPYKw^(gvTERGZ@G1iLQ z$$ADG34&>upbTt~hhS@e#l4ix#2OoVt~LkdE29UW?0;cq$Z1}Kf0WxXQn8QmJrz(< z*%cv~`D&DWLgI!!%m?IHAgpb$9E@xeH<8yUb8S-MD*WX)Y8w!J2hHN(3L_f+p?sHV z#^+%o+HmQhV<8t@OOeP@XyGu^60Oq(cq7463#_wp>d|?T8X|SsurBaYGUW{6n~lki zNb)Byn5Uv;4oxf^&~~Id@h@%uG=c}#q=>NSm~hxEM*xW(yD#3|Ffce>?sOJ*FYB&J zFDYaEOmvjn6K-*ZhbH9K53d>8a%9`;qZ_B++_JhcV0Y$h`|`-pYq##6JA3KsrK@)? zef{)t!rTRGO_Nsfz%%PuS)o9NrUbOnEhP zpuAY(1TS)c&b*Aq-rCZ>1x*#Dnf9#K+U$bdG>41xWtNeh9-k*BB-)wF7aq(m~_YDp9 zEp9E%NI^9`nTF9Q1+K}{C`t|H!siNBgEc)t?835@n|^FG$IRKPnjLO2W@oN}O1E$h z&~rH%ff~6e%soedjsf+_o9KyYi9}sfq=d8$1AMrYf$dOm!Ys7kP(KAz!Rveqqj)N& z%pW0Aw$@MyKrRbwtgrs(w~Ovd%-DchGZ-M^Bm4I4e{$g2ZCTh~ax{82Fb38^tyr`i zjM)`sXFF)u1hYP}*s8vg`VPPQiAt%b^7 zM66XWAPmdUvl^NLjfuws{EEt?e0encOzsTNgad7^nk=fFr$Yx}bn%HXM7rVJ;oK}r z-?73m40462GKM&6!Ap3T)_BTAthR*kNPB9!E6GmnUwAbA48#HPU_xS1$Smm|n(i;Q zr54sw!I4p&LZxYVVu~fs8MPoXt$S$Qn)SQ)Y&)@U=i9p`>wKt)3|>0D-ydM=g)tA_QL7cZrpim$=Jycch0L1Pe6T{j!Ni9ipAoj$=T*e3uKoTXQT#vHg`^5er;P*V{21gS$;ZF0FjXlWASGY zBw4y-VN+FMj*oUpD?0fGqsnfp>Q1iuzh!CU;24VxZj4D1hc;@d>cUYTP5w!6IGSvv zncJ=KHm;+TFG)ZO&_O&yspks(^#5~Gn}STo{03wLWJrjy(6Z)mYsCQ}Akond;mz;| zQ?I0c1>$vL5{4=Z&_S3JfCq&*mqK7riJqs*P5e#U^#1*i4?Mdz31|lgTMDQ051)Zz z8}w`2{0GwnW@MzzHsS@;6)7&QT5WzE#}cJg`u)b8WE?mkmH}7!>yrhDrg65-MM~zX zNQeXK00iLb{J>fmx<_?Qc*N5PW|8U%9F#gO6(?aO6fT8=NoZ|>F$frS?mi?0&4yX# zI*EUVLA0rq6HV7?I~$pTXj%gE7OY{gt(YVt-!M+)niK7*s6@HbsC}gso_g>2q}kZt zIt$9%mP}6$7N%qrwYOL0vz9<@bKLEi(h{B&i>2aeLC5D?Ci_^buG1}u9)cbx}GJ2V>A1vS4|y0 zJoDC;O-mLn=`6NI`)X4!+UhEqo0SUD#&9s6Pjyf7?4j4#j4+{GOAOG>KUx7HNOxWNZ*yx^ zo2J{uH@aRSEd&h=eZ)Awac&1%rV!w;SRtM5=n5jVR%I!x9h-R!N|-%gX&cSr8Kv8a2Fs zKc;;Df&I%c;i@wcYJ++tW`F2)WVE%R>1Ja$;UDtcXXdLcL~&|xE*DXIN3z@kC%Z(^ zYY@&g`u+O*8`Y!EhBEtF8-|s`AP_GM*71pvX;z|=Tsj6+uKkP@9-tRb!lHGRqKTA( zsLhf!5mGVX40Xkw#JpoRU@~AemQG;ie_6uA5V?#)s(}h9q#JmK4e85dhOvgsdm$u_ zVf0qJCBZ|eFDl;Sby%Glxo(`da4M$VX{jlWqSoQb>5)}KB^d=xsIg|JGjAa@Bq5Cv z?g&p+ZP+q%@W`PpJ5RoTYVW$1nzHFP`@xZJ5M|Yoi`S{w6BLnU2rH=UA;-ZEUD}kKIidOm) zik3AMw+}6EU*A8{-C3PZZc%;vRDiM1)g_mZoa#xmCMPB^M8fVu^wVKWj>i_*ol!}4 zf{e5zpxls-sZY)=F38CYWyK5=w8ycmAXMqN zFiA0hdtg4-32dT$qSe8)1cpc~lcPGGJ17bmH2YX2vn|*eLP6*gUO_hylOy_Lpe`Qz z2)bfY_i`%XCgdy?1_$YnW7KDB1BHFo8i6 zhLY##{qRzVqGZ7w%vD>e|B} z?p(if_3Gu%-Z`=F%-s(sCQf{M?&ZAXyrQJ=n5w3Z738jn?FJPZkQz@kyx7XJz^v&Wvn3%aLqNb~_W2QZoyR3#!@| z^>nnr*o$)lDM=U*tu#P69YEWa`T)XK31 zn9CsBZX(iHaPpG>mQb;p^fATKfG~vJ;M(MD1X%GH(R%gmgtrFGI+nc|pc8u$Y_$P` zG@PssFDCsFG4%x^_qyaU!3u+TgJ!^O;z&VYBh91JjK3ym3R^NeLl!{!0iG?8n>`bv zb;aCAD%51$Zna!WVL(w8mFVEXC$ex#@v{R_O5@YQO{jRa+u~8@Vav}(b<+edkyseI z*dF}{F)_}xOdqP()&z?)Il-FD#k66@#bO$hC@W3&co?_=WwEm<0-0&pcqX@JI;}RV zm8KjzAZ&%r4b#ikOpJ}G={*zMNg^pEjAC18ZDhv8#;yC0yt%h;$6FtsoUB{ip4m12 z#+`3(et-Sa^`Cyecl-YByVt*X`}k|0egF0Pf#aWlak7!Y4apIa#T}ia>oyH-Kl$Fu zwWoINnB20vufEEioa%O0Rwr{dMIthll~LJK+%mCgYGB>;y5@k#VofW{h{1QJel>=v zoDs;4GbSQ7F)hvIO7YsGW1Y@4^yT9$gaT7ilOiJ>`2lNYz+rLt=~+w5@Fcl2-Qi(L z9(pX350$tsU*nb+rr&WMqjK?M1~^K)Qe^r~*z{3~UBmD%=-L#&PfTJ@-@R zwPYVvkikqbT|_s1xJ(Yf2wul4aW%9>u`y{b5gfz&#H2IJRMdyBpQYMH!X;+VrZ68# zO%`pKe-y9bUJ@Qx(}IY*n0s^-j$$y}_n)qKF=&aKh*A;L0o%_~St1QJ8FO`~sWg!H zqIO}<1Rf&t9no#r%)b5mD%cOt0x)%}>)N0sJtkfWq+n&Zs#|68wXc-FG}>zLb-vRk zVtWwKVb2TlT+0U0wG?+5%Ay4&s$@3B^Q^JVfNZ$VHWjr|EgOn-rV)rS88R-AhtCHJ zk5@+}Oa&s2ABVsi|KqKS;z!5F&PKFiMu@;*A}|Ya$=;m2K){WvRiP1Ox8%kJL!=FMw&9^Scr<1fEFxO@N3{d-@%_xhV> z?_Jx|yZiG`Pmbr}Lq>#UFKX>yvu$MEv3J(>?cICu(5nY}Tj~Q&PjX6C0jefpQK{*H zoWhp+riq<9n1)tS6G%zPEG_j}aI>SsXe46eB{BFaHrZ}TN^#jzGU=~yqPi8!8;^65 z7WI&R&G1?h9h_1A46n;Ko0jj*$ViT}ql1FNoFliiBriRyx}KTl6}1huHDv`k0XI9H z?)8)KNIdPlRhWeWBLf6$d-Y35)r~KPoZwsR4SRUuetrEX-27PxHoP9 zXKy&gwAgg8uE>gHPL$*f`l-UYpbw8R!d0rQCG;RJLp+fR@Yw%~i9+c(h;|L==1XEH zPjD$2MJmH<_y#c77Es(ppatHboh=KL5v}L(kfbeJw(s9LHCiU0*U%n8SRq8Q^=FVV znS;48)N}Hfa!NF7O=8{(wmjCzVjlaw=#s2AbqfaIfK|&ufBl@)+jZ@Z*Eq ze+A#)-Msbvh0`bAK6m5Z+go$V&HS%@&50 zl$O$|SyNRCzEhlV9$GL}11ejikS@P3{5geJBzqMDd{(3%(2J1w{S8^+$j72Pyd%H2pKWYZ;(ZYp2JNDz^E{W(k$jbm`7Ej1>j?6 z_q|;^}%w6~|l(tXXg=lbU@GRS}WMVT@k$HdC!L=T4Ct4T}8xL6@^G~IZ{1z!6ZgRC8cI( zWipG0tS9AC5t?f0cE(2K)h4ub^^Nv-w>IRth(GfF(FLPg7owCgykYv_?3=w?JNJJ0 z*4ECQ+bdg+eRA!=y$3)2{NvyL@$kW|Yd7zI`{8TvesTH1S0@j>^5uISPFHbSAi>f< zIJD*9o(->mzQ1>Bdi$$y9UbZ_$w+lOvx?|U4qZULCa1A;`OxOwTSixpH*f0c?iuQ@ zWS%UwVwi{U_-GC=Mi#mf?9Oz*8!g2ohbKNU-S4!a+V4yEc+zv-7F&|d<4yBtz|`sb zNp+AcvS%|b(Q8jgB)XGZT2_=@kXKMzR#s9}QbhRO>vq|a_=Lth%hHOb8@I{CzJzB^ zcW%4zi!l-942q%YZa(JrJ)Wx>m0tzXHUQm>9}({V&5%IemLMvoqS!a(v%F1(FErTC zB$M=rCKm&AK7vSrHUysqqbz;;`Sz5Tqxt%oy=V4V?O`<{7BRtqAf9@ z;fYRrWRxw*g^*4PrFTxJ2j#Nt%uL2h#?TzWo{mY$3dFn0rpr19$NDJkuFXJvLPY}e zUJ8#Q(vw&?FuLy02k*YQuWjw;@9rMib*QuU#JO*7W7&WC`Imn_ynpNJclWM*_WJ41 zFWtHE$=ioNyg1@XY01xUTiVAa5GP!H=!>J{8;`vF%E==G^?@|E-I13O1>n)VwU;z> zbr0^`IkaNU$VB=0im|?Ge>y7UpeQP2L4ws`Pqx_6F}E`%2#m(0`BJPd4|-iTt0z0) zVTL&~$>~XR+P!!y_QctQOiOH>-R8>7@H$fh8TrMkcm(b7+$|WUv0VD^i308VPWRHt28&a|>2>RLW9QscZlOS+APng{ z$v0u9h#qotRZGpj;0OAnBCXj-hBc7m3-%jFk|;v-O05xws*Bx_!!mP8AThJCYG(_U zut*SsM5l6^>;qF(UKMkc zfRA29v^&@`!I`H`^8&7?P^^IE{Qu2$@?zz|vK~A+jJy_`C5V4*11{8b0QoO0+MGTq z7F?HNE2t!AMQB>)N`rmVY0Q$OvP6c{O9h`&09wDnIoVK3jR+@F%@d`=g1bdvj+@*R zpI}L1JWgDa6WPjyWTJ`|rz>76ZxL{Lh`x>KB*>*Ca(RM{at@H6>UDWCb7+1{vnIwQ zCUFO7#Lx6QbEZoQ7fucIEN*KqOR>xWp9z@pUT@jJ$c962e{k~E{*@oTw{PwA{=S-5 zzr1++&iz0C{jb0LdXE44sTMtBPSW*FUlelJo#lc-D@|mA0At~aZA_AiQ%@Q0PV$M38B#* zS3EnJrg)W85*bRc*f`JPlU)u+5?Z0DjwE|xj6KDXl9gt)L*Ok8`DEl~ygkj4lAoFC z_4u-L@=IomV{!xD)Qk*YW^r|WGlI)VjXUBZLz$(Ex`~mm0dkzqLEzI)$bCh)n0q7A zBacoY7}IEr*&Qkr-!m}8OfD@C|4_9t_Ir&U5272boXPqlIaPC!d%8o-nKk8HG3 zqyGa9g7T9O(xxy%5`vwWl9@6k?LoB?^MX&cBZ9B1GlE?rmq8&$O>K~Cz{Uy|cfsB9 z9JqrDKPo`== zG!dCtwI1WGCdA4`RTnf}6B>^eoxpfgNO)9|Tab1*lU+_8SKCEsjKjl#5NGtf5E?(N zi28Vob26Ef>4>EfA&2gnWLuIo*%A>4nRWR5>C+X}EvqI5S1jwOOixBXdw$4E3+5BK z_vh7*Z`!u^@agwnpBjJX!^6}FjCAb%>QzGL_PqZ_uJJ~ce~#@m~B?Oc|hmcvAq0723agpDjte^%R? zbrX}TH*HxrF~4tcsJ$Q%PyOwDG!Q*0vzF!d=xB?Dx%N2M$zBIlxs0;)ra2j;WlxH= zVCB7DtBc%|x>iX#B*fZ5dSPB3vO=C@k1vqTJjH;=!)&$`PoTJ_p}D1vAY_g^fgFgA zU?JHQk78zmXoqyt6!ZVxI-x^g!rnn$NrB^piNo^Lx#A9)FkCQFM%W^(J14Y)JBlXq zh>SeI4vOzTfv(GaQ`xV&7YSMFGGc55nKcwv8-Y;!ta43|d;t9{1?RsSCQtW-a-M3m zn1^t!npp( z+6%J(N5{bv?IziJ8F%&rU$ZF$^8X4AR|ZO~oR?sa$b)BIE`PP#jjhn@U{X|`jtr71 zH%Wy#Ce#y9*bqK?lW7(->iM28Va{=QRWa;VfQgMO&HH?M@3!XV}|~Q#72a^i2Ta}Op>Rtb!zL@nFH^B^5)icZ+>!W_iJ0GCJ&ssbo<`Jzy9NIfB)xS z9{%|7_N|NGUjF#g%in$f{q-|%ynAX*Wyg4HeU-g()64t!ZQJqY@sVYR-`KKt%RqZ= zsl$@yk44!!Bs77xpOWF#E7y&$+P-b=(7J)4C3(IqR}yYT7&|*5*_jX@;mpa(&+ynu z^n+T5(}m0|Rg}q)94obHXrQ>$Qqo+>DGm-k`b}(UrA_sPX3k9qw6>(w+VCc{*~l888sX`m5+OTqS!m}C>Tl)0y@&~(Nb zw97!t=_M2sDj^91iiXPrZA`mH{;A4akPrSyQ;~6VgPR@Wtr|rWp_&bi1@Oi_kR8y` zK&XaIVLVe=5IlZCpG#ndCP!y1zC!hn*g_Ny%!aSy(<-{inh*s?1j?EqsXNKuhqJXz z@iUXpS-!{`K$w{f~eC^@ksRyno}{%QwFI;_{sb4{v>b z`rX%GS=u?-+%;H`(!2lVJrf&WIX2R?{pk8NTgS({3h0e+MRF2`haxna-?MUbYV*|E zbz4W4tr;6?DJ@B*1q5Fk;jYAV^d}r?scC68W<<)9=o%&z>>qQd-~jC8Nt;dD5?fy~UToYEQuvnuieo+QdX zg;kggHwhd{f=pafa}E@x5tzY-hVlvby0xY%;Hff5=03{iu?ckivr$D^jdBHPQw?Yn zVGo}-M`}!+2u6H1dY)29QpYCjB`zbyWnwf`GV+kJtU(6a>R6-@5NC_hFV zf`Q($?kLsDPXz8%TSD7~b@laQn~jZDQ_oy*9?Tlypal?fI{yTBI@{(Lk)iznR>T`4 zpyx_Ej(CoClJ=44jEuO>5tfLn)WmeNLO28Fqv8|DFLGWxQj#f%Nl1ten>Qb=t`HjF zWO~qVV>}N^ZWu5KKe<{$TVcnlp_SVXym993qq|Ohdg|~S`!>9M>XY+# ze)#F9zyAH7|NPsJ4}N%X>&oRTSH8S>>-#_7`RM%*-+f~eu(xdK^|wx+e5G%2`>QLe zHXL5LYGB1wM-HRNG4U_4k1Xy$^W@~jwq2Xnu3FpEzk1Em?yg)%!UD#4GL9vIHr3cf znvLu!wDS8iGg8rFF3E7(6QivzTPh_2_GAt!M^q%kK>ZnRqO5U|(RK&JZ_~V1MxIl) zP*gxgjLYFp50KFE@G5y_l{IzM)#Zhmh@4WV!M)LeO-*XZ0tI=4&HKNFDjL2DCWH$_ zHD%sp;<;zR=Y*(aENJg#;7uG(=~Z)rb5tAgAu@=wR8dk1pfUlBJS0c?BlQ)blMADv z_kt-_G(YRdDn@@|tU8dLC$bI1=Yr|M!40ya@+fJ92COC)3G|@jhG?6&Y9c!S0?|Y* zxtupXyCB%AuVOBRXk^<_@KGUvHi>xozf9lUqyHD-&jZ&Wn8O5deLl8M&_tWu7QZz{ z+d`lR=l@w60US`zhW~FYx~k7P)!^&s)Ux-r2`tlP#r~Kc)ZKUB(qenKVSH6$WPYXZz`$s z3Vc~bh5kefX&Pi5qUOar(n=Rit?I3-fkk*iX8$<#Qdn$cq9?O?(_sJP%<;G1I#EAgOqRbJx**Ext{Pf5wsO~w4O5dtLn|AXcCTpg z#f2d!9m-6uKqf&#drERvS!rccZDm=e)mN62n?o~^Y9azDc6+=cu9i5PlkJO;1)8B$ zxA8NocCE7xr!T)CH#5JaxTvTgzc4o|x3DlTx3HwLu9*tRs^S1%DI{9erN5Oq#9hKe z5=xaQ)O|P9mzjE|G6}P!QUMcvG-U&icp}*)UclhpFp{8x&?7}0Ks2)>V-Usvqq@M1 z)z%m*?k@NEaj=wE0|`y*oHF9X+M=a24tS}7QS?Q1FGdU~2ttGigJ6`@w`{awGHe1M zYbHO4qA=>%K+S|w2rB|Vy^J=3;xlYhZC8^M4P{bFka7@~F>+W&=-FJtw}P~i`YJvL zvO#|ac^43F_L3|!?*hgr{zn8>1s6&fbAHV?%ufC|%cIOEd|i+?E2jaC?Bck1Nlg%Q ziW!wIAq<@{57flaCrGA(`QA1=jwQ)ZzK2rah!UbF8KrYg2u|lM?mfAO844 zSW;qoQEu~=@fH1B4;(#tV*2=(AHRC!;Qlw>IsL^q_kaB9r(gc@-+%q_-uL%zU%zzr z>cxvU?)~)B*B3s2|J|9svA&GveZ#dYj=r&KN&k+0okM%~tZ82{ysWh>-x8syN=Smk z-#t1uv}V=##trK?t?JsiaCljjGX_s1BHZE$loWcI##WHWaH`7ovRpLAv$9;C6b4rz z0{9G%l%Yu5QqvkR|ISLbayfM9LOeKX)tbX zH#OLb)ML8T{iygl8Z9dC)9^PllUBhO7`TEiQOvLk_8Bqngr-N;!symB?VftyXkr|q zCWS5)L@*R-`)=299Ml3bi-D_F5O z&rL0%!(UQ8?T)r&FCHIV*xufhlNb{f_WbW(h=k(QRCjGyyS{(j^qyCb?mBkv!-EHp z9eMSwcRxON_s3h96T;o-gSu3!A}!nc>N-TC=Xm%cvx@h6AJM#nPpXJ(qakG#Ks zVrt8dfuU{tHw{jV4Y$`7EB7{kL9{cad}-(Mk*VR;JGbrH+PiGyFNIL{4{T7niUmJDj99w%xtQ=yngCxGW>R$SZyhuloT6M z1#;t)k{#ak{G#lvyxiQ%dboH|fHTZZv2s;qMMY^|Iu*Uj&Z$;Uk?CN|oVX+rbMX#C zL^;&C&myC9rCrAFB#02K^@FFI;xBHnlB<6(O$OXxvPj(7V3<+XO>=)#$wluG2!QKE z&cQvJfo6dhc1ZUl+B%5#xsRzSw+_46G-7wy&~N+|H9R$*3^ zk$PM|)_75%t@BSNU+v$LsNsdpwc4qYJfJFwe=sJz8Lo>U?xIAo0#`Z)!pN=3ZiMot zcrFXbhd1yC`kZ}2J0q{yM>s8Ei?uw2*<+#VjzC&WC_m>Yh{ti|H$-XlUt}aYKGE^f zadu~F9^r?w(z2SO?Cjjiw(iz;2F#~dR97Lc78{vUV(;A4-%^eX8ttoSsx5Ow+bfrk zFKO?t^u_Z=Uiy6q1vajNnni23?j2h_GjsIF_G9PYJ+SZi$y2A_J@eIfKRo>Y=YRa| zFMs~={@w4cUOM~5MY3Uj0pISS0KE&?HE~l z+J1klhz?sQ2m!hgxB~dgaWyp^bD?%_G-gj3aaFGCo|@aN3g4KR7tBMdis9WniJ)9U zc8_{)bkoSKL~8~Rkwa|)gHaW}2=BzZjTHy^Dgwrxlyz3eDIubqA8$bsXZGA;b0^Vjcv|NUS7_RCKX9^Scg`{u>7UtGL$>*m8h-@f|Q zXWx9bVR&Dczj6CO@yIJXrcdn|>grv8aMzmNRcjYEq(#R74XZaLyQsB&;j+Q0k+Cg% z4j$Y-Jvz21-$s-y&gJswl$7N9y`Ho{PI_h*)#_+mD36rpC!Uy-=XY9Bs!4RZop!fB zIX0dEEj7Ujl=d^zlN$F_d{=u?dQreeo|r=~zr3o9PhFOmkwq}3vOEugI@HP#bvGsq zB^05=02h}^0W;lH88=1GSYCdria|N13aCp%Q>j)3>jaeFaJ`O-FjV4$mY&QLs}qI|%Wq_jX5*eC$_5N(=fCh0uBzUo{taT& z%u$r1sp%*JDITbC6M3_y8rT%ND5E6E%ORopRIaL^h>Z_kqoC!Ss<;W%t5qZ0-l&tOn#Pg2GY3UBnyFvB46F)5!7@o(wC#x|K&B>us86iy`r_+#DnIq9sC2QSm0z zuE@!1Jl{WJ6J!erQ9TVy5Sm4Oh&E6pMQy*v6q0`6g*YE)BbG592v%gl@wCLodomCZ zbS5Q`TZ)h3_eI9?hUhPiB_l-*r3Gq`ky~DxpP5}$SzX)IT3>-EgeRRL#)WyAY2M<6 z2n>01^E0ZJZ)gbE^XjG>m$v)T%Nmw;H#ViA5X}gY&?Jl7pHsJF+ny8awoR{|IdS0l z=kLDy>Z!Azo<8%*`Rfn9zyIT3e*XT>gWLD+-MMh~?8R?y+V1`KwbC1%Jr+pckMfPVEanz$Z%ao zVpzN_qr9TDqOPKtZjAQU%EG$3qMU4hnkzN4bhfr4-=2_~>q>H`BqH}=iA&_PLrOBn zW`X*_^P|xfuqL1jW3$n19cxMVCEL?-imR&&vvP|Ha|8bL^sFcOzb~(^&T$~!PS!6> z?U<}zut(BJ0AN_4KG-R9BoO4#EGob+Z3tubo=7k=xKp??7@&dSJmN$rQg4v|pAA49 zhe~+H^id-g9sMg1Pyw(Ki?pBWuIkI@qFd`RfRAII6UnE>ecp>wjN^>~HbYn7)Vvuu z8fIJ#9&&R<-r*O|AT|CRsN^$fU&sveG{w#Jn9d8;!l($IGBHCz*fdld$p1ACF-2oM zSGL_qX5hXm59Jb=gJ|ccG77?{UbA*2k;EEyf=74_O%g}`Rz(34egfx&po~v%_#m~A z1j7i`%!X{ks_4*D;wT#Fd;%_jKhiYjnX)rZ4eA?}P>Hjo_=v#~mPkn^WgZhw*=`i( zDJs!I%MU{Q{LIC0l9IZf<;$1#t{5EX>+No=C@IX&E-TCSdpy}CZHpGRwUp#kFYKt! zFD{y{ShS+Ppsb{(t*$1M^nJ)np;0c6GZlTKU3-sj*}iLX`_Wh4`t0E!B=*zo*XM3?Jmpn7u8p0=VtrLyIaeu zS{Am~7nU~Fm6tcPceHgaA6&7hwK$c}<#45YsgfjzN{4DZQ??Rftj?s_===m5g+K}6 z35?jtD9KAf>@L&c$Sx_QY0saVpPQSPmz|NBol{s=*HVx0KLJgqDgj#Vt)l75tLhFK zZW?6t^66$-3j-hSsDZaQk4zMQ4X=42cwUS8Kw#+GHvbu+0P-lN{+GK-$zu@Yy8FK) z!z2!4N-<&clJHtk|G!Rxa)m2JSE2aAxuG?(&2zMTZeX|`k(+5Epvs};F=OhLt2b+H_}ad1v9ZiS+=LbIReqZSgT?hG0ej+$q=&^ z{G;u4+7G1L*Lb&rq^yDJ>m4AS86(?_?opIP(kCPpVFhF1)& z=qk&~%+JXyD9ra~)^;!LU)B&PYAG*hs+%rrS+=OUuA#P}IX{cJ5#cW^h)&P+rq$P1 zZ+`jEj@{F%cO5?Y;TNY*eERwM^PhbF#b=kkzjN!}_Yd#idvN#eotsy_zHt32tsQ@Q z@a=_!`i)y^nwRwT3?JAuvg7!UvZB$gTP8-A^>^lFS?A4nIAYnOrAwCdty(p> z{m9OV{>cr~E0=Xtlr>dnBqjT4{cf&l5eds{YAwku>l$9SaoyTg;}d;#g}G^-^i&_E zyKaZY<)wq$4@S8RTA8It|7Qwa00#!8fghH8rO}xJ2y$>1x%5-R|>tG(OG6wsDzMM zy@KoFC9+SC8Eu9!ryKy-)3pScqy8QJI}vq`YK3mlic#$!0})Z_ShT~z^PV8Xs7lC~ zXcTUZ9Ti#sPgB2XyD*OfaD~hXqH9}X-r-q12Ft>}%ZpVsMWE*&^m4=gh1dm86n0G? ztK@FY2|=_n#5^KL^*;q;a2&vD3I;eoj1^~rB$ue(t)Kw_>#T%eu2!fdgS$8G z-2M8;XWx6{?D#C7RIzp2o#XMyAHbr+1EyO>Ed=SvkC< zswBsskzZKdy?Duz-r;4nHB~MBOY3us+7>PA?wD;VZe7?>U*bcIj-oa%l@KnMow1IH zN2kz_>PT@DrlE4iW%1GhNOHLs{h z`y;-VH>-T95#}LG&iJXsOw$-H@?bZ^LTN5)gM>Pxi}ZjVO%TtY8QoIpe|EGC|0xy$Phko?ZA?ipLX zcGaq}WnBw9o12#7hn%*rgRDlaYcT3n@l1J%{b`WE-)w$@P6+uOakryd>U zIEt;pUd*U2s9#iH*}v!Dsom}~+R`i6^;AC&oqX+uzCyupClHZ&ZF08$X) z<^nyzpdEG+EBPPdk;GLfXAwOR6P^W{=r}8RDz+j7qfQh=pDG(whf4@j#M)2`>3ylu z?q5MYQppU!)j1JlqInh4qYLI*_rR~PEvoT9=JSDevwwwtAsLwscJy!MnuO7-XZF9) zjfEHGHr-c7wMi^oji%aK3^yR88;eU~P9w#dqOoH(LgeB%Fm`R6-w_935EjZ1og8x% z0od#baW)t8Qz9a$IK=zp9Ai?g+)}&8pH~2h?pZcAIXXPlzhq%IIw*@eYDy|fo6#PJepw>kD6AxOnmFZ@;~H<=gAm?>xN!;NH#ezBzZ{^7R|nu0Oo<)y+$1uHO6j z==Qek73;@V?tXd0^6}m4JC|>q-o0*NO_kS9qij?}T!Op2w{OMJ>Mh&H#`eza+&Hpn z)$$x)QE7SO;NPL2yGgjA|V}#NvY1e~C&5O+MIX0#>NR8HutGi7N`fZ89#riBO;Gyi#LR=t`!O!|OTqY(!7paq z)TL{`v%r9SHum>QkRrZi7E02jbHS^KCDh0z5)!7m5go3$_~@uaCnX&W5Q5oZexl@& zL?)2^w>ScMRh>(hE*c)`?HgRt)67tk=9-FJ;>bB!skGZ+@?6PIUwVqwmdCN&v1qz? zpton)#BgVOYk?nSfdxs);R&S`)k|B-8rMwqj&IqzcH+=yXHI?m_4$kEFMNCH;)QPz z$h~p%-jDYm+`W4HBC1E%u3fqL@ZRMcH!j@%@$$*({*3m`LrXU9S=+N>&rC!2s%^W+ zx@s6o5o?WnDcWWAcdQub8{4vN)zrRY2d6h~**sEQ(6)&A0b?6CZ(cJwynJYKbZBT~ zWX-mjnXRK;jcr{E7uGc`?t_%n=94D1qj}(UTcQ&ktX4u&Vlsygf~hfyG@qoWW|mjw z__9lyx>{=r18irHKPMx_n^9O=Tv}CATU%LC+f>gGIka)4?rCla@qEw;__+PtJq}En zmRQ*-0mk4${|Ozz?;j(_DDuK1Vgd50evQCxh08*-TV^=}O!P$bgj*_XW6Hs?I`9-W zp#~%pT`zu&c(mecj6o#INado~#ax6#h!vv{)h1`ES^-&dwfw6x;IW9W*oa2B2-93n zz=SZM2|Vh!(Jqx4hDsrXVNyYgX7Fls7-_c%@4PNg(d;ktYN|%$Rh15fQd1hC@E|-$ zpk^;Cg~Tf89~FOU<7s6e-&!>|yUN+jXlk5pIV7Z3|BVCxEPHvL5(^|jIiO4-iyBoX zvUG78CqS5-E3b#wH$ zlob>d77{#mTF?wlL{~E;BEjjh+x#VEDRy^peSKYSUH6jimSxKqHFY+XktJGS^Er}o zD=RxYD%w^L_f1T$T0OAu(+^I*|LGT(zxnFx3+KN4277+v*8SNZs=)f?3)ilHbLG;N zhxcyWx^w;B&o|%SH<+EfYwgJDT{GjuJNGVKzH;^Yp}Mw~!W3KF{1=ikld~814@_>@ zuzL0Oqp$7XwsrVvMf2eLRegOsUfsK4xT~{g$>io$Lp@8E_Al;Sw5)$cZ}0HfU`JzZ zO+|5Op5J44_;TPJsaA*@f-VT;a0FTsSow%#Usi@MJ2z)G-_x+XwInwu+viQs%+Aiq z$9XlDls z?JPj>e8UOn^Ro)L9t6A%g9)~CnM*k7v`9L*Pyztw+7ZgHN&iTmKFb(^m=S5w_*u(y zR!dX}qr@%sanUMLwc6ql^0LO$PD9QS4LjzGyHj0^u!75=jh{#NTOvlEi5B4|W<+J2 zq|oW8PGzFK#gHMhE?Zehprb%TpXhx-SI51x7d z?GH|Wc=^g#=f3{pvkO-*UA%_E*AEZx-ne`H>nm5k{`TTG4Z3<+4}PFSNCn`t(ji9>cGCO z+YcVwJ-%$|qQy)4$5(VUSG6qeU(_?YcH5pkyLZoQ+q`L%`i7!hA8DYhjN<%Ew@Vc; z#M&*z_WsP+U@6SW?s4T3f_i za+DV^7hqK)U-GETFrH9y_(8)RtO8RZpR^*#xu_C_uT%*uK&wE6;>TYx)lZ~w!l{o` z7-n4H*X_nsDOw_hqepaPJT~(X6>8upQMHTNbi4&zv-miTu8=v`e}da1`XEmlYJX^bSuf=^9_UsCUgPr{8<;%zN)$_~z`F=fC*u{I?e` zUcK}E_xJDJxq186g>Sz(f9c!H4}Z9I=lk#O+`jSo-t{Z%M)z$T9N9I!YR#H;t0p## zkM}I?=FoweZ98^u7#kiMo*i1#*W25( zaQW(8`w#8gclhN)M^79(`pTZ^o$FT)G#B{YPLJE}c2RLm0Zd{jsq#dsyKEpfp4fh- z!xqTR1lPXILINn1GgA4GmYigBrlk5&hN-TtC@yboYplpiVLlUFMnLB#NnKDFpw%)BXW;-yTXmx5?U3JH_NZ{QzA3o-AC zk{eRPccJpUWcm#9gMu)#C>|kOMX&`nVu-gP+Ek0ft5wb-Z&UXC83Zoe!ArosDOj1~ z@Zvz?76LjS3BxO@#T(~YYDm)mAX>GKq=s}69}jOe3$WA_Kgh z8jc7?ic2Zv$VMO*X;uzbnCHqgfP8Ivu@}{c5rl-Dfc_{{cs1|_{BfQtP(|q@yFrJ5 zi8tYT^YGKq9;FdDEQy=*t8i1pBjTuSN}|;ce-xOrO&E}9bJ*k1)kWr<%o1bgn9AjG z*s1+O$_vqPd12Cx;lGf13#gq*pfUBO#Q*D3A|00VLl~6o_2pGm=jRpIb#`?&78cbP zW%wfFbBbKp!p6S7!G#_D%}XaYAAaY956-;*!TEEae0J{3&%gTSn{Th)`~Jb~ok|9} ze0%kq^B1pQfB2_ccj!yHb@R(tw`~|$zHi&`z^0k$RTC2{C%3L2>0HPtp(6ZLPoSWA zYR~?yW2^TcKYZ}OhP8(dPw(2iW&76kQ!7TMCMU=HJF6<1>dWhwOl{pgGrfEFp8W?8 z9XvR*dF|+uuBH-CVlqlzsXjNyT9VTm&KmH!UDmjWka%h%tZ^yKIxY-3|^-WDR#l?(3$jk6p(E?P;krh@Wg>Vl9C>__m)=(nd!ysgW zGY)yN8cNk;qA4~s=KcwQe@WAuRmBy|T+S!(Lc?OvR0jdBx2`{Pb&et&Fmz_ZfMi)- zofG0kH1P2>$xsJlE2g(}o*6WtekFx16=BDU^SQ-mB;W|25#T90P)Vff_6?ZL>Ol7t zU&RLKkfhENAU}ch|3MxAh>c_&6pt}E1!Mf5h9|+-`Rp3{sfhsC1;XV}7~FL>0rH*m zc>Cc<6I-6fw?1O1GF(YEtKC5q4tYDh6wgO_J&gW8rUiJt zZidk(Suv9i`jjHVUwkpjHC@t>pHo=X(Y<6*Yk5muW+2&;QRuC%Ebks!w!C}M!q)K( zJC3|_=FEp5eDvjKXFff9_KR~DFJDE(QOVG2SFT;Zdg1KFTep7r`S#r(@7}(1^Rr{y z)~#E(W8>Jeb=zlFPL8kHvVG@3O~b&dzIJc8n@oQ1&gq$Tle>-{+yMonmM%= zKXq)y$mG=6ivC6I&8^G&moDpFvUGU;j+uk696og9=%J&>U!LB)c51vSH_Mfrn&x!Q zI_i>$L}8_=;ZL+s2joeO3r%owvN_Z8%ByRt@-kbO)RZ=K)uq`|GBVQAb0`F=uBol7 zZ)_;1P!dHQ6lkPOVj!xhn&K8r{1gx6CIfdJxXh|IlvMW}9MPi0P0=0HPS7#V-$$Ap z`iOcaVs=1XR{nRg?|^-l&=0aODrZz$2%!HK)-IiZXH5=?GMC7xM|9Z*YXazkCMKwH z;$ZcE%nWk*p@z(;keyv13(nslz%l5i?}9hS_6XX41z|v@q4vQrWKcgEn`~b8>HPmA z_6>GLWst^@$u?B#-$D6P?FGYP<^&wI{nc3ht0_*G=VA^5)yDJd+1*s~o4Av-6IucJ zn`~UV=Sc71nsShlJR>cnrIzv4yiXp6PEwsK9*=q<&C;kyBSy~Pj%W+&(Mm|npGN@F z{>0%;L>qu2MhYSrZp1EG@M36kR(5*8PaB<+uIgmEZk&mc(FgAG`Dtk zcN1tYDF{&Y8mO*lpy{Z&ZD`r@skJk&oc!R-2k*WA*_jVN`SQ!pK0Ei#m1}oq?^i## zbM4yoo8NqO_M2PZ{qR?WVIDlVee2xu9jiBWuUj*;aMi}0YgSEe-@ATeZ$)+g#>r(V zk%jd&i#KfBv}OJFLx*M#ymIu_J)1X8@0i}aas9-=*yP0M(D?Yo+D$Wu5AWZzedo-P zQ>Wf~_l@HxUORZ~ofF63IPv=Nnaxw3^&A2SV>l9+Aen4UV5UcObV?CD7w*`kG-r~B zln?rh?adV(E0*51X z{A=j*)ZhUb8E6dPi=5i3ztB%jxuOx3eQXLCu~m4=h~SIc6$~oMU?W&Z z?8PXiN2_f_$sxnxbqQW+P`6G{SL;6WxB#CbgebE!&H<}&}dz`^-);vXTRM(AF!aTT=Tuc?*P zsm2!h6%Z4P5nThej|eiVbc&135n@=LRtH+ndT4$N3xnH)CYK6Um_kG(%G96>+}h~B zQGLa1a1x;P;Ev?NhjYu>WGeM%fx~ywz<&uh~ z(dEm>CujD({LV-3zV+@$@1H*N`R8ZOe0lNPYq##s-mAKG_1g987teil<>q$}f1!8u zhaYa=z54FHwHx|}Hw|`-uG_w0l=7>IRU_?9qnjsMlkJRzTfc41=50G>_U_#C^5KI! zw@=S(p5DB2Vsz>9fua7PiOIDaH*THYvwLRm{$t1Adgtx8-#mHZ_^U6!`r3h+t(*71 zd~o-+iKSJLRvHNL~4R$`u7_+yyap#OE}SQ4m)+5z@>M z7zWZ|?CIQqiwg5<{5Sa3%l?Om2a`;R;>=uT&H??$d~(zB!NWQqMAs#9q~CAMwB~e~ zV=Xwp=(j3JHe`tCjoBg!z9Yt@-NJ(6oRCWTU9cca9=bHUXt0uN5|$wu`H z55<+1<+UZF^p&0Ib+|pYB&W;a&q59$jkyAWthVJfd4+}f#kr|o-)wrcKP$VWs=m3k zV`+c?^3D>MYQ7C64|ad)#Kxk9$Hu`jL@{US>*B78vIHd>*$F}XOSI=HhxI&+_}nGN zmOldgkaEL%=7=NqT;S&(0&7Fc;p$3?0(Xtw(MI8R>u}*2a|uLk8w~cN1&aRRO`3ln z%OHazflhIBpeM^KzD>s+h4TDV8eR&&D~MuB*UiLpkr5u6YZZl)t3HwEKM8pe;PPS` zxXVA{9>0@(A)iXQGZ}wUQoIWVGIgDlS%0MlLC*r%S{luv4BC3uitqWuW$YP_LB7HG zo4z`gvS`fc(};O2l{xHyx(o$Fu(bu)5hxJxTt;E2c#Q(_2sjJzV_A3=*KuS#i73@R zz}6E`iG=OIbE4@&Vkm62&R8` z@9y<0SH8V`<>Hs;Zrr~A^WXpWw?E&1@Rz^d`}UoE+s1pQcMcD&*|L68lA~J=Y#QFO zcU?tMcf-=vBP)08o8G*0`|e%aw``rB**FrjVr)fQM@MlgR@$57%qu8H1f!^`qi-fP@G#$F=SyYt3=W zvU0EZ^T>3$YYMAwtkT#8N*p4L|$~ z^i3p2IUxnjg?ZUs)02mp2g6DnnGnl-hzt=F!*`zYX$4m{Hwj{6goAZihQbKSLAx)+ z2fJ%k=b#T}u&jt;uoVMCz>G%yh>*B;K9<6WwyMM>LdD94(@46G`HJl7*+@5uVTIeJ z{{Y@G=TaaBub6O3wpcFIydoH1jvFJRqdm?mYu97E!}-Km8b8|}rVlMa^KR% z?$ODfhJ|Z3?>YA78?T>w=iT=|KJ(H0?|ksdm**~Dy>;)qYbXI+y>j7;^FsOG{`QZb zZ{PayzyEyavsZSm?w>iZVPJ6m_AMLsy}Wtf;a%Hz@88_f-M4gP<;1q>y*r7a?A*9+ z_2lGmcl-3h) zQK!c!$C9GHehz{mNa12>)i(WfKF78kQAI|Lq!CE13?POwryv%c0V9@_>WWCr%)b+}$vj+Mw3=-i&2@kU~l-V)+T_>7~9Hc)= zzm+~d%Q06EL5hseJ{v&+JqAE0746V051NI5TeY;2(x@X$5)~E|r0|M%VYiLUh@nul znarOTPLdQ2(vTOZICE1KM=vhri6K#Te|By`L2gbiY0<273i+HaC+cp{8YEScrMo=`}XZVw14B8(IrbdD*TRV8&SUy`o5EhilP8dIL}7&2*V9*wv@cG z>aG>Tql4pHNwBV1ws5eov9YeOq`Imk-Nwjvl^)t`-rP)gRHUP@uDYV4uBv%)M?*ET zy9M3tHFV4|-z&=(NKXyqC@ET8R$brF*3s3|(^le5&I(!fBxl{fBfy%_3!`s%e_l)zH<2B zkrR7Hhj$&=fB4jg#}3czI(hWvH7nMvS&K`#dHUdyBl{_n>0jJaYz=vFdVWZPHOYfM zOIjd619QL;4OXIJ6VN-2u{ju)Slis%J+yLccw}(tiba*>1;p?R@|c^*1dn8^-RaFL zuB$H#*wU-3s;X;BON;VK8mVzuxT2@FqA;f*KO>Og_qYQ^#RUb$^v6~=E$ST@SX!6q zpq`Vq%NRI;ydLE&UyQ)N5o^@ZszY71Ofo{;MNtvsKgo#caTIqkP?UR!h|}HkqGGq= zj0X2l7)2~j4GA%JSheFwDH85x76#-)gI*+2qzGc{Z-sd>{7>dbiQ~$)Qg|qWExASW zJw2WJUUpX^p+wB*zECwUJbx}o$n&5n zd=N1b2!IZQIqFT#xX{g3)o}$l@fd}6_PtpJP_GZmPxZ--honq0)j;~-OAB60x` zGfXk8o3%75isavUk{UW^6X(S#mPpelu@fof&MrV1iVP6w2H)iB1@%b!Ktr>_L+8Et z;!ALBR2VG^#l%I;n;+-SE-lH=FU-$O_xZgpr;9&C45MQSh9ljQHl6NGvRD;cx8~PC zNZWd<>$^LnS7#!+bKGe5(@z~yzZyY=E=G*Uo@c!v{-Z=I42OpfheEG`d3zrPU z&wq9P+T9<1{^f7~{QJ!tKmPUSyO-ZRa^%>F69+eM-h24O$x|P`zJJH=*I#{g?cnC= zZ98}F*fqU(&)(_r!4;iVndr4xraiQR7L^yI2XZN?tgf#q^d*Xn5f~*U3??DJ(;G<7WO>Fy};`HO4n z>&oeUPR{`983k1}WhIrZy`!Te%NhzY(;U_$LRD54jC*BnUU+1JiH-y@E;}WRN0Pyj z@({O^k=`bhfK)m3RtV=TMlDhC5mV;Kk^HMvE{r$Hpcf2}M9~yikk_w9$&2EGv*9`NuH{LqD^Pqyhg_sWBTyA6C{E-8x;80Y zMBYbDf4nc98?y{R=MJ-@Tt!s33%v)Jc;Aj!(ItoMEA zGoLZ%9CJ)dS$|VwV_kdKg1+v??*68#&JBB~5AB&ceC+gz=_3dC?LTJ=moNYH+fO&YdS})%>1&_lAMgZj5vfV=F|OzRBlv! zNQAlz_92bkKoA2@POb%+Wlfvi^{5N%W_ha zB9p5+TWhQG6T+hq=*^6eMLs$$C99;qxxKTkskS&VfS}p|fo87uUsx`zeYIf8eUOdN z#pcqQ1dGY37{;BhwKaDvnFjH&SsqX1%VgtxfhGl5xIkUW&SF5C{k`88W9R+~; z6ci4wx)LTv7}^QlHJ+;4oC=SKuh_h7$SKgaZ04Ek4g*mz!+3e@6XWD#8f|nup3D`u z{aDi%arXK$GP)S$U$Y^A@vsPBn6Bv{QUXRU+caH>S#H#y1r2y9XF=Nq>2ob}^=2^n z0;^XQlRt~3lhMMp2q6oP5gQtC#;4(|h;dF^5P*+*m%-dmG^fuL0x)>UnTXc-^DBFt zE!BuQ_Fmr3lE_tnF32Ni&zazeNRnEKGMV^ocv|ROuvDtA3t?yYTw?;z5A!%{_vvMq@0vV#`q22{|7L^P;5o0v<^bm86JlB_3_s8s)Z>CB(T|!3hfhap?9ZL9k{&w zE!8q-E02d$wvk@05R6P;i4mTG9bl>ExyJNm7Z|Fr`+pkdOkwg_%NuDJQs@TMlSv_~ zC=!b_hp=Y-G36ZPy|HC1jnce8H^SKb4ua!Y|5PDJc@;r>!UAzq5V_#&$otDN$PH*^ zVEB3$bAm+LR|!F5ZDwJ}oB@@@47;ARs^-P(d>KbU#?Okj$)2-^!Uo`l$}(n~>?nJh z9EeJ6B&?h~B-k~_&K;FOcgC1__&~{^QtIsEVn4^m&MPc2BNLKdOmuWyR8&lKM2N-z zNxcTkpdDrCp1=ntJ-%${H4p95}FVYX6aA z(^KQScTY|oIQrfvpIrFj(=WcdaOv{J^PhYSiRFi%e!czR(a+!g`tY}ZT>X4%blc9! z$%Ci%Za;M7z}{WkN5;k{_iQ8T+&*d0b7G_5H5FIi~kG9Pm^z%xq+j}~yGeUd)S+5oCb^3&r&P#boB z38xMic|!A-@$g(^Rj1Kq;9l+MW(GJ$b*;%pLqoBld%_GaQc{L{gh0eM6lIWn9PD+$ZtZA_ z|5(q;m~cQE)P=l-Vij!LTGzMc523!$M5<;Ynyz@5S-V1V>IP)QrAneE00qmuE+8ip z*B*wmN3V>bW=2q$*V)fzfG!h6v2Fux6b%`#K@5U^5?n3vgAqjS#B4|;dwVdt$abc! z3lmR5e0@VmztQJ!@9K@P_$;TugzVhh?Buw_L`$qCW_Bc%?qCS3LGH8uJ~tpVJTs`I zARYRmJJJpwRE&^U&Zw{HTDp3Wa!Jp?Ku5=-mAem4P3=8+WO~14_se+p1IOS0$nr`4 z7Z<;z@cG3j82N>3KmOyVpYJ{T?Z?}{|N7&N&-d=wH90nU^!T2g)5qQb%ZyJQm>eCO z+`M^ga_6>98@l7299%0g+S1m$prgH~r?auPuBD}+rZg+ki?Xn{ zzaJqgEc%SRirTu`lFS%ii(83{v#YmvAmT}WUJPS|fR!B)7#$Ry%Z&7ltdi!|j;;k= zT?^Yvb8?tJ#>N(xR#;k;l|kYqIVFv7w4%1Lxv{o5Eyj=G0=A~ACU3+)TPGoP-NsvU z`Aj5c;!YuU)va-bBtP(CN~x=~q5dI-rE~%*_Cj&cgs=E;F1p=c4liQmCe`v1*S;Wg!@yvsiu#7S*}O8Fp+Ff!6*ZOF(E*;W%nCwOGlWgOuD)~W%H(u@|Q+p2`JTS3)-=4{R2i`b=F2x5QU%Gtx(v>S0)I@X%0lM#hxbyq%pMJal z^N-(tv2PR>?dahX(+7?duDj}V**&MVbLk*m&2h-W20fx1-V72^Zx!G zK~bT>Q87{8Zr=XM1zE|6D^=H2R5y1uH@7yHX65ANmNz#PX8>3#itS)=Q;j)}pr zr^m{7%hrrZ3zpC#WXv2MqE-4+{cb#J;5X)Pm81|Jp;rP!xA`9{e%Gty=uKIay~-3t z^-_T~QvCpRB}aiWJgAfmCTUuo4VW=OlC6@>`PtMQJv1GiGoRpfBkeCo1VhMUZIK)cB#v?YpK= zyfuB|_^IgwZ|nxEFfDz}TC(FCTEm?EqmvUN6O%KUl2lajG;ecZW6#3HaBEkrS-E&& z-;&;?8@8-ky<$;$EIKPbaWR2Do=z^F;c9WC6DZQ3LXVG!{aj~e1bZ^AA~aCLS`s5- z6T(9hatrd((n_iu+giH1TdQm9E329pv{&Y*rbDVtO^Az&jZewU&M7RfuB~gRL;oT^ z93>W$O5?1W@JEa`E~0!NPKwiSnTLEY;6%<`*GZSyYVN#5szf*<>tHTTS!5lkKTJ=x zt^!K-TxOga`!(OSb@N}4-RUt2MaO?La*a-CmHSP*1=$xpQPSqhI2h}sm0}hsM7fhE za8?v(%B>rCf^GhxGARE11-d>lWTX77oj{qnXVp)BGRcLbB8$io8Ga={4bbMD)hD7Q zz+dE@%pX-?&e5VtK?uOu7(R+zJ}c-sgj)0lkF98i2V|rI&778JqASAHWYM)6gv=Z; za-AnT3S*cvmaQr2wr+dQXGuNIVUEpQzz9(i;LFzbuX#1*^y|-286p)(-H4kGo`C^@ z5m6zCR0ISChlfX!T%%qe=*<4#fqr4l8T^C!Y$h7>z>OSb;9sPp~mabd3Z1ec8-Fv6@?ccp?@4nsG`k@o2 zPn|yd`Q=-eFI~QR<;yR=`0DzN8)B~9y?y)F+rRyK>x-%Vr*>`L^UkSvP98t`*2#kh zcI^Sm@7T0?c=P&A?U7!QDU6CsNK4NtD$dQxAIizjuc!Hc)!I$lhSn?_7+AJ=)%MX% zTeoiLEs6E_@+JA%U^W8XEQoi5vl{1SU6nC1(~``!CX^JMPLQzB~?XvCSyZ{Pu4Ep87j&t#L_-ZsUAfB zk|CyWQ$3-7IItuPet~7Kfzc3b@#=InY14`rcO^=Y^vT@4T zo|5TW9?W9V4xp!)r$1KW{7*c)o@y8-R*e-RO4Ea9EdX(lW_fGLpwa<&k=2`}%zkHD zE4csZTn6--)nGMz)`tmBp3I|_goUD|WVL%-1m>)ug~BH%j$b4bX&}1EzjD4<3;#Jg z_V$#Ee0sw0;wWb!j7wRcd^+wzc*lm7&4&OT&Y@A%+sopa?colG%gGaqPfAS)W@t-r zLVQFV#lHx~=DLxZndcUkUXYWKo|cN7Vsc7Kazd2GKluCldCz-&<~+}^`0SzjB};nS zn{pU?<>c(aTrc0Gq{Q03qndh?oP8+Y!4F}r(e&*a`c;}e+vv6IJ6fAGci zZ@#?n<=2-lQ9!zWi-oS57@ zK`gps%i8uR|Ah1mnvshObLijCO->xjNlU8g9bCI*+vuM0;mzv?SFKz%JU+f>&%~y# zoKPQHL6agvLj95OC(w3hZkY?%z{$to-7_SFaRrdZvnxxpX-SPHt9aTH3A?(+f)TGIL8RYa6NyauWkR80u<|g_94q`#V_x zwJO4(o~vrM@ih`X6|hlzuW4|U^($gEDK%{WnWwi}zO{)$d$~kQWcmPD<<(3g#_-8i z_*C%-X1TrnpAN4{1RT$gn|FBZWcn;XJot5$gREal zERDVdiAB)>kS*69VTwkxUebz@iUp-mZpah!t9hdG_mCnLmYO6X-!81KK8R;e|?^3Om0cOrV(amThivi^@yR1CYlxEHv4s2@gp(&=2h!gE^M!e z_4jmPG#J$O@QA2}C2+yJ2A8c{zkVrZKR!9RXL4$4Vsh8m#J+=vr;km)_0feJ*Ds)# zdsz(?*KS_F3`h6QZ?}KJ?0@{~$Q$n*-?8)5n@5ixJACr=(S75)r>1sp+c7e>b097- zsgM@@;>xPB-0Xs)oTS8tyeQAyF8V-u?>F{Mj&2;@zHxZ!=&|V&hc`7O2Y7|0#RbNs zLlyLhX1rZM|GHl}D+3 zb18U87gB)6O1+jBGyArcw@4mFbaX(xlmvMe;~bTj&<>#%vDfAC1!oMVL12zaqY7Eo zUGawlTZWJ>3Zo8BoL&aluvi?ejiF)$NWoU<8{^}@X?W9;AT=&|3Vg6E7oiu~uJ)oi zvo$3ev&K<^LT0^UwRueE4{M%LCNIX9xQn!aTKl98-9hj0hoKtC;MHBCcQkLT9fX}n zzZxcky736>27-w9Uk)CX;zfN=b=}43AEViSfiA%$Vns zfC7FVt}QP=D>EZ4Ej1}FE|D5yknL+TY}|pqIYX^$Hm_OKT%8uoY+hHA^tN81vE{u3 zeG3*X8QijZpu2zb=s3~p?y3FbVw0U(_jJ`!W69yDs0_4FFLub3sX&{R;~&*yQv7iq`b7h zXpzaua~Jv;9=<`r^i#M&OJ&k#9A$C}F}bCg3Gqqk$#HQB2{93#&~sm(@0XZgT2h>w z^(4nOD>W6{PfbZA>mF%0<8>Q%@Nm{p)8Lwc-rDl)NFNU$67+zFfY_XdZsdgemTz3z z)7HOrc$EI+iQW5mjSO#_cw>6{(4mv>ee&hkUtPFz?fNy;F226@EvA3t$9wng-+OfT zm)~w2nf~a=_8q4`Jbvu>k+T}Nl9*6N=~U; zH@}37%Hh} zaE}&)F>kK87*2#}x|32PI|9sWeznp-05F*PpQuBVprLmTJq!q5a8_Y6BJX2yd>NBh zPUi(!dm<&81|o~BT(u<;ytw{Y;}aWAxDcreKaKM>7OPLsm)x=uc`>r;^8U2TVc#l4 zDLgb$fl;cnmWfyllIAkiRLfjDW3fUrdMnu+Kh5EaDEq3yOFd||2*LS32_YnyFn7)> znYfkP&a&r4KsxSG`GHqTo|P$1TKh)kNGHTZyy}(xyZRn=4lQ;o7zH|4^#}SgAi$XS z5un%K)amE4poK_i;2uPX7vLA*?-Lk?YE@V$S-AN4!mL@ zvhuQm{NlpQw9K@OtaK@+$00Ea@SpD+9T%UOTG2Du*V#~481LtfkbrV(ZV~ZWbzL33 zy@M;;n!A>7-ZZp*d}@+Lppk7OyAK^bvhU!@cR#yu;p?xy{_2Y5vh$Uz-!cy7+Vvmq z{C4-@qkF&pbnV#TGlwQ8j=g>Kgyl{5lgAGoII@4+p0UjMh%MO-;Xh=H#JWdr!S{YWl5n=PzD)Z%J0PzlS$KtvDwy8?6@& z#kRHQj3^UsPY%G<#XB~+pu8|M)Wa7sy4aM8>guMt{L;p@vI?^Lo$Vbpr4+KN>gp+| z7G@=FeslW7u}ww!Ik|NKa@G9aj%OsWx9-(P#Z< zXrJr)nR=A1R0W96tS*dMDGCLdgrtjVwSHZA+&jvm%0zORr7bEl`pcpo5WhWfeB~MP zcXW7urj6!p{ei=u337ij+vgd=!Jv(fk>XXh0Qo~1zM6}$Qfb2&up?5L>Z|`N2(1v| zMQT$V2va`vW-7}n38@iYG=<8`n`tr%UDe>PIMTX<2;l!^A_)`Z;`W7pO!GnaSzz?MaS1CL}N{Dk=soQ2zqskJ`uLNe;>Md~lCqW#Jzgc zQT&(wwgLC^=lu_=jAB-(RY+_LWJ8(qfzKjza+F)pN|7Aj?6_1;yk&lZMt#xz$ovc6 z!1&}?RPDo4u;_&N=x8cSu_>_AQ`6EjQxhZHc->r&gyO1NWb2ADEoo2FUm`D`mXu(L ze>IdktWQ`%T1rN0@#6J}P7L+rMFlc;+7&MGy!pNn*-fp@tqT_|SiE9r^QMj4ckg>+ zVsv!tmJy~M?ca0c@X7bip1<_frHfx%E~kCX$QN+UjUVsdyL=EJS)~|xSxI?SRb?d+Mn+m@NmjDMYqNc_>Ia8McI=!y zeCpJJy@%gF^FGvg*3X$uwXtMpd{V0Fn|j(yGosxfrLlGt%nt{ve0~j>|Z(S~(n8FgQ6mE((eUz(9ZE#VRryvXrEC3CVyyGJGus zlZaROocVR8xJ14}au~C*dmfXUSBl<<7LuvdWH$<QFn7gyI|Uj^yOsTr9Wsj2Cy3^I(53vqMyq@A7-NH%%RD|heQ zuz6u&Y>1@sEe-?oZTw=h>zZ4-`xh=^xYx$bo5uF+**`WiHaxUz>d4{AJx7n6eDl4J zzqojTuF~r_(2l-#lc@kd-@AAB-h;b8ee>m8N8fzs=z+s;ym{{I@g0*#j-EJvbaGRF zQCMn41w5Gg25Oy+^)(g68R@xIX+yTJ&2mj`SUEC2F|p_H(UV7}PrmoTM<0EB>Du)x zXGc0xyq)Y^Vk%k}F6k~$iwf}aahZ!7#I%_LL%gBWg96liJ2&QAcpzly8=ak#SzKA1 zSJH?^c28qbeqmWneOYm3d0u8pMo~#_Zcb7{a%yH_WmS1eMHL^yE)0$@K8EWgJT8mJ zEejQZTUk;6LmRzZ4}S^RE@470uxy(BmS2^!v|d);fCa)`udo3t$@elM3 zWb{_km+J+=*iibHYbK8auacdCgTX$Pdn7f(-9{$~f-jbnveU-PWF8@w^k z7j4W$35pF&WtVfI^8wVs@yjLS)-}D-tZ(`U$)(x-sd@zhfAf$7nZcQ`Zkym2lC~yJ zN8V;3>i?WM>qqct?Ax&32gM^2y0(rUZVax2;O@d$&hVI|gvgMv2sADN!kG9I5|xq= zn^93)TNv%{$l`O2Euw*;5(Y^o^HEZg$y6k!CdH@5c)I&VC8i=B@-l)*p&hm~*D{XA=T(Y=--OlZshPF&jLVX$CIlOH*mOFXy*wGWG-aYr(XBWP@ za^vQ=SFYZ;e)F3v-`#%j;NHE5_kOx@@#OJSZ=IMvdg7h;-#xx_iiFOAL*ql;K_R6L zjg4KMmiDKeueM?3Rk=Au^=b9CGiEv_)~}g7aA0cB!NbQ-oPOus4?a5g;RPg-&W$Z9 z2!tOMUfkB-*V9^&5*-=t<5|dsRH_;x5Lz zWeaj+xNo{>@bM%R^nkANUn~QYf)v+@T0AzcfsLBh_M$GX#qLkBV6bt-TyWzQoyWrc7V**P#`gP!E&fGGf6A*r^SUNO`=HU8I3>*7qP*F zDgKA5C^>a&SxLf1d~A@+W8>$a!+%@7y^s;*Qmt26IDZSvW(|O3sQCP;N|u5aY+T*f zJeyh^f00NC&QXO{1(jhoj6m~t$hhI}nb7@m%>Db566zWnTH9OdktFJ9Z*8TV zTU^$VR%$=f#x=2e-9ZFhb{{x$47Eo9(fj8pG%bhZHZEDRbZKjDW`0h7 zRYhS@USbFnY|x=}bn&z&DL6|!^m!6wvV=N@_=Y8AHg%y8Uss-6P+F9el9E%L6Bn16 zWl5itmK4io$CQh*@@g{eWm!>k{1{QMs9z#TDq;|K8K@#vSqFJEEE&;mK@}?5=HhX= z)o}ya8&}U7Pz}*+$n@VZg3U_iWqW?k?lDDE2^ER!2wPnc1uXN#_HSg<=}vNb8F$Ax z64$@Ufbp@acG^INVTcQ6DR*rgxFov7(6yn$M0lyd^YJXa=Ugk1K$5%G&O7k(UvlPp zvHUxxCL6*YCEFqlZuskZnb_$t*tB)ADwxrZRpO0lSmMXOHK9%^9jsrkmM^!KWkpq2 zcy3xpS-Up0T;Q^;ECG)0ztPdQ|2x%FlZ2#$T24b+qq_y7%&n%Y-f$*Jazh=4?ZWUe*Nl|t5>dlf9?A9%irI*f9KAF zNB915<@{mn8Z`akM<2g;;_%@^Z|oo6G_)wnE2q7!sS|JA)YQ_}MxR8zrTY1X^dSeE zS#HVItM?w1kjsH1c>JSpoq6xf`7b{E?7bbm1%WU4HXrK_{4vb-prs#0-L0j(g}2&Cs_r=+F9 zk149EZ)tC7sH@DKlNjOep_x!<;s{hzOCk)zA)5;=6pqUgQsFMR*4Q_+F@s}d(>#K+ zCPoul5m8K7MqkRTSb?_5sc>nPNWr+3MggTdIKmFIf^iKeWf4eJ7awkMe%Xv!c5zh- zQ9_F^8B7i~(fCiRc>}tw4D~0o{x*|w>O5pphf0GhB$S`Tp#P&Dz~|E)xLi~G#Hdt~ zH7pw*!R#fmCAA`cv!Wbj*R>va7epx)#p)N1R%gLLHt7P$+K~X}0VUFvU3vBzUWAs* zh%!v7BhjqEp=t*+!ekKHZKzPo-tFx@>cjZ))S+5|kl>znA3Itw=vZ=sEkf( z^;uqt@c&ARON#Px3)11ZX6Iz*6&F|K2B-8cYi(_7ZlAeu&Ct-us;;txV1M8AW=qr3 zBHOw447n<;t?pb(Bma)!tz+9pc8>0v*t~7;-u+XPM^2xhH}CXEpIy9+Yrjfz{U6tE z-n{nxod+z02fyCB{OPfir_Y=_`{BoDKYZut^pV2{Cw44bTI3m8($(48+uhRL)790{ z*14d&sj;b{IdjNi<}BCD))iaf*G%l)d+^lh(+5w!|K2-{CHVNAo!x0Z%vg8NhH~83 z*W26CQlFQWUtU_kq{*Vf%I4ZfNdkYilikEtQ4f%%17(3VwWQ_cv%D>NJ)k!!YpW zTz~5hjQLAmLN?FkQs&Ga`6CJRibONd(X^-Oa+*u3IMkRrS6hPN$OC8@NI#HEJdcOfPNw#kQrmg919=)F^-yYtAMvPXD)7}As@)9K`T$@AP#4>XkMcA#IM>X zz(AT#Oh#USUXkx?PJ{3d-xb9~#=;Y|w&=cyOQFM>CM6xAVincY?Ch3Z`-|=EWrriT z`;Ga(K%&(`SWmMqya9_tjnYs=wt>~lwyvrI{-~dT#bD2rI>-YKXuA--f+6ia(Q{-n zBa=}gBVx0P8k%cKvZd!&w~{fZb2G`;*2cyuDkrD7tgy(E_xB>SFS0VTb1j9h6{iK} z^$*llRJJZ2TE1pz>*%(gtf-)%z{Hl;*2XNdYs|7GnCx0OxNh5yt;5@gN5{rSM>p-< zy=U*9spF?loj7^o z{qCDbrjHysyldy$x?tD%3UZkXdb<`c>FMn5MlQX%v7x1_G~8{LtxrMcz{b(tQwL8S zIRY!~;IVh!eDmywADlhBbwN6+W%K+?x_cHc9T@0ouB)xJG~}1UdM~T4Z0hLjs4mP- z4EKj!Ktd9+3(ghRyjNmAL|Fxd-Cf=9vW;tv?F&kz}TJmboq znZGp=k6oM5(_CZ|p}wkZK%Gkn3P1>EA#htUgIOzlep$bwJjbWAW@sJC(q+C+XvE|f z0eLK22CpxLpkQ^udDfnuppvMpQ5MYVz_-7SJe}S~U-Zx7@Bfeqa|p`FaKG|SS~&Vr zE(bjVyego183~m69a{=akGazF%Afl^u@+8EDOGMBu7KmZ zMh;d3q+XdH_}1-f`S^q(t$7tkACLTp5B&TInx3{!5R}>YNH7)7|JlB;*h+!N6EwQwyD3A0uX%I9f zatrcvvJwJw+giv)S2PTDboTZwURc50TS~RDCC&BWtTZ>j*s`+b_V$Hqwr}6Gb=&q` zqoX@Uh9<_xCngV`JaOVE$;GoDeaZl&n^^wU8z^Xe|2>fY{=)~q{^R>AXAms?yCsm<3E@%tKzzI6VyH*`4xrYLig2o+rm?VF74Id$qtRke21} zWd1CrDy&j>*Z?1mbd3EBF1s~N#|xyh~_C|R?Sc|tO_0A3JuoJOAavz6j0{7~W7%)eoSgJ9$WZ z$k<3ZI=LAMQX&GKrMlafqE&c!NflK&8s1JjhT)VEG(;@FZ29h`Ti4!d@}rsH>AZTV z?3^S86ppskP)Tjoo&RbvLLF{MH~K`RCZ}NdHBBA8ZS_rvNOv{XSH!u{^XL+lRajD( zo5hsIOgL491Nph>P;m-sYwJiEwmxlp+WcZ28q}81r@^^_zDcP7t~rk0aiz7*O$>b* z9$Gg{kUO?x+xBgvJI2O#9XT}(wmJ6h#~*)w_43slSH8XV&8=HM{POe96rUbGy8r91 zKi{x?5_tZzvmc*3b^P?3(}zzS8Cl<->h7Cd-Pzf*XwgD?Ko%_OY47alRQkN3ILz5C zwxXwRVDpiqC*L`^d;h_c>@r8+e*3-mj*qQqh;?JwLSXsgWvf<0>}+rPy0*Qyv$-lK zr>MNWZ((m+WnM~DSZr!x3Hc`vH;Z!w3UkCs?(P(lQ{oe|imIxsYRfAc+czw(swv5V zYr$CRcr^;rA6r{fS)A>g80KS?jAh(ri`6wYE=s`w_sYCg(lKcrNtSB2P$rXFtn$ou zOl)U$C<;*b57`UZIngZ_^xxP}L zqvilbP^4{f2GC``M}7+Jc@B<4q;d3etsq`+MSyxeRp$fI=Nk;MVj`h zR5{aEj~&mnndcmmn#f)ayPgqnUXjtMMTNzcWtHuVdb_$>T00sl3R3)>?C09~!bly-hNhvmp01{f%sAvK!ox#@e3@}*?`k*SIku{?s&>K3 z^+TIBjv$jhHo``*Wh)41`qZH#M~@sod;a{zYnLxyzxpko^2eW1oB8GL@4r8Kc;~mD zzPo>mxNU0sX2JDXY>d&3<( zlByRC46NC^@4(TiUAqsSm_CkL@bNcKAJ{Tb8bptfOL)a%48FI$tG%^*@v_OWnzG9J zrbTO34D>Hr(2g=BIjVdr3xQxB=JUF_qk`uj7=oB(NK^upip-3HQcIy-ZhCw|YG!JD zVoE$I%#w1%l&BBny_6c}hFYKz*^su0c(|tQsOyMDFd@ubdLaayKVU~`9W!PF*YyOt zycU2MWzP`>{7Ii17Yx4!2C)0TM0OU^8P5T8piZhhgI$UJrkhVlALCT;ZUrdD(JQsX4eX00z*-P~ zH$zTw+n^fuGKrRQfV`HwtW6^1EVU*$UKzf|D``DRbyevr{s6THTNVD*{OiKOE0Q(U zHys}UUh5zE7!FU9&-93)%b>*#JmXZUz$$AeW2=TrTaWTXS8m<1d^dkA1N6`0cX9Ld zLxKSHF!0EeS+Vn+m^RMnJW5k!DtrPd-PbkMH@0>yBAeZcN=s=vgCyq6bU<23&=xB% zDJ-#+&m;=Y%gZmRL|DDPrskE}CPud;qTXT&Um4_!Xuqwqx653o=+ct1#{LZ(wrtq6 zeSCBTW8XToZqtsj@nfgnIDGur$#b86{`HlwuUx-+${c(=sn73){_4-5?U_pjYGdG6ejg-g0R z`R}!tCV4xWo)P zW$2bkVL%{NsH)2HlH8XQ0-U9&sVh$dE6zv$@89zf&cX>jvvm08Tx4}4Q;9S_pUZAa zh}2uGECbQy@$8RHuQL8gJQ=Luu?F4A%H^{tI=zlV(`t}eP?k~Kgy@r8bs>K2UK1>g zrN02SFI>gWX~ShmnS6W5J4Qk@r;)fGJxg#88RU-Q+8=-TyFT7)~JXt;Ha- z*B4eVvsXux@y^05W=~`0fN{R`J4qDy+1r}n*+jZ}7tWQ=j?f;t1vjKkco(zcRhD3L zV|;?dzKH~=C|g`!LBN&WKyTO>+J6*O#x|Aa8%`*7v{sMDO2&`w#xl@An?wz4Ps* zi(h7uOu@bumtJ4RN-dk1+(*Y>R%Trt?$)wi%`VPF4~!55b=9#~yf5?s`^pnLK9 zEj#z_-@9k;{(}eiO&&UZ_}Iz)TNaguyEA#)Kfi1B(8kp(`ump*44uFF+nuou%SrN7 z5Yf=<2QQ+rrZhV>ZJqNEetT)vchap`pH|wK9)DrDce1g(ZfhP^+lJ^h;vT!!s}`I~K>Z@OVXioq(f z=RXao`MWV~O#iV16E)=9HKYs@ja;IlTIR?=qj^zmVNHAi#@krAj$--3qQtpd?my9FlhM62j_R~<@|E-+TE@4maRJd87f{GF?Vt%DnUSOvBG;R1pp z()m2u(Z$a{D1lLL!I*efMp0D*S}hCu7WegZwHHNsGQwb%M?_3Kyh(tnTv-KscV#7Q zZxx7^msbu|6r|Jc6hpl}!WRR#bMOie4{&e|OwOwBA6zuJa^;qtW5XkRb|R9rVdJ)m z!>5iNI`Zb*Z=L!4@|PE{UcX6w>f7(X|K*q8?%jTH=idMM{rm-H4`ttpCjnyQ|E<29m{u06-^?Ry8^Y(PZR6o-4plCe z+iF?G&>R=BT?Lhy#?YGwg=GJN?bw{E@H z8?HUkp0qw<$FA;P)MXv#>QvAO&V5Xvp}c7C>Kp2>x;$O3WgzsHt|iL``ui4k)ntdc z(?mPpKRPiro$`BrQ7Lv`Q&U|5Z?>@<-Rjb^Ax)r5h>D7hjtK=OIoP}Sg+~V3dxpp6 zwGS*=uyoD(v0dA??AW&xN#2bcNB12&dg$n}ciwyZ{m-v__Bl=-g3Y(zfBWOFcYrqc z@BQoH!~eQ}|Cg^WqT})9hhX{Rhjxx^UYj0Wmgei9+ta^hO+U1TrHj!^ShjrCiovBT z#)kT0O4g2S+V#eXx8FUvf6v&CeQ)d@+p(Lv@cPAtfjEu%o*8Y6S8Z9lboKgm>(*|+ z_S=sijcwSpY1QKHw&t4R+|s(1cIv*J3l?-X!nB}z>*?*`LNf_dc6@>oGt%>l^3xcd z)7a8fU6fl~l+XX{G@v|gzpN}bKE%ckK_4uV6Ai4Cb7Q;bs!LJM?7&*lSS)~{c&R z2}%aYaCH>F{(;3jN0~};7n<&DvL0;pY}-Nr3e~uLe3zB;MUx+GAnXA6^rwz5D`Stj zOKp)wfUF08(BkrvN!mCf=8J_H*dDv3m@q|{b%MMPWag`;wn6y<1Duh zFp{CO&FL3si40)qUQQJ62s0 zA>MTMJdeb*PzQ@`D?mtvJVy^#&tP979m*QKL=_QOPlO3`ZQVQ_=R2rg6&4hoQ&vqK zzEl0GZ4HgJDc&x~AlUlFB_|~(FatLyGp_=aQ&WY!3yuC+8Tsj{@o~{nF)?BOZpwW+ zc!flVcsn>nX5@6OShZnnY}=0Q+lR*{hBs{n%8yP#dVl})duKm*|C4KUgTNU6=H{)R z{_)G*`<6#B4=K~$`~CO(Ki{};;o@hXo}sa0|HO_>%d6vBme$4vhSU$PUb}i(|FXe> zWvf;$UDCIpZ&6p*PEtZYgbP?L)CvQurM{9#NRU&}^n!cjy2H5WrcE2_aH zxwV;dT~xkRw<{M6_YQ$U>;wj}aT$%ZV-(uF3Ahw#@vg>i+iQlqvh(VMVk!X%9Hd-O znX{XTYX{n5^r}w*@0CR-gJQMA*|Q#NoEV70T8sL>v;IWbkxG}ZJ2rhy9q!{a>B8aovpPsXS*?#_VPzj!XreHtk zk_H^!jz7@@KbT;O*ajw)lbyZ0x353yd5*5Ga1|(D3H58&WEd8-dV*R%rfme{(krX# zdj?l5U)Ww%T$JFALx*YXos^RyW_Ws1YFLUM45SXWDq*JR9 zzx@$2fAG&o4Vq?X}s_eqMe7z7mQL4vk1+ z>UTj&etv0LK~7HoKXcRK60#UzkY7xlE~lU%D=GYMejaX)Tqflbu~q|KNW5Ui7_NRd zCTzv4TovWyC|oi`+IrQoYGxF8=t)-J&n=}SRBp7|xh{<=QiAbH&I6jTW;S*dff;=$ zA?(L?FSBcNZ7E8@6gfgGcL-4C*XAU9G}GG_!#tx;!^UcLm?hhRFIaEnh-M-6Bic~f$R+<_Q;nyFg4oW z6ZQ}jU5Xd12g2+an?$~5d}#fKjcYN|!-w8F_x?v8oIQ8`EBI(PuU`A+n{R(%rolsu z{=Z1p+`0SU?vLMHL+;@Gho?>--!-;+pe{ON`R0{vaRK?=3zo4emoA3lvypr{{K@{_ zq3$Is*KZoyv1s_~X8*&IE+qMpEp($|J4u;dv zf;hCinPptgAlIszrs|T)h7Jz7x3wfSE)3-lF9?(#K|uk*(Uf766EjLmsXt{R=aE%d zRn4YQT3VEsmPzdE^>^wd##;eDOfW00NNSh{)fly4WSFds1MyEJjVKQ<*>_QmUy;$v z+}WO~LRlvQQ-P#Y%WUZYbX8?cG$zWSd_2NrP9o-5hXXUtgUe4OAxHn%`8g-`C27mo zQlp9QG5xI~m&vnZ^Cq*Seh>M1csk16^Q+0-oBX|o@R`~ZxjI=o%fkqJh?fAdm=90* zp}~;G-OnRQsrsz+hjm<9Xox!fZ}}BYjg$)%<(uPHGE+W*XkJ?b7~W3m&3-NlWQ4s* z00_VPJHz}c~x^4 z7C*dw=Y(a~)6r!+CnmOUT-scc8qC%<&#$n1{Z2BaJGO6JyLro|Eu#z<*}G?Wpr@m$ zzN)6SxS+hYuCgpQBeSfrtEabr#gfLNtklTR0RJFwq-Ifo2un;)O`uz#C^tQe?XIw} zw6d(YAcxhTot_*Y=I!!4f(c0a%R|{3b}^S7xc=9(c{3Qjp%ZIAP`LUWf};9Kx`%B+ zzKttuZSaPhJpcFI-uW&*=$++tSXy*V$q2EL= zzYCNz*`vLykEb(Z5s{7HFDS1=({Tz*R# zFJJuf{F_G(kE~zXm>(9}w6LxwB_J$0zh=?e^`z&?)vVsMal_i>%U28yE?d26^Cra1 zM#sl@ZX3p@@7S=cqbeublah^VV$1TOT{}m1O^$Acmo@>~*}8Gv){To>%JbowmgE(p z1)P-`n_Al5w{qk1r2|Xa>Pph1nQ9W^=ivn~3=9sBiBCvLO)oAjEGx;&%E~LLC}-3S z#GJgGv_xj8zD94QPQLPHA{2nvF?VJe2*=F-Q%;}DPGuD~+LO5+ri=n`mwz|LE_>Hj zp#R)385(szJtwQjog-X;d8@DcnbBh(FBq6V!TdoGMA?lH77Xuu#4wGGT@lR z4b>-O!9_TD``FEM5AgOuPc=5by0)pUt)VhWa??!RoA2xke;^2DY-s6m@ex5GG2x7| zLE%xf2bndyjf=BA#Q_XFG`o|b?uha2BTqQIbz~D|sEs2#_tCQS*{7eAbG&rv@~x}a zZvF6&d%xd*aPQaOe!ctqzaHKF^&y#=A8ua1bn)}I4xgOZv=j-+z~*K3Wf}f{vH69K zt2PcUUAkiRN~&7x)~#8y;)NBf)>}5N-#mi&)2=Z>;w?k#`aA22H9=|qe7}N4Y$GE( zCU+xxGr4oejxCF-DjIrw8fz*`^5T>73Nur}!a}1`YZnf#S-)l(qgmNNQez^6z1`hC zy^)&*(+ANs77>+{l3GxlotjZt+uTr93csQtHzzeN!r#qC8rc}E)KYX+fwW4z;JltA zu{P7(r);%w@H0!dAo5~xF*abfZL2FYX$w4$He&`SDpEy#%udM}%>94x=r1A)#1E-Q z%RuDXiCLAcb9xN}SJp+j7|mJNPbt>OWUUHi`pL8lL3tHl`A!ds+C?N`!_B{=P{Te? z(YY=-(`QgpD0xaEk7&lLy80^ zKqI|QgWgZ^4KL(SQD5UE5U(P%s+)h!H{gg+Ugc*UJBRlYtQbuGsZ%gwD+uzz&@pf0$+N5R3kMZnTv*2=b4{gwg^>*Et(33)jzG|(p?lAI~IYCZr7B2G4|m8-9`kCS_7 zLG$8`1e1IAzp;n>`xeXk>b0A;jO~BxosZ9dOrr7gix;nabM4A^KmB^|;e&_wf4zPC z?xWuyQI7i8!v{anH}%OU?;kz2YkhBafOl}?nvRnEF!z9jjMAkmNuw-ZwR~Xd%C&3P zZC+Wsd@Y$D{Q20f(e2yU5A-cwwxqqjJTt<}nKsDChGpv+@jgDWZR_~1;jKeM8<$aI zTh>>TnUIu~o|Typ8tUpDnvh>y-2}~MIa|Y;K5{m(0TypRFLdq^CJtn#aClN~c2a6- zbwwF89I8=F6VAvCKSzK3{HU$!EET=o4%nOm3 zU=6xr%DbDLTi%V^W(nv%R*)Q=%2LYAJhgk-5Xq36q#y8^>66G1^9Enf5D+}O=>%|= znaW8Tr)=}WOqsq~@!%Ky%?Nfd7!QNT_9a}#P$wG&wzzVT$sfe4GJO0xIG2xZ)`nOJ znwX<0PNtpDU^T%Jx$;+eo-CcC(i~zkQ&u#jSe452AB5>v+h@n%^?&1($dNy$7{?L+ zK`9PGD6xy`$oK%oqDt7j&XMWFDqulP*%1mQiqP0Pai&QUh^wH=LysH|PvoR=CR{z~ zionmidoi01n8C@VcTY8Duo&4%dy<`;d!92s@x>>nN$5|&om+1b5#(Sn|uv>;Cx z_8j}UHi!y8%9Ug@v-(KKk@A& z+qbUSym{lAjoX+z_Lk+N!t)m{esS?4liqK9_v4*=4<0;(OmP3(itX$I7$_%lx%$PtADqj?uI+m{9x^sN*?y;>~HUZYxtr+Bh`j#%J%8rYTO^glp z2?+_0Pl}1nDlV^v1+iw+hW?J)l8l(}Cjb+j4X=eC{;(Ue}dJ)DZZW z2FN4N!3a^4TQGaO;niq|HwJAa=&Yrs*&roqt2lP!;dz1uR+R!(i}Mo(@tL7|7$VXG zDlK8_CMRP;(Wf&l(q$4#mmC3K5{YChz~HGn;rs;E4XQUPs}zxxwZ=+`b1`JSld>!@ zA?4P%Uq?hCitR$->B}VVb(|UrB1~c)XI}yA7`6?Bd$tu`q}S?kb=5yaY&KOQ~OnrL|wr*f;k{=o=mn^@e(H)H{nWaAdmxFg&O7J zMb^QM&Ned#Sf`Mo2XIC)e#y3&X;Sm;o&Cc6?483>Qqu|=dm)r{cGOiCq(=HWa|pBN z*vynhvBmu*7LuK#+Yq8Jd^qM=nqvUJ&9q@o)NFf4@A&#PBU9u15AB)UvvYLqiVd6B zt|2>e@Wkn}XFvGhlh2vZ_sxyV-~8j}+jsBXyZ`Xso!=k){^-#Iica_M-TUdg>z|xH zd3fKdB_*N3exW5>R+eO^`MG-e#MUh$CAoa{vVoO@D^@QZT>f-$^QzVBH>_K;YW2!R zJsmA|wG{1*4mQ^|^{!gEu&og?P=0=SMLZIOp^Qh3jbvOI zf@5VB^$S;T8s5CLwS+Mz5fNd*{%9$CA-e799ST>tvX1uK*4CPe+NQ?Jg1r3v?4+1* z6pLrzS>p*MM3i|>{$0s%~V(^0A_;KYz zctnZ>>IbJ^3bV(+EdUvAaEsqG8w6>1;d@?Yay6iFB@>mukp!QruwV@D>(sK)nYI_&7Hnz64w>4K4#s(6y&Y3;)b&Jib zKo{kYa9x}D%yU^}4)&ZjQlh-wtk?1Tc8-3T3x*LEhVU}JYjX48;EIiFR&E;EwSW55 z*|Q&>{qVCduYG;x+SfOK`R&e~+lbZNx%&{?|L4QIa18D~_~rYnA00okcXV-0QeaSE zSYqd3ZFUB9T$iwdn)>$s6)XA&2l|$+uq?@4yksdXgQZl2m-Mu?G%<%PA%HO^WKx}D ztCwt~d2w|2zR9(%c|{G~gFO{_5Wz^b=2vBeg$4!3MhEzZgak#UT5{$Wm)71D49+i=D3 z_~dDOd8Xqr#55t`>rf!m+S{J5T`|Q9Ti+uAR>n1r%EP*e7 z5pT>gN7jI2Q7THd&8}c_Gw>meyfOw(&!krU{J*i_9i1g9t7Wc+fLDoLI1}1qp3Lnb zH9+8NOM2G9!QG1%e0Vpk0kLl+Sb+~me3d_-wI%KWT1o(KiAy*K_}DuIM$^?_*WBE` z2%W_?h>)pi;m(RhXEI4s%a#3T_RN=U$naC0eKIQz5}cG3_~Uc!Y+ZuOSM3-d-#g7H z$?=g5YgeyYzix2D_@1dl$IpHA;h7IFUcCt|_}VvcW{fP&?R%E{QNRC-r2D__-+u7x z_g6kVeqem8KR*iN^9#ya&|8oi>uc}e80ziY+1We$r&cc9IJR?W?b@M{^*v>@ujW_eMTUe%#U;iEM`tDlMJ7ds z1V9aqiw%#6qpLNuu&!(8qR#f#>Y}`oLI#Hf`FoO#@$n0cVM<6omLXKg`lX+sNY z9(g&Li4nmtk)C%%Jxn|%PP+wNAzYA2r$4XZ=FC6Bv}Z#xF}X&*Ywj>t6ehe>JFLMd z*YY)8bK^0TYm`z43|S?bjYhC3GC3Goc+mqSHG&7l6Kjdd^bPj55ReK!W9Aksg+^2|^AIlku}V_L$1B+`WUrW%0um~FyhZ*IN z^FJv$%rFR^cZT=Nu-WJAo)C^db$Sip%y|+dwEc_Ztl*+$ZV%)D4wO_1!K{zJua9PY zkP`GHFXI41n7-oIUl*jCIZMdf2~lBJo0(3ob7w1xMsL^2Gdww`xU#mjql2cPilU0f z!no+@P){zCz^6Gu#53BSp3Glk=R~W73vW#HJHL*)+lBvV{cTbKFZyR2_dgY3> zJNE3|J9YHT2j|}Z;Hw)qu3i4}+PAlU`sME3`w#Cw_}8O{4<7y3qx%p4>*4J?KYjc4 zN5}RLZCqKI5D^~Y=^jwpnj0G%>}==kiJE}YLjY3k@+w0L1}M?*c5 zmbtl^vE;p(GV2mPz9PiksTRcl*qK~{csb!kz4R$2aqSb$Cp^e?A;a={wXQ3rDN}SJY}Ilu@+McqPc_LWek-hAk9HcAbo5){63Y&qh18+JX zUbDTozthaQF79(?&cTuq;+o?U7{qvtToE7}8!OwE^fXizq{T)BpoL&Jml2FG7KVgf zh!BY5f&)F6HLP98c9v66aOv``Ba>765AC1WwPV}x##Jkqt=u}fdvap($UEmgJbU)y z)hjozU%2|icRvBt@7=%u&;RGYet+;!z8?PTpLc)z;o6rU9-CUxH&7Xe%MEaL3{Q>; z2@iJT;<|VQgvHkOG&C+)*iv0qoLp4H{9r`Ls*${7^nsr%pqZ?ZZ+d0V>R~>>zOk(v z`ddm8{rn>|ijpdTyRWyGzmF%nCKlg}NCd*;B7%Y<5_0Og`^V{ zO9K?V0s=!Lx;5kYj0tW43!a@}tFm-P+c+}e<^_`YA`-xPm2nHgQ_?W0 z2~6A>)clu$PAxx!Y6LtDpOZfYmMTv4)-UF#iqx^eov zR%`cJ^3t$7*{|Wds}qF66Avg=Dfcbgv^sYsS%B^6smfwW$?)?}O+2u2Bm{trz4L6& z6yNwEv|?fClNLSe*ks@F9XdH$C(=ts4xd!JBx_jwI(&Hqo)33Iak|oqk6E065=H4^ z3@}I??v|^?d7ib|QHgz9SoKc4L>Ivm{WSt<^`j<&PrYP5lObasAO zLq~7l(t!odRVB#9GqNr&(90K#@b?+=^ksC2kGF47WPGrfkEa(%$N}i&pWL)|>*&Ou zH;x<_A0OMgdG*GXgIk7yH7Mb|_2Kys&tAOp^|!Y!-}vdLUw-)E*SmL=X#f4;fBn~^ zN5B96|55ecVOd^T+jn|0iBY2hO7FcRO}Ze81w=(DqGF+{C}KkaJ1EkWV(+GEdXG+G zicYFgV?pdO$;>>@_rCvp&&(w1&G$R^ZJy)!jwk|m$$edW?X}Of*167wYyalN2gmj_ zE|@nnh4E#G7CU=;dbqi}lV7E0V3?=xaPo$kg*o(FElwMkl{GO7g;%DI1-mLKg$r@^ zjh#Ge{>pmviPtZ!EX+!U+YpU`x;Qwvx^vA#o$Ov1?BMR?;1wF=G|bb>#ltT+A+vCP z)%=-L^QKRseF-{5c#xN)y^~bQVp2wrpOBqbR5W9H?zCx^oM)#^&4fEKGB(I<80>UN zGscjaePC8y=OW83j=L$F%L1$|{`f-)IFTCE9$=M~j1gf#HZEi;)~n8OzF^V+#=}2q z3sZn%l3)&~2H7UKGVsI5z4STuIXvR{$P53*yq_VkL~;z1R)Mtdc_zOr@Wih}fVro z@z|KA1}rmpL(&C8bAzppT8Ef1T$aWoa`dV4PS_FVY!uOGj$fA!p=?8vB8dPM!n84*Q0 zlA9Rx!t(=#V91w{|H#Vf8}(dja&kgEQzN7OTsYbmvTiPkS<{LaRM)TDw5D=S0rDe> z(Lfh3U6d32DHe^X|3a5RNaYWlcoLeCfQ0Mc-gR?}x*pq#t52z}eKd+l{DQh7wq z2Vpw#w*F&9EsDeWz1kWXATHS+jGbePtL0UCtxz3q+JOuU7iY1r7h8e~gmR0*BAR5T z?Et?^=YiY`#^>VZLFVZeXVY(>y-#Gy*og&m=1j|^sfihl=yy!XnKpi8dS?B^%#1PdX=zF0vPUJS#(DdB zax4raxD6b?Xid|`#*Q7E*RESvUsqqVcxg@DhD}Y)Z9DcJIeOs54-k?(bLOiv-+p)I z^qFrV2VA<+bNR~Ei#^w_UhU~Q|K-WI4pbNBrN@n7a9#`t2q%XZjl7z&u7ncwWcQG0 zwD6uDl@J>l7U1n}aj7QXNyclSXUdeKk_AhumTp*IT{>gJxSX6!MpULodpp_M4|R(O z^Kf+ac5#6y<^q{vu${ZNcVJ9>(&)??OIEI|t6RRLYSG-n$rC44ObYYy@(c9wpiw(K zj@HGIskG_l7M7Hh&dtN%Nl5xrPXeslqvC0?eO8Oa8nL{_!IN9WufvQr=eT^CTpNR3 z2LBtN3cw){(~@HP%rK*_WHEEiOhXg0k*wwKG-%Ma$FcnY><(7PJ!#qTbI*w1t4f{& zV8VEDIqhd;lQ>>EX1Q=IRtZK(zD5etIC)B@AR9eHbOG_hpfPeL@M~cab#8DpaU*3q zn6AE;n2y;9+RuH1p0#>#5R8(7CS^!+l_(8#VD_&VZ3;%Lb!44q!tP9(Q`J77)r7g8^1SQ!H91DZU7V^E&{4i&CoR)_> zW5%#xcNgL-hEDe5z>qIuQY zjrFT*YL_itMeD}amZrAddk-+HweZ~E!gql9KGrTX{m+#pu+qRvT1|e z0>+dqDxW>Oc;Tv5RdWlbWsFRWij5BRL0-ny!8v?*bXmOJEesaN2jI4N5CL( zM6y)eBMbFrIc6Q-#$2(Cho?UJ7bZlNsF((P$XxiVl8G|J0xZfXqW3OSXUWaZpgd!Z zN_CjCb2N*TK}}RnAoe0UY1Ac6I?nD%Q!EF*Ac5@w$q~CA&<_L0DuqR`^xv&@B2z08 zZh`|V*KE*?vL2 z^s!QZxH{E-fG*%Q9b)D?qpoHq`B<-zUCmSav$WVQj@lSHw}b?LcXz*aC!0@o(uo0uOvvX#k?J_$*52?q(`obB7 zMR|GiN@h(hm^3mhGQ`7y@l8XWd_qQ5Y**H zeen2)pPxRByv7%2zW)B3Z+^UZrT6N!D-?_fL@!;uc;Wo%kB-*No;t!iASyg2Jc7xn z<4Pwb4F~q)0VKE}o0l!rQ!wN}Q<%fjNSG$FsZa@kUPR~MESPfLpo_JQE0m;~`P z+n6!YK_PzZbr)x{smR_tySV%K`Fe%KrcY)5!n(C}>((r(oRyuPmO3(yJdB@Y@aGFELZ z4gGJ`2!Ku^(wyBUhi=P+NmCb;FE^94t>QAKbo9F@Uqjha3O}W<#|;3e$Oafx#||Jh z1W>?3L#k*5nbTpdjbYspf)99BMcV?(+UTTFaMv1Nq8fpMR$Z-fjTkVST??losC6U( z&L0m>?H4O&D_C2PIN+GG1Q4_CaYJ~Z*r{o(3puIdD$7G;zQisz1&>rb#Zp}MMF6$d0cjWUe1)s(-`A1DlsOM0VpmG zUnx|VIx+W~f`x@QCQRv8Zp9ArDf%pm^rg zaY@4iylscL(+psTwxhT65I-+MR&tEPTz&ilynKCwBZ7Us{G$>RClr=0UtPZe=2+dz zmCKhdE-4%bD?I@AkQ*{HE*{=N@rnCk0d=yJ4 z!jkIyGJKu%T3{_a=ob6_zZ~Xr_t2b-H&dxl?MkwEqnj(Thk&^9j3^Fhk>PVe=C#uS ztQ5M@NWtjYYx3$(DDP~q>^YKn#(c3$VRTdDlyy^9vGjM4$yz@W<|_;%Ja4RjFhQaM zP*JyJ-+b&pI2OncJqCa9VR#CXF;q5stOa1K7esU_&@PW{_JB-X2Nge<_(T(zhD`kZ zh>|zDez2a5SjKFefjm7|#hguH5`Je21nhUpkMbbwY@Oq>anXRN9u0e*NQJ0Un_e-? zgP|2<+H|Jy1ATW+&dvmMuJ(?;!69KmZiJos8GbLXB0odQghoBsV6Lc^+d8|uI`BD3 z6GDuE!(s+edwIJKu>-g>rYtckBqS;(X)LNj(+&RluFI!YLFKa|x@`ylh zUvJ3DoI~|PnIP=q5tNuUbux&gs;Y9q?3vT)wHp`iMf%feD8wHpm+(j=ksRGZ-EAFQ zpt5@fM}>QN1cZ|>4GIh&F-nwyOcfeW1geZvs3qk2OIOIft1@xtb`w(3JNpamCBsK-P1O&Li` zPnXgIb?cbigmhK#PdK_h_^c8}Bp0ooQ<^eWJu++$?4M41{vwi&Yhp)m%o~F@(+<>y zN>YS)Q`!O`848n+yznn295rUljH4vS&%p18n%UU9ammJ6vnNz#5}QjyJIv(kd+Kb` z7!OfiWbzuNhLt{)%MmM4S4G`iJDh5{mFZEKBYi%+4(;CV1s!9ZaU2fYis^ zd8m_zR}hhwtHUsNM#TI2y1{qkwhqBN46>oB1iiMjr0hvk3uc!us;aN5tXNiGyLf)-tjT2E{GFAzbn%TCRZ_oY zD_ld`gI26qwR~ySlIm6KHn((jb#7~?0j{x&>d~>+Km6-wUm|(){duO3UAzR*rB~&n zvp-z;?wjvFf92?wEProLCl|la5Qv5I<}9eGU01ibX!4XP*<<1oGP1H5&Ja}}&SdSB zv@uMSnKrAm99hSr0$QjtlR{jXiG~n92;V*=!UZ(v85-v2cdo0gHD znwXkCGHvSo6|3tvZEc`WuXg3CWtGLV3MVB+ga!pul=aedvVh3sl%&-0ArK;oEI}ig2uH%xd)Yj@ucSI#GRfJ;~Y<e_EBM4VKpdTt4mi|^g`?JB2+Dg&u$2?8ks_Yi;u z;`z^-WKuM)U+^$;b%f`_9tJ*H-8{xG`X;lfWbUSd#IN9F^$mH7sl~jS$BarC7O#6n zv4qIm%3gj(rf&*G_Y4u@(P5N=Xel7MC_Kvz!0A&g)&yd90B;My%aOFYKdMGvjG!ZL zMlZ3Om#@X|5r2zU3hK~y2yAF_iX&90+y_aFJpa1%+ zZ$3T#a&(eZhp+t4Ds|t+i`dhCQqF|nF-+|Qpb%MS1_-l zYWZ4*Hf&m3vtl{a$NULNkx|T14h{8@w6(iOKy+M8Y-;9sqZgG#)7|h8KTl6YW*o3T zit@1QbTVuGuw8CF%P#o{#bpe3;RshD3Cqw}WQujP1Il$Gt0V$v z@u8{Ig|>-qkQL8q7Mo$ha0<|y!S28}2$|^S@$Ws3EsYk}!3I=& z)WI$)&Eq4 z_Pu=k#AhcyI&tQ2r%6FVX6#X+lxVf*%9YDMT=@3OGmv0rk4z14bFvxi8Xgg!m6taY zO3QjWqZd)?nLT6PyctDvrcbY*Gp}ggtf{CS70s=z$Q_kBIw^T{VxX6Qh!^eN?%p1L z;a)BQp6cHzX- z=vMt|G~ zr4Te(SuxLO;ucRd<_^SAo6iGK&GR@sOk97JdK8XPN>YN-n7mO^0k}K>uVU!9I4KIy zt0X{UB3W`Z5=2$$oKN#G6T@&0OjN#Ec^Qq)lgZ+njWP1QtQ*T0MS;#c5{`P9&qVfI zv8)VVbFWRpUBm*N7uILUNfSyM{4@TrkSs4o-c}{m^sMcw8Iu?u08t zpHkizKmCB42-^@60n?&Ay?uOq$utCnF+cc$cRGFCbU{;+bVZ4brVj^39l(3FlUDMe z{tj5$KzmZn!J&cvK3*OkUS7d5aWS;$Bup%rS6-AmIV%g*|M9tr#pMfW4O+Qy?(C9z z6I0@R{i0&V<?!QxK<47?m|Xd35fKdFAt$)NNuA$@=xR1gKR@7A#)6VERbp5qyLE zh-WA{aih3_{sAH3DB6d`Qm7psqLLht@@asG*31|&^&+#{EIkIT8u^p7IR3e!WE7uM zMqN)4Krr2H7|H`NL5Rg<_{K!2xQbq5U=L|KabWHNW{jWb1UCa#iR~Z`U^qy~*fLyO zUDoggOmC@-)>Mh`)#SMi_NIfwG@gP*ECW%KVMoZ6Rd51j^Mm;`^7Z}Ucu7#qSiPV; z>|8d573Gl8(Zveg$h6H*j6OA;MJ8d!mB>W(96i&d*bU8%XEQFA%T@N3pjdkZnHU($ zqM}P)M@3Y<0-*)r6RztX8ZwZ<4Mx;UHM(u6LjYKwRy!w&+mW2nQ8};SumrMIONEJ6oI*j8H1a=?f?TGnvKF8J9zMsw3nRyP?j=1bYPp z_J|j7Xa}Zu-pf(&<^_ z%IlUaShA$FeBr{1%CdRORwL@(wr$FaHkxyjK1UI_tC0bwKaX3m;jzNBVj;|Au@mzK^foH3`g zta#=lxt1w~IpY%JW5dEi`~o={;JJ`9K^w=#H#9OnICOY&N>r3PP~JZxAu%~KuW)jT zcW4?yr|DA)3UcSnFP>MnplW%|s+tummoHmYx2zIcX4RtNiLt>!LE$jdT^_hnO7`}0 zb9Lc91_lowk&qA<70!lm#7-rnp|T;%&r<6<>mFc*6`dMxD;`^3y5Il$Jf6%W1aA`7 zV8u0u%%B?8Q><-Ek`Bh2`J-}aKXu}0zgl zOjy%@#ru->ui{U3!qX-zgEpiU%E$=sD_rGS8d@`u)VpvOxQLHwP>5m@+K;efu2K-K zZ!qmt#)lgdx8`Wbw94Fd>54%a`h=M?5uWYEec{Foq38sI9iwJT8@iAJcWAr_dt?0^ zaJHsVNdy9tmAa`z0c}GmlfccDhOah(;0!m0Sa&vifNTtzNvXt8H+1#%baZg{M4B85 z73yQ86RAKlU>GJDWN&JURAKDw327Z|2044d0Jpbi;0?O(ej(m=&as(g<@6^_WEkK0 zNwZ2S7F4a?SihyYt*xc8o|IkHg7P^9)28PamX$16R6a3&+LEd{WmOgB<)!ngmRBrZ z+T7l_eScfq!NYqGz4r3aWAFX-vrkT*{+j&y`O6o6I7@x$+O^)R*Kggt+Vj)d^Pivm z^2BRR3#;?T#yCgBcsl#UW=xw=SVlv}%H{LR=S(lm&zVYdQ2yll2^ks5ap7L>o*v$Q zG+Q}2Q7Q_g)5yc#J(wASVG;2oV?v{&BE#cSM~+O48$WY$TvB@WjLhhW^xRoJNFHT8A18`f2qFtcIIh|utu=%_GyGu&O>eS?C0XtoU+J|Z~{Dd4!6 za60{zZR{HY;Zp}G%VCP-Dq?Fnwa_%>Sl#;bR(rML77_n6H`IU@?EeqC@W8-&Ca*DP zb|2|<#i)|@Wp@}Uuz{o=`3-h%5I!F04`7VdtnG;)WzUK@;pyVe^)C=y5S?a!usp~c znDVf;gxgicNH|?Rd!}g!=<+XdU2yY;kj8fcRVLIJY_&&_)?)y8eROSL6PRG{M$tvk zi_3-8My|<<#|$#FeS)Zj6bf$zv&(Af_iZ#5R+_~+1@7V5xq1o7D42z1q@8R!x`xmf zDDO>ohHaElD8T8f1(DZb@g$<1n7-r!Eb;X60fES@{k+lYB3nb=hWH=izFm;bP%lb_ zs9Ssak*^^db@E2%G%RtrpQlg4*n%a5gEI&n#|cWzw)sZ&q7_`}K1KL7am-j0r?6Gwa4`-S?t2Qa`gx2SBcn*MS# zN2g~@oSc(0adbj`OjIQ7lc8uD_=bjfAO;&s>sw?b2|)jtm3MTG+;QObgjizhX({yn<=Dqmt6nM~@5> zmB7v0pWxFwC>F))abrfM#D;h|iEA`?h+MB_5L^n(L`!Du8IOj~(a$!2z`x}m3$r$O z_K<&RGK-l#q@<$BH9`+CzKqwZ_A-Dx8fUMG!eqku?WagbVBpvQhAe-Lhm%kY-un-n zI++*-te7aX|L?|X%>WuD*82wh2b=+WOXV5xi9m+jxNKRd#rS57SHgJG^x_|@ToE8k zX`J6*c-~Zg*>8Ff(NZg*&?p5SAOx`@66+iS6+~$m(Z%X!a9`9<*k|J~q(C;P>jzF4 zT!6{)mimoq%oYwQmBe&9$;@#QswYKN>w>7OpZfMP_>N>1sRr#{IwM|WA*Vi^T zR?e8WsCxObB}-SW+S0k}=qrbh96WsNZ8W~#IQ-hX?|pRg)R*6#yVi3BN&sJO-@Vy$ z_43&tdvDzAJ@@I!k4}8@#_O+bES#R;>J&tOTk!C)vx?>vO)Z#JFex==cyvN+RP^v5 z@6{rb6OY(C1;(UA`8c}xL`DvWbB^>V&fIG#3Vre6LD4CZ0pU?WA+d4s$!X~f*i0#! zKWk?3yy;V>&YX?T`@)qC?c3Y8ZExOCyP~RcNlpFg%A&&A1(Q&>iw{zf*%4|#2VTI4 z(aazmH##wl_vfrMF{Tbutu}6}ZwUSIB*;zk7{nyg^odhr5+CdSZ`la83?dma_+J7o z7{9_;W#N=JXW^(1iDh8est>Ijde?nn5muJ9m+P{}x{+n4sAmF7T(YrHS*hs@mHkS0 zRD>1_)t~3Fa|)U;dKHq2()e$oZ&|#CV~gN|b`j>zoL4z`*oz8QK_=8*F*@bE;WEgR z%Pq@AYeTNdUG$hXtaR$N}o2hNBxy5a#Y_aSQWeQRsN{ zix?3b5$x|nf}Ls-tyO|1oCZUjJUyr>`7mU~)!xn1KhQVSl3*K?FlELBCTB-yOqmN9 zK}Dr~TSt3)eLE%2=B9>?n>Marx3#IEVNDfN-8(xGo~UbSU0qUIS-rY`4f=}RhYlP@ zx$f0tZ+-aLslUGW(y_PRe*febu+V$1_guYk^Tw^)x35D3=%qq*^+s>cSMMDE6c9CnrZITGF$|P0kz<7@C$-Iu9|gsS~rNvF_EGwHmqktCKQSe^8+>|z?7U3Bf8L!#cld{Id24L*4=eYf51`-5a z9nzW{BpcUVG-XY34)2-zKABm#hfP10H8U{8j{{{ArVkIYu>a@eqpLCHj=SV)sAxP55m4BDWrm#5Hb zhqM0OO2bwD{obEha-AdCIslwkE8$P5$!8`rD4#5545rlw)G&vYjxO_;zB639HG875 zNbEsbGEEPh464r?&-_50M{>~oWX+@~vm{S0unlQYA8PPfvFtRwfzPI(tFe3i9*jB=&*` zgGMB@Mx53#+=#2Uudk_B}7Y^x_+DzWvTS zADsB?(~}<`KmO+1AAffGJIX~jZ{GO%_Vv3zU+uYS=?&?*c&_Kxwd>!02u0wdH{N>p z*p6irL%l+hM#aWPM~=#wK5uSLd?XEV?rsz%u?0!IIfhx1s$>0J{YGG;kdeKlzvSQ_ z84(@q6Pgeo5|$Y06EkK~&cumnqY{yy^z#i($SRmUb4Gq{UT$vQ>_w{(a$HL%b;q{N z8yNN4+`OiuaB_Nba$I~|BrF6kFK_<%`bQ)(F*_%3T6RW!sK2)ho6TbTj1EnC9PGp- zSMXkl_o&T{79imZje^E)o17W+Tx|)~327D6k|QYy>l{geS<^So87^@Y0RZts3^`pL z!hJ*U15k{TmmOQl8o%=HwosSw|Kt=oUR3VmJ0rGhCA+BkLdo=}ANG*qp&xx=z&#i% z0wvfZ?pBf4O?|m%F!b-?Cf}xOMZ!xznHh_4KJvzj*)kosHGm zaS0>yGeTlUjvh09N=|-ea^&#nQ0BSAq90oC;2s(ekO&NmAD5pqZn&S@Fn4d)p?0nz ziK#K(q)1(9+Q95%<427ilN1u2K%pmCGjc|!r)N*gn^8C=r*Ph))obhPHgE~u+c~eA zn_C)dN+*s84vUUMhLv;C)7v*F44j{m0abZw?vx3m;(}rKbFkXlNWw?PjtQ`c8Vuw_ zc2}JvQVW-dv&Nn{Fu6^T3O1pZ{6Hq`j+s5EcJ^3NORellEpzjC{fUF&g z%_DSAgJU4Z3>EuJU={CgZ9lVTJMdi}4WcFt#bBS-H&*Z8*B=ZeZ!gee{uL6(u*Fl? zC~Lz&)X;c8O()@QN9gU?w0uVFIG+`Qrp%Smw++#ZZ@y9p;WANB9 zkch;(74#TZ8ynRcyNdeBRrA>&3>zrw4&etUneMAzZ>#26ak(J(F!~fm27|k zEFmt%7>okEKggN*QuQM2*ORJ}Do;%SxqIjG*)PBR`t;vUeelNq&9%$sW=_bR zoD|3S)$GiX35g>jqhcZh-R*~Yhlj3?OifFP2?$HeDPJ}xDb&r~)sYEKUeFQJhr17c z-oaytEeIqeC?qO6IxZ|^)Z|H%$Aa&p<5C!gG$AWz^0=&mQeuns>o;s}YHx2s$a+gl z)0#zdsf>gh1!{=0bc90~0fB0221P>rxDh55gzu+p3h^fn z8}gBvrD3!&uza-{8S|z@q}~8DARII%KsZMJ8sk>rB?Qxdz`scrTGQjQR%@D^ji7kZ z7(HgJ{!sNP-M5asvpW3$!RF1Dw0>q>v$7s)o>PJw;UeZDn4PLUF!*VMg{iLJ|MOr{ zVVEb9oUtK`q*z5A)7t1@HFheA6aC?Csi+S!l!^0Xumz2S$ZXR}fbn{}0~|p>dK)%} zIsz;&I2w&K5=SuCaTvqgygeQ5T}dIM)b32{_&^ytOcyt5q9S+=1($^l=-+RkEoXy^ z4@~o*2TPhbR8}*N@(R=k+%~r0)Oa z*XPdvc=6J;Yd`*U>+Y|=-2U}W?^Rgpx9|M+&)=?J`u1;MpZ@0aPhQ*I!9=~>aZKq- zOd`WFvoJd;G6dB;A6Lh)aTyWy{!yc{xk^0*9k3ng%mBJ|;G8eBS(38#WL%kn2DB^MF}c?xGz~NGPbmo!<}?=;aCg`36G2jMX}x; zH$Ie8T{DANdBtv03Xojg9~4OOL-!PEVbdgAD1NY@vU8JnFl$c}0v?Tu2WL6+;S6Gz zm$Ma=$1pH`)q}+Kq6W%hKBc1`3%^f?m;oZjz_D#{)ulA5;wC&8;SuA<&7>GCA6zeQ zXofl(IZ|cGt;21sc^K*L3TavEGLP`_2(@Cr0z5-y+FGW@5tE)-__qQ zD9AS`Hf3at=MX#h(8Sc4E7q^AudiFRqNa9h2R_@fukS$pu8wW(Ep46Kwl+1lcXoGe z-`3IHv2*XfJ-gaBu3AvGpuD)UX4}4<9i97*z5V9LUz`w~<(+qrzx=_c@4f%kY3S%z zdv0Dkd+x^1cYpouw>!6PU%%3O=jY%4>z{Xe&wl^i-@gC;vv>C&+}GSxoj<)WH)G_u z$ypPpT&h=8s2{

k+~o!N_tT_ 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

    U|#W8$j7<%Jf(Jqc66{Inl@+(YW>pE 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Ⓢ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

    ?1fxr8yf@at8fA0VAuRCwQlqx>}6#4tk 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�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

  1. x=1ZQKEu_hl<1w^c9n1#0y55)2wflA& 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
    HB5=2Xz(2W~$jqwtY$f?j?jm2oq8SG^NJ=-ol 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

    hXz*ilH9 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 R#nxM7ncAqIRzER&i5bPhTnC=hD{bh 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�kV6E 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

  2. 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